瀏覽代碼

aps-调度修改

sucheng 4 月之前
父節點
當前提交
32837202ea

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

@@ -180,4 +180,6 @@ public interface ApsBlankOrderDao extends BaseMapper<ApsBlankOrderDo> {
     List<ApsBlankOrderVo> getNeedScheduleList(@Param("tenantId") String tenantId);
 
     List<ApsBlankOrderDo> selectBlankByStartNum(@Param("startNum") String startNum);
+
+    int moveErrorProcessEqu(@Param("chongpaiEndDate") DateTime chongpaiEndDate, @Param("tenantId") String tenantId, @Param("workshopin") Integer workshopin, @Param("workshopcross") Integer workshopcross);
 }

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

@@ -4335,6 +4335,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             needScheduleDate = DateUtil.format(chongpaiStartDate, "yyyy-MM-dd");
         }
         if (ObjectUtil.isNotEmpty(needScheduleDate)) {
+            //排程设置
+            ApsScheduleConfigDo apsScheduleConfigDo = apsScheduleConfigService.getById("1");
             String tenantId = CXCommonUtils.getCurrentUserFactoryId(currentUser);
             //查询所有已解锁的作业和作业明细
             List<ApsProcessOperationProcessEquDo> unLockingEquList = apsProcessOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
@@ -4346,6 +4348,13 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
             //将实际完工时间大于明天的作业挪到实际完工时间
             this.baseMapper.updateFinishDateAboutProcessEqu(needScheduleDate, tenantId, chongpaiStartDate, chongpaiEndDate);
+            //错误数据纠正挪动
+            while (true) {
+                int updateCount = this.baseMapper.moveErrorProcessEqu(chongpaiEndDate, CXCommonUtils.getCurrentUserFactoryId(currentUser), apsScheduleConfigDo.getWorkshopin(), apsScheduleConfigDo.getWorkshopcross());
+                if (updateCount <= 0) {
+                    break;
+                }
+            }
             //锁定所有 未锁定的 作业和作业明细
             apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
                     .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, "y")
@@ -4359,8 +4368,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     .set(ApsProcessOperationDo::getLockmark, "y")
                     .eq(ApsProcessOperationDo::getLockmark, "n")
                     .eq(ApsProcessOperationDo::getTenantid, tenantId));
-            //排程设置
-            ApsScheduleConfigDo apsScheduleConfigDo = apsScheduleConfigService.getById("1");
             try {
                 List<String> blankIdList = null;
                 if (StringUtils.isNotBlank(blankIds)) {

+ 37 - 0
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsBlankOrderDao.xml

@@ -293,6 +293,43 @@
           and apope.PLANSTARTDATE between #{chongpaiStartDate} and #{chongpaiEndDate} -- 调度开始时间之后计划开工
           and apope.LOCKMARKDETAIL = 'y'
     </update>
+    <update id="moveErrorProcessEqu">
+        update
+        aps_process_operation_process_equ apope
+        join aps_process_operation apo on apo.ID = apope.PROCESSID
+        join aps_process_operation_process_equ preapope on apope.PREVIOUSPROCESSESIDS = preapope.id
+        set
+        apope.PLANENDDATE=date_add(apope.PLANSTARTDATE,
+        INTERVAL TIMESTAMPdiff(SECOND,
+        apope.PLANSTARTDATE,
+        date_add(preapope.PLANENDDATE, -- 计划开工时间 小于 前道计划完工时间 + 流转时间
+        INTERVAL GREATEST(
+        ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+        if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+        if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0))) MINUTE -- 机台流转时间
+        )) SECOND),
+        apope.PLANSTARTDATE=date_add(apope.PLANSTARTDATE,
+        INTERVAL TIMESTAMPdiff(SECOND,
+        apope.PLANSTARTDATE,
+        date_add(preapope.PLANENDDATE, -- 计划开工时间 小于 前道计划完工时间 + 流转时间
+        INTERVAL GREATEST(
+        ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+        if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+        if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0))) MINUTE -- 机台流转时间
+        )) SECOND)
+        WHERE
+        apope.deleted = '0' AND apo.DELETED = '0' AND preapope.DELETED = '0'
+        and apope.TENANTID = #{tenantId}
+        and apo.PROCESS != '铸轧'
+        and apope.WORKSTATUS = '待开工'
+        AND apope.PLANSTARTDATE &lt;= #{chongpaiEndDate} -- 调度结束时间之前
+        AND date_add(preapope.PLANENDDATE, -- 计划开工时间 小于 前道计划完工时间 + 流转时间
+        INTERVAL GREATEST(
+        ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+        if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+        if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0))) MINUTE -- 机台流转时间
+        ) > apope.PLANSTARTDATE
+    </update>
     <select id="checkConflictByBlankId" resultType="java.lang.Integer">
         select count(*) from aps_process_operation_process_equ
             <where>