定时任务出BUG还是其他问题?不知道怎么去查了。
事情是这样的,接手1个SSM项目,里面有个关于项目工程的统计,统计的内容中有催款,然后有个表就是用来统计催款的。
第一种情况,就是项目分配给对应人员触发,第二种项目状态变更触发,第三种则是设置时间定时触发催款,调用公共方法,原本设计是每一次触发,调出原本的数据,再加上本次触发数据计算出应收款,欠款。
在测试环境怎么测试都无异常,甚至模拟生产异常单走真个程序依然无异常。
实在没办法,我只能在每次计算的时候改成拿到整个项目工程所有的已触发的订单来计算欠款,
按理是可以解决这个问题,后续待查证。
例如:一个项目 一个首期款 2万,过程触发3万,定时触发4万,正常结果是9万,但是统计到表成了11万
但是问题在于,重复触发的问题并没有查到。有没有大神能告诉我为什么。
他们计算统计公共方法如下:
@Synchronized
public TOrderMid pushOrderMidDun(String orderNo, BigDecimal settlementAmount, Date date, OutNewOrderDunBo o) {
TOrderMid tm=tOrderMidMapper.selectByOrderNo(orderNo);
// 代码看不出异常,但是计算会出现重复,则修改方案,每一次触发,则重新统计
// tm.setOrderReceivables(tm.getOrderReceivables().add(o.getMoney()));
List<OutNewOrderDunBo> list =newOrderDunMapper.selectListNewOrderDun(orderNo,1);
BigDecimal cout=new BigDecimal(0);
for (OutNewOrderDunBo bo : list) {
cout=cout.add(bo.getMoney());
}
tm.setOrderReceivables(cout);
BigDecimal sum=tm.getOrderReceivables().subtract(settlementAmount);
//如果金额大于欠款修改欠款为0
if (sum.compareTo(new BigDecimal(0))<0)sum=new BigDecimal(0);
tm.setOrderArrears(sum);
if (tm.getDunStartTime()==null)tm.setDunStartTime(date);
tOrderMidMapper.updateByPrimaryKeySelective(tm);
return tm;
}