Browse Source

aps-调度排程新模型

sucheng 4 months ago
parent
commit
103fa61e16

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

@@ -1,5 +1,6 @@
 package com.rongwei.bscommon.sys.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.collection.ListUtil;
 import cn.hutool.core.date.DateField;
@@ -783,9 +784,12 @@ public class ApsServiceImpl implements ApsService {
             System.out.println("排程数据:" + JSONUtil.toJsonStr(apsProductionSchedule, jsonConfig));
             logger.info("排程数据:" + JSONUtil.toJsonStr(apsProductionSchedule, jsonConfig));
             // APS平台排程接口调用
-            ProductionScheduleRetVo productionScheduleRetVo;
+            ProductionScheduleRetVo productionScheduleRetVo = new ProductionScheduleRetVo();
             if (apsType.getConstraintMode() != null && apsType.getConstraintMode().equals("lz")) {
-                productionScheduleRetVo = rwApsServer.productionLzDdSchedule(apsProductionSchedule);
+                List<ProductionScheduleVo> reqList = xmxSplit(apsProductionSchedule);
+                for (ProductionScheduleVo productionScheduleVo : reqList) {
+                    productionScheduleRetVo = rwApsServer.productionLzDdSchedule(productionScheduleVo);
+                }
             } else {
                 productionScheduleRetVo = rwApsServer.productionSchedule(apsProductionSchedule);
             }
@@ -905,6 +909,39 @@ public class ApsServiceImpl implements ApsService {
         }
     }
 
+    private List<ProductionScheduleVo> xmxSplit(ProductionScheduleVo apsProductionSchedule) {
+        List<ProductionScheduleVo> res = new LinkedList<>();
+        List<ProductionProcesses> processes = apsProductionSchedule.getProcesses();
+        List<String> blankIdList = processes.stream().map(item -> item.getProduceOrder().get(0).getId()).distinct().collect(Collectors.toList());
+        //查询涉及到的所有明细
+        List<ApsProcessOperationProcessEquDo> allProcessEquList = apsProcessOperationProcessEquService.list(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankIdList));
+        for (String blankId : blankIdList) {
+            List<ProductionProcesses> productionProcesses = new LinkedList<>(processes);
+            for (ProductionProcesses productionProcess : productionProcesses) {
+                //不是此坯料计划的明细,并且解锁的,锁定,并且填入加工设备、计划开工时间
+                if (!productionProcess.getProduceOrder().get(0).getId().equals(blankId)
+                        && !productionProcess.isIfLock()) {
+                    ApsProcessOperationProcessEquDo equDo = allProcessEquList.stream().filter(item -> item.getId().equals(productionProcess.getId())).findFirst().orElse(null);
+                    if (equDo != null) {
+                        LocalDateTime planstartdate = DateUtil.parseLocalDateTime(equDo.getPlanstartdate().toString());
+                        LocalDateTime planenddate = DateUtil.parseLocalDateTime(equDo.getPlanenddate().toString());
+                        String processdeviceid = equDo.getProcessdeviceid();
+                        Equipment equipment = new Equipment();
+                        equipment.setId(processdeviceid);
+                        productionProcess.setStartTime(planstartdate);
+                        productionProcess.setEndTime(planenddate);
+                        productionProcess.setEquipment(equipment);
+                    }
+                }
+            }
+            ProductionScheduleVo newProductionSchedule = BeanUtil.toBean(apsProductionSchedule, ProductionScheduleVo.class);
+            newProductionSchedule.setProcesses(productionProcesses);
+            res.add(newProductionSchedule);
+        }
+
+        return res;
+    }
+
     private void logSave(SysUserVo currentUser, DateTime startTime, DateTime endTime, ApsTypeVo apsType, Date apsPlanStartDate, Date apsPlanEndDate, ProductionScheduleRetVo productionScheduleRetVo) {
         try {
             ApsScheduleLogDo apsScheduleLogDo = new ApsScheduleLogDo();