Browse Source

Merge branch 'mode-min-unit' into mode-min-unit-新模型

# Conflicts:
#	cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java
#	cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsServiceImpl.java
sucheng 4 months ago
parent
commit
04b7dee57e

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

@@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Update;
 
 import java.util.Date;
 import java.util.List;
+import java.util.Set;
 
 /**
  * @Entity com.rongwei.training.domain.ApsProcessOperationProcessEqu
@@ -138,6 +139,8 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
     void repairePlanStartDate2();
 
     void myUpdateConflictdes(@Param("apsProcessOperationProcessEquDo") ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo);
+
+    void updateProcessPlanTimeByProcessIds(@Param("processIdList") Set<String> processIdList);
 }
 
 

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

@@ -1,6 +1,7 @@
 package com.rongwei.bscommon.sys.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.rongwei.bsentity.domain.ApsProcessOperationDo;
 import com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo;
 import com.rongwei.bsentity.vo.*;
 import com.rongwei.rwcommon.base.R;
@@ -17,7 +18,7 @@ public interface ApsProcessOperationProcessEquService extends IService<ApsProces
 
     String updateProcessByProcessEquId(String processOperationEquId);
 
-    R changingWires(List<ChangingWiresVo> changingWiresVos);
+    List<String> changingWires(List<ChangingWiresVo> changingWiresVos);
 
     R getOptionalEquipment(List<String> operationJobDetailsId);
 
@@ -39,4 +40,13 @@ public interface ApsProcessOperationProcessEquService extends IService<ApsProces
                                              Date oldPlanstartdate, Date oldPlanenddate,
                                              String oldEquId, String currentProcessWay, List<String> returnAboutIds);
 
+    void splitProcessEqu(ApsProcessOperationProcessEquDo processEqus,
+                         int waitSplitRoll,
+                         ApsProcessOperationDo apsProcessOperationDo,
+                         String previousEquId,
+                         List<ApsProcessOperationProcessEquDo> needUpdateOldList,
+                         List<ApsProcessOperationProcessEquDo> needInsertNewList,
+                         List<ApsProcessOperationProcessEquDo> waitUpdateEquList,
+                         List<ApsProcessOperationProcessEquDo> waitInsertEquList);
+
 }

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

@@ -4375,51 +4375,61 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     .set(ApsProcessOperationDo::getLockmark, "y")
                     .eq(ApsProcessOperationDo::getLockmark, "n")
                     .eq(ApsProcessOperationDo::getTenantid, tenantId));
+            List<String> blankIdList = null;
+            if (StringUtils.isNotBlank(blankIds)) {
+                blankIdList = new LinkedList<>(Arrays.asList(blankIds.split(",")));
+            }
             try {
-                List<String> blankIdList = null;
-                if (StringUtils.isNotBlank(blankIds)) {
-                    blankIdList = new LinkedList<>(Arrays.asList(blankIds.split(",")));
-                }
+                log.info("开始冷轧重排");
                 //冷轧重排
                 lenzhaChongpai(chongpaiStartDate, chongpaiEndDate, apsScheduleConfigDo, currentUser, blankIdList);
+                log.info("冷轧重排结束");
+            } catch (Exception e) {
+                log.error("冷轧重排失败");
+                log.error(e);
+            }
+            try {
+                log.info("开始退火重排");
                 //退火重排
                 tuihuoChongpai(chongpaiStartDate, chongpaiEndDate, apsScheduleConfigDo, currentUser, blankIdList);
+                log.info("退火重排结束");
             } catch (Exception e) {
+                log.error("退火重排失败");
                 log.error(e);
-            } finally {
-                //锁定所有 未锁定的 作业和作业明细
-                apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
-                        .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, "y")
-                        .eq(ApsProcessOperationProcessEquDo::getLockmarkdetail, "n")
-                        .eq(ApsProcessOperationProcessEquDo::getTenantid, tenantId));
+            }
+            //锁定所有 未锁定的 作业和作业明细
+            apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                    .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, "y")
+                    .eq(ApsProcessOperationProcessEquDo::getLockmarkdetail, "n")
+                    .eq(ApsProcessOperationProcessEquDo::getTenantid, tenantId));
+            apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                    .set(ApsProcessOperationProcessEquDo::getLockmark, "y")
+                    .eq(ApsProcessOperationProcessEquDo::getLockmark, "n")
+                    .eq(ApsProcessOperationProcessEquDo::getTenantid, tenantId));
+            apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
+                    .set(ApsProcessOperationDo::getLockmark, "y")
+                    .eq(ApsProcessOperationDo::getLockmark, "n")
+                    .eq(ApsProcessOperationDo::getTenantid, tenantId));
+
+            //调度排程结束
+            //将之前锁定的作业和明细重新解锁
+            if (!unLockingEquIdList.isEmpty()) {
                 apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
-                        .set(ApsProcessOperationProcessEquDo::getLockmark, "y")
-                        .eq(ApsProcessOperationProcessEquDo::getLockmark, "n")
-                        .eq(ApsProcessOperationProcessEquDo::getTenantid, tenantId));
+                        .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, "n")
+                        .in(ApsProcessOperationProcessEquDo::getId, unLockingEquIdList));
+            }
+            if (!unLockingProcessIdList.isEmpty()) {
                 apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
-                        .set(ApsProcessOperationDo::getLockmark, "y")
-                        .eq(ApsProcessOperationDo::getLockmark, "n")
-                        .eq(ApsProcessOperationDo::getTenantid, tenantId));
-
-                //调度排程结束
-                //将之前锁定的作业和明细重新解锁
-                if (!unLockingEquIdList.isEmpty()) {
-                    apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
-                            .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, "n")
-                            .in(ApsProcessOperationProcessEquDo::getId, unLockingEquIdList));
-                }
-                if (!unLockingProcessIdList.isEmpty()) {
-                    apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
-                            .set(ApsProcessOperationDo::getLockmark, "n")
-                            .in(ApsProcessOperationDo::getId, unLockingProcessIdList));
-                }
+                        .set(ApsProcessOperationDo::getLockmark, "n")
+                        .in(ApsProcessOperationDo::getId, unLockingProcessIdList));
             }
 
+            log.info("开始推算调度时间之后的重叠数据");
             //推算非退火、非铸轧的重叠数据,按序排列
-            sortLenZha(chongpaiStartDate, tenantId);
+            sortLenZha(chongpaiEndDate, tenantId);
             //推算退火,按序排列
-            sortTuiHuo(chongpaiStartDate, tenantId);
-
+            sortTuiHuo(chongpaiEndDate, tenantId);
+            log.info("调度排程结束");
         }
     }
 

File diff suppressed because it is too large
+ 589 - 372
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationProcessEquServiceImpl.java


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

@@ -967,6 +967,77 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
                 }
             }
 
+            //查询当前的报工记录信息
+            ApsReportRecordsDo nowReportRecordsDo = this.getById(apsReportRecordsDo.getId());
+            //查询对应的工序作业信息
+            ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(nowReportRecordsDo.getProcessoperationid());
+            //明细
+            ApsProcessOperationProcessEquDo processEquDo = apsProcessOperationProcessEquService.getById(nowReportRecordsDo.getProcessequid());
+
+            //合并加工工序拆分
+            //如果剩余待开工卷数>0,则根据剩余待开工卷数拆分作业明细,参见【拆分作业明细】,
+            //检查记录新拆分作业明细冲突,参见【一键自动排程/记录作业冲突和警告】
+            Integer newLeaveWaitWorkRoll = processEquDo.getLeavewaitworkroll();
+            if (newLeaveWaitWorkRoll > 0) {
+                //待更新作业明细集合
+                List<ApsProcessOperationProcessEquDo> waitUpdateEquList = new LinkedList<>();
+                //待新增作业明细集合
+                List<ApsProcessOperationProcessEquDo> waitInsertEquList = new LinkedList<>();
+                List<ApsProcessOperationProcessEquDo> needUpdateOldList = new LinkedList<>();
+                List<ApsProcessOperationProcessEquDo> needInsertNewList = new LinkedList<>();
+                apsProcessOperationProcessEquService.splitProcessEqu(processEquDo,
+                        newLeaveWaitWorkRoll,
+                        apsProcessOperationDo,
+                        processEquDo.getPreviousprocessesids(),
+                        needUpdateOldList,
+                        needInsertNewList,
+                        waitUpdateEquList,
+                        waitInsertEquList);
+                Set<String> needUpdateProcessIdList = new HashSet<>();
+
+                //拆分完执行sql更新数据
+                if (!needInsertNewList.isEmpty()) {
+                    apsProcessOperationProcessEquService.saveBatch(needInsertNewList);
+                    needUpdateProcessIdList.addAll(needInsertNewList.stream().map(ApsProcessOperationProcessEquDo::getProcessid).collect(Collectors.toList()));
+                }
+                if (!needUpdateOldList.isEmpty()) {
+                    apsProcessOperationProcessEquService.updateBatchById(needUpdateOldList);
+                    needUpdateProcessIdList.addAll(needUpdateOldList.stream().map(ApsProcessOperationProcessEquDo::getProcessid).collect(Collectors.toList()));
+                }
+                if (!needUpdateProcessIdList.isEmpty()) {
+                    //更新对应工序作业的 计划完工时间和计划开工时间
+                    apsProcessOperationProcessEquDao.updateProcessPlanTimeByProcessIds(needUpdateProcessIdList);
+                }
+                //判断新拆分的作业的冲突
+                if (apsProcessOperationDo.getProcessway().equals("合并加工")) {
+                    for (ApsProcessOperationProcessEquDo equDo : needInsertNewList) {
+                        ApsProcessOperationProcessEquDo processEqu = apsProcessOperationProcessEquService.getById(equDo.getId());
+                        ApsProcessOperationDo process = apsProcessOperationService.getById(processEqu.getProcessid());
+                        apsProcessOperationProcessEquService.checkProcessingTimeConflict(processEqu,
+                                null, null, null, process.getProcessway(), new LinkedList<>());
+                        processEqu = apsProcessOperationProcessEquService.getById(processEqu.getId());
+                        apsProcessOperationProcessEquService.inspectionEquipmentIsAvailable(processEqu,
+                                processEqu.getProcessdeviceid(),
+                                processEqu.getPlanstartdate(),
+                                processEqu.getPlanenddate(),
+                                new LinkedList<>());
+                    }
+                    for (ApsProcessOperationProcessEquDo equDo : needUpdateOldList) {
+                        ApsProcessOperationProcessEquDo processEqu = apsProcessOperationProcessEquService.getById(equDo.getId());
+                        ApsProcessOperationDo process = apsProcessOperationService.getById(processEqu.getProcessid());
+                        apsProcessOperationProcessEquService.checkProcessingTimeConflict(processEqu,
+                                null, null, null, process.getProcessway(), new LinkedList<>());
+                        processEqu = apsProcessOperationProcessEquService.getById(processEqu.getId());
+                        apsProcessOperationProcessEquService.inspectionEquipmentIsAvailable(processEqu,
+                                processEqu.getProcessdeviceid(),
+                                processEqu.getPlanstartdate(),
+                                processEqu.getPlanenddate(),
+                                new LinkedList<>());
+                    }
+                }
+
+            }
+
             //没有新增,只会更新
             apsReportRecordsDo.setCheckstatus("待检验");
 
@@ -984,11 +1055,6 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
                 apsReportBlankCompentService.updateBatchById(apsReportBlankCompentDoList);
             }
 
-            //查询当前的报工记录信息
-            ApsReportRecordsDo nowReportRecordsDo = this.getById(apsReportRecordsDo.getId());
-
-            //查询对应的工序作业信息
-            ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(nowReportRecordsDo.getProcessoperationid());
             //查询对应的工序作业明细信息
             ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(nowReportRecordsDo.getProcessequid());
             //查询对应的坯料计划信息

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

@@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.mysql.cj.exceptions.CJCommunicationsException;
 import com.mysql.cj.jdbc.exceptions.CommunicationsException;
+import com.mysql.cj.jdbc.exceptions.MySQLTransactionRollbackException;
 import com.rongwei.bscommon.sys.dao.ApsBlankOrderDao;
 import com.rongwei.bscommon.sys.dao.ApsProcessOperationProcessEquDao;
 import com.rongwei.bscommon.sys.fegin.RwApsServer;

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

@@ -431,6 +431,34 @@
             ID = #{apsProcessOperationProcessEquDo.id}
         </where>
     </update>
+    <update id="updateProcessPlanTimeByProcessIds">
+
+        UPDATE aps_process_operation apo
+            JOIN (
+                SELECT
+                    PROCESSID,
+                    MIN( PLANSTARTDATE ) AS min_start,
+                    MAX( PLANENDDATE ) AS max_end,
+                    MIN(ACTUALSTARTDATE) AS min_act_start,
+                    MAX(ACTUALFINISHDATE) AS max_act_end
+                FROM
+                    aps_process_operation_process_equ
+                WHERE
+                    DELETED = 0
+                  AND PROCESSID IN
+                      <foreach collection="processIdList" separator="," item="item" open="(" close=")">
+                          #{item}
+                      </foreach>
+                GROUP BY
+                    PROCESSID
+            ) apope ON apo.ID = apope.PROCESSID
+        SET apo.PLANSTARTDATE = apope.min_start,
+            apo.PLANENDDATE = apope.max_end,
+            apo.ACTUALSTARTDATE = apope.min_act_start,
+            apo.ACTUALFINISHDATE = apope.max_act_end
+        WHERE
+            apo.DELETED = 0
+    </update>
     <select id="getOptionalEquipmentById" resultType="com.rongwei.bsentity.vo.OptionalEquipmentVo">
         SELECT
         CONCAT(aci.USEDEPTID, '/', aci.ID ) AS value ,

+ 5 - 2
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsProcessOperationProcessEquController.java

@@ -2,6 +2,7 @@ package com.rongwei.bsserver.controller;
 
 
 import com.rongwei.bscommon.sys.service.ApsProcessOperationProcessEquService;
+import com.rongwei.bscommon.sys.service.GanttService;
 import com.rongwei.bsentity.vo.*;
 import com.rongwei.rwcommon.base.R;
 import lombok.extern.slf4j.Slf4j;
@@ -28,6 +29,8 @@ import java.util.List;
 public class ApsProcessOperationProcessEquController {
     @Autowired
     private ApsProcessOperationProcessEquService apsProcessOperationProcessEquService;
+    @Autowired
+    private GanttService ganttService;
 
     /**
      * 通用更新订单、坯料计划、工序作业的 生产状态 方法(根据传入的指定项目的ID,传入多个ID,根据最小粒度的ID)
@@ -54,7 +57,7 @@ public class ApsProcessOperationProcessEquController {
     @PostMapping("/changing-wires")
     public R changingWires(@RequestBody @Validated List<ChangingWiresVo> changingWiresVos) {
         log.info("开始进行换线作业");
-        return apsProcessOperationProcessEquService.changingWires(changingWiresVos);
+        return R.ok(ganttService.getListById(apsProcessOperationProcessEquService.changingWires(changingWiresVos)));
     }
     /**
      * 换线作业2,区分甘特图和车间作业跟踪
@@ -65,7 +68,7 @@ public class ApsProcessOperationProcessEquController {
     @PostMapping("/changing-wires2")
     public R changingWires2(@RequestBody @Validated List<ChangingWiresVo> changingWiresVos) {
         log.info("开始进行换线作业2");
-        return apsProcessOperationProcessEquService.changingWires(changingWiresVos);
+        return R.ok(ganttService.getListById(apsProcessOperationProcessEquService.changingWires(changingWiresVos)));
     }
     /**
      * 排单