Преглед изворни кода

feat: 多线程模式调整;对账明细增加本月未付,本月已付返回值

hejq пре 7 година
родитељ
комит
60c7e225c0

+ 0 - 3
src/main/java/com/uas/platform/b2b/controller/PurchaseARCheckController.java

@@ -52,9 +52,6 @@ public class PurchaseARCheckController {
 	@Autowired
 	@Autowired
 	private SaleARCheckService saleARCheckService;
 	private SaleARCheckService saleARCheckService;
 
 
-	@Autowired
-	private SearchService searchService;
-
 	@Autowired
 	@Autowired
     private PurchaseApCheckService apCheckService;
     private PurchaseApCheckService apCheckService;
 
 

+ 2 - 2
src/main/java/com/uas/platform/b2b/controller/SaleApCheckController.java

@@ -186,7 +186,7 @@ public class SaleApCheckController {
 	 * @return List<ErpProdIo>
 	 * @return List<ErpProdIo>
 	 */
 	 */
 	@RequestMapping(value = "/getAllByKeywords", method = RequestMethod.GET)
 	@RequestMapping(value = "/getAllByKeywords", method = RequestMethod.GET)
-	public ErpProdIo getAllApchecksByDate(Long fromDate, Long endDate, ApcheckKeyWord searchKeyWord, String checkDate) {
+	public ErpProdIo getAllApchecksByDate(Long fromDate, Long endDate, ApcheckKeyWord searchKeyWord, String checkDate) throws InterruptedException {
 		List<Long> distributes = null;
 		List<Long> distributes = null;
 		// 判断当前用户是否被客户分配
 		// 判断当前用户是否被客户分配
 		if (!SystemSession.getUser().isSys()) {
 		if (!SystemSession.getUser().isSys()) {
@@ -565,7 +565,7 @@ public class SaleApCheckController {
 	 * @return ModelAndView
 	 * @return ModelAndView
 	 */
 	 */
 	@RequestMapping(value = "/xls", method = RequestMethod.GET)
 	@RequestMapping(value = "/xls", method = RequestMethod.GET)
-	public ModelAndView export(ApcheckKeyWord keyword, Long fromDate, Long endDate, String checkDate) {
+	public ModelAndView export(ApcheckKeyWord keyword, Long fromDate, Long endDate, String checkDate) throws InterruptedException {
 		List<ErpProdIODetail> details = getAllApchecksByDate(fromDate, endDate, keyword, checkDate).getDetails();
 		List<ErpProdIODetail> details = getAllApchecksByDate(fromDate, endDate, keyword, checkDate).getDetails();
 		ModelAndView modelAndView = new ModelAndView();
 		ModelAndView modelAndView = new ModelAndView();
 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
 		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");

+ 2 - 2
src/main/java/com/uas/platform/b2b/controller/SaleArCheckController.java

@@ -62,7 +62,7 @@ public class SaleArCheckController {
      * @return List<ErpProdIo>
      * @return List<ErpProdIo>
      */
      */
     @RequestMapping(value = "/getAllByKeywords", method = RequestMethod.GET)
     @RequestMapping(value = "/getAllByKeywords", method = RequestMethod.GET)
-    public ErpProdIo getAllApChecksByDate(Long fromDate, Long endDate, ApcheckKeyWord searchKeyWord, String checkDate) {
+    public ErpProdIo getAllApChecksByDate(Long fromDate, Long endDate, ApcheckKeyWord searchKeyWord, String checkDate) throws InterruptedException {
         logger.log("应付对账单", "筛选对账数据", "筛选所有未对账数据");
         logger.log("应付对账单", "筛选对账数据", "筛选所有未对账数据");
         return purchaseApBillService.findXlsApChecks(searchKeyWord, fromDate, endDate, checkDate);
         return purchaseApBillService.findXlsApChecks(searchKeyWord, fromDate, endDate, checkDate);
     }
     }
@@ -78,7 +78,7 @@ public class SaleArCheckController {
      * @return ModelAndView
      * @return ModelAndView
      */
      */
     @RequestMapping(value = "/xls", method = RequestMethod.GET)
     @RequestMapping(value = "/xls", method = RequestMethod.GET)
-    public ModelAndView export(ApcheckKeyWord keyword, Long fromDate, Long endDate, String checkDate) {
+    public ModelAndView export(ApcheckKeyWord keyword, Long fromDate, Long endDate, String checkDate) throws InterruptedException {
         List<ErpProdIODetail> details = getAllApChecksByDate(fromDate, endDate, keyword, checkDate).getDetails();
         List<ErpProdIODetail> details = getAllApChecksByDate(fromDate, endDate, keyword, checkDate).getDetails();
         ModelAndView modelAndView = new ModelAndView();
         ModelAndView modelAndView = new ModelAndView();
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");
         SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy年MM月dd日");

+ 14 - 6
src/main/java/com/uas/platform/b2b/controller/SnapshotController.java

@@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 
 import java.util.List;
 import java.util.List;
 import java.util.Map;
 import java.util.Map;
+import java.util.Objects;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ExecutorService;
@@ -61,18 +62,25 @@ public class SnapshotController {
 	 */
 	 */
 	@RequestMapping(value = "/todo", method = RequestMethod.GET, headers = "Accept=application/json")
 	@RequestMapping(value = "/todo", method = RequestMethod.GET, headers = "Accept=application/json")
 	@ResponseStatus(value = HttpStatus.OK)
 	@ResponseStatus(value = HttpStatus.OK)
-	public ModelMap getTodo() {
+	public ModelMap getTodo() throws InterruptedException {
 	    Long start = System.currentTimeMillis();
 	    Long start = System.currentTimeMillis();
 		ModelMap modelMap = new ModelMap();
 		ModelMap modelMap = new ModelMap();
 		final Long enUU = SystemSession.getUser().getEnterprise().getUu();
 		final Long enUU = SystemSession.getUser().getEnterprise().getUu();
-        ThreadUtils.task(()-> {
-			List<Snapshot> snapshots = snapshotService.findByEnUU(enUU);
-			if (!CollectionUtils.isEmpty(snapshots)) {
+        final CountDownLatch threadsSignal = new CountDownLatch(1);
+        executor.submitTask(()-> {
+            List<Snapshot> snapshots = null;
+            try {
+                snapshots = snapshotService.findByEnUU(enUU);
+            } catch (InterruptedException e) {
+                e.printStackTrace();
+            }
+            if (!CollectionUtils.isEmpty(snapshots)) {
 				snapshots.stream()
 				snapshots.stream()
-                        .filter(snapshot -> null != snapshot)
+                        .filter(Objects::nonNull)
                         .forEach(snapshot -> modelMap.put(snapshot.getCategory(), snapshot.getCount()));
                         .forEach(snapshot -> modelMap.put(snapshot.getCategory(), snapshot.getCount()));
 			}
 			}
-		}).run();
+            threadsSignal.countDown();
+		});
 		logger.info("cost -> " + (System.currentTimeMillis() - start));
 		logger.info("cost -> " + (System.currentTimeMillis() - start));
 		return modelMap;
 		return modelMap;
 	}
 	}

+ 26 - 0
src/main/java/com/uas/platform/b2b/model/ErpProdIo.java

@@ -23,6 +23,16 @@ public class ErpProdIo {
      */
      */
     private List<ApCheckAmount> thisMonthCount;
     private List<ApCheckAmount> thisMonthCount;
 
 
+    /**
+     * 本月应收(前端传入指定月份)
+     */
+    private List<ApCheckAmount> thisMonthDoneCount;
+
+    /**
+     * 本月应收(前端传入指定月份)
+     */
+    private List<ApCheckAmount> thisMonthTodoCount;
+
     /**
     /**
      * 应收总额
      * 应收总额
      */
      */
@@ -64,4 +74,20 @@ public class ErpProdIo {
     public void setVendorName(String vendorName) {
     public void setVendorName(String vendorName) {
         this.vendorName = vendorName;
         this.vendorName = vendorName;
     }
     }
+
+    public List<ApCheckAmount> getThisMonthDoneCount() {
+        return thisMonthDoneCount;
+    }
+
+    public void setThisMonthDoneCount(List<ApCheckAmount> thisMonthDoneCount) {
+        this.thisMonthDoneCount = thisMonthDoneCount;
+    }
+
+    public List<ApCheckAmount> getThisMonthTodoCount() {
+        return thisMonthTodoCount;
+    }
+
+    public void setThisMonthTodoCount(List<ApCheckAmount> thisMonthTodoCount) {
+        this.thisMonthTodoCount = thisMonthTodoCount;
+    }
 }
 }

+ 1 - 1
src/main/java/com/uas/platform/b2b/service/ErpProdIODetailService.java

@@ -26,7 +26,7 @@ public interface ErpProdIODetailService {
      * @param checkDate 对账月份
      * @param checkDate 对账月份
 	 * @return 符合条件的数据
 	 * @return 符合条件的数据
 	 */
 	 */
-    ErpProdIo findXlsApChecks(List<Long> filter, ApcheckKeyWord keyWord, Long fromDate, Long endDate, String checkDate);
+    ErpProdIo findXlsApChecks(List<Long> filter, ApcheckKeyWord keyWord, Long fromDate, Long endDate, String checkDate) throws InterruptedException;
 
 
     /**
     /**
      * 初始化筛选时间
      * 初始化筛选时间

+ 1 - 1
src/main/java/com/uas/platform/b2b/service/PurchaseApBillService.java

@@ -118,5 +118,5 @@ public interface PurchaseApBillService {
      * @param searchKeyWord 搜索词
      * @param searchKeyWord 搜索词
      * @return List<ErpProdIo>
      * @return List<ErpProdIo>
      */
      */
-    ErpProdIo findXlsApChecks(ApcheckKeyWord searchKeyWord, Long fromDate, Long endDate, String checkDate);
+    ErpProdIo findXlsApChecks(ApcheckKeyWord searchKeyWord, Long fromDate, Long endDate, String checkDate) throws InterruptedException;
 }
 }

+ 4 - 4
src/main/java/com/uas/platform/b2b/service/PurchaseApCheckService.java

@@ -152,7 +152,7 @@ public interface PurchaseApCheckService {
      * @param customerUU 客户企业UU
      * @param customerUU 客户企业UU
      * @return 统计结果
      * @return 统计结果
      */
      */
-    List<ApCheckAmount> getDueTrade(Long enUU, Long customerUU);
+    List<ApCheckAmount> getDueTrade(Long enUU, Long customerUU) throws InterruptedException;
 
 
     /**
     /**
      * 获取指定月份应收金额(总额)
      * 获取指定月份应收金额(总额)
@@ -164,7 +164,7 @@ public interface PurchaseApCheckService {
      * @param endDate 截止时间
      * @param endDate 截止时间
      * @return 统计结果
      * @return 统计结果
      */
      */
-    List<ApCheckAmount> getThisMonthTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate);
+    List<ApCheckAmount> getThisMonthTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate) throws InterruptedException;
 
 
     /**
     /**
      * 获取指定月份应收金额(未收)
      * 获取指定月份应收金额(未收)
@@ -176,7 +176,7 @@ public interface PurchaseApCheckService {
      * @param endDate 截止时间
      * @param endDate 截止时间
      * @return 统计结果
      * @return 统计结果
      */
      */
-    List<ApCheckAmount> getThisMonthTodoTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate);
+    List<ApCheckAmount> getThisMonthTodoTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate) throws InterruptedException;
 
 
     /**
     /**
      * 获取指定月份应收金额(已收)
      * 获取指定月份应收金额(已收)
@@ -188,7 +188,7 @@ public interface PurchaseApCheckService {
      * @param endDate 截止时间
      * @param endDate 截止时间
      * @return 统计结果
      * @return 统计结果
      */
      */
-    List<ApCheckAmount> getThisMonthDoneTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate);
+    List<ApCheckAmount> getThisMonthDoneTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate) throws InterruptedException;
 
 
     /**
     /**
      * 根据统计信息按币别分类处理
      * 根据统计信息按币别分类处理

+ 1 - 1
src/main/java/com/uas/platform/b2b/service/SnapshotService.java

@@ -17,5 +17,5 @@ public interface SnapshotService {
      * @param enUU 企业UU
      * @param enUU 企业UU
      * @return
      * @return
      */
      */
-    List<Snapshot> findByEnUU(Long enUU);
+    List<Snapshot> findByEnUU(Long enUU) throws InterruptedException;
 }
 }

+ 85 - 24
src/main/java/com/uas/platform/b2b/service/impl/ErpProdIODetailServiceImpl.java

@@ -1,8 +1,10 @@
 package com.uas.platform.b2b.service.impl;
 package com.uas.platform.b2b.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
+import com.uas.platform.b2b.core.util.BoundedExecutor;
 import com.uas.platform.b2b.core.util.DateFormatUtils;
 import com.uas.platform.b2b.core.util.DateFormatUtils;
 import com.uas.platform.b2b.core.util.DateUtils;
 import com.uas.platform.b2b.core.util.DateUtils;
+import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.PurchaseApCheckDao;
 import com.uas.platform.b2b.dao.PurchaseApCheckDao;
@@ -15,7 +17,9 @@ import com.uas.platform.b2b.model.PurchaseApCheck;
 import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
 import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
 import com.uas.platform.b2b.service.ErpProdIODetailService;
 import com.uas.platform.b2b.service.ErpProdIODetailService;
+import com.uas.platform.b2b.service.OrderRedDotService;
 import com.uas.platform.b2b.service.PurchaseApCheckService;
 import com.uas.platform.b2b.service.PurchaseApCheckService;
+import com.uas.platform.b2b.service.SnapshotService;
 import com.uas.platform.b2b.support.CollectionUtil;
 import com.uas.platform.b2b.support.CollectionUtil;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.support.SystemSession;
 import com.uas.platform.b2b.task.ApCheckTask;
 import com.uas.platform.b2b.task.ApCheckTask;
@@ -34,6 +38,9 @@ import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 
 
 
 /**
 /**
@@ -45,23 +52,33 @@ import java.util.List;
 @Service
 @Service
 public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
 public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
 
 
-	@Autowired
-	private CommonDao commonDao;
+	private final CommonDao commonDao;
 
 
-	@Autowired
-    private PurchaseApCheckService apCheckService;
+    private final PurchaseApCheckService apCheckService;
 
 
-	@Autowired
-    private VendorDao vendorDao;
+    private final VendorDao vendorDao;
 
 
-	@Autowired
-    private PurchaseApCheckDao apCheckDao;
+    private final PurchaseApCheckDao apCheckDao;
+
+    private final BoundedExecutor executor;
+
+    @Autowired
+    public ErpProdIODetailServiceImpl(CommonDao commonDao, PurchaseApCheckService apCheckService,
+                                      VendorDao vendorDao, PurchaseApCheckDao apCheckDao) {
+        this.commonDao = commonDao;
+        this.apCheckService = apCheckService;
+        this.vendorDao = vendorDao;
+        this.apCheckDao = apCheckDao;
+        ExecutorService executorService = Executors.newCachedThreadPool();
+        executor = new BoundedExecutor(executorService, 1600);
+    }
 
 
 	@Override
 	@Override
-	public ErpProdIo findXlsApChecks(List<Long> filter, ApcheckKeyWord keyword, Long fromDate, Long endDate, String checkDate) {
+	public ErpProdIo findXlsApChecks(List<Long> filter, ApcheckKeyWord keyword, Long fromDate, Long endDate, String checkDate) throws InterruptedException {
         DateFilter dateFilter = initFilter(fromDate, endDate, checkDate);
         DateFilter dateFilter = initFilter(fromDate, endDate, checkDate);
 		Long enUU = SystemSession.getUser().getEnterprise().getUu();
 		Long enUU = SystemSession.getUser().getEnterprise().getUu();
         StringBuffer distributes = new StringBuffer();
         StringBuffer distributes = new StringBuffer();
+        final CountDownLatch threadsSignal = new CountDownLatch(7);
         List<ErpProdIODetail> details = new ArrayList<>();
         List<ErpProdIODetail> details = new ArrayList<>();
         if (null != filter) {
         if (null != filter) {
             filter.forEach(uu -> {
             filter.forEach(uu -> {
@@ -72,33 +89,59 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
             });
             });
         }
         }
 		// 货款调账
 		// 货款调账
-		List<ErpProdIODetail> adjustments = getAdjustments(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+		executor.submitTask(() -> {
+            List<ErpProdIODetail> adjustments = getAdjustments(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(adjustments);
+            threadsSignal.countDown();
+        });
 		// 采购验收单
 		// 采购验收单
-        List<ErpProdIODetail> saleAccepts = getSaleAccepts(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> saleAccepts = getSaleAccepts(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(saleAccepts);
+            threadsSignal.countDown();
+        });
         // 采购验退单
         // 采购验退单
-        List<ErpProdIODetail> saleReturns = getSaleReturns(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> saleReturns = getSaleReturns(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(saleReturns);
+            threadsSignal.countDown();
+        });
+
         // 客户不良品入库单
         // 客户不良品入库单
-        List<ErpProdIODetail> badIns = getBadIns(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> badIns = getBadIns(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(badIns);
+            threadsSignal.countDown();
+        });
+
         // 客户不良品出库单
         // 客户不良品出库单
-        List<ErpProdIODetail> badOuts = getBadOuts(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> badOuts = getBadOuts(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(badOuts);
+            threadsSignal.countDown();
+        });
+
         // 委外验收单
         // 委外验收单
-        List<ErpProdIODetail> makeAccepts = getMakeAccepts(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> makeAccepts = getMakeAccepts(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(makeAccepts);
+            threadsSignal.countDown();
+        });
+
         // 委外验退单
         // 委外验退单
-        List<ErpProdIODetail> makeReturns = getMakeReturns(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
-        details.addAll(adjustments);
-        details.addAll(saleAccepts);
-        details.addAll(saleReturns);
-        details.addAll(badIns);
-        details.addAll(badOuts);
-        details.addAll(makeAccepts);
-        details.addAll(makeReturns);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> makeReturns = getMakeReturns(distributes, keyword, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(makeReturns);
+            threadsSignal.countDown();
+        });
+
         ErpProdIo erpProdIo = new ErpProdIo();
         ErpProdIo erpProdIo = new ErpProdIo();
         erpProdIo.setDetails(details);
         erpProdIo.setDetails(details);
         // 应收总额
         // 应收总额
        if (null != keyword.getCustomerUU()) {
        if (null != keyword.getCustomerUU()) {
            List<ApCheckAmount> totalTrades = apCheckService.getDueTrade(enUU, keyword.getCustomerUU());
            List<ApCheckAmount> totalTrades = apCheckService.getDueTrade(enUU, keyword.getCustomerUU());
-           List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(keyword.getCustomerUU(), enUU);
            if (!CollectionUtil.isEmpty(totalTrades)) {
            if (!CollectionUtil.isEmpty(totalTrades)) {
+               List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(keyword.getCustomerUU(), enUU);
                erpProdIo.setTotalCount(totalTrades);
                erpProdIo.setTotalCount(totalTrades);
                if (!CollectionUtil.isEmpty(vendors)) {
                if (!CollectionUtil.isEmpty(vendors)) {
                    String tradeString = JSON.toJSONString(totalTrades);
                    String tradeString = JSON.toJSONString(totalTrades);
@@ -110,6 +153,24 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
            // 本月应收
            // 本月应收
            List<ApCheckAmount> thisMonthTrades = apCheckService.getThisMonthTrade(enUU, keyword.getCustomerUU(), checkDate, fromDate, endDate);
            List<ApCheckAmount> thisMonthTrades = apCheckService.getThisMonthTrade(enUU, keyword.getCustomerUU(), checkDate, fromDate, endDate);
            erpProdIo.setThisMonthCount(thisMonthTrades);
            erpProdIo.setThisMonthCount(thisMonthTrades);
+           if (!CollectionUtil.isEmpty(thisMonthTrades)) {
+               // 本月应收(未收)
+               List<ApCheckAmount> thisMonthTodoTrades = null;
+               try {
+                   thisMonthTodoTrades = apCheckService.getThisMonthTodoTrade(enUU, keyword.getCustomerUU(), checkDate, fromDate, endDate);
+               } catch (InterruptedException e) {
+                   e.printStackTrace();
+               }
+               erpProdIo.setThisMonthTodoCount(thisMonthTodoTrades);
+               // 本月应收(已收)
+               List<ApCheckAmount> thisMonthDoneTrades = null;
+               try {
+                   thisMonthDoneTrades = apCheckService.getThisMonthDoneTrade(enUU, keyword.getCustomerUU(), checkDate, fromDate, endDate);
+               } catch (InterruptedException e) {
+                   e.printStackTrace();
+               }
+               erpProdIo.setThisMonthDoneCount(thisMonthDoneTrades);
+           }
        }
        }
        // 查询已生成的对账单(需进行转换)
        // 查询已生成的对账单(需进行转换)
         List<PurchaseApCheck> apCheckList = findApCheckList(enUU, keyword.getCustomerUU(), checkDate, fromDate, endDate);
         List<PurchaseApCheck> apCheckList = findApCheckList(enUU, keyword.getCustomerUU(), checkDate, fromDate, endDate);

+ 3 - 2
src/main/java/com/uas/platform/b2b/service/impl/InvitationRecordServiceImpl.java

@@ -1,6 +1,7 @@
 package com.uas.platform.b2b.service.impl;
 package com.uas.platform.b2b.service.impl;
 
 
 import com.uas.message.mail.service.MailService;
 import com.uas.message.mail.service.MailService;
+import com.uas.platform.b2b.core.util.ThreadTask;
 import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.dao.EnterpriseDao;
 import com.uas.platform.b2b.dao.EnterpriseDao;
 import com.uas.platform.b2b.dao.InvitationRecordDao;
 import com.uas.platform.b2b.dao.InvitationRecordDao;
@@ -181,7 +182,7 @@ public class InvitationRecordServiceImpl implements InvitationRecordService {
                     e.printStackTrace();
                     e.printStackTrace();
                 }
                 }
             }
             }
-        }).run();
+        });
     }
     }
 
 
     /**
     /**
@@ -233,7 +234,7 @@ public class InvitationRecordServiceImpl implements InvitationRecordService {
                     e.printStackTrace();
                     e.printStackTrace();
                 }
                 }
             }
             }
-        }).run();
+        });
     }
     }
 
 
 	@Override
 	@Override

+ 109 - 36
src/main/java/com/uas/platform/b2b/service/impl/PurchaseApBillServiceImpl.java

@@ -2,11 +2,10 @@ package com.uas.platform.b2b.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.uas.platform.b2b.constant.StringConstant;
 import com.uas.platform.b2b.constant.StringConstant;
-import com.uas.platform.b2b.core.util.ThreadUtils;
+import com.uas.platform.b2b.core.util.BoundedExecutor;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.PurchaseApBillDao;
 import com.uas.platform.b2b.dao.PurchaseApBillDao;
 import com.uas.platform.b2b.dao.PurchaseApBillItemDao;
 import com.uas.platform.b2b.dao.PurchaseApBillItemDao;
-import com.uas.platform.b2b.dao.PurchaseApCheckDao;
 import com.uas.platform.b2b.dao.VendorDao;
 import com.uas.platform.b2b.dao.VendorDao;
 import com.uas.platform.b2b.erp.model.ProdInOutRefreshPrice;
 import com.uas.platform.b2b.erp.model.ProdInOutRefreshPrice;
 import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
 import com.uas.platform.b2b.erp.support.ErpBufferedLogger;
@@ -51,6 +50,9 @@ import javax.persistence.criteria.Root;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.Date;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 
 /**
 /**
  * 采购发票
  * 采购发票
@@ -61,26 +63,36 @@ import java.util.List;
 @Service
 @Service
 public class PurchaseApBillServiceImpl implements PurchaseApBillService {
 public class PurchaseApBillServiceImpl implements PurchaseApBillService {
 
 
-	@Autowired
-	private PurchaseApBillDao purchaseApBillDao;
+	private final PurchaseApBillDao purchaseApBillDao;
 
 
-	@Autowired
-	private PurchaseApBillItemDao purchaseApBillItemDao;
+	private final PurchaseApBillItemDao purchaseApBillItemDao;
 
 
-	@Autowired
-	private SearchService searchService;
+	private final SearchService searchService;
 
 
-	@Autowired
-	private CommonDao commonDao;
+	private final CommonDao commonDao;
 
 
-	@Autowired
-    private PurchaseApCheckService purchaseApCheckService;
+    private final PurchaseApCheckService purchaseApCheckService;
 
 
-	@Autowired
-    private VendorDao vendorDao;
+    private final VendorDao vendorDao;
 	
 	
-	@Autowired
-    private ErpProdIODetailService erpProdIODetailService;
+    private final ErpProdIODetailService erpProdIODetailService;
+
+    private final BoundedExecutor executor;
+    @Autowired
+    private PurchaseApBillServiceImpl(PurchaseApBillDao purchaseApBillDao, PurchaseApBillItemDao purchaseApBillItemDao,
+                                      SearchService searchService, CommonDao commonDao, PurchaseApCheckService purchaseApCheckService,
+                                      VendorDao vendorDao, ErpProdIODetailService erpProdIODetailService) {
+        this.purchaseApBillDao = purchaseApBillDao;
+        this.purchaseApBillItemDao = purchaseApBillItemDao;
+        this.searchService = searchService;
+        this.commonDao = commonDao;
+        this.purchaseApCheckService = purchaseApCheckService;
+        this.vendorDao = vendorDao;
+        this.erpProdIODetailService = erpProdIODetailService;
+        ExecutorService executorService = Executors.newCachedThreadPool();
+        executor = new BoundedExecutor(executorService, 1600);
+
+    }
 
 
 	private final static ErpBufferedLogger logger = BufferedLoggerManager.getLogger(ErpBufferedLogger.class);
 	private final static ErpBufferedLogger logger = BufferedLoggerManager.getLogger(ErpBufferedLogger.class);
 
 
@@ -239,15 +251,30 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
                         customer.setTotalCount(tradeCounts);
                         customer.setTotalCount(tradeCounts);
                     }
                     }
                     // 本月应付(总额)
                     // 本月应付(总额)
-                    List<ApCheckAmount> thisMonthAllTrades = purchaseApCheckService.getThisMonthTrade(vendorUU, enUU, checkDate, fromDate, endDate);
+                    List<ApCheckAmount> thisMonthAllTrades = null;
+                    try {
+                        thisMonthAllTrades = purchaseApCheckService.getThisMonthTrade(vendorUU, enUU, checkDate, fromDate, endDate);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
                     customer.setThisMonthCount(thisMonthAllTrades);
                     customer.setThisMonthCount(thisMonthAllTrades);
                     // 本月应付存在再进行分类查询
                     // 本月应付存在再进行分类查询
                     if (!CollectionUtil.isEmpty(thisMonthAllTrades)) {
                     if (!CollectionUtil.isEmpty(thisMonthAllTrades)) {
                         // 本月应付(未付)
                         // 本月应付(未付)
-                        List<ApCheckAmount> thisMonthTodoTrades = purchaseApCheckService.getThisMonthTodoTrade(vendorUU, enUU, checkDate, fromDate, endDate);
+                        List<ApCheckAmount> thisMonthTodoTrades = null;
+                        try {
+                            thisMonthTodoTrades = purchaseApCheckService.getThisMonthTodoTrade(vendorUU, enUU, checkDate, fromDate, endDate);
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                        }
                         customer.setThisMonthTodoCount(thisMonthTodoTrades);
                         customer.setThisMonthTodoCount(thisMonthTodoTrades);
                         // 本月应付(已付)
                         // 本月应付(已付)
-                        List<ApCheckAmount> thisMonthDoneTrades = purchaseApCheckService.getThisMonthDoneTrade(vendorUU, enUU, checkDate, fromDate, endDate);
+                        List<ApCheckAmount> thisMonthDoneTrades = null;
+                        try {
+                            thisMonthDoneTrades = purchaseApCheckService.getThisMonthDoneTrade(vendorUU, enUU, checkDate, fromDate, endDate);
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                        }
                         customer.setThisMonthDoneCount(thisMonthDoneTrades);
                         customer.setThisMonthDoneCount(thisMonthDoneTrades);
                     }
                     }
 
 
@@ -296,31 +323,59 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
      * @return List<ErpProdIo>
      * @return List<ErpProdIo>
      */
      */
     @Override
     @Override
-    public ErpProdIo findXlsApChecks(ApcheckKeyWord searchKeyWord, Long fromDate, Long endDate, String checkDate) {
+    public ErpProdIo findXlsApChecks(ApcheckKeyWord searchKeyWord, Long fromDate, Long endDate, String checkDate) throws InterruptedException {
         DateFilter dateFilter = erpProdIODetailService.initFilter(fromDate, endDate, checkDate);
         DateFilter dateFilter = erpProdIODetailService.initFilter(fromDate, endDate, checkDate);
         Long enUU = SystemSession.getUser().getEnterprise().getUu();
         Long enUU = SystemSession.getUser().getEnterprise().getUu();
+        final CountDownLatch threadsSignal = new CountDownLatch(15);
+        List<ErpProdIODetail> details = new ArrayList<>();
         // 货款调账
         // 货款调账
-        List<ErpProdIODetail> adjustments = getAdjustments(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> adjustments = getAdjustments(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(adjustments);
+            threadsSignal.countDown();
+        });
+
         // 采购验收单
         // 采购验收单
-        List<ErpProdIODetail> saleAccepts = getSaleAccepts(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> saleAccepts = getSaleAccepts(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(saleAccepts);
+            threadsSignal.countDown();
+        });
+
         // 采购验退单
         // 采购验退单
-        List<ErpProdIODetail> saleReturns = getSaleReturns(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> saleReturns = getSaleReturns(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(saleReturns);
+            threadsSignal.countDown();
+        });
+
         // 客户不良品入库单
         // 客户不良品入库单
-        List<ErpProdIODetail> badIns = getBadIns(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> badIns = getBadIns(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(badIns);
+            threadsSignal.countDown();
+        });
+
         // 客户不良品出库单
         // 客户不良品出库单
-        List<ErpProdIODetail> badOuts = getBadOuts(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> badOuts = getBadOuts(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(badOuts);
+            threadsSignal.countDown();
+        });
+
         // 委外验收单
         // 委外验收单
-        List<ErpProdIODetail> makeAccepts = getMakeAccepts(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> makeAccepts = getMakeAccepts(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(makeAccepts);
+            threadsSignal.countDown();
+        });
+
         // 委外验退单
         // 委外验退单
-        List<ErpProdIODetail> makeReturns = getMakeReturns(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
-        List<ErpProdIODetail> details = new ArrayList<>();
-        details.addAll(adjustments);
-        details.addAll(saleAccepts);
-        details.addAll(saleReturns);
-        details.addAll(badIns);
-        details.addAll(badOuts);
-        details.addAll(makeAccepts);
-        details.addAll(makeReturns);
+        executor.submitTask(() -> {
+            List<ErpProdIODetail> makeReturns = getMakeReturns(searchKeyWord, dateFilter.getFromDate(), dateFilter.getEndDate(), enUU);
+            details.addAll(makeReturns);
+            threadsSignal.countDown();
+        });
         ErpProdIo erpProdIo = new ErpProdIo();
         ErpProdIo erpProdIo = new ErpProdIo();
         erpProdIo.setDetails(details);
         erpProdIo.setDetails(details);
         // 应收总额
         // 应收总额
@@ -332,7 +387,7 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
                 erpProdIo.setTotalCount(totalTrades);
                 erpProdIo.setTotalCount(totalTrades);
                 if (!CollectionUtil.isEmpty(vendors)) {
                 if (!CollectionUtil.isEmpty(vendors)) {
                     String tradeString = JSON.toJSONString(totalTrades);
                     String tradeString = JSON.toJSONString(totalTrades);
-                    ThreadUtils.task(()
+                    executor.submitTask(()
                         -> commonDao.getJdbcTemplate().update(String.format(ApCheckTask.UPDATE_COUNT_SQL, tradeString, vendors.get(0).getId()))
                         -> commonDao.getJdbcTemplate().update(String.format(ApCheckTask.UPDATE_COUNT_SQL, tradeString, vendors.get(0).getId()))
                     );
                     );
                 }
                 }
@@ -340,6 +395,24 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
             // 本月应付
             // 本月应付
             List<ApCheckAmount> thisMonthTrades = purchaseApCheckService.getThisMonthTrade(searchKeyWord.getVendorUU(), enUU, checkDate, fromDate, endDate);
             List<ApCheckAmount> thisMonthTrades = purchaseApCheckService.getThisMonthTrade(searchKeyWord.getVendorUU(), enUU, checkDate, fromDate, endDate);
             erpProdIo.setThisMonthCount(thisMonthTrades);
             erpProdIo.setThisMonthCount(thisMonthTrades);
+            if (!CollectionUtil.isEmpty(thisMonthTrades)) {
+                // 本月应收(未收)
+                List<ApCheckAmount> thisMonthTodoTrades = null;
+                try {
+                    thisMonthTodoTrades = purchaseApCheckService.getThisMonthTodoTrade(searchKeyWord.getVendorUU(), enUU, checkDate, fromDate, endDate);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+                erpProdIo.setThisMonthTodoCount(thisMonthTodoTrades);
+                // 本月应收(已收)
+                List<ApCheckAmount> thisMonthDoneTrades = null;
+                try {
+                    thisMonthDoneTrades = purchaseApCheckService.getThisMonthDoneTrade(searchKeyWord.getVendorUU(), enUU, checkDate, fromDate, endDate);
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
+                erpProdIo.setThisMonthDoneCount(thisMonthDoneTrades);
+            }
             // 查询已生成的对账单(需进行转换)
             // 查询已生成的对账单(需进行转换)
             List<PurchaseApCheck> apCheckList = erpProdIODetailService.findApCheckList(searchKeyWord.getVendorUU(), enUU, checkDate, fromDate, endDate);
             List<PurchaseApCheck> apCheckList = erpProdIODetailService.findApCheckList(searchKeyWord.getVendorUU(), enUU, checkDate, fromDate, endDate);
             List<ErpProdIODetail> detailList = erpProdIODetailService.covertApCheckToErpIo(apCheckList);
             List<ErpProdIODetail> detailList = erpProdIODetailService.covertApCheckToErpIo(apCheckList);

+ 134 - 107
src/main/java/com/uas/platform/b2b/service/impl/PurchaseApCheckServiceImpl.java

@@ -2,8 +2,8 @@ package com.uas.platform.b2b.service.impl;
 
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSON;
 import com.uas.platform.b2b.constant.StringConstant;
 import com.uas.platform.b2b.constant.StringConstant;
+import com.uas.platform.b2b.core.util.BoundedExecutor;
 import com.uas.platform.b2b.core.util.ContextUtils;
 import com.uas.platform.b2b.core.util.ContextUtils;
-import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.EnterpriseDao;
 import com.uas.platform.b2b.dao.EnterpriseDao;
 import com.uas.platform.b2b.dao.PurchaseApCheckDao;
 import com.uas.platform.b2b.dao.PurchaseApCheckDao;
@@ -27,7 +27,6 @@ import com.uas.platform.b2b.model.util.ApCheckeAllCountSqls;
 import com.uas.platform.b2b.model.util.ApCheckeDoneCountSqls;
 import com.uas.platform.b2b.model.util.ApCheckeDoneCountSqls;
 import com.uas.platform.b2b.model.util.ApCheckeTodoCountSqls;
 import com.uas.platform.b2b.model.util.ApCheckeTodoCountSqls;
 import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
 import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
-import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.ErpProdIODetailService;
 import com.uas.platform.b2b.service.ErpProdIODetailService;
 import com.uas.platform.b2b.service.OrderRedDotService;
 import com.uas.platform.b2b.service.OrderRedDotService;
 import com.uas.platform.b2b.service.PurchaseApCheckService;
 import com.uas.platform.b2b.service.PurchaseApCheckService;
@@ -41,10 +40,7 @@ import com.uas.platform.core.model.PageParams;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.model.Status;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.platform.core.persistence.criteria.PredicateUtils;
 import com.uas.ps.core.util.StringUtils;
 import com.uas.ps.core.util.StringUtils;
-import com.uas.search.b2b.model.MultiValue;
 import com.uas.search.b2b.model.SPage;
 import com.uas.search.b2b.model.SPage;
-import com.uas.search.b2b.model.Sort;
-import com.uas.search.b2b.util.SearchConstants;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.Page;
 import org.springframework.data.jpa.domain.Specification;
 import org.springframework.data.jpa.domain.Specification;
@@ -59,12 +55,14 @@ import javax.persistence.criteria.Root;
 import java.sql.SQLException;
 import java.sql.SQLException;
 import java.text.SimpleDateFormat;
 import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.ArrayList;
-import java.util.Comparator;
 import java.util.Date;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.List;
 import java.util.Set;
 import java.util.Set;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 
 /**
 /**
  * 对账单
  * 对账单
@@ -73,36 +71,17 @@ import java.util.Set;
  */
  */
 @Service
 @Service
 public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
 public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
-
-	@Autowired
-	PurchaseApCheckDao purchaseApCheckDao;
-
-	@Autowired
-	PurchaseApCheckTodoDao purchaseApCheckTodoDao;
-
-	@Autowired
-	PurchaseApCheckDoneDao purchaseApCheckDoneDao;
-
-	@Autowired
-	PurchaseApCheckItemDao purchaseApCheckItemDao;
-
-	@Autowired
-	private CommonDao commonDao;
-
-	@Autowired
-	private OrderRedDotService redDotService;
-
-	@Autowired
-    private EnterpriseDao enterpriseDao;
-
-	@Autowired
-    private SearchService searchService;
-
-	@Autowired
-    private UserService userService;
-
-	@Autowired
-    private VendorDao vendorDao;
+    private final PurchaseApCheckDao purchaseApCheckDao;
+    private final PurchaseApCheckTodoDao purchaseApCheckTodoDao;
+    private final PurchaseApCheckDoneDao purchaseApCheckDoneDao;
+    private final PurchaseApCheckItemDao purchaseApCheckItemDao;
+	private final CommonDao commonDao;
+	private final OrderRedDotService redDotService;
+    private final EnterpriseDao enterpriseDao;
+    private final UserService userService;
+    private final VendorDao vendorDao;
+    @Autowired
+    private ErpProdIODetailService erpProdIODetailService;
 
 
     /**
     /**
      * RMB
      * RMB
@@ -119,8 +98,25 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
      */
      */
     private final String USD = "USD";
     private final String USD = "USD";
 
 
+    private final BoundedExecutor executor;
+
     @Autowired
     @Autowired
-    private ErpProdIODetailService erpProdIODetailService;
+    public PurchaseApCheckServiceImpl(PurchaseApCheckDao purchaseApCheckDao, PurchaseApCheckTodoDao purchaseApCheckTodoDao,
+                                      PurchaseApCheckDoneDao purchaseApCheckDoneDao, PurchaseApCheckItemDao purchaseApCheckItemDao,
+                                      CommonDao commonDao, OrderRedDotService redDotService, EnterpriseDao enterpriseDao,
+                                      UserService userService, VendorDao vendorDao) {
+        this.purchaseApCheckDao = purchaseApCheckDao;
+        this.redDotService = redDotService;
+        this.purchaseApCheckTodoDao = purchaseApCheckTodoDao;
+        this.purchaseApCheckDoneDao = purchaseApCheckDoneDao;
+        this.purchaseApCheckItemDao = purchaseApCheckItemDao;
+        this.commonDao = commonDao;
+        this.enterpriseDao = enterpriseDao;
+        this.userService = userService;
+        this.vendorDao = vendorDao;
+        ExecutorService executorService = Executors.newCachedThreadPool();
+        executor = new BoundedExecutor(executorService, 1600);
+    }
 
 
 	@Override
 	@Override
 	public List<PurchaseApCheck> findNotUploadAPcheck() {
 	public List<PurchaseApCheck> findNotUploadAPcheck() {
@@ -537,15 +533,30 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
                         customer.setTotalCount(tradeCounts);
                         customer.setTotalCount(tradeCounts);
                     }
                     }
                     // 本月应收(总额)
                     // 本月应收(总额)
-                    List<ApCheckAmount> thisMonthTrades = getThisMonthTrade(enUU, customerUU, checkDate, fromDate, endDate);
+                    List<ApCheckAmount> thisMonthTrades = null;
+                    try {
+                        thisMonthTrades = getThisMonthTrade(enUU, customerUU, checkDate, fromDate, endDate);
+                    } catch (InterruptedException e) {
+                        e.printStackTrace();
+                    }
                     customer.setThisMonthCount(thisMonthTrades);
                     customer.setThisMonthCount(thisMonthTrades);
                     // 总额存在再进行其他查询
                     // 总额存在再进行其他查询
                     if (!CollectionUtils.isEmpty(thisMonthTrades)) {
                     if (!CollectionUtils.isEmpty(thisMonthTrades)) {
                         // 本月应收(未收)
                         // 本月应收(未收)
-                        List<ApCheckAmount> thisMonthTodoTrades = getThisMonthTodoTrade(enUU, customerUU, checkDate, fromDate, endDate);
+                        List<ApCheckAmount> thisMonthTodoTrades = null;
+                        try {
+                            thisMonthTodoTrades = getThisMonthTodoTrade(enUU, customerUU, checkDate, fromDate, endDate);
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                        }
                         customer.setThisMonthTodoCount(thisMonthTodoTrades);
                         customer.setThisMonthTodoCount(thisMonthTodoTrades);
                         // 本月应收(已收)
                         // 本月应收(已收)
-                        List<ApCheckAmount> thisMonthDoneTrades = getThisMonthDoneTrade(enUU, customerUU, checkDate, fromDate, endDate);
+                        List<ApCheckAmount> thisMonthDoneTrades = null;
+                        try {
+                            thisMonthDoneTrades = getThisMonthDoneTrade(enUU, customerUU, checkDate, fromDate, endDate);
+                        } catch (InterruptedException e) {
+                            e.printStackTrace();
+                        }
                         customer.setThisMonthDoneCount(thisMonthDoneTrades);
                         customer.setThisMonthDoneCount(thisMonthDoneTrades);
                     }
                     }
                 });
                 });
@@ -626,36 +637,40 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
      * @return 统计结果
      * @return 统计结果
      */
      */
     @Override
     @Override
-    public List<ApCheckAmount> getThisMonthTodoTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate) {
+    public List<ApCheckAmount> getThisMonthTodoTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate) throws InterruptedException {
         DateFilter filter = erpProdIODetailService.initFilter(fromDate, endDate, checkDate);
         DateFilter filter = erpProdIODetailService.initFilter(fromDate, endDate, checkDate);
         List<ApCheckAmount> totalTrades = new ArrayList<>();
         List<ApCheckAmount> totalTrades = new ArrayList<>();
-        ThreadUtils
-            // 货款调账
-            .task(() -> {
+        final CountDownLatch threadsSignal = new CountDownLatch(15);
+        // 货款调账
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeTodoCountSqls.THISMONTH_ADJUSTMENT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeTodoCountSqls.THISMONTH_ADJUSTMENT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 采购验收
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 采购验收
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeTodoCountSqls.THISMONTH_SALE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeTodoCountSqls.THISMONTH_SALE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 采购验退
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 采购验退
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeTodoCountSqls.THISMONTH_SALE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeTodoCountSqls.THISMONTH_SALE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 委外验收
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 委外验收
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeTodoCountSqls.THISMONTH_MAKE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeTodoCountSqls.THISMONTH_MAKE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 委外验退
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 委外验退
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeTodoCountSqls.THISMONTH_MAKE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeTodoCountSqls.THISMONTH_MAKE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            .run();
+                threadsSignal.countDown();
+            });
         return groupCountByCurrency(totalTrades);
         return groupCountByCurrency(totalTrades);
     }
     }
 
 
@@ -696,36 +711,40 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
      * @return 统计结果
      * @return 统计结果
      */
      */
     @Override
     @Override
-    public List<ApCheckAmount> getThisMonthDoneTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate) {
+    public List<ApCheckAmount> getThisMonthDoneTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate) throws InterruptedException {
         DateFilter filter = erpProdIODetailService.initFilter(fromDate, endDate, checkDate);
         DateFilter filter = erpProdIODetailService.initFilter(fromDate, endDate, checkDate);
         List<ApCheckAmount> totalTrades = new ArrayList<>();
         List<ApCheckAmount> totalTrades = new ArrayList<>();
-        ThreadUtils
-            // 货款调账
-            .task(() -> {
+        final CountDownLatch threadsSignal = new CountDownLatch(5);
+        // 货款调账
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeDoneCountSqls.THISMONTH_ADJUSTMENT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeDoneCountSqls.THISMONTH_ADJUSTMENT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 采购验收
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 采购验收
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeDoneCountSqls.THISMONTH_SALE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeDoneCountSqls.THISMONTH_SALE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 采购验退
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 采购验退
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeDoneCountSqls.THISMONTH_SALE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeDoneCountSqls.THISMONTH_SALE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 委外验收
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 委外验收
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeDoneCountSqls.THISMONTH_MAKE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeDoneCountSqls.THISMONTH_MAKE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 委外验退
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 委外验退
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeDoneCountSqls.THISMONTH_MAKE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeDoneCountSqls.THISMONTH_MAKE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            .run();
+                threadsSignal.countDown();
+            });
         return groupCountByCurrency(totalTrades);
         return groupCountByCurrency(totalTrades);
     }
     }
 
 
@@ -740,36 +759,40 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
      * @return 统计结果
      * @return 统计结果
      */
      */
     @Override
     @Override
-    public List<ApCheckAmount> getThisMonthTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate) {
+    public List<ApCheckAmount> getThisMonthTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate) throws InterruptedException {
         DateFilter filter = erpProdIODetailService.initFilter(fromDate, endDate, checkDate);
         DateFilter filter = erpProdIODetailService.initFilter(fromDate, endDate, checkDate);
         List<ApCheckAmount> totalTrades = new ArrayList<>();
         List<ApCheckAmount> totalTrades = new ArrayList<>();
-        ThreadUtils
+        final CountDownLatch threadsSignal = new CountDownLatch(5);
             // 货款调账
             // 货款调账
-            .task(() -> {
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.THISMONTH_ADJUSTMENT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.THISMONTH_ADJUSTMENT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
+                threadsSignal.countDown();
+            });
             // 采购验收
             // 采购验收
-            .task(() -> {
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.THISMONTH_SALE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.THISMONTH_SALE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
+                threadsSignal.countDown();
+            });
             // 采购验退
             // 采购验退
-            .task(() -> {
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.THISMONTH_SALE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.THISMONTH_SALE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
+                threadsSignal.countDown();
+            });
             // 委外验收
             // 委外验收
-            .task(() -> {
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.THISMONTH_MAKE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.THISMONTH_MAKE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
+                threadsSignal.countDown();
+            });
             // 委外验退
             // 委外验退
-            .task(() -> {
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.THISMONTH_MAKE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.THISMONTH_MAKE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, filter.getFromDate(), filter.getEndDate());
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            .run();
+                threadsSignal.countDown();
+            });
         return groupCountByCurrency(totalTrades);
         return groupCountByCurrency(totalTrades);
     }
     }
 
 
@@ -781,35 +804,39 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
      * @return 统计结果
      * @return 统计结果
      */
      */
     @Override
     @Override
-    public List<ApCheckAmount> getDueTrade(Long enUU, Long customerUU) {
+    public List<ApCheckAmount> getDueTrade(Long enUU, Long customerUU) throws InterruptedException {
         List<ApCheckAmount> totalTrades = new ArrayList<>();
         List<ApCheckAmount> totalTrades = new ArrayList<>();
-        ThreadUtils
-            // 货款调账
-            .task(() -> {
+        final CountDownLatch threadsSignal = new CountDownLatch(5);
+        // 货款调账
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.ADJUSTMENT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.ADJUSTMENT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 采购验收
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 采购验收
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.SALE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.SALE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 采购验退
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 采购验退
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.SALE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.SALE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 委外验收
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 委外验收
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.MAKE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.MAKE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            // 委外验退
-            .task(() -> {
+                threadsSignal.countDown();
+            });
+        // 委外验退
+        executor.submitTask(() -> {
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.MAKE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
                 List<ApCheckAmount> trades = commonDao.query(ApCheckeAllCountSqls.MAKE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
                 totalTrades.addAll(trades);
                 totalTrades.addAll(trades);
-            })
-            .run();
+                threadsSignal.countDown();
+            });
         return groupCountByCurrency(totalTrades);
         return groupCountByCurrency(totalTrades);
     }
     }
 }
 }

+ 134 - 42
src/main/java/com/uas/platform/b2b/service/impl/SnapshotServiceImpl.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2b.service.impl;
 package com.uas.platform.b2b.service.impl;
 
 
+import com.uas.platform.b2b.core.util.BoundedExecutor;
 import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.model.Snapshot;
 import com.uas.platform.b2b.model.Snapshot;
@@ -10,6 +11,9 @@ import org.springframework.stereotype.Service;
 
 
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 
 /**
 /**
  * 快照接口
  * 快照接口
@@ -21,6 +25,15 @@ public class SnapshotServiceImpl implements SnapshotService {
     @Autowired
     @Autowired
     private CommonDao commonDao;
     private CommonDao commonDao;
 
 
+    private final BoundedExecutor executor;
+
+    @Autowired
+    public SnapshotServiceImpl(CommonDao commonDao) {
+        this.commonDao = commonDao;
+        ExecutorService executorService = Executors.newCachedThreadPool();
+        executor = new BoundedExecutor(executorService, 1600);
+    }
+
     /**
     /**
      * 通过UU号查询快照信息
      * 通过UU号查询快照信息
      *
      *
@@ -28,129 +41,208 @@ public class SnapshotServiceImpl implements SnapshotService {
      * @return
      * @return
      */
      */
     @Override
     @Override
-    public List<Snapshot> findByEnUU(Long enUU) {
+    public List<Snapshot> findByEnUU(Long enUU) throws InterruptedException {
         List<Snapshot> snapshots = new ArrayList<>();
         List<Snapshot> snapshots = new ArrayList<>();
-        ThreadUtils.task(() -> {
+        final CountDownLatch threadsSignal = new CountDownLatch(40);
+        executor.submitTask(() -> {
             // 获取待处理客户询价单
             // 获取待处理客户询价单
             getInquiryTodo(snapshots, enUU);
             getInquiryTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部客户询价单
             // 获取全部客户询价单
             getInquiryAll(snapshots, enUU);
             getInquiryAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待处理采购询价单
             // 获取待处理采购询价单
             getPurchaseInquiryTodo(snapshots, enUU);
             getPurchaseInquiryTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待回复采购订单
             // 获取待回复采购订单
             getPurchaseOrderTodo(snapshots, enUU);
             getPurchaseOrderTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部采购订单
             // 获取全部采购订单
             getPurchaseOrderAll(snapshots, enUU);
             getPurchaseOrderAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部客户采购变更单
             // 获取全部客户采购变更单
             getSaleChangeAll(snapshots, enUU);
             getSaleChangeAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待处理客户采购变更单
             // 获取待处理客户采购变更单
             getSaleChangeTodo(snapshots, enUU);
             getSaleChangeTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取客户发货提醒(待发货)
             // 获取客户发货提醒(待发货)
             getSaleOrderNoticeTodo(snapshots, enUU);
             getSaleOrderNoticeTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取客户发货提醒(全部)
             // 获取客户发货提醒(全部)
             getSaleOrderNoticeAll(snapshots, enUU);
             getSaleOrderNoticeAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取客户采购验收单(全部)
             // 获取客户采购验收单(全部)
             getSaleOrderAcceptAll(snapshots, enUU);
             getSaleOrderAcceptAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取客户采购验退单(全部)
             // 获取客户采购验退单(全部)
             getSaleOrderReturnAll(snapshots, enUU);
             getSaleOrderReturnAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待送样打样申请
             // 获取待送样打样申请
             getSampleTodo(snapshots, enUU);
             getSampleTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部打样申请
             // 获取全部打样申请
             getSampleAll(snapshots, enUU);
             getSampleAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部送样认定单
             // 获取全部送样认定单
             getApprovalAll(snapshots, enUU);
             getApprovalAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部发货单
             // 获取全部发货单
             getSaleSendAll(snapshots, enUU);
             getSaleSendAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取已收料发货单
             // 获取已收料发货单
             getSaleSendDone(snapshots, enUU);
             getSaleSendDone(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待回复客户委外单
             // 获取待回复客户委外单
             getMakeOrderTodo(snapshots, enUU);
             getMakeOrderTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部客户委外单
             // 获取全部客户委外单
             getMakeOrderAll(snapshots, enUU);
             getMakeOrderAll(snapshots, enUU);
-        }).task(() -> {
+        });
+        executor.submitTask(() -> {
             // 获取全部客户委外变更单
             // 获取全部客户委外变更单
             getMakeChangeAll(snapshots, enUU);
             getMakeChangeAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部客户委外验收单
             // 获取全部客户委外验收单
             getMakeAcceptAll(snapshots, enUU);
             getMakeAcceptAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部客户委外验退单
             // 获取全部客户委外验退单
             getMakeReturnAll(snapshots, enUU);
             getMakeReturnAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部委外单
             // 获取全部委外单
             getMakeOutAll(snapshots, enUU);
             getMakeOutAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部不良品入库单
             // 获取全部不良品入库单
             getBadInAll(snapshots, enUU);
             getBadInAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部不良品出库单
             // 获取全部不良品出库单
             getBadOutAll(snapshots, enUU);
             getBadOutAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部应付发票
             // 获取全部应付发票
             getApbillAll(snapshots, enUU);
             getApbillAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部应付对账单
             // 获取全部应付对账单
             getArCheckAll(snapshots, enUU);
             getArCheckAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待处理应付对账单
             // 获取待处理应付对账单
             getArCheckTodo(snapshots, enUU);
             getArCheckTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待处理应收对账单
             // 获取待处理应收对账单
             getApcheckTodo(snapshots, enUU);
             getApcheckTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取购物车数量
             // 获取购物车数量
             getCart(snapshots, enUU);
             getCart(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待报价模具询价
             // 获取待报价模具询价
             getInquiryMouldTodo(snapshots, enUU);
             getInquiryMouldTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待回复主动报价
             // 获取待回复主动报价
             getSaleQuotationTodo(snapshots, enUU);
             getSaleQuotationTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待处理采购招标单
             // 获取待处理采购招标单
             getTenderTodo(snapshots, enUU);
             getTenderTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待处理招标单
             // 获取待处理招标单
             getSaleTenderTodo(snapshots, enUU);
             getSaleTenderTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待评标招标单
             // 获取待评标招标单
             getSaleTenderWaiting(snapshots, enUU);
             getSaleTenderWaiting(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取全部销售订单
             // 获取全部销售订单
             getSaleOrderAll(snapshots, enUU);
             getSaleOrderAll(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待回复销售订单
             // 获取待回复销售订单
             getSaleOrderTodo(snapshots, enUU);
             getSaleOrderTodo(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取已回复销售订单
             // 获取已回复销售订单
             getSaleOrderDone(snapshots, enUU);
             getSaleOrderDone(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取已结案的订单
             // 获取已结案的订单
             getSaleOrderEnd(snapshots, enUU);
             getSaleOrderEnd(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取已发货的订单
             // 获取已发货的订单
             getSaleOrderReceived(snapshots, enUU);
             getSaleOrderReceived(snapshots, enUU);
-        }).task(() -> {
+            threadsSignal.countDown();
+        });
+        executor.submitTask(() -> {
             // 获取待发货的订单
             // 获取待发货的订单
             getSaleOrderWaiting(snapshots, enUU);
             getSaleOrderWaiting(snapshots, enUU);
-        }).run();
+            threadsSignal.countDown();
+        });
         return snapshots;
         return snapshots;
     }
     }
 
 

+ 6 - 1
src/main/java/com/uas/platform/b2b/task/ApCheckTask.java

@@ -53,7 +53,12 @@ public class ApCheckTask {
         if (!CollectionUtil.isEmpty(vendorList)) {
         if (!CollectionUtil.isEmpty(vendorList)) {
             final int[] size = {0};
             final int[] size = {0};
             vendorList.forEach(vendorInfo -> {
             vendorList.forEach(vendorInfo -> {
-                List<ApCheckAmount> tradeCounts = apCheckService.getDueTrade(vendorInfo.getVenduu(), vendorInfo.getCustuu());
+                List<ApCheckAmount> tradeCounts = null;
+                try {
+                    tradeCounts = apCheckService.getDueTrade(vendorInfo.getVenduu(), vendorInfo.getCustuu());
+                } catch (InterruptedException e) {
+                    e.printStackTrace();
+                }
                 String tradeString;
                 String tradeString;
                 if (!CollectionUtil.isEmpty(tradeCounts)) {
                 if (!CollectionUtil.isEmpty(tradeCounts)) {
                     tradeString = JSON.toJSONString(tradeCounts);
                     tradeString = JSON.toJSONString(tradeCounts);