Browse Source

aps-实际完工作业挪动

sucheng 5 months ago
parent
commit
8387f2afea

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

@@ -155,7 +155,7 @@ public interface ApsBlankOrderDao extends BaseMapper<ApsBlankOrderDo> {
 
     String selectPlanEndProductionWorkshopsById(@Param("productionorderid") String productionorderid);
 
-    void updateFinishDateAboutProcessEqu(@Param("needScheduleDate") String needScheduleDate,@Param("tenantId") String tenantId);
+    void updateFinishDateAboutProcessEqu(@Param("needScheduleDate") String needScheduleDate,@Param("tenantId") String tenantId,@Param("chongpaiStartDate") DateTime chongpaiStartDate,@Param("chongpaiEndDate") DateTime chongpaiEndDate);
 
     void removeLockNextDayProcessEqu(@Param("needScheduleDate") String needScheduleDate);
 

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

@@ -4177,7 +4177,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         if (ObjectUtil.isNotEmpty(needScheduleDate)) {
 
             //将实际完工时间大于明天的作业挪到实际完工时间
-            this.baseMapper.updateFinishDateAboutProcessEqu(needScheduleDate, CXCommonUtils.getCurrentUserFactoryId(null));
+            this.baseMapper.updateFinishDateAboutProcessEqu(needScheduleDate, CXCommonUtils.getCurrentUserFactoryId(null),chongpaiStartDate,chongpaiEndDate);
             //锁定所有 未锁定的 作业和作业明细
             apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
                     .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, "y")

+ 38 - 21
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsBlankOrderDao.xml

@@ -191,33 +191,50 @@
     </update>
     <update id="updateFinishDateAboutProcessEqu">
         update
-        aps_process_operation_process_equ apope
-        join aps_process_operation apo on apo.id = apope.PROCESSID
+            aps_process_operation_process_equ apope
+                join aps_process_operation apo on apo.id = apope.PROCESSID
         set
-        -- 如果已经完工,先根据实际完工时间计算和设置计划开工时间,再设置计划完工时间=实际完工时间
-        apope.PLANSTARTDATE=IF(apope.ACTUALFINISHDATE IS NOT NULL,DATE_SUB(apope.ACTUALFINISHDATE,INTERVAL TIMESTAMPdiff(SECOND, apope.PLANSTARTDATE, apope.PLANENDDATE) SECOND), apope.PLANSTARTDATE),
-        apope.PLANENDDATE=IF(apope.ACTUALFINISHDATE IS NOT NULL, apope.ACTUALFINISHDATE, apope.PLANENDDATE)
+            -- 如果已经完工,先根据实际完工时间计算和设置计划开工时间,再设置计划完工时间=实际完工时间
+            apope.PLANSTARTDATE=DATE_SUB(apope.ACTUALFINISHDATE,INTERVAL TIMESTAMPdiff(SECOND, apope.PLANSTARTDATE, apope.PLANENDDATE) SECOND),
+            apope.PLANENDDATE=apope.ACTUALFINISHDATE
         where
-        apo.DELETED='0' and apope.deleted='0'
-        AND (apope.ACTUALSTARTDATE IS NOT NULL) -- 已经开工或完工
-        and (apope.ACTUALSTARTDATE &lt; apope.PLANSTARTDATE OR apope.ACTUALFINISHDATE &lt; apope.PLANENDDATE) -- 提前开工或完工
-        and apope.PLANENDDATE > #{needScheduleDate} -- 计划完工时间大于调度开始时间,即占用了调度时间
-        and apo.PROCESS != '铸轧'
-        and apope.TENANTID = #{tenantId};
+            apo.DELETED='0' and apope.deleted='0'
+          AND (apope.ACTUALFINISHDATE IS NOT NULL) -- 已经完工
+          and (apope.ACTUALSTARTDATE &lt; apope.PLANSTARTDATE OR apope.ACTUALFINISHDATE &lt; apope.PLANENDDATE) -- 提前开工或完工
+          and apope.PLANENDDATE > #{needScheduleDate} -- 计划完工时间大于调度开始时间,即占用了调度时间
+          and apo.PROCESS != '铸轧'
+          and apope.TENANTID = #{tenantId};
+
         update
-        aps_process_operation_process_equ apope
-        join aps_process_operation apo on apo.id = apope.PROCESSID
+            aps_process_operation_process_equ apope
+                join aps_process_operation apo on apo.id = apope.PROCESSID
         set
-        -- 如果没有完工,先根据实际开工时间计算和设置计划完工时间,再设置计划开工时间=实际开工时间
-        apope.PLANENDDATE=IF(apope.ACTUALFINISHDATE IS NOT NULL, apope.PLANENDDATE, DATE_ADD(apope.ACTUALSTARTDATE,INTERVAL TIMESTAMPdiff(SECOND, apope.PLANSTARTDATE, apope.PLANENDDATE) SECOND)),
-        apope.PLANSTARTDATE=IF(apope.ACTUALFINISHDATE IS NOT NULL,apope.PLANSTARTDATE,apope.ACTUALSTARTDATE)
+            -- 如果没有完工,先根据实际开工时间计算和设置计划完工时间,再设置计划开工时间=实际开工时间
+            apope.PLANENDDATE=DATE_ADD(apope.ACTUALSTARTDATE,INTERVAL TIMESTAMPdiff(SECOND, apope.PLANSTARTDATE, apope.PLANENDDATE) SECOND),
+            apope.PLANSTARTDATE=apope.ACTUALSTARTDATE
         where
-        apo.DELETED='0' and apope.deleted='0'
-        AND (apope.ACTUALSTARTDATE IS NULL and apope.ACTUALFINISHDATE IS NOT NULL) -- 已经开工或完工
-        and (apope.ACTUALSTARTDATE &lt; apope.PLANSTARTDATE OR apope.ACTUALFINISHDATE &lt; apope.PLANENDDATE) -- 提前开工或完工
-        and apope.PLANENDDATE > #{needScheduleDate} -- 计划完工时间大于调度开始时间,即占用了调度时间
-        and apo.PROCESS != '铸轧'
+            apo.DELETED='0' and apope.deleted='0'
+          AND (apope.ACTUALSTARTDATE IS not NULL and apope.ACTUALFINISHDATE IS NULL) -- 已经开工或完工
+          and (apope.ACTUALSTARTDATE &lt; apope.PLANSTARTDATE OR apope.ACTUALFINISHDATE &lt; apope.PLANENDDATE) -- 提前开工或完工
+          and apope.PLANENDDATE > #{needScheduleDate} -- 计划完工时间大于调度开始时间,即占用了调度时间
+          and apo.PROCESS != '铸轧'
+          and apope.TENANTID = #{tenantId};
+        update
+        aps_process_operation_process_equ apope
+        join aps_process_operation apo on apo.ID = apope.PROCESSID
+        left join aps_process_operation_process_equ preapope on apope.PREVIOUSPROCESSESIDS = preapope.id AND preapope.DELETED = '0'
+        set
+        apope.PLANSTARTDATE=DATE_SUB(date_add(preapope.PLANENDDATE, INTERVAL ifnull(apo.MAXFLOWWAITMIN,0) MINUTE),INTERVAL TIMESTAMPdiff(SECOND, apope.PLANSTARTDATE, apope.PLANENDDATE) SECOND),
+        apope.PLANENDDATE=date_add(preapope.PLANENDDATE, INTERVAL ifnull(apo.MAXFLOWWAITMIN,0) MINUTE)
+        WHERE
+        apope.deleted = '0' AND apo.DELETED = '0'
         and apope.TENANTID = #{tenantId}
+        and apo.PROCESS != '铸轧'
+        and apope.WORKSTATUS = '待开工'
+        and apope.PLANSTARTDATE between #{chongpaiStartDate} and #{chongpaiEndDate}  -- 占用调度时间范围内
+        and ifnull(apo.MAXFLOWWAITMIN,0) > 0 -- 有最大流转等待时间
+        AND ifnull(apope.PREVIOUSPROCESSESIDS,'') != '' -- 有前道
+        and date_add(preapope.PLANENDDATE, INTERVAL ifnull(apo.MAXFLOWWAITMIN,0) MINUTE) &lt; #{chongpaiStartDate} -- 前道完工时间+最大流转时间小于调度开始时间
     </update>
     <update id="removeLockNextDayProcessEqu">
         with tomorroworder as(