Bläddra i källkod

feature 修改发布逻辑

xiahan 1 år sedan
förälder
incheckning
7095ab1270

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

@@ -182,19 +182,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             logger.error("所选坯料计划:{}存在冲突", blankIds);
             return R.error("请先解决排程冲突在发布");
         }
-        // 判断是否存在已发布的工序作业
-        List<ApsBlankOrderDo> apsBlankOrderDos = this.baseMapper.selectBatchIds(blankIds);
-        List<String> searchCondition = new ArrayList<String>() {{
-            add("30");
-            add("20");
-            add("10");
-        }};
-        List<ApsBlankOrderDo> collect1 = apsBlankOrderDos.stream().filter(info -> !searchCondition.contains(info.getProductstatus())).collect(Collectors.toList());
-        if (!collect1.isEmpty()) {
-            logger.error("存在已开工的坯料计划:{}", collect1);
-            return R.error("存在已开工的坯料计划");
-        }
-        // 如果 订单排程交货期>承诺交货期 抛出异常信息
+       // 如果 订单排程交货期>承诺交货期 抛出异常信息
         List<ApsProductionOrderDo> dataByBlankId = apsProcessOperationDao.getDataByBlankId(blankIds);
         if (!dataByBlankId.isEmpty()) {
             String collect = dataByBlankId.stream()
@@ -211,38 +199,57 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             log.error("当前坯料计划不存在工序作业明细");
             return R.error("无法根据坯料计划找到工序作业明细");
         }
-        // 判断是否存在强制冲突不为空的数据
+         // 判断是否存在强制冲突不为空的数据
         boolean b = processOperationProcessEquDos.stream().anyMatch(info -> StringUtils.isNotBlank(info.getConflictdes()));
         if (b) {
             log.error("存在强制冲突无法发布");
             return R.error("请先解决冲突在发布");
         }
-        // 更新坯料计划的生产状态为已发布
-        this.update(new LambdaUpdateWrapper<ApsBlankOrderDo>().in(ApsBlankOrderDo::getId, blankIds)
-                .set(ApsBlankOrderDo::getProductstatus, "30")
-                .set(ApsBlankOrderDo::getSchedulingstatus, PUBLISHED)
-                .set(ApsBlankOrderDo::getLockmark, LOCKMARK_Y));
-        // 更新坯料计划对应工序作业的状态为待开工
-        apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
-                .in(ApsProcessOperationDo::getBlankid, blankIds)
-                .set(ApsProcessOperationDo::getProcessstatus, "30")
-                .set(ApsProcessOperationDo::getLockmark, LOCKMARK_Y)
-                .set(ApsProcessOperationDo::getWorkstatus, JOBSTATUS_TO_BE_START));
-        // 更新坯料计划对应产品明细的生产状态为待开工
-        apsProductDetailDao.updateProductStatusByBlankId(blankIds, "30");
-        // 更新工序作业明细的生产状态为待开工
-        processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
-                .in(ApsProcessOperationProcessEquDo::getId, processOperationProcessEquDos.stream().map(ApsProcessOperationProcessEquDo::getId).collect(Collectors.toList()))
-                .set(ApsProcessOperationProcessEquDo::getLockmark, LOCKMARK_Y)
-                .set(ApsProcessOperationProcessEquDo::getWorkstatus, JOBSTATUS_TO_BE_START)
-        );
-        List<String> collect = apsBlankOrderDos.stream().map(ApsBlankOrderDo::getProductionorderid).distinct().collect(Collectors.toList());
-        // 更新工序作业的状态
-        apsProcessOperationDao.publish(collect);
-        // 更新订单表的生产状态
+        List<String> productionOrderIds = new ArrayList<>();
         blankIds.forEach(blankId -> {
-            processOperationProcessEquService.updateOrder(blankId);
+            // 更新工序作业生产状态
+            apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
+                    .eq(ApsProcessOperationDo::getBlankid, blankId)
+                    .eq(ApsProcessOperationDo::getProcessstatus,TO_BE_PUBLISHED)
+                    .set(ApsProcessOperationDo::getProcessstatus,TO_BE_STARTED)
+                    .set(ApsProcessOperationDo::getLockmark, LOCKMARK_Y));
+            // 工序作业信息
+            List<ApsProcessOperationDo> processOperationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
+                    .eq(ApsProcessOperationDo::getBlankid, blankId).orderByDesc(ApsProcessOperationDo::getProcessstatus));
+            // 坯料计划排程状态
+            String schedulingstatus;
+            // 坯料计划生产状态
+            String producttStatus;
+            if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_PUBLISHED)) {
+                schedulingstatus = SCHEDULSTATUS_TORELEASE;
+                producttStatus = TO_BE_PUBLISHED;
+            } else if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_SCHEDULED)) {
+                schedulingstatus = SCHEDULSTATUS_TOSCHEDULE;
+                producttStatus = TO_BE_SCHEDULED;
+            } else {
+                schedulingstatus = SCHEDULSTATUS_HASRELEASE;
+                List<String> processStatusList = processOperationDos.stream()
+                        .map(ApsProcessOperationDo::getProcessstatus)
+                        .distinct()
+                        .collect(Collectors.toList());
+                if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_STARTED)) {
+                    producttStatus = TO_BE_STARTED;
+                } else if (processStatusList.size() == 1 && processStatusList.get(0).equals(COMPLETED)) {
+                    producttStatus = COMPLETED;
+                } else {
+                    producttStatus = PROCESSING;
+                }
+            }
+            ApsBlankOrderDo blankOrderDo = this.getById(blankId);
+            productionOrderIds.add(blankOrderDo.getProductionorderid());
+            this.update(new LambdaUpdateWrapper<ApsBlankOrderDo>().eq(ApsBlankOrderDo::getId, blankId)
+                    .set(ApsBlankOrderDo::getProductstatus, producttStatus)
+                    .set(ApsBlankOrderDo::getSchedulingstatus, schedulingstatus));
         });
+        // 更新产品明细的生产状态
+        apsProductDetailDao.publishCancel(blankIds);
+        // 更新订单的生产状态
+        apsProcessOperationDao.publishCancel(productionOrderIds);
         // 根据坯料ID 删除 备份数据
         ApsUtils.clearBackup(null);
         return R.ok();