Browse Source

装运单打印单修改时下垛时验证是否是当天当前班组班别

lingpeng.li 2 weeks ago
parent
commit
e6d2da3d71

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

@@ -1758,7 +1758,14 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
         JSONObject result = new JSONObject();
         List<String> skippedHeatNos = new ArrayList<>();
 
-        // 根据 billetHotsendTypeConfigId 查询基础垛位信息
+        String ccmNo = addDTO.getCcmNo() == null || addDTO.getCcmNo().isEmpty() ? "5" : addDTO.getCcmNo();
+        String classShift = String.format("class:shift:%s", ccmNo);
+        String classShiftGroup = String.format("class:shift:group:%s", ccmNo);
+
+        String shift = oConvertUtils.getString(redisTemplate.opsForValue().get(classShift));
+        String shiftGroup = oConvertUtils.getString(redisTemplate.opsForValue().get(classShiftGroup));
+
+        // 查询基础垛位信息
         BilletHotsendTypeConfig billetHotsendTypeConfig = billetHotsendTypeConfigService.getByParam(addDTO);
 
         // 查询是否已存在打印记录
@@ -1792,7 +1799,6 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
             int delta = currentCount;
 
             if (alreadyPrinted) {
-                // 汇总历史支数
                 int previousCount = existingPrints.stream()
                         .mapToInt(print -> {
                             try {
@@ -1821,7 +1827,6 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
                 }
 
             } else {
-                // 首次:支数必须为4的倍数
                 if (currentCount % 4 != 0) {
                     skippedHeatNos.add(heatNo + "(支数非4倍数)");
                     continue;
@@ -1860,10 +1865,7 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
             List<StackingAndLoadingVehicles> selected = new ArrayList<>(vehicles.subList(0, processCount));
             vehicles.subList(0, processCount).clear();
 
-            // 执行堆垛逻辑
-            handleStackDepartCommon(billetHotsend, selected, addDTO, billetHotsendTypeConfig, storageBill);
-
-            // 每次处理完成后,扣减原始记录中的 stack_length 数量
+            // 查询原始记录
             LambdaQueryWrapper<BilletOriginalProductRecord> recordWrapper = new LambdaQueryWrapper<>();
             recordWrapper.eq(BilletOriginalProductRecord::getHeatNo, heatNo)
                     .eq(BilletOriginalProductRecord::getCcmNo, addDTO.getCcmNo())
@@ -1871,43 +1873,59 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
                     .last("limit 1");
 
             BilletOriginalProductRecord originalRecord = billetOriginalProductRecordService.getOne(recordWrapper);
-            if (originalRecord != null && StringUtils.isNotBlank(originalRecord.getStackLength())) {
-                try {
-                    List<Map<String, Object>> stackList = JSON.parseObject(originalRecord.getStackLength(),
-                            new TypeReference<List<Map<String, Object>>>() {
-                            });
-
-                    // 找到匹配的 stackingLength 项进行扣减(定尺匹配)
-                    for (Map<String, Object> item : stackList) {
-                        Integer length = Integer.parseInt(item.get("stackingLength").toString());
-                        if (length != null && length.toString().equals(addDTO.getSize())) {
-                            Integer count = (Integer) item.get("stackingCount");
-                            if (count != null && count >= fetchCount * 4) {
-                                item.put("stackingCount", count - fetchCount * 4);
-                            } else {
-                                // 扣减超过当前数量,按0处理
-                                item.put("stackingCount", 0);
+
+            // 只有 shift 和 shiftGroup 与 redis 中一致时才处理
+            if (originalRecord != null
+                    && StringUtils.equals(shift, originalRecord.getShift())
+                    && StringUtils.equals(shiftGroup, originalRecord.getShiftGroup())
+                    && isSameDay(originalRecord.getCreateTime(), new Date())) {
+
+                // 执行堆垛处理
+                handleStackDepartCommon(billetHotsend, selected, addDTO, billetHotsendTypeConfig, storageBill);
+
+                // 扣减 stackLength 中支数
+                if (StringUtils.isNotBlank(originalRecord.getStackLength())) {
+                    try {
+                        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());
+                            if (length != null && length.toString().equals(addDTO.getSize())) {
+                                Integer count = (Integer) item.get("stackingCount");
+                                if (count != null && count >= fetchCount * 4) {
+                                    item.put("stackingCount", count - fetchCount * 4);
+                                } else {
+                                    item.put("stackingCount", 0);
+                                }
+                                break;
                             }
-                            break;
                         }
-                    }
 
-                    // 更新记录
-                    originalRecord.setStackLength(JSON.toJSONString(stackList));
-                    billetOriginalProductRecordService.updateById(originalRecord);
+                        originalRecord.setStackLength(JSON.toJSONString(stackList));
+                        billetOriginalProductRecordService.updateById(originalRecord);
 
-                } catch (Exception e) {
-                    log.error("解析 stack_length 出错", e);
+                    } catch (Exception e) {
+                        log.error("解析 stack_length 出错", e);
+                    }
                 }
+
+            } else {
+                skippedHeatNos.add(heatNo + "(班次或班组不一致,跳过处理)");
             }
         }
 
         result.put("success", "堆垛保存完成");
+        if (!skippedHeatNos.isEmpty()) {
+            result.put("skipped", skippedHeatNos);
+        }
 
         return result;
     }
 
 
+
     /**
      * 堆垛保存、堆垛发车公共处理
      *
@@ -1950,4 +1968,11 @@ public class StorageBillPrintServiceImpl extends ServiceImpl<StorageBillPrintMap
         return stackingAndLoadingVehiclesList.stream().collect(Collectors.groupingBy(stackingAndLoadingVehicles -> stackingAndLoadingVehicles.getHeatNo() + "," + stackingAndLoadingVehicles.getShiftGroup() + "," + stackingAndLoadingVehicles.getShift()));
     }
 
+    private boolean isSameDay(Date d1, Date d2) {
+        if (d1 == null || d2 == null) return false;
+        LocalDate date1 = d1.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        LocalDate date2 = d2.toInstant().atZone(ZoneId.systemDefault()).toLocalDate();
+        return date1.equals(date2);
+    }
+
 }