From dd8db5ff7e035e772f43c5ee4366571bbd7abc41 Mon Sep 17 00:00:00 2001 From: erdanergou Date: Mon, 8 May 2023 15:59:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E5=88=9B=E5=BB=BA=E7=BA=BF=E7=A8=8B?= =?UTF-8?q?=E5=90=8E=E5=85=B3=E9=97=AD=E7=BA=BF=E7=A8=8B=E6=B1=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../config/PublicConfig.java | 27 +++++++++++ .../controller/DepositoryController.java | 47 +++++++++++-------- .../service/impl/CompanyServiceImpl.java | 8 ++++ .../impl/DepositoryRecordServiceImpl.java | 4 ++ .../service/impl/DepositoryServiceImpl.java | 8 +++- .../service/impl/ExcelServiceImpl.java | 9 +++- .../service/impl/GroupServiceImpl.java | 4 ++ .../service/impl/MaterialServiceImpl.java | 10 ++++ .../service/impl/MaterialTypeServiceImpl.java | 4 +- 9 files changed, 97 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java b/src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java index 1b81c2f1..6ae66abc 100644 --- a/src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java +++ b/src/main/java/com/dreamchaser/depository_manage/config/PublicConfig.java @@ -6,10 +6,14 @@ import com.alibaba.fastjson.JSONObject; import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.utils.HttpUtils; import lombok.Data; +import lombok.extern.log4j.Log4j; +import lombok.extern.log4j.Log4j2; import org.apache.http.protocol.HTTP; import java.io.IOException; import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.TimeUnit; /** * 用于对接HR系统 @@ -147,4 +151,27 @@ public class PublicConfig { } return userByPort; } + + + /** + * 用于关闭线程池 + * @param exs 待关闭的线程池 + */ + public static void closeThreadPool(ExecutorService exs){ + exs.shutdown(); // 禁止提交新任务 + // 设定最大重试次数 + try { + // 等待 60 s + if (!exs.awaitTermination(60, TimeUnit.SECONDS)) { + // 调用 shutdownNow 取消正在执行的任务 + exs.shutdownNow(); + // 再次等待 60 s,如果还未结束,可以再次尝试,或者直接放弃 + if (!exs.awaitTermination(60, TimeUnit.SECONDS)) + System.err.println("线程池任务未正常执行结束"); + } + } catch (InterruptedException ie) { + // 重新调用 shutdownNow + exs.shutdownNow(); + } + } } diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java index 53c758f0..b0666724 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java @@ -402,17 +402,13 @@ public class DepositoryController { Map depository_data = new HashMap<>(); depository_data.put("week", show_weekday); - + int threadSize = depositoryAllNameAndId.size(); + ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize)); + // 结果集 + List> futureList = new ArrayList>(); + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); if ("0".equals(type)) { - int threadSize = depositoryAllNameAndId.size(); - ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize)); - - // 结果集 - List> futureList = new ArrayList>(); - // 1.定义CompletionService - CompletionService completionService = new ExecutorCompletionService(exs); - - // 获取当前各仓库的库存数 List toDayInventoryByDName = depositoryService.getToDayInventoryByDName(); while (it.hasNext()) { @@ -433,15 +429,6 @@ public class DepositoryController { } depository_data.put("data", show_data); } else { - // 定义线程 - int threadSize = depositoryAllNameAndId.size(); - ExecutorService exs = new ThreadPoolExecutor(threadSize, threadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(threadSize)); - - // 结果集 - List> futureList = new ArrayList>(); - // 1.定义CompletionService - CompletionService completionService = new ExecutorCompletionService(exs); - // 每天各仓库入库数目 while (it.hasNext()) { Object next = it.next(); @@ -462,6 +449,8 @@ public class DepositoryController { depository_data.put("data", show_data); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return depository_data; } @@ -610,7 +599,8 @@ public class DepositoryController { } - } else { + } + else { // 获取本周至今仓库的入/出库数量 Future futureForBarChartData = completionService.submit(new distributeTasks(depositoryAllNameAndId, type, 1, userByPort, depositoryName)); @@ -638,6 +628,8 @@ public class DepositoryController { } } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); // 构造对应格式 depository_data.put("week", show_weekday); depository_data.put("lineChartData", lineChartData); @@ -710,6 +702,9 @@ public class DepositoryController { show_data.putAll((Map) result); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); + return show_data; } @@ -744,6 +739,9 @@ public class DepositoryController { } result.add(obj); } + + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return result; } // 用于获取旭日图数据 @@ -835,6 +833,8 @@ public class DepositoryController { stringObjectMap.put("itemStyle", itemStyle); result.add(stringObjectMap); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return result; } @@ -1252,6 +1252,8 @@ public class DepositoryController { } result.putAll((Map) obj); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return result; } @@ -1331,6 +1333,9 @@ public class DepositoryController { } show_data.putAll((Map) result); } + + // 关闭线程池 + PublicConfig.closeThreadPool(exs); } @@ -1729,6 +1734,8 @@ public class DepositoryController { result.add(obj); sum += ObjectFormatUtil.toDouble(((Map) obj).get("value")); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); map.put("children", result); map.put("name", map.get("month")); map.remove("month"); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java index be5effb6..4f667696 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java @@ -182,6 +182,8 @@ public class CompanyServiceImpl implements CompanyService { } list.add(result); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return list; } @@ -251,6 +253,8 @@ public class CompanyServiceImpl implements CompanyService { } list.addAll((Collection) result); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return list; } @@ -307,6 +311,8 @@ public class CompanyServiceImpl implements CompanyService { } list.add( result); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return list; } @@ -474,6 +480,8 @@ public class CompanyServiceImpl implements CompanyService { } list.add(result); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return list; } } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java index 9ebaa6ba..1fc88de6 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java @@ -549,6 +549,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { countForToday += ObjectFormatUtil.toDouble(((Map) o).get("count")); priceForToday += ObjectFormatUtil.toDouble(((Map) o).get("price")); } + // 关闭线程池 + PublicConfig.closeThreadPool(exsForToday); } if (yesterdaySize > 0) { // 定义线程用于计算昨天的记录 @@ -577,6 +579,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService { countForYesterday += ObjectFormatUtil.toDouble(((Map) o).get("count")); priceForYesterday += ObjectFormatUtil.toDouble(((Map) o).get("price")); } + // 关闭线程池 + PublicConfig.closeThreadPool(exsForYesterday); } // 设置今天的额度 result.put("price", priceForToday); diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java index ff9bbd6b..3834a169 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java @@ -529,7 +529,8 @@ public class DepositoryServiceImpl implements DepositoryService { } list.addAll((Collection) result); } - exs.shutdown(); + // 关闭线程池 + PublicConfig.closeThreadPool(exs); // 用于判断当前列表中是否有所有上级 for (int i = 0; i < list.size(); i++) { if (list.get(i) == null) { @@ -943,7 +944,8 @@ public class DepositoryServiceImpl implements DepositoryService { } list.addAll((Collection) result); } - exs.shutdown(); + // 关闭线程池 + PublicConfig.closeThreadPool(exs); // 用于判断当前列表中是否有所有上级 return list; } @@ -1033,6 +1035,8 @@ public class DepositoryServiceImpl implements DepositoryService { } list.add(result); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return list; } } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java index 86045531..c9d8de55 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/ExcelServiceImpl.java @@ -10,6 +10,7 @@ import com.alibaba.excel.write.metadata.fill.FillConfig; import com.alibaba.excel.write.metadata.fill.FillWrapper; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; +import com.dreamchaser.depository_manage.config.PublicConfig; import com.dreamchaser.depository_manage.controller.WebSocketController; import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.mapper.ConstructionUnitMapper; @@ -133,7 +134,6 @@ public class ExcelServiceImpl implements ExcelService { // 定义组合id列表 List excelInfoForMaterialS = new ArrayList<>(); List dataIndexList = new ArrayList<>(); - System.out.println(excelVosForMaterialList.size()); for (int i = 0; i < excelVosForMaterialList.size(); i++) { if (((i + 1) % 100) == 0) { // 如果有个开启线程进行处理 excelInfoForMaterialS.add(excelVosForMaterialList.get(i)); @@ -165,7 +165,10 @@ public class ExcelServiceImpl implements ExcelService { } errMsg.addAll(strings); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); } + List userExcelMaterialInfo = ExcelFileInfoPool.getUserExcelMaterialInfo(userByPort.getNumber()); if (userExcelMaterialInfo == null) { userExcelMaterialInfo = new ArrayList<>(); @@ -278,6 +281,8 @@ public class ExcelServiceImpl implements ExcelService { } errMsg.addAll(strings); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); } List userExcelMaterialTypeInfo = ExcelFileInfoPool.getUserExcelMaterialTypeInfo(userByPort.getNumber()); @@ -396,6 +401,8 @@ public class ExcelServiceImpl implements ExcelService { } errMsg.addAll(strings); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java index b5738a72..511a2a30 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/GroupServiceImpl.java @@ -564,6 +564,8 @@ public class GroupServiceImpl implements GroupService { } list.addAll((Collection) result); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return list; } @@ -1294,6 +1296,8 @@ public class GroupServiceImpl implements GroupService { } list.add(result); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return list; } } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java index ac2010b1..088b2095 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java @@ -3,6 +3,7 @@ package com.dreamchaser.depository_manage.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.dreamchaser.depository_manage.config.PublicConfig; import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.mapper.*; import com.dreamchaser.depository_manage.pojo.InventoryP; @@ -2306,6 +2307,8 @@ public class MaterialServiceImpl implements MaterialService { redisPool.getRedisTemplateByDb(15).opsForList().rightPush("wms_materialTree_result", JSON.toJSONString(result)); redisPool.getRedisTemplateByDb(15).expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return list; } } @@ -2350,6 +2353,8 @@ public class MaterialServiceImpl implements MaterialService { redisPool.getRedisTemplateByDb(15).opsForList().rightPush("wms_materialTree_result", JSON.toJSONString(result)); redisPool.getRedisTemplateByDb(15).expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); } @@ -2525,7 +2530,10 @@ public class MaterialServiceImpl implements MaterialService { } list.addAll((Collection) result); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); // 进行最终的封装 + return buildTreeForSelectName(list); } @@ -2955,6 +2963,8 @@ public class MaterialServiceImpl implements MaterialService { } list.add(result); } + // 关闭线程池 + PublicConfig.closeThreadPool(exs); return list; } diff --git a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java index 6adbfb40..2e2d94d3 100644 --- a/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java +++ b/src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java @@ -2,6 +2,7 @@ package com.dreamchaser.depository_manage.service.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.dreamchaser.depository_manage.config.PublicConfig; import com.dreamchaser.depository_manage.entity.MaterialType; import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper; import com.dreamchaser.depository_manage.service.MaterialTypeService; @@ -293,7 +294,8 @@ public class MaterialTypeServiceImpl implements MaterialTypeService { } list.addAll((Collection) result); } - exs.shutdown(); + // 关闭线程池 + PublicConfig.closeThreadPool(exs); // 进行最终的封装 return list; }