Kaynağa Gözat

aps-公共方法-更新工序作业状态 更新

sucheng 1 yıl önce
ebeveyn
işleme
7e0fa2d246

+ 97 - 56
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationProcessEquServiceImpl.java

@@ -66,11 +66,11 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
      * @param ids
      * @param batchNumn
      */
-    public void updateBachmaterialprocessByIds(List<String> ids, String batchNumn,String nextprocessesids) {
+    public void updateBachmaterialprocessByIds(List<String> ids, String batchNumn, String nextprocessesids) {
         if (StringUtils.isNotBlank(batchNumn)) {
             apsProcessOperationProcessEquDao.updateBachmaterialprocessByIds(ids, batchNumn,
-                    StringUtils.isBlank(nextprocessesids)?null:Arrays.asList(nextprocessesids.split(","))
-                    );
+                    StringUtils.isBlank(nextprocessesids) ? null : Arrays.asList(nextprocessesids.split(","))
+            );
         }
     }
 
@@ -150,63 +150,104 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
      * @param processOperationEquId
      */
     public String updateProcessByProcessEquId(String processOperationEquId) {
-        //查询所有子表明细的最小生产状态和工序作业ID
-        CommonUpdateProductionStatusReq one = this.baseMapper.selectEquMinStatus(processOperationEquId);
-        if (ObjectUtil.isEmpty(one)) {
-            return "";
-        }
-        //工序作业ID
-        String processId = one.getProcessOperationId();
+        ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquDao.selectById(processOperationEquId);
+        ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(apsProcessOperationProcessEquDo.getProcessid());
 
-        //计算工序作业的完工状态
-        /**
-         * 如果没有作业明细,并且未完工卷数=0,或者有作业明细,并且所有作业明细完工状态=已完工,则=已完工
-         * 如果没有作业明细,并且未完工卷数>0,或者有作业明细,并且任一作业明细完工状态=未完工,则=未完工
-         */
-        ApsProcessOperationDo apsProcessOperationDo = new ApsProcessOperationDo();
-        //更新工序作业的完工状态
-        apsProcessOperationDo.setClosestatus(one.getProductionStatus());
-        //查询工序作业信息
-        ApsProcessOperationDo processOperationDo = apsProcessOperationService.getById(processId);
-        //已开工卷数
-        Integer startingroll = processOperationDo.getStartingroll();
-        //计划加工卷数
-        Integer planprocessrall = processOperationDo.getPlanprocessrall();
-        //未完工卷数
-        Integer unfinishroll = planprocessrall - startingroll;
-        //计算作业状态
+        ApsProcessOperationDo needUpdateProcessOperation = new ApsProcessOperationDo();
+        needUpdateProcessOperation.setId(apsProcessOperationDo.getId());
+        //剩余待报工卷数=未完工卷数-输入已取消卷数-已取消卷数
+        int needReportRoll = needUpdateProcessOperation.getUnfinishroll() - apsProcessOperationDo.getInputunqualifiedroll() - apsProcessOperationDo.getCancelroll();
+        if (needReportRoll <= 0) {
+            needReportRoll = 0;
+        }
+        needUpdateProcessOperation.setLeavewaitjobroll(needReportRoll);
         /**
-         * 如果已开工卷数=0,则=待开工;
-         * 如果已开工卷数>0,并且完工状态=未完工,则=加工中;(先更新完工状态)
-         * 如果未完工卷数=0,并且完工状态=已完工,则=已完工(先更新完工状态)
+         * 如果剩余待报工卷数=0,则完工状态=已完工,实际完工时间=当前时间
+         * 如果剩余待报工卷数>0,则完工状态=未完工
+         *
+         * 如果完工状态=未完工,并且已开工卷数=0,则作业状态=待开工;
+         * 如果完工状态=未完工,并且已开工卷数>0,则作业状态=加工中;
+         * 如果完工状态=已完工,则作业状态=已完工
+         * 生产状态=作业状态
          */
-        if (startingroll <= 0) {
-            apsProcessOperationDo.setWorkstatus("待开工");
-            //容错修正
-            apsProcessOperationDo.setStartingroll(0);
-        }
-        if (startingroll > 0 && apsProcessOperationDo.getClosestatus().equals("未完工")) {
-            apsProcessOperationDo.setWorkstatus("加工中");
-        }
-        if (unfinishroll <= 0 && apsProcessOperationDo.getClosestatus().equals("已完工")) {
-            apsProcessOperationDo.setWorkstatus("已完工");
-        }
+        if (needReportRoll <= 0) {
+            needUpdateProcessOperation.setClosestatus("已完工");
+            needUpdateProcessOperation.setActualfinishdate(DateUtil.date());
+            needUpdateProcessOperation.setWorkstatus("已完工");
+            needUpdateProcessOperation.setProcessstatus(COMPLETED);
+        }
+        if (needReportRoll > 0) {
+            needUpdateProcessOperation.setClosestatus("未完工");
+            if (apsProcessOperationDo.getStartingroll() == 0) {
+                needUpdateProcessOperation.setWorkstatus("待开工");
+                needUpdateProcessOperation.setProcessstatus(TO_BE_STARTED);
+            } else {
+                needUpdateProcessOperation.setWorkstatus("加工中");
+                needUpdateProcessOperation.setProcessstatus(PROCESSING);
+            }
 
-        //更新工序作业的生产状态
-        //开工和报工检验后,生产状态=作业状态(先更新作业状态)
-        if (apsProcessOperationDo.getWorkstatus().equals("待开工")) {
-            apsProcessOperationDo.setProcessstatus(TO_BE_STARTED);
         }
-        if (apsProcessOperationDo.getWorkstatus().equals("加工中")) {
-            apsProcessOperationDo.setProcessstatus(PROCESSING);
-        }
-        if (apsProcessOperationDo.getWorkstatus().equals("已完工")) {
-            apsProcessOperationDo.setProcessstatus(COMPLETED);
-        }
-        apsProcessOperationDo.setId(processId);
-        apsProcessOperationService.updateById(apsProcessOperationDo);
 
-        return one.getProcessOperationId();
+        apsProcessOperationService.updateById(needUpdateProcessOperation);
+
+//        //查询所有子表明细的最小生产状态和工序作业ID
+//        CommonUpdateProductionStatusReq one = this.baseMapper.selectEquMinStatus(processOperationEquId);
+//        if (ObjectUtil.isEmpty(one)) {
+//            return "";
+//        }
+//        //工序作业ID
+//        String processId = one.getProcessOperationId();
+//
+//        //计算工序作业的完工状态
+//        /**
+//         * 如果没有作业明细,并且未完工卷数=0,或者有作业明细,并且所有作业明细完工状态=已完工,则=已完工
+//         * 如果没有作业明细,并且未完工卷数>0,或者有作业明细,并且任一作业明细完工状态=未完工,则=未完工
+//         */
+//        ApsProcessOperationDo apsProcessOperationDo = new ApsProcessOperationDo();
+//        //更新工序作业的完工状态
+//        apsProcessOperationDo.setClosestatus(one.getProductionStatus());
+//        //查询工序作业信息
+//        ApsProcessOperationDo processOperationDo = apsProcessOperationService.getById(processId);
+//        //已开工卷数
+//        Integer startingroll = processOperationDo.getStartingroll();
+//        //计划加工卷数
+//        Integer planprocessrall = processOperationDo.getPlanprocessrall();
+//        //未完工卷数
+//        Integer unfinishroll = planprocessrall - startingroll;
+//        //计算作业状态
+//        /**
+//         * 如果已开工卷数=0,则=待开工;
+//         * 如果已开工卷数>0,并且完工状态=未完工,则=加工中;(先更新完工状态)
+//         * 如果未完工卷数=0,并且完工状态=已完工,则=已完工(先更新完工状态)
+//         */
+//        if (startingroll <= 0) {
+//            apsProcessOperationDo.setWorkstatus("待开工");
+//            //容错修正
+//            apsProcessOperationDo.setStartingroll(0);
+//        }
+//        if (startingroll > 0 && apsProcessOperationDo.getClosestatus().equals("未完工")) {
+//            apsProcessOperationDo.setWorkstatus("加工中");
+//        }
+//        if (unfinishroll <= 0 && apsProcessOperationDo.getClosestatus().equals("已完工")) {
+//            apsProcessOperationDo.setWorkstatus("已完工");
+//        }
+//
+//        //更新工序作业的生产状态
+//        //开工和报工检验后,生产状态=作业状态(先更新作业状态)
+//        if (apsProcessOperationDo.getWorkstatus().equals("待开工")) {
+//            apsProcessOperationDo.setProcessstatus(TO_BE_STARTED);
+//        }
+//        if (apsProcessOperationDo.getWorkstatus().equals("加工中")) {
+//            apsProcessOperationDo.setProcessstatus(PROCESSING);
+//        }
+//        if (apsProcessOperationDo.getWorkstatus().equals("已完工")) {
+//            apsProcessOperationDo.setProcessstatus(COMPLETED);
+//        }
+//        apsProcessOperationDo.setId(processId);
+//        apsProcessOperationService.updateById(apsProcessOperationDo);
+//
+//        return one.getProcessOperationId();
+        return apsProcessOperationDo.getId();
     }
 
     /**
@@ -239,11 +280,11 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
             log.error("无法获取到工序作业明细");
             return R.error("无法获取到工序作业明细");
         }
-        if(apsProcessOperationProcessEquDos.size()!=changingWiresVos.size()){
+        if (apsProcessOperationProcessEquDos.size() != changingWiresVos.size()) {
             log.error("本次换线操作存在无法获取作业明细的数据");
             return R.error("本次换线操作存在无法获取作业明细的数据!请联系系统管理员");
         }
-        
+
         // 校验是否存在已完工的工序作业
         boolean hasCompletedWork = apsProcessOperationProcessEquDos.stream()
                 .anyMatch(info -> JOBSTATUS_TO_BE_END.equals(info.getWorkstatus()));