Browse Source

Merge branch 'mode-min-unit' into mode-min-unit-交期偏差

sucheng 2 months ago
parent
commit
c48712aacc

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

@@ -1,6 +1,7 @@
 package com.rongwei.bscommon.sys.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
@@ -2648,7 +2649,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         query.setCurrent(null);
         query.setSize(null);
         R listData = cxAdminFeginClient.getListData(query);
-        JSONObject jsonObject = JSONObject.parseObject(listData.getData().toString());
+        JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(listData.getData()));
         JSONArray records = jsonObject.getJSONArray("records");
         //返回指定格式的数据
         List<WorkShopExportVo> res = new LinkedList<>();
@@ -2877,20 +2878,21 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
                     continue;
                 }
                 List<ApsProcessOperationProcessEquDo> myList = new LinkedList<>();
-                needUpdate.setPlanstartdate(workShopExportVo.getPlanstartdate());
-                needUpdate.setPlanenddate(DateUtil.offsetMinute(workShopExportVo.getPlanstartdate(), workTime));
+                DateTime planStartDate = DateUtil.truncate(workShopExportVo.getPlanstartdate(), DateField.MINUTE);
+                needUpdate.setPlanstartdate(planStartDate);
+                needUpdate.setPlanenddate(DateUtil.offsetMinute(planStartDate, workTime));
                 myList.add(needUpdate);
                 resMap.put(aspCheckItemsDo.getId(), myList);
             } else {
                 List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = resMap.get(aspCheckItemsDo.getId());
                 ApsProcessOperationProcessEquDo lastEquDo = apsProcessOperationProcessEquDos.get(apsProcessOperationProcessEquDos.size() - 1);
-                if (workShopExportVo.getPlanstartdate() != null
-                        && lastEquDo.getPlanenddate().after(workShopExportVo.getPlanstartdate())) {
-                    errorMessageList.add("第" + num + "行计划开工时间填写错误,和该设备上一道作业时间重叠;");
-                    continue;
-                }
                 if (workShopExportVo.getPlanstartdate() != null) {
-                    needUpdate.setPlanstartdate(workShopExportVo.getPlanstartdate());
+                    DateTime planStartDate = DateUtil.truncate(workShopExportVo.getPlanstartdate(), DateField.MINUTE);
+                    if (lastEquDo.getPlanenddate().after(planStartDate)) {
+                        errorMessageList.add("第" + num + "行计划开工时间填写错误,和该设备上一道作业时间重叠;");
+                        continue;
+                    }
+                    needUpdate.setPlanstartdate(planStartDate);
                 } else {
                     needUpdate.setPlanstartdate(lastEquDo.getPlanenddate());
                     if (apsProductionProcessesDo.getProcesscategory().equals("20")) {//当前工序为轧机

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

@@ -417,7 +417,15 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
             for (String nowOrderDetailId : nowOrderDetailIdList) {
                 if (!technicalHaveDetailIdList.contains(nowOrderDetailId)) {
                     ApsProductDetailVo apsProductDetailVo = apsProductDetailVoList.stream().filter(item -> item.getId().equals(nowOrderDetailId)).findFirst().orElse(null);
-                    return R.error("请填写" + apsProductDetailVo.getInputmaterialdescription() + "的技术要求");
+                    if (apsProductDetailVo != null) {
+                        String notyetreview = "否";
+                        if (StringUtils.isNotBlank(apsProductDetailVo.getNotyetreview())) {
+                            notyetreview = apsProductDetailVo.getNotyetreview();
+                        }
+                        if (notyetreview.equals("否")) {
+                            return R.error("请填写" + apsProductDetailVo.getInputmaterialdescription() + "的技术要求");
+                        }
+                    }
                 }
             }
 

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

@@ -1,6 +1,7 @@
 package com.rongwei.bscommon.sys.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
@@ -490,7 +491,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             if (ObjectUtil.isNotEmpty(earlyMergeStartDate)) {
                 apsReportRecordsDo.setStartworktime(earlyMergeStartDate);
             } else {
-                apsReportRecordsDo.setStartworktime(DateUtil.date());
+                apsReportRecordsDo.setStartworktime(DateUtil.truncate(DateUtil.date(), DateField.MINUTE));
             }
 //        //报工时间
 //        apsReportRecordsDo.setReportworktime(DateUtil.date());
@@ -513,7 +514,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             // 则炉次号=该合并作业明细的报工状态是已开工的报工记录的炉次号
             boolean createNewHeat = false;
             //合并作业明细的实际开工时间
-            Date mergeActualStartDate = DateUtil.date();
+            Date mergeActualStartDate = DateUtil.truncate(DateUtil.date(), DateField.MINUTE);
             if (apsProcessOperationDo.getProcessway().equals("合并加工")) {
                 List<ApsProcessOperationProcessEquDo> apsProcessEquMergeStartingList = this.baseMapper.selectOtherMergeProcessStarting(apsProcessOperationProcessEquDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid());
                 if (!apsProcessEquMergeStartingList.isEmpty()) {
@@ -568,7 +569,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             needUpdateProcessOperationProcessEqu.setStartingroll(newStartingRoll);
             if (newStartingRoll.equals(1)) {
                 //更新实际开工时间
-                Date startWorkTime = DateUtil.date();
+                Date startWorkTime = DateUtil.truncate(DateUtil.date(), DateField.MINUTE);
                 //如果炉次号是新开的炉次号,则实际开工时间=报工记录的开工时间;
                 //如果炉次号是已开工的炉次号,则实际开工时间=该合并作业明细的实际开工时间;
                 if (createNewHeat) {
@@ -617,7 +618,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             needUpdateProcessOperation.setLeavewaitworkroll(apsProcessOperationDo.getPlanprocessrall() - newProcessStartingRoll - apsProcessOperationDo.getInputunqualifiedroll() - apsProcessOperationDo.getCancelroll());
             needUpdateProcessOperation.setStartingroll(newProcessStartingRoll);
             if (newProcessStartingRoll.equals(1)) {
-                needUpdateProcessOperation.setActualstartdate(DateUtil.date());
+                needUpdateProcessOperation.setActualstartdate(DateUtil.truncate(DateUtil.date(), DateField.MINUTE));
                 needUpdateProcessOperation.setWorkstatus("加工中");
                 needUpdateProcessOperation.setProcessstatus(SaveConstans.ProductionStatus.PROCESSING);
             }
@@ -1728,7 +1729,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             apsReportRecordsDo.setChiefoperatorid(currentUser.getId());
             apsReportRecordsDo.setChiefoperatorname(currentUser.getName());
             //开工时间
-            apsReportRecordsDo.setStartworktime(DateUtil.date());
+            apsReportRecordsDo.setStartworktime(DateUtil.truncate(DateUtil.date(), DateField.MINUTE));
             //报工状态
             apsReportRecordsDo.setReportworkstatus("已开工");
             apsReportRecordsDo.setCheckstatus("待检验");
@@ -1749,7 +1750,7 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
             // 则炉次号=该合并作业明细的报工状态是已开工的报工记录的炉次号
             boolean createNewHeat = false;
             //合并作业明细的实际开工时间
-            Date mergeActualStartDate = DateUtil.date();
+            Date mergeActualStartDate = DateUtil.truncate(DateUtil.date(), DateField.MINUTE);
             if (apsProcessOperationDo.getProcessway().equals("合并加工")) {
                 List<ApsProcessOperationProcessEquDo> apsProcessEquMergeStartingList = this.baseMapper.selectOtherMergeProcessStarting(apsProcessOperationProcessEquDo.getId(), apsProcessOperationProcessEquDo.getProcessdeviceid());
                 if (!apsProcessEquMergeStartingList.isEmpty()) {

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

@@ -794,8 +794,8 @@ public class ApsServiceImpl implements ApsService {
             if (apsType.getConstraintMode() != null && apsType.getConstraintMode().equals("lz") && "dd".equals(apsType.getScheduleType())) {
                 productionScheduleRetVo = rwApsServer.productionLzDdSchedule(apsProductionSchedule);
             }else if("dd".equals(apsType.getScheduleType()) && "thMergeBf".equals(apsType.getThMergeMode())){
-                productionScheduleRetVo = rwApsServer.productionThDdSchedule(apsProductionSchedule);
-//                productionScheduleRetVo = rwApsServer.productionSchedule(apsProductionSchedule);
+//                productionScheduleRetVo = rwApsServer.productionThDdSchedule(apsProductionSchedule);
+                productionScheduleRetVo = rwApsServer.productionSchedule(apsProductionSchedule);
             }else {
                 productionScheduleRetVo = rwApsServer.productionSchedule(apsProductionSchedule);
             }

+ 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 -- 机台流转时间
-                    ) &lt; #{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">