Selaa lähdekoodia

feature 代码提交 解决没有后续工作业 导致无法正确流转的问题

xiahan 11 kuukautta sitten
vanhempi
commit
c21b7c3df1

+ 45 - 20
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ReportCheckServiceImpl.java

@@ -52,7 +52,7 @@ public class ReportCheckServiceImpl implements ReportCheckService {
     public static final String COMPLETED = "已完工";
     public static final String SEMIFINISHED_PRODUCTS = "半成品备料";
     public static final String WORK_IN_PROCESS = "在制品";
-    public static final String MATERIAL_PREPARATION_ORDER="备料订单";
+    public static final String MATERIAL_PREPARATION_ORDER = "备料订单";
     private final Logger log = LoggerFactory.getLogger(this.getClass().getName());
     @Autowired
     private ApsReportRecordsService apsReportRecordsService;
@@ -278,19 +278,42 @@ public class ReportCheckServiceImpl implements ReportCheckService {
                                     ApsProcessOperationProcessEquDo currentProcessOperationEqu,
                                     ApsReportRecordsDo reportRecordsDo,
                                     ApsProductionOrderDo productionOrderDo) {
-        // 获取当前工序作业对应的下一个工序作业 以及工序作业明细信息
+        // 获取当前工序作业对应的下一个工序作业ID
+        String nextProcessId = currentProcessOperationDo.getNextprocessid();
+        // 获取当前工序作业明细对应的下一个工序作也明细ID
         String nextProcessesIds = currentProcessOperationEqu.getNextprocessesids();
-        log.debug("当前工序作业明细对应的下一个工序作业信息ID:{}", nextProcessesIds);
-        // 被流转的工序作业明细
-        List<ApsProcessOperationProcessEquDo> nextProcessOperationProcessEquDos = apsProcessOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
-                .in(ApsProcessOperationProcessEquDo::getId, Arrays.asList(nextProcessesIds.split(",")))
-                .eq(BaseDo::getDeleted, NO_DELETED));
-        List<String> nextProcessIds = nextProcessOperationProcessEquDos.stream().map(ApsProcessOperationProcessEquDo::getProcessid).distinct().collect(Collectors.toList());
-        log.debug("当前工序作业明细对应的下一个工序作业ID:{}", nextProcessIds);
-        // 被流转的工序作业
-        List<ApsProcessOperationDo> nextProcessList = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
-                .in(ApsProcessOperationDo::getId, nextProcessIds)
-                .eq(BaseDo::getDeleted, NO_DELETED));
+        log.debug("当前作业对应的下一个工序作业:{}以及下一个工序作业明细:{}", nextProcessId, nextProcessesIds);
+        if ((StringUtils.isNotBlank(nextProcessId) && StringUtils.isBlank(nextProcessesIds)) ||
+                StringUtils.isBlank(nextProcessId) && StringUtils.isNotBlank(nextProcessesIds)) {
+            log.error("当前作业的下一个 工序作业id或者工序作业明细id 为空");
+            throw new CustomException("工序作业数据异常");
+        }
+        List<ApsProcessOperationProcessEquDo> nextProcessOperationProcessEquDos = new ArrayList<>();
+        List<ApsProcessOperationDo> nextProcessList = new ArrayList<>();
+        if (StringUtils.isNotBlank(nextProcessesIds)) {
+            // 被流转的工序作业明细
+            nextProcessOperationProcessEquDos = apsProcessOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+                    .in(ApsProcessOperationProcessEquDo::getId, Arrays.asList(nextProcessesIds.split(",")))
+                    .eq(BaseDo::getDeleted, NO_DELETED));
+            if (nextProcessOperationProcessEquDos.isEmpty()) {
+                log.error("无法根据nextProcessesIds:{},找到工序作业明细信息", nextProcessesIds);
+                throw new CustomException("无法找到下一个工序作业明细信息");
+            }
+            List<String> nextProcessIds = nextProcessOperationProcessEquDos.stream().map(ApsProcessOperationProcessEquDo::getProcessid).distinct().collect(Collectors.toList());
+            if (nextProcessIds.isEmpty()) {
+                log.error("当前作业明细:{},无法找到对应的工序作业信息", nextProcessesIds);
+                throw new CustomException("无法找到工序作业信息");
+            }
+            log.debug("当前工序作业明细对应的下一个工序作业ID:{}", nextProcessIds);
+            // 被流转的工序作业
+            nextProcessList = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
+                    .in(ApsProcessOperationDo::getId, nextProcessIds)
+                    .eq(BaseDo::getDeleted, NO_DELETED));
+            if (nextProcessList.isEmpty()) {
+                log.error("根据nextProcessIds:{},找到工序作业明细信息", nextProcessesIds);
+                throw new CustomException("无法找到工序作业");
+            }
+        }
         //当前报工记录对应的输入物料数量
         int inputNum = StringUtils.isBlank(reportRecordsDo.getNeedcheckbatchnumber()) ? 1 : reportRecordsDo.getNeedcheckbatchnumber().split(",").length;
 
@@ -473,12 +496,12 @@ public class ReportCheckServiceImpl implements ReportCheckService {
                     // 添加需要流转的编号信息
                     toBeProcessedDataMap.put(outputId, outputNumbers);
                 }
-                if(MATERIAL_PREPARATION_ORDER.equals(productionOrderDo.getOrdertype())){
+                if (MATERIAL_PREPARATION_ORDER.equals(productionOrderDo.getOrdertype())) {
                     log.debug("订单类型为备料");
                     // 更新成品的在制品状态
                     updateWorkInProgressInventoryStatus(blScNum + lzScNum, cpScNum, YES,
                             apsWorkInProgressInventoryDos, currentReportOutputs, WAITING, PASS);
-                }else{
+                } else {
                     // 更新成品的在制品状态
                     updateWorkInProgressInventoryStatus(blScNum + lzScNum, cpScNum, YES,
                             apsWorkInProgressInventoryDos, currentReportOutputs, TO_BE_PUT_INTO_STORAGE, PASS);
@@ -490,10 +513,12 @@ public class ReportCheckServiceImpl implements ReportCheckService {
         apsWorkInProgressInventoryService.saveOrUpdateBatch(apsWorkInProgressInventoryDos);
         // 保存工序作业输出物料
         apsProcessOperationOutMaterService.saveOrUpdateBatch(operationOutMaterDoList);
-        // 批次号流转至下一工序
-        batchNumberCirculation(nextProcessOperationProcessEquDos, nextProcessList, toBeProcessedDataMap);
-        // 更新流转取消数量
-        circulationCancellation(nextProcessOperationProcessEquDos, nextProcessList, circulationCancellationMap);
+        if (!nextProcessOperationProcessEquDos.isEmpty() && !nextProcessList.isEmpty()) {
+            // 批次号流转至下一工序
+            batchNumberCirculation(nextProcessOperationProcessEquDos, nextProcessList, toBeProcessedDataMap);
+            // 更新流转取消数量
+            circulationCancellation(nextProcessOperationProcessEquDos, nextProcessList, circulationCancellationMap);
+        }
     }
 
     /**
@@ -507,7 +532,7 @@ public class ReportCheckServiceImpl implements ReportCheckService {
         if (circulationCancellationMap.isEmpty()) {
             log.debug("暂无需要取消流转的批次号信息");
         }
-        log.debug("本次检验不合格的输出物料id:{}",circulationCancellationMap.keySet());
+        log.debug("本次检验不合格的输出物料id:{}", circulationCancellationMap.keySet());
         ApsProcessOperationDo apsProcessOperationDo;
         CancelProcessOperationVo cancelProcessOperationVo;
         for (Map.Entry<String, Integer> entry : circulationCancellationMap.entrySet()) {