Преглед изворни кода

棒一工作台过滤炉号中没有棒一的数据以及票据修改时维护堆垛数量跟下垛分开处理

lingpeng.li пре 1 дан
родитељ
комит
f0db081708

+ 33 - 0
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/rollClubOne/service/impl/RollClubOneServiceImpl.java

@@ -397,6 +397,33 @@ public class RollClubOneServiceImpl extends ServiceImpl<RollClubOneMapper, RollC
             log.warn("heatNo 集合为空,跳过 billet_hotsend 查询");
         }
 
+        // 4. 补全未查到 billet_hotsend 的记录,使用 rollOneMap 的数据构造
+        for (Map.Entry<String, RollClubOneHeatVO.RollOneHeatNo> entry : rollOneMap.entrySet()) {
+            String key = entry.getKey(); // heatNo_shift_shiftGroup
+            if (heatNoDetailMap.containsKey(key)) continue; // 已处理则跳过
+
+            RollClubOneHeatVO.RollOneHeatNo rollOne = entry.getValue();
+            String[] parts = key.split("_", 3);
+            String heatNo = parts[0];
+            String shift = parts[1];
+            String shiftGroup = parts[2];
+
+            RollClubOneVO.HeatNoDetail detail = new RollClubOneVO.HeatNoDetail();
+            detail.setHeatNo(heatNo);
+            detail.setShift(shift);
+            detail.setShiftGroup(shiftGroup);
+            detail.setHeatNoAmount(rollOne.getTotalAmount() != null ? rollOne.getTotalAmount() : 0);
+            detail.setHeatNoWeight(rollOne.getTotalWeight() != null ? rollOne.getTotalWeight() : BigDecimal.ZERO);
+
+            if (CollectionUtils.isNotEmpty(rollOne.getRollSendDetails()) && rollOne.getRollSendDetails().get(0).getCreateTime() != null) {
+                detail.setCreateTime(rollOne.getRollSendDetails().get(0).getCreateTime());
+            } else {
+                detail.setCreateTime(null); // 可设为 new Date() 或保持为 null
+            }
+
+            heatNoDetailMap.put(key, detail);
+        }
+
         // 4. 组装结果:遍历 heatNo_shift_shiftGroup 聚合数据
         for (String key : rollOneMap.keySet()) {
             RollClubOneVO invoicingVO = new RollClubOneVO();
@@ -551,6 +578,12 @@ public class RollClubOneServiceImpl extends ServiceImpl<RollClubOneMapper, RollC
                         );
                     }
 
+                    // 【新增】跳过没有定尺数据的记录
+                    if (lengthCountMap.isEmpty()) {
+                        log.info("heatNo={} 的 lengthGroupCount 为空,跳过处理", heatNo);
+                        continue;
+                    }
+
                     // 4. 根据每种定尺构建 sizeDetail & rollSendDetail
                     for (Map.Entry<String, Integer> entry : lengthCountMap.entrySet()) {
                         String length = entry.getKey();

+ 15 - 15
zgztBus/jeecg-module-sbm/src/main/java/org/jeecg/modules/billet/storageBill/service/impl/StorageBillPrintServiceImpl.java

@@ -1804,6 +1804,7 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
 
             int delta = currentCount;
 
+            // 已打印记录时计算增量
             if (alreadyPrinted) {
                 int previousCount = existingPrints.stream()
                         .mapToInt(print -> {
@@ -1863,18 +1864,17 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
             int availableCount = vehicles.size();
             int processCount = Math.min(fetchCount, availableCount);
 
-            if (processCount == 0) {
+            // 堆垛处理(如果有可用垛位)
+            if (processCount > 0) {
+                List<StackingAndLoadingVehicles> selected = new ArrayList<>(vehicles.subList(0, processCount));
+                vehicles.subList(0, processCount).clear();
+
+                handleStackDepartCommon(billetHotsend, selected, addDTO, billetHotsendTypeConfig, storageBill);
+            } else {
                 skippedHeatNos.add(heatNo + "(可用垛位不足)");
-                continue;
             }
 
-            List<StackingAndLoadingVehicles> selected = new ArrayList<>(vehicles.subList(0, processCount));
-            vehicles.subList(0, processCount).clear();
-
-            // 执行堆垛处理
-            handleStackDepartCommon(billetHotsend, selected, addDTO, billetHotsendTypeConfig, storageBill);
-
-            // 查询原始记录
+            // ========== 不论是否堆垛成功,统一处理 stackLength 扣减 ==========
             LambdaQueryWrapper<BilletOriginalProductRecord> recordWrapper = new LambdaQueryWrapper<>();
             recordWrapper.eq(BilletOriginalProductRecord::getHeatNo, heatNo)
                     .eq(BilletOriginalProductRecord::getCcmNo, addDTO.getCcmNo())
@@ -1883,18 +1883,17 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
 
             BilletOriginalProductRecord originalRecord = billetOriginalProductRecordService.getOne(recordWrapper);
 
-            // 只有 shift 和 shiftGroup 与 redis 中一致时才处理
             if (originalRecord != null
                     && StringUtils.equals(shift, originalRecord.getShift())
                     && StringUtils.equals(shiftGroup, originalRecord.getShiftGroup())
                     && isSameDay(originalRecord.getCreateTime(), new Date())) {
 
-                // 扣减 stackLength 中支数
-                if (StringUtils.isNotBlank(originalRecord.getStackLength())) {
+                if (fetchCount > 0 && StringUtils.isNotBlank(originalRecord.getStackLength())) {
                     try {
-                        List<Map<String, Object>> stackList = JSON.parseObject(originalRecord.getStackLength(),
-                                new TypeReference<List<Map<String, Object>>>() {
-                                });
+                        List<Map<String, Object>> stackList = JSON.parseObject(
+                                originalRecord.getStackLength(),
+                                new TypeReference<List<Map<String, Object>>>() {}
+                        );
 
                         for (Map<String, Object> item : stackList) {
                             Integer length = Integer.parseInt(item.get("stackingLength").toString());
@@ -1922,6 +1921,7 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
             }
         }
 
+
         result.put("success", "堆垛保存完成");
         if (!skippedHeatNos.isEmpty()) {
             result.put("skipped", skippedHeatNos);