漫談程式設計師(七)公司真實上線專案開發日誌--你懂得
公司專案開發日誌
整個暑假都在忙公司的事情,論文還沒有著落。自己本身就有寫日記的習慣,從以前的紙質到現在的電子版,總喜歡將自己的生活軌跡記錄下來,希望將來某一天自己一個人無聊的時候可以翻看一下自已曾經的生活軌跡。以下是自己在參與公司專案開發中所做的開發日誌。想要強調的是做事情要循序漸進,穩抓穩打,步步推進。
2015年7月17日 星期五 17:12:37 晴
人員、需求均已確定,下面就要開始幹活了。一個月必須完成。
服務端採用servlet,沒有使用到別的框架。下面回顧一下servlet的概念:
Servlet是在服務區上執行的小程式。一個Servlet就是一個java類,並且可以通過“請求
2015年7月18日 星期六 8:14:00 陰
開始幹活。
根據要求,自己需要把資料庫的埠號、使用者名稱、密碼更改掉。但更改時遇到了問題。
很簡單的一個問題,自己卻搞了半天。只需要刪除原來的服務例項,自己新建一個就可以了。
2015年7月19日 星期日 21:48:37 陰
把資料庫部分已做好,下面就是完成資料的寫入,從使用者註冊開始著手。
2015年7月20日 星期一 8:00:44 陰
熟悉一下程式碼。完成資料的寫入,從使用者註冊開始著手。
2015年7月21日 星期二 15:13:17 陰
PS:難道自己走彎路了,沒有啊!小石給我說的那個方法只是針對lm_pay_type
資料的寫入已經沒有問題了。前後臺已打通穴位。
2015年7月22日 星期三 8:02:27 陰
PS:果然是自己的方向出現了問題。對於每張資料表都有一個自動生成的類進行管理,應該屬於反向工程。
表的操作涉及到for update,也就是鎖表。
遊標的操作,把自己搞蒙了。
注意事項:
1. 採用了java的反射機制,應該做到客戶端傳輸的資料欄位名與服務端欄位屬性名稱一致。
2. 應用一啟動,在首頁位置通過像服務端傳送DoQuery請求,實現廣告
圖片輪播,每張廣告圖片對應一個URL連結地址。
3. 匯入檔案時,路徑中一定不要包含中文字元或者數字等特殊符號,否則會造成意想不到的後果。
4. 由於編碼的多樣化,程式碼註釋時務必使用英文進行註釋。
5. 遊標的使用
/**關注/取消關注**/
public static boolean do_1001(RequestMessage request,ResponseMessage response){
Bx_gzlist bx_gzlist=new Bx_gzlist();
String optype=request.json.getString("optype");
if(!bx_gzlist.dec_upd("uid1='"+request.uid+"' and uid2='"+request.json.getString("ouid")+"'")){
response.result=MyConst.ERR_FORMAT;
response.errtext="更新粉絲表失敗";
logger.error("Query bx_gzlist error:"+bx_gzlist.errtext);
return(false);
}
bx_gzlist.fet_upd();
Bx_user me=new Bx_user();
Bx_user him=new Bx_user();
if(!me.dec_upd("uid='"+request.uid+"'")){
response.result=MyConst.ERR_FORMAT;
response.errtext="訪問使用者表失敗";
logger.error("Query bx_user error:"+me.errtext );
return(false);
}
me.fet_upd();
if(me.eof){
response.result=MyConst.ERR_FORMAT;
response.errtext="訪問使用者表失敗";
logger.error("Query bx_user error:"+request.uid );
return(false);
}
if(!him.dec_upd("uid='"+request.json.getString("ouid")+"'")){
response.result=MyConst.ERR_FORMAT;
response.errtext="訪問使用者表失敗";
logger.error("Query bx_user error:"+him.errtext );
return(false);
}
him.fet_upd();
if(him.eof){
response.result=MyConst.ERR_FORMAT;
response.errtext="訪問使用者表失敗";
logger.error("Query bx_user error:"+request.json.getString("ouid") );
return(false);
}
if(bx_gzlist.eof){
//尚未建立關注列表
bx_gzlist.clo_upd();
if(optype==null ||optype.equals("")||optype.equals("0")){
//取消關注
bx_gzlist.set_uid1(request.uid);
bx_gzlist.set_uid2(request.json.getString("ouid"));
bx_gzlist.set_stat("0");
}else{
//關注
bx_gzlist.set_uid1(request.uid);
bx_gzlist.set_uid2(request.json.getString("ouid"));
bx_gzlist.set_stat("1");
me.set_gzcnt(me.get_gzcnt()+1);
logger.error("現在的關注個數:"+me.get_gzcnt());
him.set_fscnt(him.get_fscnt()+1);
logger.error("現在的粉絲個數:"+him.get_fscnt());
}
bx_gzlist.set_gztime(Functions.getNow19());
if(!bx_gzlist.ins()){
response.result=MyConst.ERR_FORMAT;
response.errtext="更新粉絲表失敗";
logger.error("Insert bx_gzlist error:"+bx_gzlist.errtext);
return(false);
}
if(!me.upd_upd()){
response.result=MyConst.ERR_FORMAT;
response.errtext="更新粉絲表失敗";
logger.error("Update bx_user error:"+me.errtext);
return(false);
}
if(!him.upd_upd()){
response.result=MyConst.ERR_FORMAT;
response.errtext="更新粉絲表失敗";
logger.error("Update bx_user error:"+him.errtext);
return(false);
}
}else{
if(optype==null ||optype.equals("")||optype.equals("0")){
//取消關注
if(bx_gzlist.get_stat().equals("1")){
bx_gzlist.set_stat("0");
me.set_gzcnt(me.get_gzcnt()-1);
him.set_fscnt(him.get_fscnt()-1);
}else{
bx_gzlist.set_stat("0");
}
}else{
//關注
if(!bx_gzlist.get_stat().equals("1")){
bx_gzlist.set_stat("1");
me.set_gzcnt(me.get_gzcnt()+1);
him.set_fscnt(him.get_fscnt()+1);
}else{
bx_gzlist.set_stat("1");
}
}
bx_gzlist.set_gztime(Functions.getNow19());
if(!bx_gzlist.upd_upd()){
response.result=MyConst.ERR_FORMAT;
response.errtext="更新粉絲表失敗";
return(false);
}
bx_gzlist.clo_upd();
if(!me.upd_upd()){
response.result=MyConst.ERR_FORMAT;
response.errtext="更新粉絲表失敗";
logger.error("Update bx_user error:"+me.errtext);
return(false);
}
if(!him.upd_upd()){
response.result=MyConst.ERR_FORMAT;
response.errtext="更新粉絲表失敗";
logger.error("Update bx_user error:"+him.errtext);
return(false);
}
}
return(true);
}
2015年7月23日 星期四 7:58:58 陰
嗯,服務端肯定有方法傳資料給客戶端的,前面的Demo中就有實現。
1)完成使用者登入,註冊。
2)完成藥品分類(預設、價格、銷量)查詢。
詳情:
1. 點選“銷量“或者”價格“,即可按他們進行排序,第一次點選為升序排列,第二次點選變為”降序“排列,依次類推。
2. 排序區最右邊有兩個小箭頭,向上為深色,向下為淺色表示升序排列劈裂,反之表示降序排列,“預設“的排序方式不分升降序,兩個箭頭都顯示為淺色
修改排序方式,會造成重新查詢。
3. 每一次顯示X條記錄(X為引數,暫定為10),當滾動螢幕到最後一條記錄時,如果再向上滾動,會自動發一次查詢,查詢下X條記錄(可操作叮噹體驗)。
3)完成重新整理操作。
2015年7月24日 星期五 7:46:10 陰
將昨天的工作完成。
其插入的設計思想為:首先通過dec_upd()定義開啟遊標,然後通過fet_upd()抽取資料,查詢待插入的資料記錄是否存在,通過定義變數eof來驗證待插入資料是否存在。若不存在,則執行clo_upd()關閉遊標,並執行ins()方法插入待插入資料;若待插入資料存在,則執行upd_upd()等新資料方法,並執行clo_upd()關閉遊標方法。(PS:那麼資料的插入與查詢操作則可以放在同一個方法中執行!)
2015年7月25日 星期六 7:55:24 晴
上面的模組做的差不多了,今天要安排新的模組。
1)按關鍵字查詢藥品(可按關鍵字查詢歷史進行)
2)定位地址(藥店地址完成,客戶地址未完成)
3)二維碼掃描
4)優化重新整理操作
待做:
1)過場動畫
2015年7月26日 星期日 7:55:57 晴
今日工作安排:
1)二維碼掃描
2)過場動畫
3)3003交易
碰到了棘手的問題,藥店選擇的策略是什麼?全部遍歷計算一遍,比較出最小值,再進行後續操作?顯然這是效率最低的方式!
Q:使用者基本資訊表中存放的是基本使用者與商戶的資訊。是否應該拆成兩張表?
medprice=localRs.getDouble("medprice");
getDouble()不獲取無意義的0。
2015年7月27日 星期一 8:45:48 晴
昨天的工作沒有完成,今日繼續做。
今日工作安排:
4)二維碼掃描
5)過場動畫
6)3003交易
多表查詢實現藥店選擇:
select lm_addr.uid from lm_addr,lm_user where lm_addr.uid=lm_user.uid and lm_addr.stat=lm_user.stat and lm_user.stat='0' and lm_user.utype=1
and lm_user.addr_x=lm_addr.addr_x and lm_user.addr_y=lm_addr.addr_y and lm_user.addr_x between 116.95985193713561
and 116.99949806286439 and lm_user.addr_y between 36.63210778394081 and 36.65009421605919;
給出的模版中是不能進行多表查詢的,使資料查詢變得較為複雜。
補一下地理知識
經度0°——180°(東行,標註E)0°——180°(西行,標註W)
緯度0°——90°N、0°——90°S
3003交易總算完成了。
2015年7月28日 星期二 8:02:39 晴
抓緊進度。
昨天的工作沒有完成,今日繼續做。
今日工作安排:
1)二維碼掃描
2)過場動畫
3)放入購物車
2015年7月29日 星期三 8:04:42 晴
今日工作安排:
1)二維碼掃描
2)過場動畫
3)交易3004
Ps:等到業務交易實現的差不多的時候,要設計資料表的,包括主外來鍵、查詢效率等。
2015年7月30日 星期四 9:09:58 陰
今日工作安排:
1)二維碼掃描
2)過場動畫
3)交易3004
4)使用者地址操作:CRUD80038004
進行到這裡感覺遇到了瓶頸,前進一小步都很困難,關鍵是業務邏輯上欠缺了一點。
2015年7月31日 星期五 8:00:53 陰
還有3周的時間,感覺進步慢了下來。要抓緊進度。
今日工作安排:
1)二維碼掃描
2)過場動畫
3)優化UI(使用者地址編輯)
4)購物車介面
5)優惠券交易 1005
2015年8月1日 星期六 8:25:05 陰
今日工作安排:
1)二維碼掃描(L)
2)過場動畫
3)優化UI(使用者地址編輯)(L)
4)購物車介面(J)
5)使用者註冊驗證碼傳送(J)
6)實現退出確定(J)
7)實現撥打電話(L)
8)優化價錢顯示方式(J)
9)全部訂單(訂單詳情)(LJ)
2015年8月2日 星期日 8:45:45 晴
今日工作安排:
1)二維碼掃描(J)
2)過場動畫
3)優化UI(使用者地址編輯)(L)
4)購物車介面(J)
5)使用者註冊驗證碼傳送(J)
6)實現退出確定(J)
7)實現撥打電話(L)
8)優化價錢顯示方式(J)
9)全部訂單(訂單詳情)(LJ)
10)優惠
獲取優惠券業務邏輯好複雜。
使用者註冊時使用的公鑰貌似與登陸時使用的公鑰在一定時間之後,會變得不同。需要了解金鑰生成方式。
解決方法:往資料庫中存放時,呼叫了資料的資料加密方式。但存在一個
疑惑:公鑰是不是變的?怎麼變?
注:返回給客戶端的公鑰(是隨時間變化的)只是對客戶端資料進行加密,加密後的資料傳至服務端,經過相應私鑰解密,便可取得原始資料。寫入資料庫的資料由dbEncode()方法進行專門操作。
2015年8月3日 星期一 8:30:54 晴
今日工作安排:
1)二維碼掃描(J)
2)過場動畫
3)優化UI(使用者地址編輯)(L)
4)購物車介面(J)
5)使用者註冊驗證碼傳送(J)
6)實現退出確定(J)
7)優化價錢顯示方式(J)
8)全部訂單(訂單詳情)(LJ)
9)優惠
優惠模組完成後,必須設計測試用例。
2015年8月4日 星期二 8:44:09 陰
今日工作安排:
1)二維碼掃描(J)
2)過場動畫
3)優化UI(使用者地址編輯)(L)
4)購物車介面(加入購物車,動畫效果)(J)
5)使用者註冊驗證碼傳送(J)
6)實現退出確定(L)
7)優化價錢顯示方式(J)
8)全部訂單(訂單詳情)(LJ)
9)優惠券選擇(J)
10)登出清空localstorage(L)
11)提交訂單
2015年8月5日 星期三 8:32:25 晴
今日工作安排:
1)二維碼掃描(J)
2)過場動畫
3)優化UI(使用者地址編輯)(L)
4)購物車介面(加入購物車,動畫效果)(J)
5)使用者註冊驗證碼傳送(L)
6)實現退出確定(L)
7)優化價錢顯示方式(J)
8)全部訂單(訂單詳情)(LJ)
9)優惠券選擇(J)
10)登出清空localstorage(L)
11)提交訂單
2015年8月6日 星期四 8:35:30 雨
今日工作安排:
1)二維碼掃描(J)
2)過場動畫
3)優化UI(使用者地址編輯)(L)
4)購物車介面(加入購物車,動畫效果)(J)
5)使用者註冊驗證碼傳送(L)
6)全部訂單(訂單詳情)(LJ)
7)優惠券選擇(J)
8)重置密碼
9)慢性病自動提醒9013
10)查詢藥師電話9102(L)
11)維護家庭藥箱(L)
2015年8月7日 星期五 8:32:00 晴
今日工作安排:
1)二維碼掃描(J)
2)過場動畫
3)優化UI(使用者地址編輯)(L)
4)使用者註冊驗證碼傳送(L)
5)全部訂單(訂單詳情)(J) 9010
6)優惠券選擇(J)
7)重置密碼(L)
8)慢性病自動提醒 9013(L)
9)查詢藥師電話 9102(L)
10)維護家庭藥箱 3008(L)
11)按藥箱查詢藥品 9012(J)
12)上傳處方 9008
13)訂單狀態修改 3006(J)
14)訂單回顯
15)用藥提醒維護(J) 9013 9011
2015年8月8日 星期六 8:51:16 晴
今日工作安排:
1)二維碼掃描(L)
2)過場動畫
3)優化UI(使用者地址操作顯示方式)(L)
4)使用者註冊驗證碼傳送(L)
5)優惠券選擇(J)
6)慢性病自動提醒 9013(L)
7)查詢藥師電話 9102(L)
8)上傳處方 9008
9)訂單狀態修改 3006(J)
10)訂單回顯(訂單詳情)(J)
11)用藥提醒維護(J) 9013 9011
12)單選框、多選框(使用者註冊、購物車結算) (L)(BUG)
明天必須得跟小石哥交流一下,還有好多疑問沒有解決呢。
2015年8月9日 星期日 8:47:41 晴
今日工作安排:
1)過場動畫
2)優化UI(使用者地址操作顯示方式)(L)
3)使用者註冊驗證碼傳送(L)
4)優惠券選擇(J)
5)慢性病自動提醒 9013(L)
6)查詢藥師電話 9102(L)
7)上傳處方 9008
8)訂單狀態修改 3006(J)
9)訂單回顯(訂單詳情)(J)
10)用藥提醒維護(J) 9013 9011
11)單選框、多選框(使用者註冊、購物車結算) (L)(BUG)
12)取消訂單 3006(J)
13)發表評論 1005(J)
14)分享有券(L)
15)檢視評論 9005(J)
2015年8月10日 星期一 8:32:01 晴
今日工作安排:
1)過場動畫
2)優化UI(使用者地址操作顯示方式)(L)
3)使用者註冊驗證碼傳送(L)
4)優惠券選擇(L)
5)慢性病自動提醒 9013(L)
6)查詢藥師電話 9102(L)
7)上傳處方 9008
8)用藥提醒維護(J) 9013 9011
9)單選框、多選框(使用者註冊、購物車結算) (L)(BUG)
10)發表評論 1005(J)
11)分享有券(L)
12)檢視評論 9005(J)
13)優化藥店選擇(J)
閒來無事,把優惠券的選擇模組利用程式流程圖梳理一下業務邏輯,檢查自己的邏輯是否正確。
整合文件
程式實現了莫名的錯誤,o(︶︿︶)o 唉,虛驚一場。(忘記截圖了!)在執行生成資料表對應的方法時出現java.io.FileNotFoundException: C:\SHQ(檔名、目錄名或卷標語法不正確。)。最後還是自己重新匯入專案才將問題解決了。
2015年8月11日 星期二 8:49:23 晴
今日工作安排:
1)過場動畫
2)優化UI(使用者地址操作顯示方式)(L)
3)使用者註冊驗證碼傳送(L)
4)優惠券選擇(L)
5)慢性病自動提醒 9013(L)
6)查詢藥師電話 9102(J)
7)上傳處方 9008
8)用藥提醒維護(J) 9013 9011
9)單選框、多選框(使用者註冊、購物車結算) (L)(BUG)
10)藥品圖片處理
11)藥品按銷量排序
12)使用者基本資訊表(上次登陸時間-以秒計)
13)更正優惠券提醒方式
注:多家藥店提供藥品、積分消費、慢性病提醒模組要保留位置
注:jdk1.7之前的版本不支援switch-case
2015年8月12日 星期三 8:54:58 晴
今日工作安排:
1)過場動畫
2)優化UI(使用者地址操作顯示方式)(L)
3)使用者註冊驗證碼傳送(L)
4)上傳處方 9008
5)用藥提醒維護(L) 9013 9011
6)單選框、多選框(使用者註冊、購物車結算) (L)(BUG)
7)藥品圖片處理
8)藥品按銷量排序(J)
9)使用者基本資訊表(上次登陸時間-以秒計)
10)更正優惠券提醒方式
注:更改資料訪問資料表時必須採用加鎖的形式,只有查詢資料時才可以不加鎖的形式訪問。
2015年8月13日 星期四 9:01:55 晴
今日工作安排:
1)過場動畫
2)優化UI(使用者地址操作顯示方式)(L)
3)使用者註冊驗證碼傳送(L)
4)上傳處方 9008(J)
5)單選框、多選框(使用者註冊、購物車結算) (L)(BUG)
6)藥品圖片處理
7)藥品按銷量排序
8)使用者基本資訊表(上次登陸時間-以秒計)
9)更正優惠券提醒方式
10)用藥提醒
11)附近藥店 9006(L)
2015年8月14日 星期五 9:06:33 陰
今日工作安排:
1)過場動畫
2)優化UI(使用者地址操作顯示方式)(L)
3)使用者註冊驗證碼傳送(L)
4)上傳處方 9008(J)
5)單選框、多選框(使用者註冊、購物車結算) (L)(BUG)
6)藥品圖片處理
7)藥品按銷量排序
8)使用者基本資訊表(上次登陸時間-以秒計)
9)用藥提醒(L)
10)廣告圖片(L)
注:
1.有關java的定時器、監聽器自己還是要好好學習的,不會就會變被動,被動就要捱打!
2.定時器很奇妙啊,設定好時間點後自動執行,而且只執行一個小時。神奇!
2015年8月15日 星期六 9:00:23 陰
今日工作安排:
1)過場動畫
2)優化UI(使用者地址操作顯示方式)(L)
3)使用者註冊驗證碼傳送(L)
4)上傳處方 9008(J)
5)單選框、多選框(使用者註冊、購物車結算) (L)(BUG)
6)藥品圖片處理
7)藥品按銷量排序
8)使用者基本資訊表(上次登陸時間-以秒計)
9)用藥提醒(L)
10)廣告圖片(L)(不明白地址到底怎麼搞的)
注:jdk1.6在switch語句中變數不能為String型別,可以為int型別。Jdk1.7相容兩種型別格式。
藥店選擇30003交易較複雜,待做。
APP執行時佔用記憶體達到200M,原因?
2015年8月16日 星期日 9:28:43 晴
今日工作安排:
1)過場動畫
2)優化UI(使用者地址操作顯示方式)(L)
3)使用者註冊驗證碼傳送(L)
4)上傳處方 9008(J)
5)單選框、多選框(