From 82c3b41ea01f8210ce8852747f4d65e2bae9a862 Mon Sep 17 00:00:00 2001 From: erdanergou Date: Fri, 18 Nov 2022 11:25:34 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=8F=AF=E8=A7=86=E5=8C=96?= =?UTF-8?q?=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/DepositoryController.java | 553 ++++++++++++------ .../mapper/DepositoryMapper.java | 3 + .../mapper/DepositoryMapper.xml | 13 + .../mapper/DepositoryRecordMapper.java | 4 +- .../mapper/DepositoryRecordMapper.xml | 25 +- .../depository_manage/mapper/RoleMapper.xml | 3 +- .../pojo/InventoryByDname.java | 12 + .../depository_manage/pojo/RestResponse.java | 32 + .../pojo/RoleAndDepository.java | 5 + .../service/DepositoryRecordService.java | 4 +- .../service/DepositoryService.java | 8 + .../impl/DepositoryRecordServiceImpl.java | 83 ++- .../service/impl/DepositoryServiceImpl.java | 25 +- .../service/impl/MaterialServiceImpl.java | 2 + .../service/impl/MaterialTypeServiceImpl.java | 29 +- src/main/resources/application-test.yml | 6 +- .../templates/pages/chart/chart-in_back.html | 13 +- .../pages/chart/chart-stock_back.html | 6 +- .../pages/materialtype/materialType_view.html | 8 +- .../pages/warehouse/warehouse_view.html | 5 +- .../dreamchaser/depository_manage/Test2.java | 234 ++++++++ .../dreamchaser/depository_manage/Test3.java | 190 ++++++ target/classes/application-test.yml | 6 +- .../mapper/DepositoryMapper.xml | 13 + .../mapper/DepositoryRecordMapper.xml | 25 +- .../depository_manage/mapper/RoleMapper.xml | 3 +- .../templates/pages/chart/chart-in_back.html | 13 +- .../pages/chart/chart-stock_back.html | 6 +- .../pages/materialtype/materialType_view.html | 8 +- .../pages/warehouse/warehouse_view.html | 5 +- 30 files changed, 1086 insertions(+), 256 deletions(-) create mode 100644 src/main/java/com/dreamchaser/depository_manage/pojo/InventoryByDname.java create mode 100644 src/test/java/com/dreamchaser/depository_manage/Test2.java create mode 100644 src/test/java/com/dreamchaser/depository_manage/Test3.java 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 815930c0..3c831f05 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java @@ -22,6 +22,7 @@ import javax.servlet.http.HttpServletRequest; import java.io.IOException; import java.text.SimpleDateFormat; import java.util.*; +import java.util.concurrent.*; /** * @author Dreamchser @@ -232,11 +233,8 @@ public class DepositoryController { * @return */ public static List getBeforeInventoryByMonth(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService, UserByPort userByPort) { -// List depositoryAll = depositoryService.findDepositoryAll(); List depositoryAll = depositoryService.findDepositoryByAdminorgAndUser(userByPort); -// List depositoryAll = depositoryService.findDepositoryByAdminorg(userByPort.getMaindeparment().toString()); // 获取该用户管理的仓库 - Map previousMonth = getPreviousMonth(); List months = (List) previousMonth.get("months"); List sourceList = (List) previousMonth.get("sourceList"); @@ -271,10 +269,10 @@ public class DepositoryController { parmOut.put("end", months.get(num)); // 获取月份中入库物料的总额 // 测试 - Double wareHouseInCountByMonth1 = depositoryRecordService.findMaterialCountByMonth1(parmIn); + Integer wareHouseInCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parmIn); // 获取月份中出库物料的总额 // 测试 - Double wareHouseOutCountByMonth1 = depositoryRecordService.findMaterialCountByMonth1(parmOut); + Integer wareHouseOutCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parmOut); // 获取当前月库存容量 // 测试 Double wareHouseCount1 = result.get(k++) - wareHouseInCountByMonth1 + wareHouseOutCountByMonth1; @@ -339,19 +337,17 @@ public class DepositoryController { parmIn.put("depository_id", depositoryAll.get(i).getId()); parmIn.put("start", months.get(j + 1)); parmIn.put("end", months.get(j)); - parmIn.put("dname", depositoryAll.get(i).getDname()); parmOut.put("type", 2); parmOut.put("state", "已出库"); parmOut.put("depository_id", depositoryAll.get(i).getId()); parmOut.put("start", months.get(j + 1)); parmOut.put("end", months.get(j)); - parmOut.put("dname", depositoryAll.get(i).getDname()); // 获取某个月某物料入库总额 // 测试 - Double wareHouseInCountByMonth1 = depositoryRecordService.findMaterialCountByMonth1(parmIn); + Integer wareHouseInCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parmIn); // 获取某个月某物料出库总额 // 测试 - Double wareHouseOutCountByMonth1 = depositoryRecordService.findMaterialCountByMonth1(parmOut); + Integer wareHouseOutCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parmOut); Double wareHouseCount1 = (Double) productData.get(k++) - wareHouseInCountByMonth1 + wareHouseOutCountByMonth1; productData.add(wareHouseCount1); } @@ -684,11 +680,10 @@ public class DepositoryController { } parm.put("start", months.get(num + 1)); parm.put("end", months.get(num)); - parm.put("tname", materialTypeAll.get(j).getTname()); + parm.put("oldId", materialTypeAll.get(j).getOldId()); //根据条件获取月份中物料的总额 - Double materialCountByMonth = depositoryRecordService.findMaterialCountByMonth(parm); // 测试 - Double materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth1(parm); + Integer materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parm); ((Map) sourceList.get(num)).put(materialTypeAll.get(j).getTname(), materialCountByMonth1); } } @@ -737,27 +732,27 @@ public class DepositoryController { List drCountbyDrName = new ArrayList<>(); - while (it.hasNext()) { - int i; - Object key = it.next(); - for (i = days.size() - 1; i > 0; i--) { - // 遍历 Map并计算各仓库的入库数 - if (i == days.size() - 1) { - depositoryName.add(key.toString()); - } - Integer val = (Integer) depositoryAllNameAndId.get(key); - // 获取一段时间内的库存额度 - // 测试 - Double depositoryRecordByDateAndType1 = depositoryRecordService.findApplicationRecordByDate(days.get(i), days.get(i - 1), Integer.parseInt(type), val); - drCountbyDrName.add(depositoryRecordByDateAndType1); - if (i == 2 && flag) { - yesterdayData.put(key.toString(), depositoryRecordByDateAndType1); - } + while (it.hasNext()) { + int i; + Object key = it.next(); + for (i = days.size() - 1; i > 0; i--) { + // 遍历 Map并计算各仓库的入库数 + if (i == days.size() - 1) { + depositoryName.add(key.toString()); + } + Integer val = (Integer) depositoryAllNameAndId.get(key); + // 获取一段时间内的库存额度 + // 测试 + Double depositoryRecordByDateAndType1 = depositoryRecordService.findApplicationRecordByDate(days.get(i), days.get(i - 1), Integer.parseInt(type), val); + drCountbyDrName.add(depositoryRecordByDateAndType1); + if (i == 2 && flag) { + yesterdayData.put(key.toString(), depositoryRecordByDateAndType1); } - Collections.reverse(drCountbyDrName); - show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); - drCountbyDrName.clear(); } + Collections.reverse(drCountbyDrName); + show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); + drCountbyDrName.clear(); + } Map depository_data = new HashMap<>(); depository_data.put("data", show_data); depository_data.put("week", show_weekday); @@ -893,7 +888,7 @@ public class DepositoryController { */ @RequestMapping(value = "/layui/echart_back", method = RequestMethod.GET) @ResponseBody - public Map learnLayuiAndEchart_back(@RequestParam("type") String type, @RequestParam(value = "last", required = false) String last, HttpServletRequest request) { + public Map learnLayuiAndEchart_back(@RequestParam("type") String type, HttpServletRequest request) { // 获取当前登录用户 UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); @@ -910,6 +905,12 @@ public class DepositoryController { // 获取各仓库名称以及id Map depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort); + ExecutorService exs = Executors.newFixedThreadPool(20); + // 结果集 + List> futureList = new ArrayList>(); + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); + Iterator it = depositoryAllNameAndId.keySet().iterator(); // 仓库名称列表 List depositoryName = new ArrayList<>(); @@ -923,172 +924,79 @@ public class DepositoryController { Calendar instance = Calendar.getInstance(); // 获取昨天数据标志位 boolean flag = true; + + // 用于标准开启了几个线程 + int taskNum = 0; + // 获取今天是周几 int weekDay = instance.get(Calendar.DAY_OF_WEEK); weekDay = weekDay - 1; // 具体周几 // 获取日期 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); - // 如果是获取上周 - if (last != null) { - List days = getLastTimeInterval(); - List drCountbyDrName = new ArrayList<>(); + if (weekDay == 1) { + //只获取今天 + Long now = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); + instance.add(Calendar.DATE, 1); + Long tomorrow = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); + instance.add(Calendar.DATE, -2); + String yesterday = formatter.format(instance.getTime()); while (it.hasNext()) { - int i; + // 遍历 Map并计算各仓库的入库数 Object key = it.next(); - for (i = days.size() - 1; i > 0; i--) { - // 遍历 Map并计算各仓库的入库数 - if (i == days.size() - 1) { - depositoryName.add(key.toString()); - } - Integer val = (Integer) depositoryAllNameAndId.get(key); - // 获取一段时间内的库存额度 - // 测试 - Double depositoryRecordByDateAndType1 = depositoryRecordService.findApplicationRecordByDate(days.get(i), days.get(i - 1), Integer.parseInt(type), val); - drCountbyDrName.add(depositoryRecordByDateAndType1); - if (i == 2 && flag) { - yesterdayData.put(key.toString(), depositoryRecordByDateAndType1); - } - } - Collections.reverse(drCountbyDrName); - show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); - drCountbyDrName.clear(); - } - } else { - if (weekDay == 1) { - //只获取今天 - Long now = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); - instance.add(Calendar.DATE, 1); - Long tomorrow = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); - instance.add(Calendar.DATE, -2); - String yesterday = formatter.format(instance.getTime()); - while (it.hasNext()) { - // 遍历 Map并计算各仓库的入库数 - Object key = it.next(); - depositoryName.add(key.toString()); - Integer val = (Integer) depositoryAllNameAndId.get(key); - // 获取一段时间内的库存额度 - Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(tomorrow, now, Integer.parseInt(type), val); - Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString()); - todayInventory.put(key.toString(), toDayInventoryByDName); - yesterdayData.put(key.toString(), depositoryRecordByDate1); - List drCountbyDrName = new ArrayList<>(); - drCountbyDrName.add(depositoryRecordByDate1); - show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); - } - } else { - int now = instance.get(Calendar.DAY_OF_WEEK) - 1; - List days = new ArrayList<>(); // 周一至今的每天 - instance.add(Calendar.DATE, 1); - days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()))); - instance.add(Calendar.DATE, -1); - days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()))); - while (now - 1 > 0) { - now--; - instance.add(Calendar.DATE, -1); - Long format = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); - days.add(format); - } + depositoryName.add(key.toString()); + Integer val = (Integer) depositoryAllNameAndId.get(key); + // 获取一段时间内的库存额度 + Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(tomorrow, now, Integer.parseInt(type), val); + Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString()); + todayInventory.put(key.toString(), toDayInventoryByDName); + yesterdayData.put(key.toString(), depositoryRecordByDate1); List drCountbyDrName = new ArrayList<>(); - while (it.hasNext()) { - int i; - Object key = it.next(); - Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString()); - todayInventory.put(key.toString(), toDayInventoryByDName); - for (i = days.size() - 1; i > 0; i--) { - // 遍历 Map并计算各仓库的入库数 - if (i == days.size() - 1) { - depositoryName.add(key.toString()); - } - Integer val = (Integer) depositoryAllNameAndId.get(key); - // 获取一段时间内的库存额度 - - Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(days.get(i - 1), days.get(i), Integer.parseInt(type), val); - drCountbyDrName.add(depositoryRecordByDate1); - if (i == 2 && flag) { - yesterdayData.put(key.toString(), depositoryRecordByDate1); - } - } - show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); - drCountbyDrName.clear(); - } - } - } - - // 获取本月及之前月份各种类别入/出库总量 - List materialTypeAll = materialTypeService.findMaterialTypeNoParent(); - Map previousMonth = getPreviousMonth(); - List months = (List) previousMonth.get("months"); - List sourceList = (List) previousMonth.get("sourceList"); - for (int num = 0; num < months.size() - 1; num++) { - for (int j = 0; j < materialTypeAll.size(); j++) { - Map parm = new HashMap<>(); - parm.put("type", Integer.parseInt(type)); - if (Integer.parseInt(type) == 1) { - parm.put("state", "已入库"); - } else if (Integer.parseInt(type) == 2) { - parm.put("state", "已出库"); - } - parm.put("start", months.get(num + 1)); - parm.put("end", months.get(num)); - parm.put("tname", materialTypeAll.get(j).getTname()); - //根据条件获取月份中物料的总额 - // 测试 - Double materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth1(parm); - ((Map) sourceList.get(num)).put(materialTypeAll.get(j).getTname(), materialCountByMonth1); + drCountbyDrName.add(depositoryRecordByDate1); + show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); } } - - List barSource = new ArrayList<>(); - barSource.add("month"); - for (int i = 0; i < materialTypeAll.size(); i++) { - barSource.add(materialTypeAll.get(i).getTname()); + else { + Future future = completionService.submit(new distributeTasks(type,1,userByPort,yesterdayData,depositoryName)); + futureList.add(future); + taskNum += 1; } - sourceList.add(barSource); + // 获取本月及之前月份各种类别入/出库总量 + Future future = completionService.submit(new distributeTasks(type,3,userByPort,yesterdayData,depositoryName)); + futureList.add(future); + taskNum += 1; // 中国地图数据 // ['product', '3月', '4月', '5月', '6月', '7月', '8月'], // ['电子产品类', 41.1, 30.4, 65.1, 53.3, 83.8, 98.7], Map mapData = new HashMap<>(); if (!"0".equals(type)) { - List mapDataList = new ArrayList<>(); - Map previousMonth1 = getPreviousMonth(); - List months1 = (List) previousMonth1.get("months"); - List sourceList1 = (List) previousMonth1.get("sourceList"); - ArrayList title = new ArrayList<>(); - title.add("product"); - - for (int i = sourceList1.size() - 1; i >= 0; i--) { - title.add(((Map) sourceList1.get(i)).get("month")); - } - mapDataList.add(title); - for (int i = 0; i < materialTypeAll.size(); i++) { - List productData = new ArrayList<>(); - productData.add(materialTypeAll.get(i).getTname()); - for (int j = months1.size() - 1; j > 0; j--) { - Map parm = new HashMap<>(); - parm.put("type", Integer.parseInt(type)); - if (Integer.parseInt(type) == 1) { - parm.put("state", "已入库"); - } else if (Integer.parseInt(type) == 2) { - parm.put("state", "已出库"); - } - parm.put("start", months1.get(j)); - parm.put("end", months1.get(j - 1)); - parm.put("tname", materialTypeAll.get(i).getTname()); - //根据条件获取月份中物料的总额 - // 测试 - Double materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth1(parm); - productData.add(materialCountByMonth1); - } - mapDataList.add(((ArrayList) productData).clone()); - productData.clear(); - } - mapData.put("mapDataList", mapDataList); + Future future1 = completionService.submit(new distributeTasks(type,4,userByPort,yesterdayData,depositoryName)); + futureList.add(future1); + taskNum += 1; } // 封装 展示数据 Map depository_data = new LinkedHashMap(); + + List sourceList = new ArrayList<>(); + for (int i = 0; i < taskNum; i++) { + Object result = null; + try { + result = completionService.take().get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + if(sourceList == null || sourceList.size() == 0) { + sourceList = (List) ((Map) result).get("sourceList"); + } + if(show_data == null || show_data.size() == 0) { + show_data = (Map) ((Map) result).get("show_data"); + } + if(mapData == null || mapData.size() == 0){ + mapData = (Map) ((Map) result).get("mapData"); + } + } // 构造对应格式 depository_data.put("week", show_weekday); depository_data.put("data", show_data); @@ -1101,7 +1009,8 @@ public class DepositoryController { depository_data.put("ThisWeekInventory", getThisWeekInventoryByDName(depositoryService, depositoryRecordService, userByPort)); depository_data.put("BeforeInventory", getBeforeInventoryByDName(depositoryService, depositoryRecordService, userByPort)); depository_data.put("MapInventory", getBeforeInventoryOnMap(depositoryService, depositoryRecordService, userByPort)); - } else { + } + else { // 如果不是 depository_data.put("yesterdayData", yesterdayData); depository_data.put("mapData", mapData); @@ -1119,6 +1028,288 @@ public class DepositoryController { return resMap; } + // 用于 + class distributeTasks implements Callable{ + + String type; + int taskType; + UserByPort userByPort; + Map yesterdayData; + List depositoryName; + + distributeTasks(String type ,int taskType,UserByPort userByPort,Map yesterdayData,List depositoryName){ + this.taskType = taskType; + this.type = type; + this.userByPort = userByPort; + this.yesterdayData = yesterdayData; + this.depositoryName = depositoryName; + + } + @Override + public Object call() throws Exception { + // taskType 1为折线图2为饼图3为柱状图4为中国地图 + + Map result = new HashMap<>(); + if(1 == taskType){ + Map showData = getShowData(type, userByPort, yesterdayData,depositoryName); + result.put("show_data",showData); + }else if(2 == taskType){ + + }else if(3 == taskType){ + List sourceList = getSourceList(type); + result.put("sourceList",sourceList); + }else if(4 == taskType){ + Map mapData = getMapData(type); + result.put("mapData",mapData); + } + return result; + } + } + + + // 用于获取折线图 + public Map getShowData(String type,UserByPort userByPort,Map yesterdayData,List depositoryName){ + // 获取各仓库名称以及id + Map depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort); + + // 各仓库当前库存数目 + Map todayInventory = new HashMap<>(); + + Iterator it = depositoryAllNameAndId.keySet().iterator(); + + // 仓库名称列表 + //获取获取系统的当前日历对象 + Calendar instance = Calendar.getInstance(); + // 获取日期 + SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); + int now = instance.get(Calendar.DAY_OF_WEEK) - 1; + List days = new ArrayList<>(); // 周一至今的每天 + instance.add(Calendar.DATE, 1); + days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()))); + instance.add(Calendar.DATE, -1); + days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()))); + while (now - 1 > 0) { + now--; + instance.add(Calendar.DATE, -1); + Long format = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); + days.add(format); + } + List drCountbyDrName = new ArrayList<>(); + // 获取昨天数据标志位 + boolean flag = true; + // 每天各仓库入库数目 + Map show_data = new HashMap<>(); + while (it.hasNext()) { + int i; + Object key = it.next(); + Double toDayInventoryByDName = depositoryService.getToDayInventoryByDName(key.toString()); + todayInventory.put(key.toString(), toDayInventoryByDName); + for (i = days.size() - 1; i > 0; i--) { + // 遍历 Map并计算各仓库的入库数 + if (i == days.size() - 1) { + depositoryName.add(key.toString()); + } + Integer val = (Integer) depositoryAllNameAndId.get(key); + // 获取一段时间内的库存额度 + + Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(days.get(i - 1), days.get(i), Integer.parseInt(type), val); + drCountbyDrName.add(depositoryRecordByDate1); + if (i == 2 && flag) { + yesterdayData.put(key.toString(), depositoryRecordByDate1); + } + } + show_data.put(key.toString(), ((ArrayList) drCountbyDrName).clone()); + drCountbyDrName.clear(); + } + return show_data; + } + + + //获取本月及之前月份各种类别入/出库总量 + public List getSourceList(String type){ + List materialTypeAll = materialTypeService.findMaterialTypeNoParent(); + Map previousMonth = getPreviousMonth(); + List months = (List) previousMonth.get("months"); + List sourceList = (List) previousMonth.get("sourceList"); + ExecutorService exs = Executors.newFixedThreadPool(months.size()); + // 结果集 + List> futureList = new ArrayList>(); + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); + for (int num = 0; num < months.size() - 1; num++) { + Map map = (Map) sourceList.get(num); + Future future = completionService.submit(new getSourceListTask(map,type,months.get(num + 1).toString(),months.get(num).toString())); + futureList.add(future); + } + for (int i = 0; i < months.size() - 1; i++) { + Object result = null; + try { + result = completionService.take(); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + List barSource = new ArrayList<>(); + barSource.add("month"); + for (int i = 0; i < materialTypeAll.size(); i++) { + barSource.add(materialTypeAll.get(i).getTname()); + } + sourceList.add(barSource); + return sourceList; + } + + + + // 具体执行getSourceList逻辑 + class getSourceListTask implements Callable { + + String type; + String start; + String end; + Map map; + getSourceListTask(Map map, String type, String start, String end){ + this.map = map; + this.type = type; + this.start = start; + this.end = end; + } + @Override + public Object call() throws Exception { + List materialTypeAll = materialTypeService.findMaterialTypeNoParent(); + ExecutorService exs = Executors.newFixedThreadPool(materialTypeAll.size()); + // 结果集 + List> futureList = new ArrayList>(); + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); + + for (int j = 0; j < materialTypeAll.size(); j++) { + Map parm = new HashMap<>(); + parm.put("type", Integer.parseInt(type)); + if (Integer.parseInt(type) == 1) { + parm.put("state", "已入库"); + } else if (Integer.parseInt(type) == 2) { + parm.put("state", "已出库"); + } + parm.put("start",start); + parm.put("end", end); + parm.put("oldId", materialTypeAll.get(j).getOldId()); + //根据条件获取月份中物料的总额 + // 测试 + + Future future = completionService.submit(new findMaterialCountTaskForSourceList(parm)); + futureList.add(future); + } + for (int i = 0; i < materialTypeAll.size(); i++) { + Object result = null; + try { + result = completionService.take().get(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + map.putAll((Map) result); + } + return map; + } + } + + + // 根据条件获取月份中物料的总额用于sourcelist + class findMaterialCountTaskForSourceList implements Callable { + + Map map; + findMaterialCountTaskForSourceList(Map map){ + this.map = map; + } + @Override + public Object call() throws Exception { + Map result = new HashMap<>(); + Integer materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(map); + Long oldId = Long.valueOf(map.get("oldId").toString()); + MaterialType materialTypeByOldId = materialTypeService.findMaterialTypeByOldId(oldId); + result.put(materialTypeByOldId.getTname(),materialCountByMonth1); + return result; + } + } + + + // 中国地图数据 + public Map getMapData(String type){ + List mapDataList = new ArrayList<>(); + Map previousMonth1 = getPreviousMonth(); + List sourceList1 = (List) previousMonth1.get("sourceList"); + ArrayList title = new ArrayList<>(); + title.add("product"); + for (int i = sourceList1.size() - 1; i >= 0; i--) { + title.add(((Map) sourceList1.get(i)).get("month")); + } + mapDataList.add(title); + + // 获取所有顶级类别 + List materialTypeAll = materialTypeService.findMaterialTypeNoParent(); + // 定义对应数量的线程池 + ExecutorService exs = Executors.newFixedThreadPool(materialTypeAll.size()); + // 结果集 + List> futureList = new ArrayList>(); + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); + + for (int i = 0; i < materialTypeAll.size(); i++) { + MaterialType mt = materialTypeAll.get(i); + Future future = completionService.submit(new findMapData(previousMonth1,type,mt)); + futureList.add(future); + } + for (int i = 0; i < materialTypeAll.size(); i++) { + Object result = null; + try { + result = completionService.take().get(); + } catch (InterruptedException | ExecutionException e) { + e.printStackTrace(); + } + mapDataList.add(result); + } + Map mapData =new HashMap<>(); + mapData.put("mapDataList", mapDataList); + return mapData; + } + + class findMapData implements Callable{ + String type ; + MaterialType mt; + Map previousMonth1; + findMapData( Map previousMonth1,String type ,MaterialType mt){ + this.previousMonth1 = previousMonth1; + this.type = type; + this.mt = mt; + } + + @Override + public Object call() throws Exception { + List productData = new ArrayList<>(); + List months1 = (List) previousMonth1.get("months"); + productData.add(mt.getTname()); + for (int j = months1.size() - 1; j > 0; j--) { + Map parm = new HashMap<>(); + parm.put("type", Integer.parseInt(type)); + if (Integer.parseInt(type) == 1) { + parm.put("state", "已入库"); + } else if (Integer.parseInt(type) == 2) { + parm.put("state", "已出库"); + } + parm.put("start", months1.get(j)); + parm.put("end", months1.get(j - 1)); + parm.put("oldId", mt.getOldId()); + //根据条件获取月份中物料的总额 + // 测试 + Integer materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parm); + productData.add(materialCountByMonth1); + } + return productData; + } + } + + /** * 根据物料编号查询所在仓库 * @@ -1330,21 +1521,21 @@ public class DepositoryController { // 构造仓库二维码 @PostMapping("/createQrCode") - public RestResponse createQrCode(@RequestBody Map map) { + public RestResponse createQrCode(@RequestBody Map map) { // 通过雪花算法计算随机数 - Snowflake snowflake = new Snowflake(10,10,true); + Snowflake snowflake = new Snowflake(10, 10, true); String qrCode = snowflake.nextIdStr(); Integer depositoryId = ObjectFormatUtil.toInteger(map.get("depositoryId")); Depository depository = depositoryService.findDepositoryRecordById(depositoryId); String qrCodeByDepository = depositoryService.findQrCodeByDepository(depository.getId()); - if(qrCodeByDepository == null) { + if (qrCodeByDepository == null) { Map param = new HashMap<>(); param.put("depositoryId", depository.getId()); param.put("qrCode", qrCode); depositoryService.addQrCodeByDepository(param); - }else{ + } else { qrCode = qrCodeByDepository; } try { diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.java b/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.java index 07c01771..1f2d1730 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.java +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.java @@ -1,6 +1,7 @@ package com.dreamchaser.depository_manage.mapper; import com.dreamchaser.depository_manage.entity.Depository; +import com.dreamchaser.depository_manage.pojo.InventoryByDname; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Repository; @@ -116,6 +117,8 @@ public interface DepositoryMapper { Double getToDayInventoryByDName(Map map); + List getToDayInventoryByDNameTest(); + /** * 根据条件修改状态 * @param map diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml index 52718889..77e19e33 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml @@ -17,6 +17,11 @@ + + + + + @@ -339,6 +344,14 @@ + + + - select ifnull(sum(quantity),0) from applicationinrecordinfo where 1 = 1 @@ -1139,6 +1139,29 @@ and tname = #{tname} + + and mtid = #{typeId} + + + + diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.xml index 05be432f..6f4b4a0d 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/RoleMapper.xml @@ -27,6 +27,7 @@ + @@ -35,7 +36,7 @@ - prid,userid as userId,name as roleName,dname as depositoryName,address as depositoryAddress ,introduce as depositoryIntroduce,state as depositoryState,did,classes + prid,userid as userId,name as roleName,dname as depositoryName,address as depositoryAddress ,introduce as depositoryIntroduce,state as depositoryState,did,classes,code as depositoryCode + + + - select ifnull(sum(quantity),0) from applicationinrecordinfo where 1 = 1 @@ -1139,6 +1139,29 @@ and tname = #{tname} + + and mtid = #{typeId} + + + + diff --git a/target/classes/com/dreamchaser/depository_manage/mapper/RoleMapper.xml b/target/classes/com/dreamchaser/depository_manage/mapper/RoleMapper.xml index 05be432f..6f4b4a0d 100644 --- a/target/classes/com/dreamchaser/depository_manage/mapper/RoleMapper.xml +++ b/target/classes/com/dreamchaser/depository_manage/mapper/RoleMapper.xml @@ -27,6 +27,7 @@ + @@ -35,7 +36,7 @@ - prid,userid as userId,name as roleName,dname as depositoryName,address as depositoryAddress ,introduce as depositoryIntroduce,state as depositoryState,did,classes + prid,userid as userId,name as roleName,dname as depositoryName,address as depositoryAddress ,introduce as depositoryIntroduce,state as depositoryState,did,classes,code as depositoryCode