版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/quan20111992/article/details/86561028
项目名称:票据系统/资金系统
项目周期: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());
- 是否必填:数据表字段尽量不做限制而是通过业务代码进行校验(针对接口平台)