diff --git a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCommissionProfitServiceImpl.java b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCommissionProfitServiceImpl.java index 258aefe21..4376ed13c 100644 --- a/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCommissionProfitServiceImpl.java +++ b/emis-biz/src/main/java/com/xdadan/erp/emis/service/impl/EmisCommissionProfitServiceImpl.java @@ -12,6 +12,7 @@ package com.xdadan.erp.emis.service.impl; import java.math.BigDecimal; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.CountDownLatch; @@ -74,12 +75,16 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements @Async @Override public void autoDoProfit() { + + Map > profitMap = new HashMap<>(); // 获取需要出账的运单列表 EmisWaybill qEmisWaybill = new EmisWaybill(); List list = emisWaybillMapper.selectWaitDoProfitList(qEmisWaybill); // 多线程并发处理 if(!CollectionUtil.isEmpty(list)){ + + List > mutiOrderList = ListUtils.partition(list, 100); int realGroupSize=mutiOrderList.size(); @@ -99,6 +104,10 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements try { latch.await(300, TimeUnit.SECONDS); + + // 线程结束后计算所有员工提成 + reCalcEmpProfitSumMoney(null,null); + } catch (InterruptedException e) { e.printStackTrace(); }finally { @@ -163,7 +172,6 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements @Transactional public void reCalcProfitByBillCode(String billCode) { - String lockKey="reCalcProfitByBillCode"+billCode; // 加锁查询 log.error("reCalcProfitByBillCode start:"+billCode); @@ -221,7 +229,6 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements else if (postTypeIndex == ProfitPostType.DZ_EMP.typeCode) { calcDzProfit(waybill); } - } // 运单打上已计算提成标记 @@ -236,19 +243,30 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements } private int reCalcEmpProfitSumMoney(String empName,String billMonth){ - // 获取统计数据 - List listProfit=emisCommissionProfitMapper.selectProfitStatList(empName,billMonth); - for (EmisCommissionProfit profitItem:listProfit) { - // 查询是否有数据,没有则插入 - int isExists=emisCommissionProfitMapper.checkUnique(profitItem); - if(isExists==1){ - emisCommissionProfitMapper.updateProfitMoney(profitItem); - }else{ - String profitNo=WaybillHelper.genProfitNo(); - profitItem.setProfitNo(profitNo); - emisCommissionProfitMapper.insertEmisCommissionProfit(profitItem); + String lockKey="reCalcEmpProfitSumMoney_"+empName+billMonth; + // 加锁查询 + log.error("reCalcEmpProfitSumMoney start:"+empName+billMonth); + redissonService.lock(lockKey, 300); + try { + // 获取统计数据 + List listProfit=emisCommissionProfitMapper.selectProfitStatList(empName,billMonth); + for (EmisCommissionProfit profitItem:listProfit) { + // 查询是否有数据,没有则插入 + int isExists=emisCommissionProfitMapper.checkUnique(profitItem); + if(isExists==1){ + emisCommissionProfitMapper.updateProfitMoney(profitItem); + }else{ + String profitNo=WaybillHelper.genProfitNo(); + profitItem.setProfitNo(profitNo); + emisCommissionProfitMapper.insertEmisCommissionProfit(profitItem); + } } + }catch (Exception ex){ + redissonService.unlock(lockKey); + ex.printStackTrace(); } + redissonService.unlock(lockKey); + log.error("reCalcProfitByBillCode end:"+empName+billMonth); return 1; } diff --git a/emis-biz/src/main/resources/mapper/EmisCommissionProfitMapper.xml b/emis-biz/src/main/resources/mapper/EmisCommissionProfitMapper.xml index f6c2e5c3f..995c78b92 100644 --- a/emis-biz/src/main/resources/mapper/EmisCommissionProfitMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisCommissionProfitMapper.xml @@ -32,11 +32,13 @@