参数不小心传错的启发

重复的订单号,可以重复下单,  正常的情况,重复的订单号,会返回重复下单的提示。

检查代码,

//判断订单是否存在
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,自己多测试验证

 

 

 

在 “参数不小心传错的启发” 上有 1 条评论

发表评论

邮箱地址不会被公开。