From 2a64b537e8e3bce9ce030585a3da17d48379c0ad Mon Sep 17 00:00:00 2001 From: sfd <sun.sunshine@163.com> Date: 星期一, 26 五月 2025 15:04:45 +0800 Subject: [PATCH] 修改json类型转换错误 --- aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java | 108 +++++++++++++++++++++++++++++++---------------------- 1 files changed, 63 insertions(+), 45 deletions(-) diff --git a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java index 2315067..b492865 100644 --- a/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java +++ b/aps-modules/aps-core/src/main/java/com/aps/core/service/impl/ApsPlate/ApsPlateProcessShopStatServiceImpl.java @@ -5,6 +5,8 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.stream.Collectors; +import cn.hutool.core.collection.ListUtil; +import cn.hutool.core.util.IdUtil; import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson2.JSON; import com.alibaba.nacos.common.utils.JacksonUtils; @@ -18,6 +20,7 @@ import com.aps.core.domain.ApsPlate.ApsPlateProcessShopStat; import com.aps.core.domain.ApsPlate.ApsPlateProcessStat; import com.aps.core.mapper.*; +import com.aps.core.service.ApsPlate.IApsPlateProcessStatService; import com.aps.system.api.domain.SysDictData; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; @@ -59,6 +62,9 @@ @Resource private ApsPlatePlanMapper apsPlatePlanMapper; + @Autowired + private IApsPlateProcessStatService apsPlateProcessStatService; + /** @@ -132,61 +138,73 @@ /** * 淇濆瓨閽i噾杞﹂棿缁熻 */ - @Transactional + @Transactional( rollbackFor =Exception.class) @Override public void saveShopStat() { - try { - // 寮�濮嬩箣鍓嶅厛鍒犻櫎鎵�鏈夊巻鍙叉暟鎹� + // 瀹氫箟璇ュ姛鑳戒娇鐢ㄦ暟鎹簮涓哄崡閫氱殑宸ュ巶 + final String plant = "FORTUNA"; + final String major="BJ"; + // 鏌ヨ鐩稿叧鏁版嵁 + ApsPlatePlan platePlan = new ApsPlatePlan(); + platePlan.setPlant(plant); + log.info("寮�濮嬫墽琛岄挘閲戣鍒掑ぇ琛�"); + List<ApsPlatePlan> planList = apsPlatePlanMapper.selectApsPlatePlanList(platePlan); + + ApsShop apsShop = new ApsShop(); + apsShop.setPlantCode(plant); + List<ApsShop> shopList = shopMapper.selectApsShopList(apsShop); + + ApsStandardProcess process = new ApsStandardProcess(); + process.setPlant(plant); + process.setMajor(major); + + List<ApsStandardProcess> shopProcesses = standardProcessMapper.selectApsStandardProcessList(process); + + if (!planList.isEmpty() && !shopList.isEmpty() && !shopProcesses.isEmpty()) { + + log.info("閽i噾璁″垝澶ц〃锛氬垹闄ゆ墍鏈夊巻鍙叉暟鎹�"); + apsPlateProcessStatMapper.deleteAll(); apsPlateProcessShopStatMapper.deleteAll(); - - // 瀹氫箟璇ュ姛鑳戒娇鐢ㄦ暟鎹簮涓哄崡閫氱殑宸ュ巶 - final String plant = "FORTUNA"; - final String major="閽i噾"; - // 鏌ヨ鐩稿叧鏁版嵁 - ApsPlatePlan platePlan = new ApsPlatePlan(); - platePlan.setPlant(plant); - List<ApsPlatePlan> planList = apsPlatePlanMapper.selectApsPlatePlanList(platePlan); - - List<ApsPlateProcessStat> statList = apsPlateProcessStatMapper.selectApsPlateProcessStatList(new ApsPlateProcessStat()); - - ApsShop apsShop = new ApsShop(); - apsShop.setPlantCode(plant); - List<ApsShop> shopList = shopMapper.selectApsShopList(apsShop); - - ApsStandardProcess process = new ApsStandardProcess(); - process.setPlant(plant); - process.setMajor(major); - List<ApsStandardProcess> shopProcesses = standardProcessMapper.selectApsStandardProcessList(process); - if (planList.isEmpty() || shopList.isEmpty() || shopProcesses.isEmpty()) { - log.warn("璁″垝鍒楄〃銆佽溅闂村垪琛ㄦ垨宸ュ簭鍒楄〃涓虹┖锛屾棤娉曠敓鎴愮粺璁′俊鎭�"); - return; - } - // 鏋勫缓杞﹂棿鍚嶇О鍒板伐搴忓悕绉扮殑鏄犲皠 - Map<String, List<String>> shopToProcessNames = shopProcesses.stream() + log.info("閽i噾璁″垝澶ц〃锛氭帹绠楀�掓帓閽i噾宸ュ簭璁″垝瀹屽伐鏃ユ湡鍜岃鍒掑紑宸ユ椂闂�"); + List<ApsPlateProcessStat> statList =apsPlateProcessStatService.computePlateProcessStat(); + // 鏋勫缓杞﹂棿鍚嶇О鍒板伐搴忓悕绉扮殑鏄犲皠 + Map<String, List<String>> shopToProcessNames = shopProcesses.stream().filter(x -> null!=x.getWorkShop()) .collect(Collectors.groupingBy(ApsStandardProcess::getWorkShop, Collectors.mapping(ApsStandardProcess::getProcessName, Collectors.toList()) )); // 鎵归噺鎻掑叆缁熻鏁版嵁 + log.info("閽i噾璁″垝澶ц〃锛氳绠楁瘡涓伐鍗曚腑姣忎釜杞﹂棿鐨勫紑濮嬨�佺粨鏉熸椂闂�"); List<ApsPlateProcessShopStat> statsToInsert = new ArrayList<>(); - for (ApsPlatePlan plan : planList) { - for (ApsShop shop : shopList) { + log.info("閽i噾璁″垝澶ц〃V1锛氬紑濮嬭绠楁瘡涓伐鍗曡溅闂村伐鏃�"); + planList.stream().parallel().forEach(plan -> { + shopList.stream().parallel().forEach(shop -> { ApsPlateProcessShopStat stat = createShopStat(plan, shop, shopToProcessNames, statList); statsToInsert.add(stat); - } + }); + }); + log.info("閽i噾璁″垝澶ц〃锛氭壒閲忎繚瀛樺伐搴忓紑宸ュ拰瀹屽伐鏃堕棿"); + List<List<ApsPlateProcessStat>> processStatBatchList = ListUtil.split(statList, 1000); + processStatBatchList.stream().parallel().forEach(batch -> apsPlateProcessStatMapper.batchInsertPlateStat(batch)); + + + log.info("閽i噾璁″垝澶ц〃锛氭壒閲忎繚瀛樺伐鍗�-杞﹂棿鏃堕棿淇℃伅"); + List<List<ApsPlateProcessShopStat>> shopStatBatchList = ListUtil.split(statsToInsert, 1000); + shopStatBatchList.stream().parallel().forEach(batch -> apsPlateProcessShopStatMapper.batchInsert(batch)); + }else { + if(shopProcesses.isEmpty()){ + log.error("閽i噾璁″垝澶ц〃锛氭湭鎵惧埌鏍囧噯宸ュ簭鏁版嵁锛�"); + throw new RuntimeException("鏈壘鍒版爣鍑嗗伐搴忔暟鎹紒"); } - // 鎵归噺鎻掑叆浠ユ彁楂樻�ц兘 - if (!statsToInsert.isEmpty()) { - int batchSize = 1000; - for (int i = 0; i < statsToInsert.size(); i += batchSize) { - int end = Math.min(i + batchSize, statsToInsert.size()); - List<ApsPlateProcessShopStat> batch = statsToInsert.subList(i, end); - apsPlateProcessShopStatMapper.batchInsert(batch); - } + if(shopList.isEmpty()){ + log.error("閽i噾璁″垝澶ц〃锛氭湭鎵惧埌杞﹂棿鏁版嵁锛�"); + throw new RuntimeException("鏈壘鍒拌溅闂存暟鎹紒"); } - } catch (Exception e) { - log.error("淇濆瓨閽i噾杞﹂棿缁熻鏃跺彂鐢熷紓甯�", e); - throw new RuntimeException("淇濆瓨閽i噾杞﹂棿缁熻澶辫触", e); + if(planList.isEmpty()){ + log.error("閽i噾璁″垝澶ц〃锛氭湭鎵惧埌宸ュ崟鏁版嵁锛�"); + throw new RuntimeException("鏈壘鍒板伐鍗曟暟鎹紒"); + } } + log.info("閽i噾璁″垝澶ц〃锛氬畬鎴�"); } /** @@ -205,7 +223,6 @@ stat.setWorkCenter(plan.getWorkCenter()); stat.setProcessNumber(plan.getProcessNumber()); try { - List<String> processNames = shopToProcessNames.getOrDefault(shopName, Collections.emptyList()); if (!processNames.isEmpty()) { @@ -247,7 +264,8 @@ } } } catch (Exception e) { - log.error("computer error:"+ JSONObject.toJSONString(stat)); + log.error("閽i噾璁″垝澶ц〃 error:"+ JSONObject.toJSONString(stat)); + throw new RuntimeException("璁$畻杞﹂棿缁熻鏁版嵁寮傚父锛�"); } return stat; } @@ -286,7 +304,7 @@ List<SysDictData> documentStatusDic = DictUtils.getDictCache("aps_document_status"); // 鏋勫缓缁撴灉鍒楄〃 - planList.forEach( + planList.stream().parallel().forEach( plan -> { // 鏍规嵁 docNo 鑾峰彇瀵瑰簲鐨� shopStatList List<ApsPlateProcessShopStat> shopStatList = shopStatesByDocNo.getOrDefault(plan.getDocumentNumber(), Collections.emptyList()); -- Gitblit v1.9.3