Explorar el Código

不同流组批问题优化

qiangxuan hace 1 semana
padre
commit
e4109918d9

+ 88 - 72
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/actualControl/billetActual/billetActual/service/impl/BilletBasicInfoServiceImpl.java

@@ -269,6 +269,7 @@ public class BilletBasicInfoServiceImpl extends ServiceImpl<BilletBasicInfoMappe
             return "该炉钢坯实绩不存在,补录失败!";
         }
         BilletBasicInfo heatnoIndexNewBilletBasicInfo = billetBasicInfoList.stream().findFirst().orElse(null);
+        List<BilletBasicInfo> finalBilletBasicInfoList = new ArrayList<>();
         // 1流补录钢坯
         if (oConvertUtils.isNotEmpty(billetBasicInfoAdd.getOneStrandNo()) && billetBasicInfoAdd.getOneStrandNoSum() > 0){
             // 根据strand_no过滤出最新一条
@@ -288,7 +289,8 @@ public class BilletBasicInfoServiceImpl extends ServiceImpl<BilletBasicInfoMappe
             int strandNo = billetBasicInfoAdd.getOneStrandNo();
             // 定尺
             int length = billetBasicInfoAdd.getOneLength();
-            allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            List<BilletBasicInfo> billetBasicInfoOneList = allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            finalBilletBasicInfoList.addAll(billetBasicInfoOneList);
         }
 
         // 2流补录钢坯
@@ -310,7 +312,8 @@ public class BilletBasicInfoServiceImpl extends ServiceImpl<BilletBasicInfoMappe
             int strandNo = billetBasicInfoAdd.getTwoStrandNo();
             // 定尺
             int length = billetBasicInfoAdd.getTwoLength();
-            allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            List<BilletBasicInfo> billetBasicInfoTwoList = allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            finalBilletBasicInfoList.addAll(billetBasicInfoTwoList);
         }
 
         // 3流补录钢坯
@@ -332,7 +335,8 @@ public class BilletBasicInfoServiceImpl extends ServiceImpl<BilletBasicInfoMappe
             int strandNo = billetBasicInfoAdd.getThreeStrandNo();
             // 定尺
             int length = billetBasicInfoAdd.getThreeLength();
-            allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            List<BilletBasicInfo> billetBasicInfoThreeList = allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            finalBilletBasicInfoList.addAll(billetBasicInfoThreeList);
         }
 
         // 4流补录钢坯
@@ -354,7 +358,8 @@ public class BilletBasicInfoServiceImpl extends ServiceImpl<BilletBasicInfoMappe
             int strandNo = billetBasicInfoAdd.getFourStrandNo();
             // 定尺
             int length = billetBasicInfoAdd.getFourLength();
-            allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            List<BilletBasicInfo> billetBasicInfoFourList = allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            finalBilletBasicInfoList.addAll(billetBasicInfoFourList);
         }
 
         // 5流补录钢坯
@@ -376,7 +381,8 @@ public class BilletBasicInfoServiceImpl extends ServiceImpl<BilletBasicInfoMappe
             int strandNo = billetBasicInfoAdd.getFiveStrandNo();
             // 定尺
             int length = billetBasicInfoAdd.getFiveLength();
-            allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            List<BilletBasicInfo> billetBasicInfoFiveList = allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            finalBilletBasicInfoList.addAll(billetBasicInfoFiveList);
         }
 
         // 6流补录钢坯
@@ -398,7 +404,8 @@ public class BilletBasicInfoServiceImpl extends ServiceImpl<BilletBasicInfoMappe
             int strandNo = billetBasicInfoAdd.getSixStrandNo();
             // 定尺
             int length = billetBasicInfoAdd.getSixLength();
-            allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            List<BilletBasicInfo> billetBasicInfoSixList = allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            finalBilletBasicInfoList.addAll(billetBasicInfoSixList);
         }
 
         // 7流补录钢坯
@@ -420,7 +427,8 @@ public class BilletBasicInfoServiceImpl extends ServiceImpl<BilletBasicInfoMappe
             int strandNo = billetBasicInfoAdd.getSevenStrandNo();
             // 定尺
             int length = billetBasicInfoAdd.getSevenLength();
-            allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            List<BilletBasicInfo> billetBasicInfoSevenList = allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            finalBilletBasicInfoList.addAll(billetBasicInfoSevenList);
         }
 
         // 8流补录钢坯
@@ -442,11 +450,81 @@ public class BilletBasicInfoServiceImpl extends ServiceImpl<BilletBasicInfoMappe
             int strandNo = billetBasicInfoAdd.getEightStrandNo();
             // 定尺
             int length = billetBasicInfoAdd.getEightLength();
-            allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            List<BilletBasicInfo> billetBasicInfoEightList = allBilletBasicInfo(strandnoIndex, heatnoIndexNewBilletBasicInfo, billetBasicInfoAdd, number, brandNumStr, billetHotsend, heatsActuals, strandNo, length);
+            finalBilletBasicInfoList.addAll(billetBasicInfoEightList);
         }
+        // 列表补坯对8流所有数据进行组批统一处理
+        allBilletBasicInfoAssembly(finalBilletBasicInfoList, billetBasicInfoAdd);
+
         return "补录成功!";
     }
 
+    private void allBilletBasicInfoAssembly(List<BilletBasicInfo> billetBasicInfoList, BilletBasicInfoAdd billetBasicInfoAdd) {
+
+        //组批逻辑处理 查询钢坯实绩,组批号不为空,belongtable为空
+        List<BilletBasicInfo> availableBilletBasicInfoList = billetBasicInfoMapper.selectList(
+                new QueryWrapper<BilletBasicInfo>()
+                        .eq("ccm_no", billetBasicInfoAdd.getCcmNo())
+                        .eq("heat_no", billetBasicInfoAdd.getHeatNo())
+                        .eq("shift", billetBasicInfoAdd.getShift())
+                        .eq("shift_group", billetBasicInfoAdd.getShiftGroup())
+                        .isNull("belong_table")           // 使用 isNull 代替 eq(null)
+                        .isNotNull("assembly_number")     // 使用 isNotNull 代替 ne(null)
+                        .orderByDesc("create_time"));
+        if (oConvertUtils.listIsNotEmpty(availableBilletBasicInfoList)){
+            // 按assembly_number分组并过滤出数量不等于4的组
+            Map<String, List<BilletBasicInfo>> filteredGroups = availableBilletBasicInfoList.stream()
+                    .collect(Collectors.groupingBy(BilletBasicInfo::getAssemblyNumber))
+                    .entrySet().stream()
+                    .filter(entry -> entry.getValue().size() != 4)
+                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
+
+            // 将过滤后的结果,转换为单个列表并设置 assemblyNumber 为 null
+            List<BilletBasicInfo> resultList = filteredGroups.values().stream()
+                    .flatMap(Collection::stream)
+                    .peek(billet -> billet.setAssemblyNumber(null))
+                    .collect(Collectors.toList());
+
+            resultList.addAll(billetBasicInfoList);
+
+            if (oConvertUtils.listIsNotEmpty(resultList) && resultList.size() >= 4) {
+                int size = resultList.size();
+                int maxProcessed = (size / 4) * 4; // 计算可处理的最大4的倍数
+                List<BilletBasicInfo> remainingBillets = new ArrayList<>(); // 存储剩余的坯子
+                for (int i = 0; i < maxProcessed; i += 4) {
+                    int start = i;
+                    int end = Math.min(i + 4, maxProcessed);
+                    // 处理当前分组数据
+                    updateBilletBasicInfoAsendAssemblyHandle(resultList.subList(start, end), billetBasicInfoAdd);
+                }
+                // 提取剩余不足4个的坯子, 并更新组批号到数据库中
+                if (size > maxProcessed) {
+                    remainingBillets = billetBasicInfoList.subList(maxProcessed, size);
+                    // 处理当前分组数据
+                    updateBilletBasicInfoAsendAssemblyHandle(remainingBillets, billetBasicInfoAdd);
+                }
+            }
+        }else{
+            if (oConvertUtils.listIsNotEmpty(billetBasicInfoList) && billetBasicInfoList.size() >= 4) {
+                int size = billetBasicInfoList.size();
+                int maxProcessed = (size / 4) * 4; // 计算可处理的最大4的倍数
+                List<BilletBasicInfo> remainingBillets = new ArrayList<>(); // 存储剩余的坯子
+                for (int i = 0; i < maxProcessed; i += 4) {
+                    int start = i;
+                    int end = Math.min(i + 4, maxProcessed);
+                    // 处理当前分组数据
+                    updateBilletBasicInfoAsendAssemblyHandle(billetBasicInfoList.subList(start, end), billetBasicInfoAdd);
+                }
+                // 提取剩余不足4个的坯子, 并更新组批号到数据库中
+                if (size > maxProcessed) {
+                    remainingBillets = billetBasicInfoList.subList(maxProcessed, size);
+                    // 处理当前分组数据
+                    updateBilletBasicInfoAsendAssemblyHandle(remainingBillets, billetBasicInfoAdd);
+                }
+            }
+        }
+    }
+
 
     /**
      * 批量生成
@@ -458,7 +536,7 @@ public class BilletBasicInfoServiceImpl extends ServiceImpl<BilletBasicInfoMappe
      * @param billetHotsend
      * @param heatsActuals
      */
-    private void allBilletBasicInfo(int strandnoIndex, BilletBasicInfo billetBasicInfoLast, BilletBasicInfoAdd billetBasicInfoAdd,
+    private List<BilletBasicInfo> allBilletBasicInfo(int strandnoIndex, BilletBasicInfo billetBasicInfoLast, BilletBasicInfoAdd billetBasicInfoAdd,
                                     int number, String brandNumStr, BilletHotsend billetHotsend, HeatsActuals heatsActuals, int strandNo, int length) {
         List<BilletBasicInfo> billetBasicInfoList = new ArrayList<>();
 
@@ -536,70 +614,8 @@ public class BilletBasicInfoServiceImpl extends ServiceImpl<BilletBasicInfoMappe
                 billetHotsendBaseMapper.updateById(billetHotsend);
             }
         }
-
+        return billetBasicInfoList;
         //
-        //组批逻辑处理 查询钢坯实绩,组批号不为空,belongtable为空
-        List<BilletBasicInfo> availableBilletBasicInfoList = billetBasicInfoMapper.selectList(
-                new QueryWrapper<BilletBasicInfo>()
-                        .eq("ccm_no", billetBasicInfoAdd.getCcmNo())
-                        .eq("heat_no", billetBasicInfoAdd.getHeatNo())
-                        .eq("shift", billetBasicInfoAdd.getShift())
-                        .eq("shift_group", billetBasicInfoAdd.getShiftGroup())
-                        .isNull("belong_table")           // 使用 isNull 代替 eq(null)
-                        .isNotNull("assembly_number")     // 使用 isNotNull 代替 ne(null)
-                        .orderByDesc("create_time"));
-        if (oConvertUtils.listIsNotEmpty(availableBilletBasicInfoList)){
-            // 按assembly_number分组并过滤出数量不等于4的组
-            Map<String, List<BilletBasicInfo>> filteredGroups = availableBilletBasicInfoList.stream()
-                    .collect(Collectors.groupingBy(BilletBasicInfo::getAssemblyNumber))
-                    .entrySet().stream()
-                    .filter(entry -> entry.getValue().size() != 4)
-                    .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
-
-            // 将过滤后的结果,转换为单个列表并设置 assemblyNumber 为 null
-            List<BilletBasicInfo> resultList = filteredGroups.values().stream()
-                    .flatMap(Collection::stream)
-                    .peek(billet -> billet.setAssemblyNumber(null))
-                    .collect(Collectors.toList());
-
-            resultList.addAll(billetBasicInfoList);
-
-            if (oConvertUtils.listIsNotEmpty(resultList) && resultList.size() >= 4) {
-                int size = resultList.size();
-                int maxProcessed = (size / 4) * 4; // 计算可处理的最大4的倍数
-                List<BilletBasicInfo> remainingBillets = new ArrayList<>(); // 存储剩余的坯子
-                for (int i = 0; i < maxProcessed; i += 4) {
-                    int start = i;
-                    int end = Math.min(i + 4, maxProcessed);
-                    // 处理当前分组数据
-                    updateBilletBasicInfoAsendAssemblyHandle(resultList.subList(start, end), billetBasicInfoAdd);
-                }
-                // 提取剩余不足4个的坯子, 并更新组批号到数据库中
-                if (size > maxProcessed) {
-                    remainingBillets = billetBasicInfoList.subList(maxProcessed, size);
-                    // 处理当前分组数据
-                    updateBilletBasicInfoAsendAssemblyHandle(remainingBillets, billetBasicInfoAdd);
-                }
-            }
-        }else{
-            if (oConvertUtils.listIsNotEmpty(billetBasicInfoList) && billetBasicInfoList.size() >= 4) {
-                int size = billetBasicInfoList.size();
-                int maxProcessed = (size / 4) * 4; // 计算可处理的最大4的倍数
-                List<BilletBasicInfo> remainingBillets = new ArrayList<>(); // 存储剩余的坯子
-                for (int i = 0; i < maxProcessed; i += 4) {
-                    int start = i;
-                    int end = Math.min(i + 4, maxProcessed);
-                    // 处理当前分组数据
-                    updateBilletBasicInfoAsendAssemblyHandle(billetBasicInfoList.subList(start, end), billetBasicInfoAdd);
-                }
-                // 提取剩余不足4个的坯子, 并更新组批号到数据库中
-                if (size > maxProcessed) {
-                    remainingBillets = billetBasicInfoList.subList(maxProcessed, size);
-                    // 处理当前分组数据
-                    updateBilletBasicInfoAsendAssemblyHandle(remainingBillets, billetBasicInfoAdd);
-                }
-            }
-        }
     }
 
     /**

+ 18 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/billetHotsend/service/impl/BilletHotsendBaseServiceImpl.java

@@ -1551,6 +1551,7 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 				List<BilletBasicInfo> updateList = new ArrayList<>();
 				int size = finalBilletBasicInfoList.size();
 				int maxProcessed = (size / 4) * 4; // 计算可处理的最大4的倍数
+				List<BilletBasicInfo> remainingBillets = new ArrayList<>(); // 存储剩余的坯子
 				for (int i = 0; i < maxProcessed; i += 4) {
 					int start = i;
 					int end = Math.min(i + 4, maxProcessed);
@@ -1562,6 +1563,14 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 					updateList.addAll(batch);
 				}
 				billetBasicInfoService.batchUpdateAssemblyNumber(updateList);
+				// 提取剩余不足4个的坯子, 并更新组批号到数据库中
+				if (size > maxProcessed) {
+					remainingBillets = finalBilletBasicInfoList.subList(maxProcessed, size);
+					String assemblyNumber = generateUniqueAssemblyNumber(billetBasicInfoAdd.getCcmNo(), billetBasicInfoAdd.getHeatNo());
+					remainingBillets.forEach(item -> item.setAssemblyNumber(assemblyNumber));
+					// 处理当前分组数据
+					billetBasicInfoService.batchUpdateAssemblyNumber(remainingBillets);
+				}
 			}
 			log.info("结束组批号更新处理:"+ DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
 
@@ -1717,6 +1726,7 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 				List<BilletBasicInfo> updateList = new ArrayList<>();
 				int size = finalBilletBasicInfoList.size();
 				int maxProcessed = (size / 4) * 4; // 计算可处理的最大4的倍数
+				List<BilletBasicInfo> remainingBillets = new ArrayList<>(); // 存储剩余的坯子
 				for (int i = 0; i < maxProcessed; i += 4) {
 					int start = i;
 					int end = Math.min(i + 4, maxProcessed);
@@ -1728,6 +1738,14 @@ public class BilletHotsendBaseServiceImpl extends ServiceImpl<BilletHotsendBaseM
 					updateList.addAll(batch);
 				}
 				billetBasicInfoService.batchUpdateAssemblyNumber(updateList);
+				// 提取剩余不足4个的坯子, 并更新组批号到数据库中
+				if (size > maxProcessed) {
+					remainingBillets = finalBilletBasicInfoList.subList(maxProcessed, size);
+					String assemblyNumber = generateUniqueAssemblyNumber(billetBasicInfoAdd.getCcmNo(), billetBasicInfoAdd.getHeatNo());
+					remainingBillets.forEach(item -> item.setAssemblyNumber(assemblyNumber));
+					// 处理当前分组数据
+					billetBasicInfoService.batchUpdateAssemblyNumber(remainingBillets);
+				}
 			}
 			log.info("结束整炉去除棒一组批更新处理:{}" + DateUtils.date2Str(new Date(), DateUtils.datetimeFormat.get()));
 

+ 0 - 1
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/controller/StorageBillController.java

@@ -1954,7 +1954,6 @@ public class StorageBillController extends JeecgController<StorageBill, IStorage
 					.eq(BilletBasicInfo::getShiftGroup, x.getShiftGroup());
 			List<BilletBasicInfo> billetBasicInfoList = billetBasicInfoService.list(queryWrapper2);
 			if (oConvertUtils.listIsEmpty(billetBasicInfoList)){
-				log.info("{}{}", "查询浇筑信息失败,钢坯实绩信息为空!", x.getCcmNo() + "失败时间:" + new Date());
 				return;
 			}
 			// 统计各流号的数量