定时任务出BUG还是其他问题?不知道怎么去查了。

定时任务出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;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值