項目名稱:票據系統/資金系統
項目周期:2018-11 ~ 2019-01
跟進子產品:接口平台-指令子產品
項目背景:票據系統、資金系統規劃的下一代産品,兩個産品中都有涉及票據的相關業務(開票/貼現/承兌/托收…),接口平台-指令子產品作為一個單獨的子產品,負責業務方與外部系統方的資料交換。
遇到的問題:
- 接口調用:
- 根據流程圖描述在某個邏輯處理時需要調用某個接口,但并不知道該接口應由誰提供
- 在開發過程中需要調用某個接口時,接口相關描述(入參/傳回值)仍未确定,導緻後期接口提供後需要調整接口調用方
- 資料問題:
- 未統一整理資料來源,導緻開發過程中存在字段取值混亂(查錯資料表)的問題
- 未整理各入口資料(可否為空/長度),導緻後期聯調時出現各種驗證不通過的問題
技術積累:
- 調用異步方法時,若該異步方法中需要對上一個事物中操作的資料進行操作,則需要保證上一個事物已經送出。
public class UserServiceImpl implements UserService{
@Autowired
private UserDao userDao;
@Override
public void insert(UserBO userBO){
User user = BeanUtil.copyProperties(new User(), userBO);
user.setId(1);
int insertNum = userDao.insert(user);
if (insertNum > 0){
Notice sendUserNotice = SpringUtil.getBean("sendUserNotice");
sendUserNotice.send(user.getId());
}
}
}
public class SendUserNotice implements Notice {
@Autowired
private UserService userService;
@Override
@Async("asyncExecutor")
public void send(int id){
// 延遲5秒確定上一個事物已經送出,否則下面的查詢方法可能無法查詢到資料
Thread.sleep(50000);
// do something
userService.queryOneUserById(id);
}
}
- 常量值轉換:在記錄中我們通常使用編碼來标記狀态/業務類型等字段,而顯示時需要轉換成對應的文字描述,使用注解的方式在對象拷貝時使用反射的方式進行轉換避免來業務代碼中到處都是手動轉換的代碼
- 日志資訊:在調用方法前後輸出調用參數及傳回結果,友善問題排查
logger.info("發送指令資訊:{} ", JSON.toJSON(instructionBO).toString());
Response<Result> responseResult = instructionService.sendInstruction(instructionBO);
logger.info("傳回指令結果:{} ", JSON.toJSON(responseResult).toString());
- 是否必填:資料表字段盡量不做限制而是通過業務代碼進行校驗(針對接口平台)