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 4929380ac..2889fe210 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 @@ -13,6 +13,9 @@ package com.xdadan.erp.emis.service.impl; import java.math.BigDecimal; import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import cn.hutool.core.collection.CollectionUtil; import com.alibaba.fastjson.JSONObject; @@ -30,6 +33,7 @@ import com.xdadan.erp.emis.mapper.EmisWaybillMapper; import com.xdadan.erp.emis.service.EmisBaseService; import com.xdadan.erp.emis.utils.WaybillHelper; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.collections4.ListUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -73,15 +77,79 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements // 获取需要出账的运单列表 EmisWaybill qEmisWaybill = new EmisWaybill(); List list = emisWaybillMapper.selectWaitDoProfitList(qEmisWaybill); + + // 多线程并发处理 if(!CollectionUtil.isEmpty(list)){ - for(EmisWaybill dt:list){ + List > mutiOrderList = ListUtils.partition(list, 100); + int realGroupSize=mutiOrderList.size(); + + // 计数处理 + CountDownLatch latch = new CountDownLatch(realGroupSize); + //多线程运行 + long startTime=System.currentTimeMillis(); + + for(int i=0; i"+i); + Thread doThread = new Thread(doRunnable, " Profit MultiDoThread-"+i); + doThread.start(); + } + + try { + latch.await(300, TimeUnit.SECONDS); + } catch (InterruptedException e) { + e.printStackTrace(); + }finally { + } + long endTime=System.currentTimeMillis(); //获取结束时间 + log.info("Profit MultiDoThread End escape time: "+(endTime-startTime)+"ms"); + + + } + } + + // 多线程处理 + class MultiDoThread implements Runnable { + private List dataList = null; + private CountDownLatch latch = null; + + public MultiDoThread( + List dataList, + CountDownLatch latch , + String name + ){ + this.dataList = dataList; + this.latch = latch; + } + + private void doData(){ + + long start = System.currentTimeMillis(); + for (EmisWaybill waybill : dataList) { try { - reCalcProfitByBillCode(dt.getBillCode()); + reCalcProfitByBillCode(waybill.getBillCode()); }catch (Exception ex){ ex.printStackTrace(); } - } + + long end4 = System.currentTimeMillis(); + log.info(name+" escape time xxxx666:" + (end4 - start) + "ms"); + } + + @Override + public void run() { + log.debug(name+":Do profit thread start!"); + try { + doData(); + }catch(Exception ex){ + ex.printStackTrace(); + } + + latch.countDown(); + log.debug(name+":Do profit thread thread end!"); } } @@ -394,7 +462,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements emisCommissionDtlMapper.insertEmisCommissionDtl(emisCommissionDtl); // 单独根据人名称和月份汇总统计 - reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); + // reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); } } } @@ -504,7 +572,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements emisCommissionDtlMapper.insertEmisCommissionDtl(emisCommissionDtl); // 单独根据人名称和月份汇总统计 - reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); + // reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); }else{ log.error("计算提成费用为0"); @@ -620,7 +688,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements emisCommissionDtlMapper.insertEmisCommissionDtl(emisCommissionDtl); // 单独根据人名称和月份汇总统计 - reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); + // reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); }else{ log.error("计算提成费用为0"); @@ -733,7 +801,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements emisCommissionDtlMapper.insertEmisCommissionDtl(emisCommissionDtl); // 单独根据人名称和月份汇总统计 - reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); + // reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); }else{ log.error("计算提成费用为0"); } @@ -982,7 +1050,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements emisCommissionDtlMapper.insertEmisCommissionDtl(emisCommissionDtl); // 单独根据人名称和月份汇总统计 - reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); + // reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); } }else{ log.error("计算提成费用为0"); @@ -1097,7 +1165,7 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements emisCommissionDtlMapper.insertEmisCommissionDtl(emisCommissionDtl); // 单独根据人名称和月份汇总统计 - reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); + // reCalcEmpProfitSumMoney(empUser.getEmpName(),billMonth); } }else{ log.error("计算提成费用为0"); @@ -1115,8 +1183,6 @@ public class EmisCommissionProfitServiceImpl extends EmisBaseService implements } - - /** * 查询员工提成表 * diff --git a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml index 1b6ebc845..32584abc4 100644 --- a/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml +++ b/emis-biz/src/main/resources/mapper/EmisWaybillMapper.xml @@ -1960,70 +1960,32 @@ - + - +