重复的订单号,可以重复下单, 正常的情况,重复的订单号,会返回重复下单的提示。
检查代码,
//判断订单是否存在
boolean orderExist = orderService.isOrderExist(form.getOutTradeNo(), form.getAppId());
//
if (orderExist) {
return ResultModle.reOrderError(form.getOutTradeNo());
}
service中的判断代码
// 2 - 数据库判断订单是否重复
LpLiquidatorOrder order = lpLiquidatorOrderMapperExt.findOneByLiquidatorIdAndLiquidatorOrderSn(liquidatorId, liquidatorOrderSn);
if(order != null){
return true;
}
return false;
数据库中的sql
SELECT
<include refid="Base_Column_List" />
FROM table
WHERE liquidator_id = #{liquidatorId} AND liquidator_order_sn = #{liquidatorOrderSn}
看上去都没有问题,单元测试也没有什么问题, 唯一的问题就是如果表中有多条记录,要加上limit 1的限制 ,不然返回一个对象报错
后来本地debug调试,发现是调用isOrderExist这个方法的时候,参数写反了,你说奇怪不,所以从数据库返回永远为null
这个问题可以反思总结下:
1, 参数写反了,可能一时粗心,不够细致,简单的方法传入错误也不会报错,错误比较隐蔽
2,如果在判断里面加上一行日志,可以第一时间发现参数传入错误,
LpLiquidatorOrder order = lpLiquidatorOrderMapperExt.findOneByLiquidatorIdAndLiquidatorOrderSn(liquidatorId, liquidatorOrderSn);
if(order != null){
//加上日志,如果有重复,马上发现
logger.info("order exist, liquidatorId={},liquidatorOrderSn={}", liquidatorId, liquidatorOrderSn);
return true;
}
3,自己多测试验证
很会举一反三 ,不错。