Jelajahi Sumber

aps-开工、报工、取消开工合并加工工序处理

sucheng 5 bulan lalu
induk
melakukan
db12d9980e

+ 3 - 1
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsReportRecordsDao.java

@@ -59,11 +59,13 @@ public interface ApsReportRecordsDao extends BaseMapper<ApsReportRecordsDo> {
     @Update("update aps_process_operation_process_equ set BACHMATERIALPROCESS = REPLACE(REPLACE(REPLACE(BACHMATERIALPROCESS,'${inputBatchNumber},',''),',${inputBatchNumber}',''),'${inputBatchNumber}','') where DELETED = 0 AND ID IN ('${ids}')")
     void updateAllProcessEquBatchNumberByIds(@Param("inputBatchNumber") String inputBatchNumber, @Param("ids") String ids);
 
-    @Select("select * from aps_process_operation_process_equ where DELETED = 0 AND ID != #{id} AND PROCESSDEVICEID = #{processdeviceid} AND PLANSTARTDATE = #{planstartdate} AND (WAITREPORTID is null or WAITREPORTID = '') AND CLOSESTATUS = '未完工'")
+    @Select("select * from aps_process_operation_process_equ where DELETED = 0 AND ID != #{id} AND PROCESSDEVICEID = #{processdeviceid} AND PLANSTARTDATE = #{planstartdate} AND (WAITREPORTID is null or WAITREPORTID = '') AND WORKSTATUS = '待开工'")
     List<ApsProcessOperationProcessEquDo> selectOtherMergeProcessEqu(@Param("id") String id, @Param("processdeviceid") String processdeviceid, @Param("planstartdate") Date planstartdate);
 
 //    @Select("select * from aps_process_operation_process_equ where DELETED = 0 AND ID != #{id} AND PROCESSDEVICEID = #{processdeviceid} AND PLANSTARTDATE = #{planstartdate} AND WAITREPORTID is not null AND WAITREPORTID != ''")
     List<ApsProcessOperationProcessEquDo> selectOtherMergeProcessStarting(@Param("id") String id, @Param("processdeviceid") String processdeviceid);
 
     List<ProcessOutputAndInputNumber> selectInputAndOutputNumByProcessId(@Param("processIds")List<String> processIds);
+
+    List<ApsProcessOperationProcessEquDo> selectOtherMergeProcessEquByHeat(@Param("id") String id, @Param("processdeviceid") String processdeviceid, @Param("heatnumber") String heatnumber);
 }

+ 117 - 253
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportRecordsServiceImpl.java

@@ -260,64 +260,10 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         //查询作业明细详情
         ApsProcessOperationProcessEquDo equDo = apsProcessOperationProcessEquDao.selectById(processequid);
 
-//        //更新设备的待报工记录ID
-//        apsProcessOperationProcessEquDao.updateEquByCancelRecord(recordId, equDo.getProcessdeviceid());
-
-//        //作业明细的作业状态
-//        /**
-//         * 如果已开工卷数=0,则=待开工;
-//         * 如果已开工卷数>0,并且完工状态=未完工,则=加工中;(先更新完工状态)
-//         * 如果未完工卷数=0,并且完工状态=已完工,则=已完工(先更新完工状态)
-//         */
-//        LambdaUpdateWrapper<ApsProcessOperationProcessEquDo> set = new UpdateWrapper<ApsProcessOperationProcessEquDo>().lambda();
-//        if (equDo.getStartingroll() == 0) {
-//            set.set(ApsProcessOperationProcessEquDo::getWorkstatus, "待开工");
-//            set.set(ApsProcessOperationProcessEquDo::getActualstartdate, null);
-//        }
-//        if (equDo.getStartingroll() > 0 && equDo.getClosestatus().equals("未完工")) {
-//            set.set(ApsProcessOperationProcessEquDo::getWorkstatus, "加工中");
-//        }
-//        if (ObjectUtil.isNotEmpty(equDo.getUnfinishroll()) && equDo.getUnfinishroll() == 0) {
-//            set.set(ApsProcessOperationProcessEquDo::getWorkstatus, "已完工");
-//        }
-
         /**
          * 如果输入物料有批次号,则
          */
         if (ObjectUtil.isNotEmpty(recordsDo.getBatchnumber())) {
-//            //查询工序作业
-//            ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(processoperationid);
-//            //没有前道工序
-//            if (ObjectUtil.isEmpty(apsProcessOperationDo.getPreviousprocessid())) {
-//                apsProcessOperationDao.updateBatchNumberByProcessId(recordsDo.getBatchnumber(), processoperationid);
-//            }
-//            //有前道工序
-//            if (ObjectUtil.isNotEmpty(apsProcessOperationDo.getPreviousprocessid())) {
-//                //查询所有同级工序
-//                List<ApsProcessOperationDo> list = apsProcessOperationService.list(new QueryWrapper<ApsProcessOperationDo>().lambda().eq(ApsProcessOperationDo::getPreviousprocessid, apsProcessOperationDo.getPreviousprocessid()));
-//                List<String> processIdList = list.stream().map(ApsProcessOperationDo::getId).collect(Collectors.toList());
-//                if (StringUtils.isNotBlank(recordsDo.getBatchnumber())) {
-//                    //更新所有同级工序作业的明细,增加批次号
-//                    apsProcessOperationDao.updateBatchNumberByProcessList(recordsDo.getBatchnumber(), processIdList);
-//                }
-//
-//            }
-//            /**
-//             * 如果该工序作业明细有前道工序作业明细,则将前道工序作业明细的所有后道工序作业明细的待加工料卷批次号加上“{批次号},”
-//             */
-//            if (ObjectUtil.isNotEmpty(equDo.getPreviousprocessesids()) && ObjectUtil.isNotEmpty(recordsDo.getBatchnumber())) {
-//                apsProcessOperationDao.updateBatchNumberByPrevious(recordsDo.getBatchnumber(), equDo.getPreviousprocessesids());
-//            }
-//            /**
-//             * 如果该工序作业明细没有前道工序作业明细,则该作业明细对应作业的所有作业明细的待加工料卷批次号加上“{批次号},”
-//             */
-//            if (ObjectUtil.isEmpty(equDo.getPreviousprocessesids()) && ObjectUtil.isNotEmpty(recordsDo.getBatchnumber())) {
-//                //更新坯料计划的第一道工序作业的所有工序作业明细的待加工料卷批次号=领料批次号逗号拼接
-//                apsProcessOperationProcessEquService.update(new UpdateWrapper<ApsProcessOperationProcessEquDo>().lambda()
-//                        .setSql("BACHMATERIALPROCESS = IF(BACHMATERIALPROCESS is null || BACHMATERIALPROCESS = '','" + String.join(",", batchNumberList) + "',CONCAT(BACHMATERIALPROCESS,'," + String.join(",", batchNumberList) + "'))")
-//                        .eq(ApsProcessOperationProcessEquDo::getDeleted, "0")
-//                        .eq(ApsProcessOperationProcessEquDo::getProcessid, recordsDo.getProcessoperationid()));
-//            }
             /**
              * 需求变更:将当前作业明细的待加工料卷批次号加上“{批次号}”
              */
@@ -337,10 +283,20 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
                 this.cancelNumber(equDo);
             }
         }
-
-        //如果当前工序作业明细  不存在(其他合并工序作业明细,并且其他合并作业明细的 待报工记录ID 不为空) 则炉号-1
-        List<ApsProcessOperationProcessEquDo> equDoMergeStartingList = this.baseMapper.selectOtherMergeProcessStarting(equDo.getId(), equDo.getProcessdeviceid());
-        if (equDoMergeStartingList.size() <= 0) {
+        // 如果作业的加工方式是合并加工,
+        // 并且没有其他同设备同炉次的报工记录已经开工或报工,
+        // 则报工记录对应开工时间的月份,加工设备对应熔炉的该月该熔炉的炉次号减1
+        if (apsProcessOperationDo.getProcessway().equals("合并加工")) {
+            List<ApsProcessOperationProcessEquDo> equDoMergeStartingList = this.baseMapper.selectOtherMergeProcessEquByHeat(equDo.getId(), equDo.getProcessdeviceid(), recordsDo.getHeatnumber());
+            if (equDoMergeStartingList.size() <= 0) {
+                //炉号-1
+                //加工设备ID
+                String processdeviceid = equDo.getProcessdeviceid();
+                //在流水表中的 标识
+                String moduleCode = "aps_report_output_heat_" + processdeviceid;
+                apsProcessOperationProcessEquDao.updateSerialNumber(moduleCode, 1);
+            }
+        } else {
             //炉号-1
             //加工设备ID
             String processdeviceid = equDo.getProcessdeviceid();
@@ -464,54 +420,12 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
                     }
                 }
             }
-//            //存在计划开工时间不同(非合并作业) 并且加工设备正在使用的作业明细数量
-//            int count = apsProcessOperationProcessEquDao.selectOtherDeviceCount(processdeviceid, apsProcessOperationProcessEquDoId, apsProcessOperationProcessEquDo.getPlanstartdate());
-//            if (count > 0) {
-//                return R.error("该设备当前加工中的作业还未报工,不能开工新的作业");
-//            }
-//            List<ApsProcessOperationProcessEquDo> list = apsProcessOperationProcessEquDao.selectOtherDeviceList(processdeviceid, apsProcessOperationProcessEquDoId);
-////        List<ApsProcessOperationProcessEquDo> list = apsProcessOperationProcessEquService.list(
-////                new QueryWrapper<ApsProcessOperationProcessEquDo>().lambda()
-////                        .eq(ApsProcessOperationProcessEquDo::getProcessdeviceid, processdeviceid)//当前工序作业的作业明细的 加工设备
-////                        .ne(ApsProcessOperationProcessEquDo::getId, apsProcessOperationProcessEquDoId)//对应的其他工序作业的作业明细
-////                        .isNotNull(ApsProcessOperationProcessEquDo::getWaitreportid)//待报工记录ID不为空
-////        );
-//            //存在已使用,判断是否是合并作业 (计划开工时间相同)
-//            if (ObjectUtil.isNotEmpty(list)) {
-//                //已开工的作业明细的计划开工时间
-//                Date planstartdate = list.get(0).getPlanstartdate();
-//                //开工时间不用
-//                if (planstartdate.compareTo(apsProcessOperationProcessEquDo.getPlanstartdate()) != 0) {
-//                    return R.error("该设备当前加工中的作业还未报工,不能开工新的作业");
-//                }
-//            }
-
-
-//        //设备的待加工ID
-//        String waitReportId = organizationCodeAndDeviceCodeVo.getWaitReportId();
-//        //如果工序作业加工设备已有其他作业状态为已开工,错误提示:该设备当前加工中的作业还未报工,不能开工新的作业
-//        if (ObjectUtil.isNotEmpty(waitReportId)) {
-//            String oldWaitReportId = waitReportId.split(",")[0];
-//            //查询当前报工的工序作业明细详情
-//            ApsReportRecordsDo apsReportRecordsDo = this.getById(oldWaitReportId);
-//            String processequid = apsReportRecordsDo.getProcessequid();
-//            ApsProcessOperationProcessEquDo doingProcessEqu = apsProcessOperationProcessEquService.getById(processequid);
-//            //计划开工时间不相等,表示不是合并工序
-//            if (doingProcessEqu.getPlanstartdate().compareTo(apsProcessOperationProcessEquDo.getPlanstartdate()) != 0) {
-//                return R.error("该设备当前加工中的作业还未报工,不能开工新的作业");
-//            }
-//        }
-
 
-            //获取当前用户相关信息
-//            SysUserVo currentUser = CXCommonUtils.getCurrentUser();
             String tenantId = CXCommonUtils.getCurrentUserFactoryId(currentUser);
 
             //查询此工序对应工艺步骤中,对应设备的设备参数
             String equparames = "";
             //查询工序步骤
-//        String process = apsProcessOperationDo.getProcess();
-//        String processname = apsProcessOperationDo.getProcessname();
             String stepnum = apsProcessOperationDo.getStepnum();
             ApsCraftStepDo craftStepDo = apsCraftStepService.getOne(new QueryWrapper<ApsCraftStepDo>().lambda().eq(ApsCraftStepDo::getStepnum, stepnum));
             if (ObjectUtil.isNotEmpty(craftStepDo)) {
@@ -553,7 +467,55 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
              * 新增需求:新增字段保存
              */
             insertReportNew(apsReportRecordsDo, apsProductionOrderDo, apsBlankOrderDo, apsProcessOperationDo, apsProcessOperationProcessEquDo, aspCheckItemsDo);
+            //============开工时,生成炉号和批次号=============
+            //获取设备/炉 的炉号(每月、每个设备/炉 更新)
+            String heatNumber = "";//初始化炉号
+            //如果作业明细对应作业的加工方式=合并加工,
+            // 并且该设备有其他作业明细的报工记录的报工状态=已开工,
+            // 则炉次号=该合并作业明细的报工状态是已开工的报工记录的炉次号
+            boolean createNewHeat = false;
+            //合并作业明细的实际开工时间
+            Date mergeActualStartDate = DateUtil.date();
+            if (apsProcessOperationDo.getProcessway().equals("合并加工")) {
+                List<ApsProcessOperationProcessEquDo> apsProcessEquMergeStartingList = this.baseMapper.selectOtherMergeProcessStarting(apsProcessOperationProcessEquDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid());
+                if (!apsProcessEquMergeStartingList.isEmpty()) {
+                    //合并工序作业明细
+                    ApsProcessOperationProcessEquDo equDo = apsProcessEquMergeStartingList.get(0);
+                    //查询该合并工序作业明细的待报工记录ID
+                    String waitreportid = equDo.getWaitreportid();
+                    mergeActualStartDate = equDo.getActualstartdate();
+                    //待报工记录详情
+                    ApsReportRecordsDo aDo = this.getById(waitreportid);
+                    heatNumber = aDo.getHeatnumber();
+                } else {
+                    createNewHeat = true;
+                }
+            } else {
+                createNewHeat = true;
+            }
+            if (createNewHeat) {
+                //调用通用接口生成炉号
+                SysSerialVo vo = new SysSerialVo();
+                vo.setModulecode("aps_report_output_heat_" + apsProcessOperationProcessEquDo.getProcessdeviceid());
+                vo.setRuleTemplateStr("@{serialNumber:#000}");
+                vo.setResetrule("date:yyyyMM");
+                vo.setIfautomaticreset("y");
+                vo.setInitValue(0L);
+//                Map<String, Object> codeData = cxAdminFeginClient.getSerialNumberCode(vo).getData();
+                heatNumber = sysSerialNumberService.getCodeByTemplate(vo);
+                if (StringUtils.isNotBlank(heatNumber)) {
+                    //判断如果heatNumber如果为000时再次调用序列号接口/修复跨月流水号问题
+                    if ("000".equals(heatNumber)) {
+//                        codeData = cxAdminFeginClient.getSerialNumberCode(vo).getData();
+                        heatNumber = sysSerialNumberService.getCodeByTemplate(vo);
+                    }
+                }
+            }
 
+            apsReportRecordsDo.setHeatnumber(heatNumber);
+
+            //保存主表
+            this.save(apsReportRecordsDo);
             //=================更新工序作业明细的报工ID、已开工卷数============
             //将报工记录ID存入工序作业的设备子表中
             ApsProcessOperationProcessEquDo needUpdateProcessOperationProcessEqu = new ApsProcessOperationProcessEquDo();
@@ -569,9 +531,16 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             if (newStartingRoll.equals(1)) {
                 //更新实际开工时间
                 Date startWorkTime = DateUtil.date();
-                if (ObjectUtil.isEmpty(apsReportRecordsDo.getStartworktime())){
-                    startWorkTime = apsReportRecordsDo.getStartworktime();
+                //如果炉次号是新开的炉次号,则实际开工时间=报工记录的开工时间;
+                //如果炉次号是已开工的炉次号,则实际开工时间=该合并作业明细的实际开工时间;
+                if (createNewHeat) {
+                    if (ObjectUtil.isEmpty(apsReportRecordsDo.getStartworktime())) {
+                        startWorkTime = apsReportRecordsDo.getStartworktime();
+                    }
+                } else {
+                    startWorkTime = mergeActualStartDate;
                 }
+
                 needUpdateProcessOperationProcessEqu.setOldplanstartdate(apsProcessOperationProcessEquDo.getPlanstartdate());
                 needUpdateProcessOperationProcessEqu.setOldplanenddate(apsProcessOperationProcessEquDo.getPlanenddate());
                 needUpdateProcessOperationProcessEqu.setActualstartdate(startWorkTime);
@@ -714,42 +683,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
 //        if (!r.getCode().equals("200")) {
 //            return R.error(r.getMsg());
 //        }
-            //============开工时,生成炉号和批次号=============
-            //获取设备/炉 的炉号(每月、每个设备/炉 更新)
-            String heatNumber;//初始化炉号
-            //如果存在其他合并工序,并且其他合并工序已开工,则不去生成新的 炉次号 使用其他合并工序的 开工记录的 炉次号
-            List<ApsProcessOperationProcessEquDo> apsProcessEquMergeStartingList = this.baseMapper.selectOtherMergeProcessStarting(apsProcessOperationProcessEquDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid());
-
-            if (apsProcessEquMergeStartingList.size() > 0) {
-                //合并工序作业明细
-                ApsProcessOperationProcessEquDo equDo = apsProcessEquMergeStartingList.get(0);
-                //查询该合并工序作业明细的待报工记录ID
-                String waitreportid = equDo.getWaitreportid();
-                //待报工记录详情
-                ApsReportRecordsDo aDo = this.getById(waitreportid);
-                heatNumber = aDo.getHeatnumber();
-            } else {
-                //调用通用接口生成炉号
-                SysSerialVo vo = new SysSerialVo();
-                vo.setModulecode("aps_report_output_heat_" + apsProcessOperationProcessEquDo.getProcessdeviceid());
-                vo.setRuleTemplateStr("@{serialNumber:#000}");
-                vo.setResetrule("date:yyyyMM");
-                vo.setIfautomaticreset("y");
-                vo.setInitValue(0L);
-//                Map<String, Object> codeData = cxAdminFeginClient.getSerialNumberCode(vo).getData();
-                heatNumber = sysSerialNumberService.getCodeByTemplate(vo);
-                if (StringUtils.isNotBlank(heatNumber)) {
-                    //判断如果heatNumber如果为000时再次调用序列号接口/修复跨月流水号问题
-                    if ("000".equals(heatNumber)) {
-//                        codeData = cxAdminFeginClient.getSerialNumberCode(vo).getData();
-                        heatNumber = sysSerialNumberService.getCodeByTemplate(vo);
-                    }
-                }
-            }
 
-            apsReportRecordsDo.setHeatnumber(heatNumber);
-            //保存主表
-            this.save(apsReportRecordsDo);
 
             OrganizationCodeAndDeviceCodeVo organizationCodeAndDeviceCodeVo = this.baseMapper.selectOrganizationCodeAndDeviceCode(apsProcessOperationProcessEquDo.getProcessdeviceid());
 
@@ -1090,7 +1024,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             int needDoRoll = unfinishroll - apsProcessOperationProcessEquDo.getCancelroll();
             if (needDoRoll <= 0) {
                 Date finishWorkTime = DateUtil.date();
-                if (ObjectUtil.isEmpty(apsReportRecordsDo.getStartworktime())){
+                if (ObjectUtil.isEmpty(apsReportRecordsDo.getReportworktime())) {
                     finishWorkTime = apsReportRecordsDo.getReportworktime();
                 }
                 processEquWrapper.set(ApsProcessOperationProcessEquDo::getClosestatus, "已完工")
@@ -1150,7 +1084,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
                 if (newLeaveWaitJobRoll == 0) {
                     processEquWrapper.set(ApsProcessOperationProcessEquDo::getClosestatus, "已完工");
                     Date finishWorkTime = DateUtil.date();
-                    if (ObjectUtil.isEmpty(apsReportRecordsDo.getStartworktime())){
+                    if (ObjectUtil.isEmpty(apsReportRecordsDo.getStartworktime())) {
                         finishWorkTime = apsReportRecordsDo.getStartworktime();
                     }
                     processEquWrapper.set(ApsProcessOperationProcessEquDo::getActualfinishdate, finishWorkTime);
@@ -1499,17 +1433,19 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         String processequid = req.getProcessequid();
         //当前报工的作业明细的详情
         ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(processequid);
-        //查询其他 与当前作业明细计划开工时间相同,并且未开工(待报工记录ID为空)的作业明细
-        List<ApsProcessOperationProcessEquDo> list = this.baseMapper.selectOtherMergeProcessEqu(apsProcessOperationProcessEquDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid(), apsProcessOperationProcessEquDo.getPlanstartdate());
+        //当前报工的作业详情
+        ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(apsProcessOperationProcessEquDo.getProcessid());
         CheckMergeProcessResopnse res = new CheckMergeProcessResopnse();
-        if (list.size() > 0) {
-            //查询当前工序作业明细的工序详情
-            ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(req.getProcessoperationid());
-            res.setNeedWarning(true);
-            res.setWarningMessage("该合并作业" + apsProcessOperationDo.getProcess() + "还有其他作业需要一起开工,请及时开工");
-            return R.ok(res);
+        //该作业的加工方式是合并加工,
+        if (apsProcessOperationDo.getProcessway().equals("合并加工")) {
+            // 并且有其他未开工的计划开工时间=该报工作业明细原计划开工时间的作业明细
+            List<ApsProcessOperationProcessEquDo> list = this.baseMapper.selectOtherMergeProcessEqu(apsProcessOperationProcessEquDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid(), apsProcessOperationProcessEquDo.getOldplanstartdate());
+            if (!list.isEmpty()) {
+                res.setNeedWarning(true);
+                res.setWarningMessage("该合并作业" + apsProcessOperationDo.getProcess() + "还有其他作业需要一起开工,请及时开工");
+                return R.ok(res);
+            }
         }
-
         return R.ok(res);
     }
 
@@ -1631,19 +1567,31 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
 
             //============开工时,生成炉号和批次号=============
             //获取设备/炉 的炉号(每月、每个设备/炉 更新)
-            String heatNumber;//初始化炉号
-            //如果存在其他合并工序,并且其他合并工序已开工,则不去生成新的 炉次号 使用其他合并工序的 开工记录的 炉次号
-            List<ApsProcessOperationProcessEquDo> apsProcessEquMergeStartingList = this.baseMapper.selectOtherMergeProcessStarting(apsProcessOperationProcessEquDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid());
-
-            if (apsProcessEquMergeStartingList.size() > 0) {
-                //合并工序作业明细
-                ApsProcessOperationProcessEquDo equDo = apsProcessEquMergeStartingList.get(0);
-                //查询该合并工序作业明细的待报工记录ID
-                String waitreportid = equDo.getWaitreportid();
-                //待报工记录详情
-                ApsReportRecordsDo aDo = this.getById(waitreportid);
-                heatNumber = aDo.getHeatnumber();
+            String heatNumber = "";//初始化炉号
+            //如果作业明细对应作业的加工方式=合并加工,
+            // 并且该设备有其他作业明细的报工记录的报工状态=已开工,
+            // 则炉次号=该合并作业明细的报工状态是已开工的报工记录的炉次号
+            boolean createNewHeat = false;
+            //合并作业明细的实际开工时间
+            Date mergeActualStartDate = DateUtil.date();
+            if (apsProcessOperationDo.getProcessway().equals("合并加工")) {
+                List<ApsProcessOperationProcessEquDo> apsProcessEquMergeStartingList = this.baseMapper.selectOtherMergeProcessStarting(apsProcessOperationProcessEquDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid());
+                if (!apsProcessEquMergeStartingList.isEmpty()) {
+                    //合并工序作业明细
+                    ApsProcessOperationProcessEquDo equDo = apsProcessEquMergeStartingList.get(0);
+                    //查询该合并工序作业明细的待报工记录ID
+                    String waitreportid = equDo.getWaitreportid();
+                    mergeActualStartDate = equDo.getActualstartdate();
+                    //待报工记录详情
+                    ApsReportRecordsDo aDo = this.getById(waitreportid);
+                    heatNumber = aDo.getHeatnumber();
+                } else {
+                    createNewHeat = true;
+                }
             } else {
+                createNewHeat = true;
+            }
+            if (createNewHeat) {
                 //调用通用接口生成炉号
                 SysSerialVo vo = new SysSerialVo();
                 vo.setModulecode("aps_report_output_heat_" + apsProcessOperationProcessEquDo.getProcessdeviceid());
@@ -1802,72 +1750,6 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
                     apsReportBlankCompentService.saveBatch(needAddList);
                 }
             }
-//            //工序作业的是否坯料工序=是 时,根据客户合金成分设置自动生成
-//            if (apsProcessOperationDo.getIfblankprocess().equals("是")) {
-//                //工序作业的合金
-//                String metal = apsProcessOperationDo.getMetal();
-//                //订单的客户ID
-//                String customid = apsProductionOrderDo.getCustomid();
-//                String alloyId = "";
-//                //查询合金对应的所有主表信息
-//                List<ApsAlloyDo> apsAlloyDoList = apsAlloyService.list(new QueryWrapper<ApsAlloyDo>().lambda().eq(ApsAlloyDo::getAlloy, metal));
-//                if (ObjectUtil.isNotEmpty(apsAlloyDoList)) {
-//                    //查询客户标准
-//                    List<ApsAlloyDo> collect = apsAlloyDoList.stream().filter(item -> ObjectUtil.isNotEmpty(item.getCustomerid()) && item.getCustomerid().contains(customid)).collect(Collectors.toList());
-//                    if (ObjectUtil.isNotEmpty(collect)) {
-//                        alloyId = collect.get(0).getId();
-//                    } else {//查询国标
-//                        List<ApsAlloyDo> collect1 = apsAlloyDoList.stream().filter(item -> ObjectUtil.isEmpty(item.getCustomerid())).collect(Collectors.toList());
-//                        if (ObjectUtil.isNotEmpty(collect1)) {
-//                            alloyId = collect1.get(0).getId();
-//                        }
-//                    }
-//                }
-//                //查询合金成分要求
-//                if (ObjectUtil.isNotEmpty(alloyId)) {
-//                    List<ApsAlloyCompositionDo> apsAlloyCompositionDoList = apsAlloyCompositionService.list(new QueryWrapper<ApsAlloyCompositionDo>().lambda().eq(ApsAlloyCompositionDo::getAlloyid, alloyId));
-//
-//                    if (ObjectUtil.isNotEmpty(apsAlloyCompositionDoList)) {
-//                        List<ApsReportBlankCompentDo> needInsertApsReportBlankCompentList = new LinkedList<>();
-//                        for (ApsAlloyCompositionDo apsAlloyCompositionDo : apsAlloyCompositionDoList) {
-//                            ApsReportBlankCompentDo apsReportBlankCompentDo = new ApsReportBlankCompentDo();
-//                            apsReportBlankCompentDo.setId(SecurityUtil.getUUID());
-//                            apsReportBlankCompentDo.setTenantid(tenantId);
-//                            apsReportBlankCompentDo.setMainid(apsReportRecordsDo.getId());
-//                            apsReportBlankCompentDo.setCompent(apsAlloyCompositionDo.getIngredient());
-//                            apsReportBlankCompentDo.setStartproportion(apsAlloyCompositionDo.getLeftproportion());
-//                            apsReportBlankCompentDo.setEndproportion(apsAlloyCompositionDo.getRightproportion());
-//                            needInsertApsReportBlankCompentList.add(apsReportBlankCompentDo);
-//                        }
-//                        if (ObjectUtil.isNotEmpty(needInsertApsReportBlankCompentList)) {
-//                            apsReportBlankCompentService.saveBatch(needInsertApsReportBlankCompentList);
-//                        }
-//
-//                    }
-//                }
-//            } else {//不是坯料工序,根据输入物料批次号,查询来源报工的坯料成分,copy一份
-//                String inputBatchNumber = req.getInputBatchNumberList().get(0);
-//                //查询上一个的报工ID
-//                String lastReportRecordId = this.baseMapper.selectLastReoprtRecordByBatchNumber(inputBatchNumber);
-//                if (ObjectUtil.isNotEmpty(lastReportRecordId)) {
-//                    //查询上一个报工的坯料成分
-//                    List<ApsReportBlankCompentDo> apsReportBlankCompentDoList = apsReportBlankCompentService.list(new QueryWrapper<ApsReportBlankCompentDo>().lambda().eq(ApsReportBlankCompentDo::getMainid, lastReportRecordId));
-//                    //复制新增
-//                    List<ApsReportBlankCompentDo> needAddList = new LinkedList<>();
-//                    for (ApsReportBlankCompentDo apsReportBlankCompentDo : apsReportBlankCompentDoList) {
-//                        ApsReportBlankCompentDo needAdd = new ApsReportBlankCompentDo();
-//                        needAdd.setId(SecurityUtil.getUUID());
-//                        needAdd.setTenantid(tenantId);
-//                        needAdd.setMainid(apsReportRecordsDo.getId());
-//                        needAdd.setCompent(apsReportBlankCompentDo.getCompent());
-//                        needAdd.setStartproportion(apsReportBlankCompentDo.getStartproportion());
-//                        needAdd.setEndproportion(apsReportBlankCompentDo.getEndproportion());
-//                        needAdd.setActualproportion(apsReportBlankCompentDo.getActualproportion());
-//                        needAddList.add(needAdd);
-//                    }
-//                    apsReportBlankCompentService.saveBatch(needAddList);
-//                }
-//            }
 
             /**
              * 检查每个输入批次号,
@@ -1875,31 +1757,6 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
              * 查找输入物料所有后道作业明细,即前道作业明细的所有后道作业明细中,
              * 其工序作业的输入物料ID和报工记录的工序作业的输入物料ID相同的所有作业明细,将这些作业明细的待加工料卷批次号去掉“{输入批次号},”
              */
-            //更新待加工料卷批次号
-//            if (ObjectUtil.isNotEmpty(apsProcessOperationProcessEquDo.getPreviousprocessesids())) {
-//                List<ApsProcessOperationProcessEquDo> needUpdateBatchNumber = apsProcessOperationProcessEquService.list(new QueryWrapper<ApsProcessOperationProcessEquDo>().lambda().eq(ApsProcessOperationProcessEquDo::getPreviousprocessesids, apsProcessOperationProcessEquDo.getPreviousprocessesids()));
-//                if (ObjectUtil.isNotEmpty(needUpdateBatchNumber)) {
-//                    List<ApsProcessOperationProcessEquDo> needUpdateList = new LinkedList<>();
-//
-//                    for (ApsProcessOperationProcessEquDo processOperationProcessEquDo : needUpdateBatchNumber) {
-//                        List<String> oldList = new LinkedList<>();
-//                        //原待加工批次号不为空
-//                        if (ObjectUtil.isNotEmpty(processOperationProcessEquDo.getBachmaterialprocess())) {
-//                            oldList = new LinkedList<>(Arrays.asList(processOperationProcessEquDo.getBachmaterialprocess().split(",")));
-//                            oldList.removeAll(inputBatchNumberList);
-//
-//                            String newBatch = String.join(",", oldList);
-//                            ApsProcessOperationProcessEquDo needUpdate = new ApsProcessOperationProcessEquDo();
-//                            needUpdate.setId(processOperationProcessEquDo.getId());
-//                            needUpdate.setBachmaterialprocess(newBatch);
-//                            needUpdateList.add(needUpdate);
-//                        }
-//                    }
-//                    if (ObjectUtil.isNotEmpty(needUpdateList)) {
-//                        apsProcessOperationProcessEquService.updateBatchById(needUpdateList);
-//                    }
-//                }
-//            }
             /**
              * 需求变更:待加工料卷批次号已经分配到对应作业明细不用删除兄弟作业明细的待加工料卷批次号仅删除当前作业作业明细的待加工料卷批次号
              * 检查完待加工料卷批次号是否改变后,立即更新待加工料卷批次号
@@ -1944,9 +1801,16 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
              * 作业状态=加工中
              */
             if (apsProcessOperationProcessEquDo.getStartingroll().equals(0)) {
+                //更新实际开工时间
                 Date startWorkTime = DateUtil.date();
-                if (ObjectUtil.isEmpty(apsReportRecordsDo.getStartworktime())){
-                    startWorkTime = apsReportRecordsDo.getStartworktime();
+                //如果炉次号是新开的炉次号,则实际开工时间=报工记录的开工时间;
+                //如果炉次号是已开工的炉次号,则实际开工时间=该合并作业明细的实际开工时间;
+                if (createNewHeat) {
+                    if (ObjectUtil.isEmpty(apsReportRecordsDo.getStartworktime())) {
+                        startWorkTime = apsReportRecordsDo.getStartworktime();
+                    }
+                } else {
+                    startWorkTime = mergeActualStartDate;
                 }
                 needUpdateProcessEqu.setOldplanstartdate(apsProcessOperationProcessEquDo.getPlanstartdate());
                 needUpdateProcessEqu.setOldplanenddate(apsProcessOperationProcessEquDo.getPlanenddate());

+ 14 - 2
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsReportRecordsDao.xml

@@ -68,13 +68,25 @@
             apope.*
         FROM
             aps_process_operation_process_equ apope
-                JOIN aps_process_operation apo ON apope.PROCESSID = apo.ID AND apo.DELETED = 0
         WHERE
             apope.DELETED = 0
           AND apope.PROCESSDEVICEID = #{processdeviceid}
           AND apope.ID != #{id}
           AND apope.WAITREPORTID IS NOT NULL
           AND apope.WAITREPORTID != ''
-          AND apo.PROCESSWAY = '合并加工'
+    </select>
+    <select id="selectOtherMergeProcessEquByHeat"
+            resultType="com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo">
+        SELECT
+            apope.*
+        FROM
+            aps_process_operation_process_equ apope
+                LEFT JOIN aps_report_records arr ON arr.DELETED = 0 AND apope.ID = arr.PROCESSEQUID
+        WHERE
+            apope.DELETED = 0
+          AND apope.PROCESSDEVICEID = #{processdeviceid}
+          AND apope.ID != #{id}
+          AND apope.WORKSTATUS != '待开工'
+          AND arr.HEATNUMBER = #{heatnumber}
     </select>
 </mapper>