Переглянути джерело

aps-调度挪动数据sql修改

sucheng 2 місяців тому
батько
коміт
83b1027d7f

+ 89 - 99
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsBlankOrderDao.xml

@@ -294,107 +294,80 @@
           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
+        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=if( -- 如果前道在调度时间之前开工,并且与前道是连续作业,则移动到前道计划完工时间
-                    apope.PROCESSDEVICEID = preapope.PROCESSDEVICEID and ifnull(apo.MINFLOWWAITMIN,0)=0,
-                    DATE_ADD(preapope.PLANENDDATE,INTERVAL TIMESTAMPdiff(SECOND, apope.PLANSTARTDATE, apope.PLANENDDATE) SECOND),
-                    date_add(apope.PLANENDDATE,
-                             INTERVAL TIMESTAMPdiff(SECOND,
-                                                    apope.PLANSTARTDATE,
-                                                    GREATEST(
-                                                            date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
-                                                                     INTERVAL GREATEST(
-                                                                             ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
-                                                                             if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
-                                                                                if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0)
-                                                                             )
-                                                                              ) MINUTE -- 机台流转时间
-                                                            ),
-                                                            #{chongpaiStartDate}
-                                                    )
-                                      ) SECOND
-                    )
-                              ),
-            apope.PLANSTARTDATE=if( -- 如果前道在调度时间之前,并且与前道是连续作业,则移动到前道计划完工时间
-                    apope.PROCESSDEVICEID = preapope.PROCESSDEVICEID and ifnull(apo.MINFLOWWAITMIN,0)=0,
-                    preapope.PLANENDDATE,
-                    date_add(apope.PLANSTARTDATE,
-                             INTERVAL TIMESTAMPdiff(SECOND,
-                                                    apope.PLANSTARTDATE,
-                                                    GREATEST(
-                                                            date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
-                                                                     INTERVAL GREATEST(
-                                                                             ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
-                                                                             if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
-                                                                                if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0)
-                                                                             )
-                                                                              ) MINUTE -- 机台流转时间
-                                                            ),
-                                                            #{chongpaiStartDate}
-                                                    )
-                                      ) SECOND
-                    )
-                                )
+        apope.PLANENDDATE=
+        date_add(apope.PLANENDDATE,
+        INTERVAL TIMESTAMPdiff(SECOND,
+        apope.PLANSTARTDATE,
+        GREATEST(
+        date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
+        INTERVAL GREATEST(
+        ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+        if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+        if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0)
+        )
+        ) MINUTE -- 机台流转时间
+        ),
+        #{chongpaiStartDate} -- 调度开始时间
+        )
+        ) SECOND
+        ),
+        apope.PLANSTARTDATE=
+        date_add(apope.PLANSTARTDATE,
+        INTERVAL TIMESTAMPdiff(SECOND,
+        apope.PLANSTARTDATE,
+        GREATEST(
+        date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
+        INTERVAL GREATEST(
+        ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+        if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+        if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0)
+        )
+        ) MINUTE -- 机台流转时间
+        ),
+        #{chongpaiStartDate} -- 调度开始时间
+        )
+        ) SECOND
+        )
         WHERE
-            apope.deleted = '0' AND apo.DELETED = '0' AND preapope.DELETED = '0'
-          and apope.TENANTID = #{tenantId}
-          and apo.PROCESS != '铸轧'
-            <if test="type != '' and type != null and type == '冷轧'">
-                AND apo.PROCESS NOT IN ('铸轧','中退','成退','小卷成退')
-            </if>
-            <if test="type != '' and type != null and type == '退火'">
-                AND apo.PROCESS IN ('中退','成退','小卷成退')
-            </if>
-          and apope.WORKSTATUS = '待开工'
-          AND   (apope.PLANSTARTDATE between #{chongpaiStartDate} and #{chongpaiEndDate} -- 在调度时间范围内开工
-                or (preapope.PLANSTARTDATE between #{chongpaiStartDate} and #{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
-                    )
-                or (apope.PLANSTARTDATE > #{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 -- 机台流转时间
-                    ) between #{chongpaiStartDate} and #{chongpaiEndDate} -- 调度结束时间
-                    )
-                   )
-          AND (
-                apope.PLANENDDATE!=if( -- 如果前道在调度时间之前开工,并且与前道是连续作业,则移动到前道计划完工时间
-                apope.PROCESSDEVICEID = preapope.PROCESSDEVICEID and ifnull(apo.MINFLOWWAITMIN,0)=0,
-                DATE_ADD(preapope.PLANENDDATE,INTERVAL TIMESTAMPdiff(SECOND, apope.PLANSTARTDATE, apope.PLANENDDATE) SECOND),
-                date_add(apope.PLANENDDATE,
-                INTERVAL TIMESTAMPdiff(SECOND,
-                apope.PLANSTARTDATE,
-                GREATEST(
-                date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
-                INTERVAL GREATEST(
-                ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
-                if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
-                if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0)
-                )
-                ) MINUTE -- 机台流转时间
-                ),
-                #{chongpaiStartDate}
-                )
-                ) SECOND
-                )
-                )
-        OR
-            apope.PLANSTARTDATE!=if( -- 如果前道在调度时间之前,并且与前道是连续作业,则移动到前道计划完工时间
-            apope.PROCESSDEVICEID = preapope.PROCESSDEVICEID and ifnull(apo.MINFLOWWAITMIN,0)=0,
-            preapope.PLANENDDATE,
-            date_add(apope.PLANSTARTDATE,
+        apope.deleted = '0' AND apo.DELETED = '0' AND preapope.DELETED = '0'
+        and apope.TENANTID = #{tenantId}
+        and apo.PROCESS != '铸轧'
+        <if test="type != '' and type != null and type == '冷轧'">
+            AND apo.PROCESS NOT IN ('铸轧','中退','成退','小卷成退')
+        </if>
+        <if test="type != '' and type != null and type == '退火'">
+            AND apo.PROCESS IN ('中退','成退','小卷成退')
+        </if>
+        and apope.WORKSTATUS = '待开工'
+        AND (
+            apope.PLANSTARTDATE between #{chongpaiStartDate} and #{chongpaiEndDate} -- 在调度时间范围内开工
+        or
+            (apope.PLANSTARTDATE &lt; #{chongpaiStartDate} -- 计划调度开始时间之前开工
+            and preapope.PLANSTARTDATE > #{chongpaiStartDate} -- 前道计划完工时间 + 流转时间在调度时间范围内
+            )
+        or
+            (apope.PLANSTARTDATE > #{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 -- 机台流转时间
+            ) &lt; #{chongpaiEndDate} -- 调度结束时间
+            )
+        )
+        AND (
+            apope.PLANENDDATE!=
+            date_add(apope.PLANENDDATE,
             INTERVAL TIMESTAMPdiff(SECOND,
             apope.PLANSTARTDATE,
             GREATEST(
@@ -406,12 +379,29 @@
             )
             ) MINUTE -- 机台流转时间
             ),
-            #{chongpaiStartDate}
+            #{chongpaiStartDate} -- 调度开始时间
             )
             ) SECOND
             )
+        OR
+            apope.PLANSTARTDATE!=
+            date_add(apope.PLANSTARTDATE,
+            INTERVAL TIMESTAMPdiff(SECOND,
+            apope.PLANSTARTDATE,
+            GREATEST(
+            date_add(preapope.PLANENDDATE, -- 前道计划完工时间 + 流转时间
+            INTERVAL GREATEST(
+            ifnull(apo.MINFLOWWAITMIN,0), -- 最小流转等待时间
+            if(apope.PROCESSWORKSHOPID!=preapope.PROCESSWORKSHOPID,#{workshopcross}, -- 车间流转时间
+            if(apope.PROCESSDEVICEID!=preapope.PROCESSDEVICEID,#{workshopin},0)
             )
+            ) MINUTE -- 机台流转时间
+            ),
+            #{chongpaiStartDate} -- 调度开始时间
             )
+            ) SECOND
+            )
+        )
 
     </update>
     <update id="moveErrorProcessEqu2">