Просмотр исходного кода

aps-合并工序开工相关优化

sucheng 1 год назад
Родитель
Сommit
69f54a5332

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

@@ -23,6 +23,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.Date;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
@@ -121,8 +122,8 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         //查询作业明细详情
         ApsProcessOperationProcessEquDo equDo = apsProcessOperationProcessEquDao.selectById(processequid);
 
-        //更新设备的待报工记录ID
-        apsProcessOperationProcessEquDao.updateEquByCancelRecord(recordId, equDo.getProcessdeviceid());
+//        //更新设备的待报工记录ID
+//        apsProcessOperationProcessEquDao.updateEquByCancelRecord(recordId, equDo.getProcessdeviceid());
 
         //作业明细的作业状态
         /**
@@ -201,21 +202,49 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         if (ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo) || ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo.getDeviceCode()) || ObjectUtil.isEmpty(organizationCodeAndDeviceCodeVo.getOrganizationCode())) {
             return R.error("未找到对应的车间代号和设备代号");
         }
-        //设备的待加工ID
-        String waitReportId = organizationCodeAndDeviceCodeVo.getWaitReportId();
-        //如果工序作业加工设备已有其他作业状态为已开工,错误提示:该设备当前加工中的作业还未报工,不能开工新的作业
-        if (ObjectUtil.isNotEmpty(waitReportId)) {
-            //查询当前报工的工序作业明细详情
-            ApsReportRecordsDo apsReportRecordsDo = this.getById(waitReportId);
-            String processequid = apsReportRecordsDo.getProcessequid();
-            ApsProcessOperationProcessEquDo doingProcessEqu = apsProcessOperationProcessEquService.getById(processequid);
-            //计划开工时间不相等,表示不是合并工序
-            if (doingProcessEqu.getPlanstartdate().compareTo(apsProcessOperationProcessEquDo.getPlanstartdate()) != 0) {
+        /**
+         * 如果工序作业明细加工设备已有其他作业明细正在加工(待报工记录ID不为空),
+         * 并且(不是排程合并作业,或者与工序作业明细不是同一排程合并作业),
+         * 则错误提示:该设备当前加工中的作业还未报工,不能开工新的作业
+         */
+        //当前工序作业明细的加工设备ID
+        String processdeviceid = apsProcessOperationProcessEquDo.getProcessdeviceid();
+        //当前工序作业明细的ID
+        String apsProcessOperationProcessEquDoId = apsProcessOperationProcessEquDo.getId();
+        //查询当前工序作业的作业明细的 加工设备 对应的其他工序作业的作业明细 并且待报工记录ID不为空
+        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 = currentUser.getOrganizationDoList().get(0).getFullpid().split(",")[1];
@@ -293,12 +322,12 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         //===============更新工序作业==================
         this.baseMapper.updateProcessActualStartDate(apsProcessOperationDo.getId());
 
-        //=============更新设备的报工记录ID=============
-        String newWaitReportId = "";
-        if (ObjectUtil.isNotEmpty(waitReportId)) {
-            newWaitReportId = waitReportId + "," + apsReportRecordsDo.getId();
-        }
-        this.baseMapper.updateDeviceWaitReportId(newWaitReportId, apsProcessOperationProcessEquDo.getProcessdeviceid());
+//        //=============更新设备的报工记录ID=============
+//        String newWaitReportId = "";
+//        if (ObjectUtil.isNotEmpty(waitReportId)) {
+//            newWaitReportId = waitReportId + "," + apsReportRecordsDo.getId();
+//        }
+//        this.baseMapper.updateDeviceWaitReportId(newWaitReportId, apsProcessOperationProcessEquDo.getProcessdeviceid());
 
         //==========输入物料有批次号==============
         if (ObjectUtil.isNotEmpty(req.getInputBatchNumber())) {
@@ -533,8 +562,8 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         //==============更新工序作业信息==============
         this.baseMapper.updateProcessReportRoll(apsProcessOperationDo.getId());
 
-        //=============更新设备的报工记录ID===========
-        apsProcessOperationProcessEquDao.updateEquByCancelRecord(apsReportRecordsDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid());
+//        //=============更新设备的报工记录ID===========
+//        apsProcessOperationProcessEquDao.updateEquByCancelRecord(apsReportRecordsDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid());
 
         //============保存(报工)时,生成炉号和批次号=============
         //获取设备/炉 的炉号(每月、每个设备/炉 更新)