Просмотр исходного кода

Merge branch 'master' of ssh://10.10.101.21/source/platform-b2b into feature-201845-wangcz

hejq 7 лет назад
Родитель
Сommit
a5ea810565

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

@@ -1150,9 +1150,9 @@ public class SaleOrderController {
 		// 建索引时,将不处于已结案状态,但是货物全部交接完毕的单,end值设为了2
 		list.add((short) 2);
 		ModelMap map = new ModelMap();
-		map.put("pu_end", new MultiValue(list, true));
-		map.put("pu_status", (short) Status.UNAUDIT.value());
-		pageParams.setNotEqualFilters(map);
+        map.put("pu_end", new MultiValue(list, true));
+        map.put("pu_status", (short) Status.UNAUDIT.value());
+        pageParams.setNotEqualFilters(map);
         pageParams.getFilters().put(SearchConstants.SORT_KEY, sortList);
         pageParams.getFilters().put("pu_enuu", SystemSession.getUser().getEnterprise().getUu());
 		return searchService.searchPurchaseWaitingOrderIds(keyword, pageParams);

+ 65 - 22
src/main/java/com/uas/platform/b2b/controller/SnapshotController.java

@@ -1,5 +1,6 @@
 package com.uas.platform.b2b.controller;
 
+import com.uas.platform.b2b.core.util.BoundedExecutor;
 import com.uas.platform.b2b.core.util.ThreadUtils;
 import com.uas.platform.b2b.model.Role;
 import com.uas.platform.b2b.model.Snapshot;
@@ -20,6 +21,9 @@ import org.springframework.web.bind.annotation.RestController;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 /**
  * 平台消息、任务快照
@@ -31,11 +35,19 @@ import java.util.concurrent.ConcurrentHashMap;
 @RequestMapping("/snapshot")
 public class SnapshotController {
 
-	@Autowired
-	private SnapshotService snapshotService;
+	private final SnapshotService snapshotService;
 
-	@Autowired
-    private OrderRedDotService redDotService;
+    private final OrderRedDotService redDotService;
+
+    private final BoundedExecutor executor;
+
+    @Autowired
+    public SnapshotController(SnapshotService snapshotService, OrderRedDotService redDotService) {
+        this.snapshotService = snapshotService;
+        this.redDotService = redDotService;
+        ExecutorService executorService = Executors.newCachedThreadPool();
+        executor = new BoundedExecutor(executorService, 1600);
+    }
 
     /**
      * 日志
@@ -53,7 +65,7 @@ public class SnapshotController {
 	    Long start = System.currentTimeMillis();
 		ModelMap modelMap = new ModelMap();
 		final Long enUU = SystemSession.getUser().getEnterprise().getUu();
-		ThreadUtils.task(()-> {
+        ThreadUtils.task(()-> {
 			List<Snapshot> snapshots = snapshotService.findByEnUU(enUU);
 			if (!CollectionUtils.isEmpty(snapshots)) {
 				snapshots.stream()
@@ -73,7 +85,7 @@ public class SnapshotController {
 	 */
 	@RequestMapping(value = "/unread/all", method = RequestMethod.GET, headers = "Accept=application/json")
 	@ResponseStatus(value = HttpStatus.OK)
-	public ModelMap getUnreadCount() {
+	public ModelMap getUnreadCount() throws InterruptedException {
         Long start = System.currentTimeMillis();
 		/**
 		 * 采用ConcurrentHashMap编写 防止HashMap的put方法在多线程并发的情况下数据丢失
@@ -81,8 +93,9 @@ public class SnapshotController {
 		final ConcurrentHashMap<String, Integer> hashMap = new ConcurrentHashMap<>(15);
 		final User user = SystemSession.getUser();
 		ModelMap modelMap = new ModelMap();
+        final CountDownLatch threadsSignal = new CountDownLatch(15);
 		//并行处理
-		ThreadUtils.task(() -> {
+		executor.submitTask(() -> {
             //客户资料
             SystemSession.setUser(user);
             final int[] count = {0};
@@ -90,7 +103,9 @@ public class SnapshotController {
             list.forEach(objects -> count[0] = count[0] + Integer.valueOf(objects[0].toString()));
             hashMap.put("customer", count[0]);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //供应商绩效考核
             SystemSession.setUser(user);
             final int[] count = {0};
@@ -98,55 +113,73 @@ public class SnapshotController {
             list.forEach(objects -> count[0] = count[0] + Integer.valueOf(objects[0].toString()));
             hashMap.put("vendorPerformanceAssess", count[0]);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //客户采购询价
             SystemSession.setUser(user);
             Map<String, Integer> map = redDotService.getInquiryCount(Role.SELLER);
             hashMap.put("inquiry", map.containsKey("all") ? map.get("all") : 0);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //客户模具询价
             SystemSession.setUser(user);
             Map<String, Integer> count = redDotService.getInquiryMouldCount(Role.SELLER);
             hashMap.put("mould", count.containsKey("all") ? count.get("all") : 0);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //客户招标
             SystemSession.setUser(user);
             Map<String, Integer> count = redDotService.getTenderCount(Role.SELLER);
             hashMap.put("tender", count.containsKey("all") ? count.get("all") : 0);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //客户采购订单
             SystemSession.setUser(user);
             Map<String, Integer> count = redDotService.getSaleOrderCount(Role.SELLER);
             hashMap.put("order", count.containsKey("all") ? count.get("all") : 0);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //客户采购变更单
             SystemSession.setUser(user);
             Map<String, Integer> map = redDotService.getChangeCount(Role.SELLER);
             hashMap.put("change", map.containsKey("all") ? map.get("all") : 0);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //客户委外单
             SystemSession.setUser(user);
             Map<String, Integer> count = redDotService.getMakeOrderCount(Role.SELLER);
             hashMap.put("makeOrder", count.containsKey("all") ? count.get("all") : 0);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //客户发货提醒
             SystemSession.setUser(user);
             Map<String, Integer> count = redDotService.getNoticeCount(Role.SELLER);
             hashMap.put("notice", count.containsKey("all") ? count.get("all") : 0);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //客户打样申请
             SystemSession.setUser(user);
             Map<String, Integer> count = redDotService.getProofingCount(Role.SELLER);
             hashMap.put("sample", count.containsKey("all") ? count.get("all") : 0);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //供应商资料
             SystemSession.setUser(user);
             List<Object[]> list = redDotService.getVendorCount(Role.BUYER);
@@ -154,25 +187,33 @@ public class SnapshotController {
             list.forEach(objects -> count[0] = count[0] + Integer.valueOf(objects[0].toString()));
             hashMap.put("purcVendor", count[0]);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //采购招标
             SystemSession.setUser(user);
             Map<String, Integer> count = redDotService.getTenderCount(Role.BUYER);
             hashMap.put("tender", count.containsKey("all") ? count.get("all") : 0);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //采购询价
             SystemSession.setUser(user);
             Map<String, Integer> map = redDotService.getInquiryCount(Role.BUYER);
             hashMap.put("purcInquiry", map.containsKey("all") ? map.get("all") : 0);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //采购订单
             SystemSession.setUser(user);
             Map<String, Integer> count = redDotService.getSaleOrderCount(Role.BUYER);
             hashMap.put("purcOrder", count.containsKey("all") ? count.get("all") : 0);
             SystemSession.clear();
-		}).task(() -> {
+            threadsSignal.countDown();
+		});
+		executor.submitTask(() -> {
             //应收对账单
             SystemSession.setUser(user);
             List<Object[]> list = redDotService.getApCheckCount(Role.BUYER);
@@ -185,7 +226,9 @@ public class SnapshotController {
             });
             hashMap.put("apCheck", count[0]);
             SystemSession.clear();
-		}).run();
+            threadsSignal.countDown();
+		});
+        threadsSignal.await();
 		modelMap.addAllAttributes(hashMap);
         logger.info("getUnreadCount:cost -> " + (System.currentTimeMillis() - start));
 		return modelMap;

+ 44 - 0
src/main/java/com/uas/platform/b2b/core/util/BoundedExecutor.java

@@ -0,0 +1,44 @@
+package com.uas.platform.b2b.core.util;
+
+import java.util.concurrent.Executor;
+import java.util.concurrent.RejectedExecutionException;
+import java.util.concurrent.Semaphore;
+
+/**
+ * 线程池执行任务,控制任务提交速度
+ *
+ * history:
+ * Created by huxz 2017-1-20 16:51:07
+ */
+public class BoundedExecutor {
+
+	private final Executor executor;
+
+	private final Semaphore semaphore;
+
+
+	public BoundedExecutor(Executor executor, int bound) {
+		this.executor = executor;
+		this.semaphore = new Semaphore(bound);
+	}
+
+	public void submitTask(final Runnable command)
+			throws InterruptedException {
+		semaphore.acquire();
+		try {
+			executor.execute(new Runnable() {
+
+				@Override
+				public void run() {
+					try {
+						command.run();
+					} finally {
+						semaphore.release();
+					}
+				}
+			});
+		} catch (RejectedExecutionException ignored) {
+			semaphore.release();
+		}
+	}
+}

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

@@ -1,6 +1,6 @@
 package com.uas.platform.b2b.model;
 
-import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
+import com.uas.platform.b2b.publicapi.model.TradeCount;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -21,12 +21,12 @@ public class ErpProdIo {
     /**
      * 本月应收(前端传入指定月份)
      */
-    private List<ApCheckAmount> thisMonthCount;
+    private List<TradeCount> thisMonthCount;
 
     /**
      * 应收总额
      */
-    private List<ApCheckAmount> totalCount;
+    private List<TradeCount> totalCount;
 
     /**
      * 供应商名称
@@ -41,19 +41,19 @@ public class ErpProdIo {
         this.details = details;
     }
 
-    public List<ApCheckAmount> getThisMonthCount() {
+    public List<TradeCount> getThisMonthCount() {
         return thisMonthCount;
     }
 
-    public void setThisMonthCount(List<ApCheckAmount> thisMonthCount) {
+    public void setThisMonthCount(List<TradeCount> thisMonthCount) {
         this.thisMonthCount = thisMonthCount;
     }
 
-    public List<ApCheckAmount> getTotalCount() {
+    public List<TradeCount> getTotalCount() {
         return totalCount;
     }
 
-    public void setTotalCount(List<ApCheckAmount> totalCount) {
+    public void setTotalCount(List<TradeCount> totalCount) {
         this.totalCount = totalCount;
     }
 

+ 7 - 7
src/main/java/com/uas/platform/b2b/model/Vendor.java

@@ -2,7 +2,7 @@ package com.uas.platform.b2b.model;
 
 import com.alibaba.fastjson.annotation.JSONField;
 import com.uas.platform.b2b.erp.model.InquiryVendorInfo;
-import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
+import com.uas.platform.b2b.publicapi.model.TradeCount;
 import com.uas.platform.core.persistence.Logger;
 import com.uas.platform.core.persistence.OtherUserUU;
 import com.uas.platform.core.persistence.StatusColumn;
@@ -219,13 +219,13 @@ public class Vendor implements Serializable {
      * 本月应收(前端传入指定月份)
      */
 	@Transient
-    private List<ApCheckAmount> thisMonthCount;
+    private List<TradeCount> thisMonthCount;
 
     /**
      * 应收总额
      */
 	@Transient
-    private List<ApCheckAmount> totalCount;
+    private List<TradeCount> totalCount;
 
 	public Long getId() {
 		return id;
@@ -440,19 +440,19 @@ public class Vendor implements Serializable {
         this.saleContacts = saleContacts;
     }
 
-    public List<ApCheckAmount> getThisMonthCount() {
+    public List<TradeCount> getThisMonthCount() {
         return thisMonthCount;
     }
 
-    public void setThisMonthCount(List<ApCheckAmount> thisMonthCount) {
+    public void setThisMonthCount(List<TradeCount> thisMonthCount) {
         this.thisMonthCount = thisMonthCount;
     }
 
-    public List<ApCheckAmount> getTotalCount() {
+    public List<TradeCount> getTotalCount() {
         return totalCount;
     }
 
-    public void setTotalCount(List<ApCheckAmount> totalCount) {
+    public void setTotalCount(List<TradeCount> totalCount) {
         this.totalCount = totalCount;
     }
 

+ 10 - 10
src/main/java/com/uas/platform/b2b/model/util/UnCheckedCountSqls.java

@@ -12,21 +12,21 @@ public class UnCheckedCountSqls {
     /**
      * 货款调账未对账金额查询语句
      */
-    public static final String ADJUSTMENT_COUNT_SQL = "select coalesce(sum((aa_qty - coalesce(aa_ycheckqty, 0)) * aa_orderprice), 0) as count, aa_currency as currency \n" +
+    public static final String ADJUSTMENT_COUNT_SQL = "select coalesce(sum((aa_qty - coalesce(aa_ycheckqty, 0)) * aa_orderprice), 0) as amount, aa_currency as currency \n" +
         "from purc$apbilladjustment where coalesce(aa_thischeckqty, 0) <> 0 and aa_enuu = ? and aa_custuu = ? " +
         "group by aa_currency";
 
     /**
      * 当月货款调账未对账金额查询语句
      */
-    public static final String THISMONTH_ADJUSTMENT_COUNT_SQL = "select coalesce(sum((aa_qty - coalesce(aa_ycheckqty, 0)) * aa_orderprice), 0) as count, aa_currency as currency \n" +
+    public static final String THISMONTH_ADJUSTMENT_COUNT_SQL = "select coalesce(sum((aa_qty - coalesce(aa_ycheckqty, 0)) * aa_orderprice), 0) as amount, aa_currency as currency \n" +
         "from purc$apbilladjustment where coalesce(aa_thischeckqty, 0) <> 0 and aa_enuu = ? and aa_custuu = ? and aa_date between ? and ?" +
         "group by aa_currency";
 
     /**
      * 客户采购验收单未对账金额查询语句
      */
-    public static final String SALE_ACCEPT_COUNT_SQL = "select coalesce(sum((pai_qty - coalesce(pai_ycheckqty, 0)) * pai_orderprice), 0) as count, pa_currency as currency \n" +
+    public static final String SALE_ACCEPT_COUNT_SQL = "select coalesce(sum((pai_qty - coalesce(pai_ycheckqty, 0)) * pai_orderprice), 0) as amount, pa_currency as currency \n" +
         "from purc$accept left join `purc$acceptitem` on pai_paid = pa_id " +
         "where pa_venduu = ? and pa_enuu = ? and pai_qty > coalesce(pai_ycheckqty, 0) and pai_orderprice <> 0 " +
         "group by pa_currency";
@@ -34,7 +34,7 @@ public class UnCheckedCountSqls {
     /**
      * 客户采购验收单未对账金额查询语句
      */
-    public static final String THISMONTH_SALE_ACCEPT_COUNT_SQL = "select coalesce(sum((pai_qty - coalesce(pai_ycheckqty, 0)) * pai_orderprice), 0) as count, pa_currency as currency \n" +
+    public static final String THISMONTH_SALE_ACCEPT_COUNT_SQL = "select coalesce(sum((pai_qty - coalesce(pai_ycheckqty, 0)) * pai_orderprice), 0) as amount, pa_currency as currency \n" +
         "from purc$accept left join `purc$acceptitem` on pai_paid = pa_id " +
         "where pa_venduu = ? and pa_enuu = ? and pai_qty > coalesce(pai_ycheckqty, 0) and pai_orderprice <> 0 and pa_date between ? and ?" +
         "group by pa_currency";
@@ -42,21 +42,21 @@ public class UnCheckedCountSqls {
     /**
      * 客户采购验退单未对账金额查询语句
      */
-    public static final String SALE_RETURN_COUNT_SQL = "select coalesce(sum(((-(1) * pri_qty ) - coalesce(pri_ycheckqty, 0)) *  pri_orderprice), 0) as count, pr_currency as currency \n" +
+    public static final String SALE_RETURN_COUNT_SQL = "select coalesce(sum(((-(1) * pri_qty ) - coalesce(pri_ycheckqty, 0)) *  pri_orderprice), 0) as amount, pr_currency as currency \n" +
         "from `purc$return` left join `purc$returnitem` on pr_id = pri_prid " +
         "where pri_qty > abs(coalesce(pri_ycheckqty, 0)) and pr_venduu = ? and pr_enuu = ? group by pr_currency";
 
     /**
      * 客户采购验退单未对账金额查询语句
      */
-    public static final String THISMONTH_SALE_RETURN_COUNT_SQL = "select sum(((-(1) * pri_qty ) - coalesce(pri_ycheckqty, 0)) *  pri_orderprice) as count, pr_currency as currency \n" +
+    public static final String THISMONTH_SALE_RETURN_COUNT_SQL = "select sum(((-(1) * pri_qty ) - coalesce(pri_ycheckqty, 0)) *  pri_orderprice) as amount, pr_currency as currency \n" +
         "from `purc$return` left join `purc$returnitem` on pr_id = pri_prid " +
         "where pri_qty > abs(coalesce(pri_ycheckqty, 0)) and pr_venduu = ? and pr_enuu = ? and pr_date between ? and ? group by pr_currency";
 
     /**
      * 客户委外验收单未对账金额查询语句
      */
-    public static final String MAKE_ACCEPT_COUNT_SQL = "select coalesce(sum((mai_qty - coalesce(mai_ycheckqty, 0)) * mai_orderpice), 0) as count, ma_currency as currency " +
+    public static final String MAKE_ACCEPT_COUNT_SQL = "select coalesce(sum((mai_qty - coalesce(mai_ycheckqty, 0)) * mai_orderpice), 0) as amount, ma_currency as currency " +
         " from make$accept " +
         "join make$acceptitem on ma_id = mai_paid " +
         "where mai_qty > coalesce(mai_ycheckqty, 0) and ma_venduu = ? and ma_enuu = ? and mai_orderpice > 0 group by ma_currency";
@@ -64,7 +64,7 @@ public class UnCheckedCountSqls {
     /**
      * 客户委外验收单未对账金额查询语句
      */
-    public static final String THISMONTH_MAKE_ACCEPT_COUNT_SQL = "select coalesce(sum((mai_qty - coalesce(mai_ycheckqty, 0)) * mai_orderpice), 0) as count, ma_currency as currency " +
+    public static final String THISMONTH_MAKE_ACCEPT_COUNT_SQL = "select coalesce(sum((mai_qty - coalesce(mai_ycheckqty, 0)) * mai_orderpice), 0) as amount,ma_currency as currency " +
         " from make$accept " +
         "join make$acceptitem on ma_id = mai_paid " +
         "where mai_qty > coalesce(mai_ycheckqty, 0) and ma_venduu = ? and ma_enuu = ? and mai_orderpice > 0 and ma_date between ? and ? group by ma_currency";
@@ -72,7 +72,7 @@ public class UnCheckedCountSqls {
     /**
      * 客户委外验退单未对账金额查询语句
      */
-    public static final String MAKE_RETURN_COUNT_SQL = "select coalesce(sum(((-(1) *  mri_qty ) - coalesce(mri_ycheckqty, 0)) * mri_orderpice), 0) as count,mr_currency as currency " +
+    public static final String MAKE_RETURN_COUNT_SQL = "select coalesce(sum(((-(1) *  mri_qty ) - coalesce(mri_ycheckqty, 0)) * mri_orderpice), 0) as amount,mr_currency as currency " +
         " from make$return " +
         "join make$returnitem on mr_id =  mri_paid " +
         "where mri_qty > abs(coalesce(mri_ycheckqty, 0)) and mr_venduu = ? and mr_enuu = ? and mri_orderpice > 0 group by mr_currency";
@@ -80,7 +80,7 @@ public class UnCheckedCountSqls {
     /**
      * 客户委外验退单未对账金额查询语句
      */
-    public static final String THISMONTH_MAKE_RETURN_COUNT_SQL = "select coalesce(sum(((-(1) *  mri_qty ) - coalesce(mri_ycheckqty, 0)) * mri_orderpice), 0) as count, mr_currency as currency " +
+    public static final String THISMONTH_MAKE_RETURN_COUNT_SQL = "select coalesce(sum(((-(1) *  mri_qty ) - coalesce(mri_ycheckqty, 0)) * mri_orderpice), 0) as amount, mr_currency as currency " +
         " from make$return " +
         "join make$returnitem on mr_id =  mri_paid " +
         "where mri_qty > abs(coalesce(mri_ycheckqty, 0)) and mr_venduu = ? and mr_enuu = ? and mri_orderpice > 0 and mr_date between ? and ? " +

+ 10 - 0
src/main/java/com/uas/platform/b2b/publicapi/model/TradeCount.java

@@ -111,4 +111,14 @@ public class TradeCount implements Serializable {
 
     }
 
+    /**
+     * 通过币别,总额获取交易额
+     *
+     * @param currency 币别
+     * @param amount 总额
+     */
+    public TradeCount(String currency, Double amount) {
+        this.currency = currency;
+        this.amount = new BigDecimal(amount);
+    }
 }

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

@@ -6,7 +6,6 @@ import com.uas.platform.b2b.model.PurchaseApCheckItem;
 import com.uas.platform.b2b.model.PurchaseApCheckTodo;
 import com.uas.platform.b2b.model.SearchFilter;
 import com.uas.platform.b2b.model.Vendor;
-import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
 import com.uas.platform.b2b.publicapi.model.TradeCount;
 import com.uas.platform.core.model.PageInfo;
 import com.uas.platform.core.model.PageParams;
@@ -152,7 +151,7 @@ public interface PurchaseApCheckService {
      * @param customerUU 客户企业UU
      * @return 统计结果
      */
-    List<ApCheckAmount> getDueTrade(Long enUU, Long customerUU);
+    List<TradeCount> getDueTrade(Long enUU, Long customerUU);
 
     /**
      * 获取指定月份应收金额
@@ -164,5 +163,5 @@ public interface PurchaseApCheckService {
      * @param endDate 截止时间
      * @return 统计结果
      */
-    List<ApCheckAmount> getThisMonthTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate);
+    List<TradeCount> getThisMonthTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate);
 }

+ 4 - 3
src/main/java/com/uas/platform/b2b/service/impl/ErpProdIODetailServiceImpl.java

@@ -10,8 +10,9 @@ import com.uas.platform.b2b.model.ApcheckKeyWord;
 import com.uas.platform.b2b.model.DateFilter;
 import com.uas.platform.b2b.model.ErpProdIODetail;
 import com.uas.platform.b2b.model.ErpProdIo;
+import com.uas.platform.b2b.model.SearchFilter;
 import com.uas.platform.b2b.model.Vendor;
-import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
+import com.uas.platform.b2b.publicapi.model.TradeCount;
 import com.uas.platform.b2b.service.ErpProdIODetailService;
 import com.uas.platform.b2b.service.PurchaseApCheckService;
 import com.uas.platform.b2b.support.CollectionUtil;
@@ -85,7 +86,7 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
         erpProdIo.setDetails(details);
         // 应收总额
        if (null != keyword.getCustomerUU()) {
-           List<ApCheckAmount> totalTrades = apCheckService.getDueTrade(enUU, keyword.getCustomerUU());
+           List<TradeCount> totalTrades = apCheckService.getDueTrade(enUU, keyword.getCustomerUU());
            List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(keyword.getCustomerUU(), enUU);
            if (!CollectionUtil.isEmpty(totalTrades)) {
                erpProdIo.setTotalCount(totalTrades);
@@ -97,7 +98,7 @@ public class ErpProdIODetailServiceImpl implements ErpProdIODetailService {
                }
            }
            // 本月应收
-           List<ApCheckAmount> thisMonthTrades = apCheckService.getThisMonthTrade(enUU, keyword.getCustomerUU(), checkDate, fromDate, endDate);
+           List<TradeCount> thisMonthTrades = apCheckService.getThisMonthTrade(enUU, keyword.getCustomerUU(), checkDate, fromDate, endDate);
            erpProdIo.setThisMonthCount(thisMonthTrades);
        }
 		return erpProdIo;

+ 4 - 5
src/main/java/com/uas/platform/b2b/service/impl/PurchaseApBillServiceImpl.java

@@ -19,7 +19,6 @@ import com.uas.platform.b2b.model.PurchaseApBillItem;
 import com.uas.platform.b2b.model.SearchFilter;
 import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.ps.ProductUtils;
-import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
 import com.uas.platform.b2b.publicapi.model.TradeCount;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.ErpProdIODetailService;
@@ -234,11 +233,11 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
                 .forEach(customer -> {
                     Long vendorUU = customer.getVendEnUU();
                     if (!com.uas.ps.core.util.StringUtils.isEmpty(customer.getTotalCountString())) {
-                        List<ApCheckAmount> tradeCounts = JSON.parseArray(customer.getTotalCountString(), ApCheckAmount.class);
+                        List<TradeCount> tradeCounts = JSON.parseArray(customer.getTotalCountString(), TradeCount.class);
                         customer.setTotalCount(tradeCounts);
                     }
                     // 本月应收
-                    List<ApCheckAmount> thisMonthTrades = purchaseApCheckService.getThisMonthTrade(vendorUU, enUU, checkDate, fromDate, endDate);
+                    List<TradeCount> thisMonthTrades = purchaseApCheckService.getThisMonthTrade(vendorUU, enUU, checkDate, fromDate, endDate);
                     customer.setThisMonthCount(thisMonthTrades);
                 });
         }
@@ -313,7 +312,7 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
         erpProdIo.setDetails(details);
         // 应收总额
         if (null != searchKeyWord.getVendorUU()) {
-            List<ApCheckAmount> totalTrades = purchaseApCheckService.getDueTrade(searchKeyWord.getVendorUU(), enUU);
+            List<TradeCount> totalTrades = purchaseApCheckService.getDueTrade(searchKeyWord.getVendorUU(), enUU);
             List<Vendor> vendors = vendorDao.findByMyEnUUAndVendUU(enUU, searchKeyWord.getVendorUU());
             erpProdIo.setVendorName(vendors.get(0).getVendorEnterprise().getEnName());
             if (!CollectionUtil.isEmpty(totalTrades)) {
@@ -326,7 +325,7 @@ public class PurchaseApBillServiceImpl implements PurchaseApBillService {
                 }
             }
             // 本月应收
-            List<ApCheckAmount> thisMonthTrades = purchaseApCheckService.getThisMonthTrade(searchKeyWord.getVendorUU(), enUU, checkDate, fromDate, endDate);
+            List<TradeCount> thisMonthTrades = purchaseApCheckService.getThisMonthTrade(searchKeyWord.getVendorUU(), enUU, checkDate, fromDate, endDate);
             erpProdIo.setThisMonthCount(thisMonthTrades);
         }
         return erpProdIo;

+ 36 - 37
src/main/java/com/uas/platform/b2b/service/impl/PurchaseApCheckServiceImpl.java

@@ -25,7 +25,6 @@ import com.uas.platform.b2b.model.SearchFilter;
 import com.uas.platform.b2b.model.SourceForApcheck;
 import com.uas.platform.b2b.model.Vendor;
 import com.uas.platform.b2b.model.util.UnCheckedCountSqls;
-import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
 import com.uas.platform.b2b.publicapi.model.TradeCount;
 import com.uas.platform.b2b.search.SearchService;
 import com.uas.platform.b2b.service.OrderRedDotService;
@@ -529,11 +528,11 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
                 .forEach(customer -> {
                     Long customerUU = customer.getMyEnUU();
                     if (!StringUtils.isEmpty(customer.getTotalCountString())) {
-                        List<ApCheckAmount> tradeCounts = JSON.parseArray(customer.getTotalCountString(), ApCheckAmount.class);
+                        List<TradeCount> tradeCounts = JSON.parseArray(customer.getTotalCountString(), TradeCount.class);
                         customer.setTotalCount(tradeCounts);
                     }
                     // 本月应收
-                    List<ApCheckAmount> thisMonthTrades = getThisMonthTrade(enUU, customerUU, checkDate, fromDate, endDate);
+                    List<TradeCount> thisMonthTrades = getThisMonthTrade(enUU, customerUU, checkDate, fromDate, endDate);
                     customer.setThisMonthCount(thisMonthTrades);
                 });
         }
@@ -589,7 +588,7 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
      * @return 统计结果
      */
     @Override
-    public List<ApCheckAmount> getThisMonthTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate) {
+    public List<TradeCount> getThisMonthTrade(Long enUU, Long customerUU, String checkDate, Long fromDate, Long endDate) {
         String sqlFromDate;
         String sqlEndDate;
         /*
@@ -617,49 +616,49 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
         } else {
             throw new IllegalOperatorException("请选择对账时间");
         }
-        List<ApCheckAmount> totalTrades = new ArrayList<>();
+        List<TradeCount> totalTrades = new ArrayList<>();
         ThreadUtils
             // 货款调账
             .task(() -> {
-                List<ApCheckAmount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_ADJUSTMENT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
+                List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_ADJUSTMENT_COUNT_SQL, TradeCount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
                 totalTrades.addAll(trades);
             })
             // 采购验收
             .task(() -> {
-                List<ApCheckAmount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_SALE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
+                List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_SALE_ACCEPT_COUNT_SQL, TradeCount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
                 totalTrades.addAll(trades);
             })
             // 采购验退
             .task(() -> {
-                List<ApCheckAmount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_SALE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
+                List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_SALE_RETURN_COUNT_SQL, TradeCount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
                 totalTrades.addAll(trades);
             })
             // 委外验收
             .task(() -> {
-                List<ApCheckAmount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_MAKE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
+                List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_MAKE_ACCEPT_COUNT_SQL, TradeCount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
                 totalTrades.addAll(trades);
             })
             // 委外验退
             .task(() -> {
-                List<ApCheckAmount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_MAKE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
+                List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.THISMONTH_MAKE_RETURN_COUNT_SQL, TradeCount.class, enUU, customerUU, sqlFromDate, sqlEndDate);
                 totalTrades.addAll(trades);
             })
             .run();
-        Double rmbCount = totalTrades.stream().filter(tradeCount -> RMB.equals(tradeCount.getCurrency()))
-            .mapToDouble(ApCheckAmount::getCount).sum();
-        Double usdCount = totalTrades.stream().filter(tradeCount -> USD.equals(tradeCount.getCurrency()))
-            .mapToDouble(ApCheckAmount::getCount).sum();
-        Double hkdCount = totalTrades.stream().filter(tradeCount -> HKD.equals(tradeCount.getCurrency()))
-            .mapToDouble(ApCheckAmount::getCount).sum();
-        List<ApCheckAmount> resultCounts = new ArrayList<>();
+        Double rmbCount = totalTrades.stream().filter(tradeCount -> RMB.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
+            .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
+        Double usdCount = totalTrades.stream().filter(tradeCount -> USD.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
+            .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
+        Double hkdCount = totalTrades.stream().filter(tradeCount -> HKD.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
+            .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
+        List<TradeCount> resultCounts = new ArrayList<>();
         if (rmbCount > 0) {
-            resultCounts.add(new ApCheckAmount(RMB, DecimalUtils.decimalPoint(rmbCount, 2)));
+            resultCounts.add(new TradeCount(RMB, DecimalUtils.decimalPoint(rmbCount, 2)));
         }
         if (usdCount > 0) {
-            resultCounts.add(new ApCheckAmount(USD, DecimalUtils.decimalPoint(usdCount, 2)));
+            resultCounts.add(new TradeCount(USD, DecimalUtils.decimalPoint(usdCount, 2)));
         }
         if (hkdCount > 0) {
-            resultCounts.add(new ApCheckAmount(HKD, DecimalUtils.decimalPoint(hkdCount, 2)));
+            resultCounts.add(new TradeCount(HKD, DecimalUtils.decimalPoint(hkdCount, 2)));
         }
         return resultCounts;
     }
@@ -672,50 +671,50 @@ public class PurchaseApCheckServiceImpl implements PurchaseApCheckService {
      * @return 统计结果
      */
     @Override
-    public List<ApCheckAmount> getDueTrade(Long enUU, Long customerUU) {
-        List<ApCheckAmount> totalTrades = new ArrayList<>();
+    public List<TradeCount> getDueTrade(Long enUU, Long customerUU) {
+        List<TradeCount> totalTrades = new ArrayList<>();
         ThreadUtils
             // 货款调账
             .task(() -> {
-                List<ApCheckAmount> trades = commonDao.query(UnCheckedCountSqls.ADJUSTMENT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
+                List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.ADJUSTMENT_COUNT_SQL, TradeCount.class, enUU, customerUU);
                 totalTrades.addAll(trades);
             })
             // 采购验收
             .task(() -> {
-                List<ApCheckAmount> trades = commonDao.query(UnCheckedCountSqls.SALE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
+                List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.SALE_ACCEPT_COUNT_SQL, TradeCount.class, enUU, customerUU);
                 totalTrades.addAll(trades);
             })
             // 采购验退
             .task(() -> {
-                List<ApCheckAmount> trades = commonDao.query(UnCheckedCountSqls.SALE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
+                List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.SALE_RETURN_COUNT_SQL, TradeCount.class, enUU, customerUU);
                 totalTrades.addAll(trades);
             })
             // 委外验收
             .task(() -> {
-                List<ApCheckAmount> trades = commonDao.query(UnCheckedCountSqls.MAKE_ACCEPT_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
+                List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.MAKE_ACCEPT_COUNT_SQL, TradeCount.class, enUU, customerUU);
                 totalTrades.addAll(trades);
             })
             // 委外验退
             .task(() -> {
-                List<ApCheckAmount> trades = commonDao.query(UnCheckedCountSqls.MAKE_RETURN_COUNT_SQL, ApCheckAmount.class, enUU, customerUU);
+                List<TradeCount> trades = commonDao.query(UnCheckedCountSqls.MAKE_RETURN_COUNT_SQL, TradeCount.class, enUU, customerUU);
                 totalTrades.addAll(trades);
             })
             .run();
-        Double rmbCount = totalTrades.stream().filter(tradeCount -> RMB.equals(tradeCount.getCurrency()))
-            .mapToDouble(ApCheckAmount::getCount).sum();
-        Double usdCount = totalTrades.stream().filter(tradeCount -> USD.equals(tradeCount.getCurrency()))
-            .mapToDouble(ApCheckAmount::getCount).sum();
-        Double hkdCount = totalTrades.stream().filter(tradeCount -> HKD.equals(tradeCount.getCurrency()))
-            .mapToDouble(ApCheckAmount::getCount).sum();
-        List<ApCheckAmount> resultCounts = new ArrayList<>();
+        Double rmbCount = totalTrades.stream().filter(tradeCount -> RMB.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
+            .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
+        Double usdCount = totalTrades.stream().filter(tradeCount -> USD.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
+            .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
+        Double hkdCount = totalTrades.stream().filter(tradeCount -> HKD.equals(tradeCount.getCurrency()) && null != tradeCount.getAmount())
+            .mapToDouble(trade -> trade.getAmount().doubleValue()).sum();
+        List<TradeCount> resultCounts = new ArrayList<>();
         if (rmbCount > 0) {
-            resultCounts.add(new ApCheckAmount(RMB, DecimalUtils.decimalPoint(rmbCount, 2)));
+            resultCounts.add(new TradeCount(RMB, DecimalUtils.decimalPoint(rmbCount, 2)));
         }
         if (usdCount > 0) {
-            resultCounts.add(new ApCheckAmount(USD, DecimalUtils.decimalPoint(usdCount, 2)));
+            resultCounts.add(new TradeCount(USD, DecimalUtils.decimalPoint(usdCount, 2)));
         }
         if (hkdCount > 0) {
-            resultCounts.add(new ApCheckAmount(HKD, DecimalUtils.decimalPoint(hkdCount, 2)));
+            resultCounts.add(new TradeCount(HKD, DecimalUtils.decimalPoint(hkdCount, 2)));
         }
         return resultCounts;
     }

+ 5 - 20
src/main/java/com/uas/platform/b2b/support/DecimalUtils.java

@@ -3,8 +3,8 @@ package com.uas.platform.b2b.support;
 import com.uas.platform.core.exception.IllegalOperatorException;
 
 import java.math.BigDecimal;
+import java.math.RoundingMode;
 import java.text.DecimalFormat;
-import java.text.NumberFormat;
 
 /**
  * 平台数据小数点处理方式
@@ -25,10 +25,8 @@ public class DecimalUtils {
      */
     public static double decimalPoint(Double oldValue, Integer digit) {
         if (null != oldValue) {
-            String str = "#.###############";
-            String digitStr = str.substring(0, (2 + digit));
-            DecimalFormat decimalFormat = new java.text.DecimalFormat(digitStr);
-            return Double.valueOf(decimalFormat.format(oldValue));
+            BigDecimal decimal = new BigDecimal(oldValue);
+            return decimal.setScale(digit, BigDecimal.ROUND_HALF_UP).doubleValue();
         }
         return 0.00;
     }
@@ -43,20 +41,7 @@ public class DecimalUtils {
         if (fraction == null || fraction < 0) {
             throw new IllegalOperatorException("您传入的需要保留的有效位数是" + fraction + ",请核对信息");
         }
-        NumberFormat numberFormat = NumberFormat.getInstance();
-        numberFormat.setMaximumFractionDigits(fraction);
-        numberFormat.setGroupingUsed(false);
-        BigDecimal bigDecimal = new BigDecimal(numberFormat.format(value));
-        return bigDecimal.setScale(fraction, BigDecimal.ROUND_HALF_UP).doubleValue();
-    }
-
-    private static Double formatDouble(double d, Integer fraction) {
-        NumberFormat nf = NumberFormat.getInstance();
-        //设置保留多少位小数
-        nf.setMaximumFractionDigits(fraction);
-        // 取消科学计数法
-        nf.setGroupingUsed(false);
-        //返回结果
-        return Double.valueOf(nf.format(d));
+        BigDecimal bigDecimal = new BigDecimal(String.valueOf(value));
+        return bigDecimal.setScale(fraction, RoundingMode.HALF_UP).doubleValue();
     }
 }

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

@@ -5,7 +5,6 @@ import com.uas.platform.b2b.dao.CommonDao;
 import com.uas.platform.b2b.dao.CommunalLogDao;
 import com.uas.platform.b2b.erp.model.VendorInfo;
 import com.uas.platform.b2b.model.CommunalLog;
-import com.uas.platform.b2b.publicapi.model.ApCheckAmount;
 import com.uas.platform.b2b.publicapi.model.TradeCount;
 import com.uas.platform.b2b.service.PurchaseApCheckService;
 import com.uas.platform.b2b.support.CollectionUtil;
@@ -53,7 +52,7 @@ public class ApCheckTask {
         if (!CollectionUtil.isEmpty(vendorList)) {
             final int[] size = {0};
             vendorList.forEach(vendorInfo -> {
-                List<ApCheckAmount> tradeCounts = apCheckService.getDueTrade(vendorInfo.getVenduu(), vendorInfo.getCustuu());
+                List<TradeCount> tradeCounts = apCheckService.getDueTrade(vendorInfo.getVenduu(), vendorInfo.getCustuu());
                 String tradeString;
                 if (!CollectionUtil.isEmpty(tradeCounts)) {
                     tradeString = JSON.toJSONString(tradeCounts);

+ 159 - 0
src/test/java/com/uas/platform/b2b/purc/ThreadUtilsTest.java

@@ -0,0 +1,159 @@
+package com.uas.platform.b2b.purc;
+
+import com.uas.platform.b2b.core.util.BoundedExecutor;
+import com.uas.platform.b2b.core.util.ThreadUtils;
+import com.uas.platform.b2b.erp.model.SaleOut;
+import org.junit.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+/**
+ * @author yuj
+ * @date 2018/12/17 16:17
+ */
+public class ThreadUtilsTest {
+
+
+    @Test
+    public void testThreadUtil() throws InterruptedException {
+
+        ExecutorService executorService = Executors.newFixedThreadPool(1000);
+        BoundedExecutor executor = new BoundedExecutor(executorService, 1600);
+        for(int i = 0; i < 10000; i++) {
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+            executor.submitTask(() ->  {
+                int total = 0;
+                for (int j = 0; j < 100; j++) {
+                    total += j;
+                }
+                System.out.println(Thread.currentThread().getName() + " - " + Thread.currentThread().getId() + "总计" +  total);
+            });
+        }
+
+        int i = Thread.activeCount();
+        while (i > 10) {
+            System.out.println("还有多少线程正在运行 = " + i);
+        }
+    }
+
+}