Ver Fonte

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

sucheng há 5 meses atrás
pai
commit
76e6ffd881

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

@@ -127,7 +127,9 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
     int selectHaveOtherDeviceCount(@Param("processdeviceid") String processdeviceid,@Param("apsProcessOperationProcessEquDoId") String apsProcessOperationProcessEquDoId);
 
     @Select("select * from aps_process_operation_process_equ where DELETED = 0 AND PROCESSDEVICEID = #{processdeviceid} AND ID != #{apsProcessOperationProcessEquDoId} AND WAITREPORTID IS NOT NULL AND WAITREPORTID != ''")
-    List<ApsProcessOperationProcessEquDo> selectHaveOtherDevice(@Param("processdeviceid") String processdeviceid,@Param("apsProcessOperationProcessEquDoId") String apsProcessOperationProcessEquDoId);
+    List<ApsProcessOperationProcessEquDo> selectHaveOtherDevice1(@Param("processdeviceid") String processdeviceid,@Param("apsProcessOperationProcessEquDoId") String apsProcessOperationProcessEquDoId);
+//    @Select("select count(1) from aps_process_operation_process_equ where DELETED = 0 AND PROCESSDEVICEID = #{processdeviceid} AND WORKSTATUS = '已完工'  AND OLDPLANSTARTDATE = #{planStartDate}")
+    int selectHaveOtherDevice2(@Param("processdeviceid") String processdeviceid,@Param("heatNumber") String heatNumber,@Param("yearMonth") String yearMonth);
 
     void repairePlanStartDate();
 }

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

@@ -67,7 +67,9 @@ public interface ApsReportRecordsDao extends BaseMapper<ApsReportRecordsDo> {
 
     List<ProcessOutputAndInputNumber> selectInputAndOutputNumByProcessId(@Param("processIds")List<String> processIds);
 
-    List<ApsProcessOperationProcessEquDo> selectOtherMergeProcessEquByHeat(@Param("id") String id, @Param("processdeviceid") String processdeviceid, @Param("heatnumber") String heatnumber);
+    List<ApsProcessOperationProcessEquDo> selectOtherMergeProcessEquByHeat(@Param("id") String id, @Param("processdeviceid") String processdeviceid, @Param("heatnumber") String heatnumber,@Param("yearMonth") String yearMonth);
 
-    String selectEarlyMergeByHeat(@Param("processequid") String processequid, @Param("processdeviceid") String processdeviceid, @Param("heatnumber") String heatnumber);
+    String selectEarlyMergeByHeat(@Param("processequid") String processequid, @Param("processdeviceid") String processdeviceid, @Param("heatnumber") String heatnumber,@Param("yearMonth") String yearMonth);
+
+    ApsReportRecordsDo getOneByEquId(@Param("id") String id);
 }

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

@@ -288,7 +288,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         // 并且没有其他同设备同炉次的报工记录已经开工或报工,
         // 则报工记录对应开工时间的月份,加工设备对应熔炉的该月该熔炉的炉次号减1
         if (apsProcessOperationDo.getProcessway().equals("合并加工")) {
-            List<ApsProcessOperationProcessEquDo> equDoMergeStartingList = this.baseMapper.selectOtherMergeProcessEquByHeat(equDo.getId(), equDo.getProcessdeviceid(), recordsDo.getHeatnumber());
+            List<ApsProcessOperationProcessEquDo> equDoMergeStartingList = this.baseMapper.selectOtherMergeProcessEquByHeat(equDo.getId(), equDo.getProcessdeviceid(), recordsDo.getHeatnumber(),DateUtil.format(recordsDo.getStartworktime(),"yyyy-MM"));
             if (equDoMergeStartingList.size() <= 0) {
                 //炉号-1
                 //加工设备ID
@@ -401,6 +401,8 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             //当前工序作业明细的ID
             String apsProcessOperationProcessEquDoId = apsProcessOperationProcessEquDo.getId();
             //查询当前工序作业的作业明细的 加工设备 对应的其他工序作业的作业明细 并且待报工记录ID不为空
+            //合并加工的最开始开工时间
+            Date earlyMergeStartDate = null;
             //如果当前工序作业不是合并加工
             if (!apsProcessOperationDo.getProcessway().equals("合并加工")) {
                 int count = apsProcessOperationProcessEquDao.selectHaveOtherDeviceCount(processdeviceid, apsProcessOperationProcessEquDoId);
@@ -409,21 +411,28 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
                     return R.error("该设备当前加工中的作业还未报工,不能开工新的作业");
                 }
             } else {
-                List<ApsProcessOperationProcessEquDo> sameDeviceList = apsProcessOperationProcessEquDao.selectHaveOtherDevice(processdeviceid, apsProcessOperationProcessEquDoId);
+                List<ApsProcessOperationProcessEquDo> sameDeviceList = apsProcessOperationProcessEquDao.selectHaveOtherDevice1(processdeviceid, apsProcessOperationProcessEquDoId);
                 if (!sameDeviceList.isEmpty()) {
                     //判断被占用的是否都是合并加工的
                     // 如果作业的加工方式是合并加工,
                     // 并且工序作业明细加工设备已有其他作业明细正在加工(待报工记录ID不为空),
                     // 并且正在加工的作业明细同炉次(原计划开工时间相同)有其他作业明细已经报工,
                     // 则错误提示:正在加工的炉次还未报工完,不能开工新的炉次
-                    long count = sameDeviceList.stream().filter(item -> ObjectUtil.isNotEmpty(item.getOldplanstartdate()) && item.getOldplanstartdate().equals(apsProcessOperationProcessEquDo.getPlanstartdate())).count();
+//                    long count = sameDeviceList.stream().filter(item -> ObjectUtil.isNotEmpty(item.getOldplanstartdate()) && item.getOldplanstartdate().equals(apsProcessOperationProcessEquDo.getPlanstartdate())).count();
 //                    List<String> processIdList = sameDeviceList.stream().map(ApsProcessOperationProcessEquDo::getProcessid).collect(Collectors.toList());
 //                    List<ApsProcessOperationDo> apsProcessOperationDos = new ArrayList<>(apsProcessOperationService.listByIds(processIdList));
 //                    long count = apsProcessOperationDos.stream().filter(item -> !item.getProcessway().equals("合并加工")).count();
-                    if (count > 0) {
-                        log.error("存在其他已占用设备:{},不为合并加工工序(原计划开工时间相同)的作业,计划开工时间:{}", processdeviceid, apsProcessOperationProcessEquDo.getPlanstartdate());
-                        return R.error("正在加工的炉次还未报工完,不能开工新的炉次");
+                    ApsProcessOperationProcessEquDo startingEqu = sameDeviceList.get(0);
+                    ApsReportRecordsDo startingRecord = this.baseMapper.getOneByEquId(startingEqu.getId());
+                    earlyMergeStartDate = startingRecord.getStartworktime();
+                    if (ObjectUtil.isNotEmpty(startingRecord)){
+                        int count = apsProcessOperationProcessEquDao.selectHaveOtherDevice2(processdeviceid,startingRecord.getHeatnumber(),DateUtil.format(startingRecord.getStartworktime(),"yyyy-MM"));
+                        if (count > 0) {
+                            log.error("存在其他已占用设备:{},不为合并加工工序的作业,开工时间:{},炉号:{}", processdeviceid, startingRecord.getStartworktime(),startingRecord.getHeatnumber());
+                            return R.error("正在加工的炉次还未报工完,不能开工新的炉次");
+                        }
                     }
+
                 }
             }
 
@@ -459,7 +468,11 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             apsReportRecordsDo.setChiefoperatorid(currentUser.getId());
             apsReportRecordsDo.setChiefoperatorname(currentUser.getName());
             //开工时间
-            apsReportRecordsDo.setStartworktime(DateUtil.date());
+            if (ObjectUtil.isNotEmpty(earlyMergeStartDate)){
+                apsReportRecordsDo.setStartworktime(earlyMergeStartDate);
+            }else {
+                apsReportRecordsDo.setStartworktime(DateUtil.date());
+            }
 //        //报工时间
 //        apsReportRecordsDo.setReportworktime(DateUtil.date());
             //报工状态
@@ -540,7 +553,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
                 //如果炉次号是新开的炉次号,则实际开工时间=报工记录的开工时间;
                 //如果炉次号是已开工的炉次号,则实际开工时间=该合并作业明细的实际开工时间;
                 if (createNewHeat) {
-                    if (ObjectUtil.isEmpty(apsReportRecordsDo.getStartworktime())) {
+                    if (ObjectUtil.isNotEmpty(apsReportRecordsDo.getStartworktime())) {
                         startWorkTime = apsReportRecordsDo.getStartworktime();
                     }
                 } else {
@@ -1036,7 +1049,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             int needDoRoll = unfinishroll - apsProcessOperationProcessEquDo.getCancelroll();
             if (needDoRoll <= 0) {
                 Date finishWorkTime = DateUtil.date();
-                if (ObjectUtil.isEmpty(apsReportRecordsDo.getReportworktime())) {
+                if (ObjectUtil.isNotEmpty(apsReportRecordsDo.getReportworktime())) {
                     finishWorkTime = apsReportRecordsDo.getReportworktime();
                 }
                 processEquWrapper.set(ApsProcessOperationProcessEquDo::getClosestatus, "已完工")
@@ -1100,8 +1113,8 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
                         finishWorkTime = apsReportRecordsDo.getStartworktime();
                     }
                     processEquWrapper.set(ApsProcessOperationProcessEquDo::getActualfinishdate, finishWorkTime);
-                    processEquWrapper.set(ApsProcessOperationProcessEquDo::getPlanstartdate, DateUtil.offsetMinute(finishWorkTime, -1 * (int) DateUtil.between(apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getPlanstartdate(), DateUnit.MINUTE)));
-                    processEquWrapper.set(ApsProcessOperationProcessEquDo::getPlanenddate, finishWorkTime);
+//                    processEquWrapper.set(ApsProcessOperationProcessEquDo::getPlanstartdate, DateUtil.offsetMinute(finishWorkTime, -1 * (int) DateUtil.between(apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getPlanstartdate(), DateUnit.MINUTE)));
+//                    processEquWrapper.set(ApsProcessOperationProcessEquDo::getPlanenddate, finishWorkTime);
 
                 }
             }
@@ -1912,7 +1925,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
         //报工记录的开工时间=其他同炉次的作业的最早开工时间
         //设置报工记录的开工时间不可编辑
         if (apsProcessOperationDo.getProcessway().equals("合并加工")){
-            String earlyTime = this.baseMapper.selectEarlyMergeByHeat(processequid,apsProcessOperationProcessEquDo.getProcessdeviceid(),apsReportRecordsDo.getHeatnumber());
+            String earlyTime = this.baseMapper.selectEarlyMergeByHeat(processequid,apsProcessOperationProcessEquDo.getProcessdeviceid(),apsReportRecordsDo.getHeatnumber(),DateUtil.format(apsReportRecordsDo.getStartworktime(),"yyyy-MM"));
             if (ObjectUtil.isNotEmpty(earlyTime)){
                 res = earlyTime;
             }

+ 13 - 0
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -599,4 +599,17 @@
             AND apope.PLANSTARTDATE > #{date1}
             AND apope.PLANENDDATE &lt; #{date2}
     </select>
+    <select id="selectHaveOtherDevice2" resultType="java.lang.Integer">
+        SELECT
+            count( 1 )
+        FROM
+            aps_process_operation_process_equ apope
+                LEFT JOIN aps_report_records arr ON apope.ID = arr.PROCESSEQUID AND arr.DELETED = 0
+        WHERE
+            apope.DELETED = 0
+          AND apope.PROCESSDEVICEID = #{processdeviceid}
+          AND arr.HEATNUMBER = #{heatNumber}
+          AND DATE_FORMAT(arr.STARTWORKTIME, '%Y-%m') = #{yearMonth}
+          AND arr.REPORTWORKSTATUS = '已报工'
+    </select>
 </mapper>

+ 9 - 0
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsReportRecordsDao.xml

@@ -87,6 +87,7 @@
           AND apope.PROCESSDEVICEID = #{processdeviceid}
           AND apope.ID != #{id}
           AND apope.WORKSTATUS != '待开工'
+          AND DATE_FORMAT(arr.STARTWORKTIME, '%Y-%m') = #{yearMonth}
           AND arr.HEATNUMBER = #{heatnumber}
     </select>
     <select id="selectEarlyMergeByHeat"
@@ -102,7 +103,15 @@
           AND apope.ID != #{processequid}
           AND arr.REPORTWORKSTATUS = '已报工'
           AND arr.HEATNUMBER = #{heatnumber}
+          AND DATE_FORMAT(arr.STARTWORKTIME, '%Y-%m') = #{yearMonth}
         ORDER BY arr.STARTWORKTIME
         limit 1
     </select>
+    <select id="getOneByEquId" resultType="com.rongwei.bsentity.domain.ApsReportRecordsDo">
+        select * from aps_report_records
+        where DELETED = 0
+        AND PROCESSEQUID = #{id}
+        AND REPORTWORKSTATUS = '已开工'
+        limit 1
+    </select>
 </mapper>