工作記錄
總結工作經驗
本人是公司實習菜鳥,一般會安排一些比較基礎與簡單的任務讓我來做。這次公司前輩就安排給我一個系統bug我來解決,這個系統是前後端分離,前端vue,後端Java。
而我上一分鐘剛剛學習一個全是js的系統前端,突然轉回來看另一個系統的後端代碼,就有一丟丟蒙圈;再加上任務安排了剛有一會,公司就通知我要去做一些比較零碎的技術無關的事情,昨天快要腦殼痛死了,不過還好幸運,向各位大佬們學習,這個問題很快就迎刃而解了。
系統問題排查
1、從前端測試系統,發現瀏覽器network中返回的數據requireCount這個數值不正確。數據是從另一個系統導入的,庫裏的數據確定不會出錯,應該是後端處理數據出了問題。
2、後端對此處計算的特殊處理。可以看到特殊處理是getTourName然後對裏面的0-9數字進行replaceAll操作。
if (originSalesDTOList.get(0).getCompanyNo().equals("xx團編號")) {
...
...
String tourDateStr = "2019" + z.getTourName().replaceAll("[^0-9]","");
try {
...
...
} catch (Exception e) {
return false;
}
}).collect(Collectors.toList());
...
...
}
3、查看前端返回的tourName中的數據。可以看到,字段中的所有數字不光是代表日期。例如PVG-1227-J2M:J2M中還有個2。
問題出現的原因
String tourDateStr = "2019" + z.getTourName().replaceAll("[^0-9]","");
tourName中有多餘數字的,例如PVG-1227-J2M,通過以上處理過後,所有數字爲201912272,多出2,並不是代表日期的一段數字,解析失敗,try catch返回false。
解決方法
split通過“-”分割字符串,例如PVG-1227-J2M,分割開爲PVG、1227與J2M,通過索引取第二個字段,索引爲1,取到1227,再加上2019,可以得出正確的日期20191227。
String tourDateStr = "2019" + z.getTourName().split("-")[1];
此處建議使用substring,原因tourName是用戶人爲錄入,格式不固定,不能確定一直有“-”,所以直接substring截取字符串,保持固定長度,減小出錯概率。
if (originSalesDTOList.get(0).getCompanyNo().equals("xx團編號")) {
...
...
//substring截取4-8位
String tourDateStr = "2019" + z.getTourName().substring(4,8);
try {
...
...
} catch (Exception e) {
return false;
}
}).collect(Collectors.toList());
...
...
}
總結
這樣改過bug解決,測試通過。還需努力,多多向大佬們學習!