浏览代码

存在未锁定作业的坯料计划参与排程,锁定的作业设备时间固定不变

fangpy 1 年之前
父节点
当前提交
f131411e2c

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

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.dao;
 
 import com.rongwei.bsentity.domain.ApsBlankOrderDo;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo;
 import com.rongwei.bsentity.domain.AspCheckItemsDo;
 import com.rongwei.bsentity.vo.ApsBlankOrderVo;
 import com.rongwei.bsentity.vo.BlankIdAndProcessStatusVo;
@@ -46,6 +47,12 @@ public interface ApsBlankOrderDao extends BaseMapper<ApsBlankOrderDo> {
             "where a.DELETED='0' and b.DELETED='0' and c.DELETED='0' and (b.LOCKMARK='n' OR b.LOCKMARK is null) and c.TENANTID = #{tenantId} and a.ID not in (${hasIds})")
     List<ApsBlankOrderVo> getOrdersHasNotLockProcess(@Param("hasIds") String hasIds,@Param("tenantId") String tenantId);
 
+    @Select("select * FROM (\n" +
+            "select PROCESSDEVICEID,PLANSTARTDATE,PLANENDDATE,GROUP_CONCAT(PROCESSID) PROCESSID from (select * from aps_process_operation_process_equ " +
+            "where DELETED='0' ORDER BY PROCESSID ASC) a GROUP BY PROCESSDEVICEID,PLANSTARTDATE,PLANENDDATE" +
+            ") b where b.PROCESSID like '%${processid}%'")
+    List<ApsProcessOperationProcessEquDo> getGroupProcessOperationProcessEqus(@Param("processid") String processid);
+
     @Update("update aps_blank_order set CRAFTROUTEID = #{craftrouteid} where ID=#{blankId} ")
     void upCraftrouteId(@Param("blankId") String blankId, @Param("craftrouteid") String craftrouteid);
 

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

@@ -37,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
@@ -497,7 +498,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             String idStrs = CollUtil.join(hasIds, "','");
             idStrs = "'" + idStrs + "'";
             // 查询存在未锁定的作业坯料计划
-            List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getFbNotLock(idStrs,tenantId);
+//            List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getFbNotLock(idStrs,tenantId);
+            List<ApsBlankOrderVo> fbNotLock = apsBlankOrderDao.getOrdersHasNotLockProcess(idStrs,tenantId);
             if (fbNotLock != null && fbNotLock.size() > 0) {
                 apsBlankOrders.addAll(fbNotLock);
             }
@@ -720,6 +722,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                 // 获取所有订单工序
                 List<ApsProcessOperationDo> operationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
                         .eq(ApsProcessOperationDo::getBlankid, apsBlankOrderVo.getId()));
+                // 锁定的合并工序缓存
+                Map<String,ProductionProcesses> lockHbPp = new HashMap<>();
                 // 转换工序模型数据
                 for (ApsProcessOperationDo operationDo : operationDos) {
                     ProductionProcesses processes = new ProductionProcesses();
@@ -824,13 +828,86 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     }
 
                     if (SaveConstans.ProcessWay.PROCESS_WAY_MERGE.equals(productprocess)) {
-                        // 合并生产工序
-                        ApsProcessOperationVo processOperationVo = new ApsProcessOperationVo();
-                        BeanUtil.copyProperties(operationDo, processOperationVo);
-                        processOperationVo.setProduceOrder(produceOrder);
-                        processOperationVo.setDeliverydate(apsBlankOrderVo.getDeliverydate());
-                        processOperationVo.setApsBlankOrderVo(apsBlankOrderVo);
-                        processOperationMs.add(processOperationVo);
+                        // 锁定的作业
+                        if(LOCKMARK_Y.equals(operationDo.getLockmark())){
+//                            List<ApsProcessOperationProcessEquDo> popes = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+//                                    .eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId()));
+                            List<ApsProcessOperationProcessEquDo> popes = apsBlankOrderDao.getGroupProcessOperationProcessEqus(operationDo.getId());
+                            if(popes != null && popes.size()>0){
+                                for (ApsProcessOperationProcessEquDo pope : popes) {
+                                    // 已存在的合并工序则添加上下道工序
+                                    if(lockHbPp.containsKey(pope.getProcessdeviceid())){
+                                        ProductionProcesses processes1 = lockHbPp.get(pope.getProcessdeviceid());
+                                        // 上道工序
+                                        if (StringUtils.isNotBlank(operationDo.getPreviousprocessid())) {
+                                            List<String> pres = new ArrayList<>();
+                                            pres.addAll(Arrays.asList(operationDo.getPreviousprocessid().split(",")));
+                                            pres.addAll(processes1.getPreviousProcessesIds());
+                                            processes1.setPreviousProcessesIds(pres);
+                                        }
+                                        // 下道工序
+                                        if (StringUtils.isNotBlank(operationDo.getNextprocessid())) {
+                                            List<String> nexts = new ArrayList<>();
+                                            nexts.addAll(Arrays.asList(operationDo.getNextprocessid().split(",")));
+                                            nexts.addAll(processes1.getNextProcessesIds());
+                                            processes1.setNextProcessesIds(nexts);
+                                        }
+                                    }
+                                    // 不存在此合并工序则新增一个合并作业
+                                    else{
+                                        ProductionProcesses processeshb = new ProductionProcesses();
+                                        // 模型ID
+                                        processeshb.setId(SecurityUtil.getUUID());
+                                        // 业务表主键ID
+                                        List<String> bss = new ArrayList<>();
+                                        bss.add(operationDo.getId());
+                                        processeshb.setBsProcessesId(bss);
+                                        List<String> opeqs = new ArrayList<>();
+                                        opeqs.add(pope.getProcessdeviceid());
+                                        processeshb.setOptionalEquipments(opeqs);
+                                        // 批次
+                                        processeshb.setProducePcNum(operationDo.getPlanprocessrall());
+                                        processeshb.setProcessType(operationDo.getProcess());
+                                        // 单次加工时长
+                                        processeshb.setUnitProduceTime(operationDo.getOnceprocessmin().intValue());
+                                        processeshb.setProduceTime(operationDo.getOnceprocessmin().intValue());
+                                        if (operationDo.getMinflowwaitmin() != null) {
+                                            processeshb.setMinWaitTime(operationDo.getMinflowwaitmin().intValue());
+                                        }
+                                        if (operationDo.getMaxflowwaitmin() != null) {
+                                            processeshb.setMaxWaitTime(operationDo.getMaxflowwaitmin().intValue());
+                                        }
+                                        processes.setIfLock(true);
+                                        processes.setEquipmentId(pope.getProcessdeviceid());
+                                        processes.setStartTime(pope.getPlanstartdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+                                        processes.setEndTime(pope.getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+                                        // 上道工序
+                                        if (StringUtils.isNotBlank(operationDo.getPreviousprocessid())) {
+                                            List<String> pres = new ArrayList<>();
+                                            pres.addAll(Arrays.asList(operationDo.getPreviousprocessid().split(",")));
+                                            processes.setPreviousProcessesIds(pres);
+                                        }
+                                        // 下道工序
+                                        if (StringUtils.isNotBlank(operationDo.getNextprocessid())) {
+                                            List<String> nexts = new ArrayList<>();
+                                            nexts.addAll(Arrays.asList(operationDo.getNextprocessid().split(",")));
+                                            processes.setNextProcessesIds(nexts);
+                                        }
+                                        
+                                        lockHbPp.put(pope.getProcessdeviceid(),processes);
+                                        processesList.add(processes);
+                                    }
+                                }
+                            }
+                        }else{
+                            // 合并生产工序
+                            ApsProcessOperationVo processOperationVo = new ApsProcessOperationVo();
+                            BeanUtil.copyProperties(operationDo, processOperationVo);
+                            processOperationVo.setProduceOrder(produceOrder);
+                            processOperationVo.setDeliverydate(produceOrder.getDeliveryDate());
+                            processOperationVo.setApsBlankOrderVo(apsBlankOrderVo);
+                            processOperationMs.add(processOperationVo);
+                        }
                     } else {
                         // 非合并生产工序
 
@@ -876,6 +953,18 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                         }
                         processes.setPrepressworkmin(operationDo.getPrepressworkmin() == null ? null : operationDo.getPrepressworkmin().intValue());
                         processes.setCutfinishmin(operationDo.getCutfinishmin() == null ? null : operationDo.getCutfinishmin().intValue());
+                        // 锁定的作业加上锁定标识
+                        if(LOCKMARK_Y.equals(operationDo.getLockmark())){
+                            ApsProcessOperationProcessEquDo processEquServiceOne = processOperationProcessEquService.getOne(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+                                    .eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId()));
+                            processes.setIfLock(true);
+                            processes.setEquipmentId(processEquServiceOne.getProcessdeviceid());
+                            List<String> opeqs = new ArrayList<>();
+                            opeqs.add(processEquServiceOne.getProcessdeviceid());
+                            processes.setOptionalEquipments(opeqs);
+                            processes.setStartTime(processEquServiceOne.getPlanstartdate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+                            processes.setEndTime(processEquServiceOne.getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
+                        }
                         processesList.add(processes);
                     }
                 }

+ 13 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ProductionProcesses.java

@@ -170,6 +170,11 @@ public class ProductionProcesses{
      */
     private Integer cutfinishmin;
 
+    /**
+     * 是否锁定,锁定的工序开始时间、结束时间需要初始化,参与排程但开始时间、结束时间、以及设备占用不会变化
+     */
+    private boolean ifLock;
+
     public String getEquipmentType() {
         return equipmentType;
     }
@@ -420,4 +425,12 @@ public class ProductionProcesses{
     public void setCutfinishmin(Integer cutfinishmin) {
         this.cutfinishmin = cutfinishmin;
     }
+
+    public boolean isIfLock() {
+        return ifLock;
+    }
+
+    public void setIfLock(boolean ifLock) {
+        this.ifLock = ifLock;
+    }
 }