一开始进来是先把明细的金额数据置空:
//更新该单据下的明细相关预收金额为空
int row = saleDetailMapper.updateAomuntZERO(saleMain.getId());
SaleDetail saleDetail = new SaleDetail();
saleDetail.setSaleId(saleMain.getId());
saleDetail.setDelflag(DeleteFlag.VALID.getCode());
List<SaleDetail> list = saleDetailMapper.findList(saleDetail);
if(list == null || list.size() == 0){
// 手动回滚
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
result.put(SystemKey.ERROR_KEY, "该单据没有明细");
return result;
}
接着在list中for循环中重新分配金额 ,分配逻辑有的长,略过。
之后由这些重新汇总金额:
<update id="updateDiscountAmount">
UPDATE `sm_sale_main`
SET
discountAmount =
(SELECT SUM(IFNULL(detail.offsetAmount, 0)) FROM `sm_sale_detail` detail WHERE detail.`delflag` = 1 AND detail.`saleId` = #{id} )
WHERE id = #{id}
</update>
自己在写的的时候测试过,在开发环境中就是怎样测试都是正常的,然后一发正式,最后那个更新直接就一直为0。
我这里的update和select是同一个事务,正常应该是不存在隔离的。然后我就是怎样都更新不了,只好把最后一个更新去掉了,在for前定义一个变量去合计后再更新。这里的这个事务求哪个朋友能解惑一下,感谢。