Selaa lähdekoodia

aps-排程组装数据优化

sucheng 5 kuukautta sitten
vanhempi
commit
53b0d7da7c

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

@@ -4189,17 +4189,20 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 //            List<ApsProcessOperationProcessEquChongpaiVo> list = this.baseMapper.selectNeedRescheduleEqu(needScheduleDate, CXCommonUtils.getCurrentUserFactoryId(null));
             //排程设置
             ApsScheduleConfigDo apsScheduleConfigDo = apsScheduleConfigService.getById("1");
-            //冷轧重排
-            lenzhaChongpai(chongpaiStartDate, chongpaiEndDate, apsScheduleConfigDo);
-            //退火重排
-            tuihuoChongpai(chongpaiStartDate, chongpaiEndDate, apsScheduleConfigDo);
-            //锁定所有 未锁定的 作业和作业明细
-            apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
-                    .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, "y")
-                    .eq(ApsProcessOperationProcessEquDo::getLockmarkdetail, "n"));
-            apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
-                    .set(ApsProcessOperationDo::getLockmark, "y")
-                    .eq(ApsProcessOperationDo::getLockmark, "n"));
+            try {
+                //冷轧重排
+                lenzhaChongpai(chongpaiStartDate, chongpaiEndDate, apsScheduleConfigDo);
+                //退火重排
+                tuihuoChongpai(chongpaiStartDate, chongpaiEndDate, apsScheduleConfigDo);
+            } finally {
+                //锁定所有 未锁定的 作业和作业明细
+                apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
+                        .set(ApsProcessOperationProcessEquDo::getLockmarkdetail, "y")
+                        .eq(ApsProcessOperationProcessEquDo::getLockmarkdetail, "n"));
+                apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
+                        .set(ApsProcessOperationDo::getLockmark, "y")
+                        .eq(ApsProcessOperationDo::getLockmark, "n"));
+            }
 
             //推算非退火、非铸轧的重叠数据,按序排列
             sortLenZha(chongpaiEndDate);

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

@@ -1,10 +1,8 @@
 package com.rongwei.bscommon.sys.service.impl;
 
-import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateTime;
-import cn.hutool.core.date.DateUnit;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
@@ -20,25 +18,20 @@ import com.rongwei.bsentity.vo.*;
 import com.rongwei.commonservice.service.RedisService;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
 import com.rongwei.rwcommon.base.exception.CustomException;
-import com.rongwei.rwcommon.utils.DateUtils;
 import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.safecommon.utils.CXCommonUtils;
-import com.rongwei.safecommon.utils.SaveConstans;
-import org.apache.commons.math3.stat.descriptive.summary.Product;
 import org.redisson.api.RLock;
 import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
 import java.time.ZoneId;
-import java.time.format.DateTimeFormatter;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -85,6 +78,8 @@ public class ApsServiceImpl implements ApsService {
     private ApsProductionProcessesService apsProductionProcessesService;
     @Autowired
     private ApsProcessOperationEquService apsProcessOperationEquService;
+    @Autowired
+    private ApsProcessOperationProcessEquService apsProcessOperationProcessEquService;
 
     /**
      * Aps排程
@@ -904,6 +899,16 @@ public class ApsServiceImpl implements ApsService {
         Map<String, List<String>> blankProcessIds = new HashMap<>();
         // 待合并生产的订单工序
         List<ApsProcessOperationVo> processOperationMs = new ArrayList<>();
+
+        //查询所有坯料计划对应的 输出物料、工序作业、工序作业明细
+        List<String> blankIdList = apsBlankOrders.stream().map(ApsBlankOrderVo::getId).distinct().collect(Collectors.toList());
+        //工序作业
+        List<ApsProcessOperationDo> baseApsProcessOperationList = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>().in(ApsProcessOperationDo::getBlankid, blankIdList));
+        //输出物料
+        List<ApsProcessOperationOutMaterDo> baseApsProcessOperationOutMaterList = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>().in(ApsProcessOperationOutMaterDo::getBlankid, blankIdList));
+        //工序作业明细
+        List<ApsProcessOperationProcessEquDo> baseApsProcessOperationProcessEquList = apsProcessOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankIdList));
+
         if (apsBlankOrders != null && apsBlankOrders.size() > 0) {
             for (ApsBlankOrderVo apsBlankOrderVo : apsBlankOrders) {
                 // 当前坯料计划作业集合
@@ -952,7 +957,7 @@ public class ApsServiceImpl implements ApsService {
                     // 设备列表初始化
 //                    List<String> optionalEquipments = equipmentListInit(operationDo,equipmentList,eqMaps,blankids,productionScheduleVo,apsScheduleConfig);
                     // 工序作业相关数据初始化
-                    productionProcessesInit(operationDo,produceOrder,processesList,operationProductionProcesses,apsBlankOrderVo,productionScheduleVo,proEqus,processOperationEquDos);
+                    productionProcessesInit(operationDo,produceOrder,processesList,operationProductionProcesses,apsBlankOrderVo,productionScheduleVo,proEqus,processOperationEquDos,baseApsProcessOperationList,baseApsProcessOperationProcessEquList,baseApsProcessOperationOutMaterList);
                 }
                 // 第一次排程需要建立关联关系
                 if(!"Y".equals(apsBlankOrderVo.getIfcp())){
@@ -1383,10 +1388,14 @@ public class ApsServiceImpl implements ApsService {
      */
     private void productionProcessesInit(ApsProcessOperationDo operationDo,ProduceOrder produceOrder
             ,List<ProductionProcesses> processesList,Map<String,List<ProductionProcesses>> operationProductionProcesses
-            ,ApsBlankOrderVo apsBlankOrderVo,ProductionScheduleVo productionScheduleVo,Map<String, List<ApsProcessOperationProcessEquDo>> proEqus,List<ApsProcessOperationEquDo> processOperationEquDos){
+            ,ApsBlankOrderVo apsBlankOrderVo,ProductionScheduleVo productionScheduleVo,Map<String, List<ApsProcessOperationProcessEquDo>> proEqus,List<ApsProcessOperationEquDo> processOperationEquDos,
+                                         List<ApsProcessOperationDo> baseApsProcessOperationList,
+                                         List<ApsProcessOperationProcessEquDo> baseApsProcessOperationProcessEquList,
+                                         List<ApsProcessOperationOutMaterDo> baseApsProcessOperationOutMaterList){
         // 输出物料
-        List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
-                .eq(ApsProcessOperationOutMaterDo::getMainid, operationDo.getId()));
+//        List<ApsProcessOperationOutMaterDo> outMaterDos = apsProcessOperationOutMaterService.list(new LambdaQueryWrapper<ApsProcessOperationOutMaterDo>()
+//                .eq(ApsProcessOperationOutMaterDo::getMainid, operationDo.getId()));
+        List<ApsProcessOperationOutMaterDo> outMaterDos = baseApsProcessOperationOutMaterList.stream().filter(item -> item.getMainid().equals(operationDo.getId())).collect(Collectors.toList());
         List<ProductionProcesses> operationProcess = new ArrayList<>();
         if(operationDo != null && operationDo.getPlanprocessrall() != null && operationDo.getPlanprocessrall()>0){
             List<String> optionalEquipments = new ArrayList<>();
@@ -1396,11 +1405,17 @@ public class ApsServiceImpl implements ApsService {
             }
             // 锁定的作业
             if(LOCKMARK_Y.equals(operationDo.getLockmark())){
-                List<ApsProcessOperationProcessEquDo> processDetails = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
-                        .eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId())
-                        .isNotNull(ApsProcessOperationProcessEquDo::getProcessdeviceid)
-                        .ne(ApsProcessOperationProcessEquDo::getProcessdeviceid,"")
-                        .orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate));
+//                List<ApsProcessOperationProcessEquDo> processDetails = processOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>()
+//                        .eq(ApsProcessOperationProcessEquDo::getProcessid, operationDo.getId())
+//                        .isNotNull(ApsProcessOperationProcessEquDo::getProcessdeviceid)
+//                        .ne(ApsProcessOperationProcessEquDo::getProcessdeviceid,"")
+//                        .orderByAsc(ApsProcessOperationProcessEquDo::getPlanstartdate));
+                List<ApsProcessOperationProcessEquDo> processDetails = baseApsProcessOperationProcessEquList.stream().filter(item ->
+                                item.getProcessid().equals(operationDo.getId())
+                                        && ObjectUtil.isNotEmpty(item.getProcessdeviceid())
+                                        && !"".equals(item.getProcessdeviceid()))
+                        .sorted(Comparator.comparing(ApsProcessOperationProcessEquDo::getPlanstartdate))
+                        .collect(Collectors.toList());
                 for (ApsProcessOperationProcessEquDo processDetail : processDetails) {
                     ProductionProcesses processes = productionProcessesDetailInit(operationDo, produceOrder, optionalEquipments,outMaterDos,apsBlankOrderVo,processOperationEquDos);
                     // 锁定的作业保留作业ID
@@ -1423,7 +1438,8 @@ public class ApsServiceImpl implements ApsService {
                     processes.setEndTime(processDetail.getPlanenddate().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
                     if("小卷成退".equals(operationDo.getProcess()) || "小卷包装".equals(operationDo.getProcess())){
                         String previousprocessid = operationDo.getPreviousprocessid();
-                        ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
+//                        ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
+                        ApsProcessOperationDo preprocess = baseApsProcessOperationList.stream().filter(item -> item.getId().equals(previousprocessid)).findFirst().orElse(null);
                         processes.setMinThPcNum(processDetail.getPlanprocessrall());
                         processes.setProducePcNum(preprocess.getPlanprocessrall());
                     }
@@ -1454,7 +1470,8 @@ public class ApsServiceImpl implements ApsService {
                     Integer planprocessrall = null;
                     String previousprocessid = operationDo.getPreviousprocessid();
                     if(StringUtils.isNotBlank(previousprocessid)){
-                        ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
+//                        ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
+                        ApsProcessOperationDo preprocess = baseApsProcessOperationList.stream().filter(item -> item.getId().equals(previousprocessid)).findFirst().orElse(null);
                         if(preprocess == null){
                             throw new CustomException("小卷成退没有前道工序:"+operationDo.getId());
                         }
@@ -1525,12 +1542,15 @@ public class ApsServiceImpl implements ApsService {
 
                 } else if ("小卷包装".equals(operationDo.getProcess())) {
                     String previousprocessid = operationDo.getPreviousprocessid();
-                    ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
+//                    ApsProcessOperationDo preprocess = apsProcessOperationService.getById(previousprocessid);
+                    ApsProcessOperationDo preprocess = baseApsProcessOperationList.stream().filter(item -> item.getId().equals(previousprocessid)).findFirst().orElse(null);
                     if(preprocess == null){
                         throw new CustomException("小卷成退没有前道工序:"+operationDo.getId());
                     }
                     if("小卷成退".equals(preprocess.getProcess())){
-                        preprocess = apsProcessOperationService.getById(preprocess.getPreviousprocessid());
+//                        preprocess = apsProcessOperationService.getById(preprocess.getPreviousprocessid());
+                        String finalPreviousprocessid = preprocess.getPreviousprocessid();
+                        preprocess = baseApsProcessOperationList.stream().filter(item -> item.getId().equals(finalPreviousprocessid)).findFirst().orElse(null);
                     }
                     Integer planprocessrall = null;
                     if(preprocess == null){