Jelajahi Sumber

aps-新模型

sucheng 4 bulan lalu
induk
melakukan
665f51eacf

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

@@ -787,125 +787,162 @@ public class ApsServiceImpl implements ApsService {
             ProductionScheduleRetVo productionScheduleRetVo = new ProductionScheduleRetVo();
             if (apsType.getConstraintMode() != null && apsType.getConstraintMode().equals("lz")) {
                 List<ProductionScheduleVo> reqList = xmxSplit(apsProductionSchedule);
-                for (ProductionScheduleVo productionScheduleVo : reqList) {
+                for (int i = 0; i < reqList.size(); i++) {
+                    ProductionScheduleVo productionScheduleVo = reqList.get(i);
+                    if (i > 0){
+                        startTime = DateUtil.date();
+                    }
                     productionScheduleRetVo = rwApsServer.productionLzDdSchedule(productionScheduleVo);
+                    saveRes(productionScheduleRetVo,
+                            jsonConfig,
+                            apsProductionSchedule,
+                            apsType,
+                            apsPlanStartDate,
+                            apsPlanEndDate,
+                            blankOrderIds,
+                            apsBlankOrders,
+                            currentUser,
+                            startTime);
                 }
             } else {
                 productionScheduleRetVo = rwApsServer.productionSchedule(apsProductionSchedule);
+                saveRes(productionScheduleRetVo,
+                        jsonConfig,
+                        apsProductionSchedule,
+                        apsType,
+                        apsPlanStartDate,
+                        apsPlanEndDate,
+                        blankOrderIds,
+                        apsBlankOrders,
+                        currentUser,
+                        startTime);
             }
-            logger.info("排程结果:" + JSONUtil.toJsonStr(productionScheduleRetVo, jsonConfig));
-            //排程结束时间
-            DateTime endTime = DateUtil.date();
-            //日志写入文件
-            logWriter(JSONUtil.toJsonStr(apsProductionSchedule, jsonConfig), JSONUtil.toJsonStr(productionScheduleRetVo, jsonConfig), apsType.getScheduleType());
-            //排程日志存入数据库
-            logSave(currentUser, startTime, endTime, apsType, apsPlanStartDate, apsPlanEndDate, productionScheduleRetVo);
-            if (!"200".equals(productionScheduleRetVo.getCode())) {
-                logger.info("排程异常,坯料计划ID:" + blankOrderIds);
-                // 排程异常后恢复历史排程结果为锁定状态
-                processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().set(ApsProcessOperationProcessEquDo::getLockmark, "y")
-                        .in(ApsProcessOperationProcessEquDo::getBlankid, blankOrderIds));
-                // 没有可排程工序的订单跳过
-                if ("没有可排程的工序".equals(productionScheduleRetVo.getMsg())) {
-                    logger.info("排程异常:没有可排程的工序,坯料计划编号:" + blankOrderIds);
-                } else {
-                    throw new CustomException(productionScheduleRetVo.getMsg() + " " + DateUtil.formatDateTime(new Date()));
-                }
+
+        }
+    }
+
+    private void saveRes(ProductionScheduleRetVo productionScheduleRetVo,
+                         JSONConfig jsonConfig,
+                         ProductionScheduleVo apsProductionSchedule,
+                         ApsTypeVo apsType,
+                         Date apsPlanStartDate,
+                         Date apsPlanEndDate,
+                         List<String> blankOrderIds,
+                         List<ApsBlankOrderVo> apsBlankOrders,
+                         SysUserVo currentUser,
+                         DateTime startTime) {
+
+        logger.info("排程结果:" + JSONUtil.toJsonStr(productionScheduleRetVo, jsonConfig));
+        //排程结束时间
+        DateTime endTime = DateUtil.date();
+        //日志写入文件
+        logWriter(JSONUtil.toJsonStr(apsProductionSchedule, jsonConfig), JSONUtil.toJsonStr(productionScheduleRetVo, jsonConfig), apsType.getScheduleType());
+        //排程日志存入数据库
+        logSave(currentUser, startTime, endTime, apsType, apsPlanStartDate, apsPlanEndDate, productionScheduleRetVo);
+        if (!"200".equals(productionScheduleRetVo.getCode())) {
+            logger.info("排程异常,坯料计划ID:" + blankOrderIds);
+            // 排程异常后恢复历史排程结果为锁定状态
+            processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().set(ApsProcessOperationProcessEquDo::getLockmark, "y")
+                    .in(ApsProcessOperationProcessEquDo::getBlankid, blankOrderIds));
+            // 没有可排程工序的订单跳过
+            if ("没有可排程的工序".equals(productionScheduleRetVo.getMsg())) {
+                logger.info("排程异常:没有可排程的工序,坯料计划编号:" + blankOrderIds);
             } else {
-                // 获取坯料计划
+                throw new CustomException(productionScheduleRetVo.getMsg() + " " + DateUtil.formatDateTime(new Date()));
+            }
+        } else {
+            // 获取坯料计划
                 /*List<ApsBlankOrderVo> apsBlankOrderss = new ArrayList<>();
                 apsBlankOrderss.add(bo);*/
-                //排程结束后,查询修改时间在排程开始-?的明细,不更新修改信息,并最后重新判断其冲突
-                List<ApsProcessOperationProcessEquCheckVo> list = apsProcessOperationProcessEquDao.getNeedCheckEquList(startTime, CXCommonUtils.getCurrentUserFactoryId(currentUser));
-
-                if ("dd".equals(apsType.getScheduleType())) {
-                    if (!list.isEmpty()) {
-                        List<String> updateIdList = list.stream().map(ApsProcessOperationProcessEquCheckVo::getId).distinct().collect(Collectors.toList());
-                        List<ProductionProcesses> productionProcesses = productionScheduleRetVo.getProcesses().stream().filter(item -> !updateIdList.contains(item.getId())).collect(Collectors.toList());
-                        productionScheduleRetVo.setProcesses(productionProcesses);
+            //排程结束后,查询修改时间在排程开始-?的明细,不更新修改信息,并最后重新判断其冲突
+            List<ApsProcessOperationProcessEquCheckVo> list = apsProcessOperationProcessEquDao.getNeedCheckEquList(startTime, CXCommonUtils.getCurrentUserFactoryId(currentUser));
+
+            if ("dd".equals(apsType.getScheduleType())) {
+                if (!list.isEmpty()) {
+                    List<String> updateIdList = list.stream().map(ApsProcessOperationProcessEquCheckVo::getId).distinct().collect(Collectors.toList());
+                    List<ProductionProcesses> productionProcesses = productionScheduleRetVo.getProcesses().stream().filter(item -> !updateIdList.contains(item.getId())).collect(Collectors.toList());
+                    productionScheduleRetVo.setProcesses(productionProcesses);
+                }
+                //循环5次,如果执行成功,继续向下执行,如果出现sql超时,等待2分钟后重试,重试5次
+                boolean isSuccess = false;
+                for (int i = 0; i < 5; i++) {
+                    if (isSuccess) {
+                        break;
                     }
-                    //循环5次,如果执行成功,继续向下执行,如果出现sql超时,等待2分钟后重试,重试5次
-                    boolean isSuccess = false;
-                    for (int i = 0; i < 5; i++) {
-                        if (isSuccess) {
-                            break;
-                        }
+                    try {
+                        apsBlankOrderService.ddApsAfter(productionScheduleRetVo, apsBlankOrders, currentUser, apsType);
+                        isSuccess = true;
+                    } catch (SQLNonTransientConnectionException | CJCommunicationsException |
+                             SocketTimeoutException | CommunicationsException e) {
                         try {
-                            apsBlankOrderService.ddApsAfter(productionScheduleRetVo, apsBlankOrders, currentUser, apsType);
-                            isSuccess = true;
-                        } catch (SQLNonTransientConnectionException | CJCommunicationsException |
-                                 SocketTimeoutException | CommunicationsException e) {
-                            try {
-                                Thread.sleep(120000);
-                            } catch (InterruptedException ignored) {
-                            }
-                        } catch (Exception e) {
-                            throw new CustomException(e.getMessage());
+                            Thread.sleep(120000);
+                        } catch (InterruptedException ignored) {
                         }
+                    } catch (Exception e) {
+                        throw new CustomException(e.getMessage());
                     }
+                }
 
-                } else {
-                    //循环5次,如果执行成功,继续向下执行,如果出现sql超时,等待2分钟后重试,重试5次
-                    boolean isSuccess = false;
-                    for (int i = 0; i < 5; i++) {
-                        if (isSuccess) {
-                            break;
-                        }
+            } else {
+                //循环5次,如果执行成功,继续向下执行,如果出现sql超时,等待2分钟后重试,重试5次
+                boolean isSuccess = false;
+                for (int i = 0; i < 5; i++) {
+                    if (isSuccess) {
+                        break;
+                    }
+                    try {
+                        apsBlankOrderService.apsAfter(productionScheduleRetVo, apsBlankOrders, currentUser, apsType);
+                        isSuccess = true;
+                    } catch (SQLNonTransientConnectionException | CJCommunicationsException |
+                             SocketTimeoutException | CommunicationsException e) {
                         try {
-                            apsBlankOrderService.apsAfter(productionScheduleRetVo, apsBlankOrders, currentUser, apsType);
-                            isSuccess = true;
-                        } catch (SQLNonTransientConnectionException | CJCommunicationsException |
-                                 SocketTimeoutException | CommunicationsException e) {
-                            try {
-                                Thread.sleep(120000);
-                            } catch (InterruptedException ignored) {
-                            }
-                        } catch (Exception e) {
-                            throw new CustomException(e.getMessage());
+                            Thread.sleep(120000);
+                        } catch (InterruptedException ignored) {
                         }
+                    } catch (Exception e) {
+                        throw new CustomException(e.getMessage());
                     }
                 }
-                //还原排程过程中,开工/报工的作业的计划时间
-                apsProcessOperationProcessEquDao.repairePlanStartDate();
-                apsProcessOperationProcessEquDao.repairePlanStartDate2();
-
-                if (StrUtil.isNotBlank(productionScheduleRetVo.getMsg())) {
-                    // 排程异常后恢复历史排程结果为锁定状态
-                    List<String> blankids = CollUtil.distinct(productionScheduleRetVo.getProcesses().stream().map(v -> v.getProduceOrder().get(0).getId()).collect(Collectors.toList()));
-                    List<String> allblankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
-                    List<String> exblankids = null;
-                    if (blankids != null && blankids.size() > 0) {
-                        exblankids = allblankids.stream().filter(v -> !blankids.contains(v)).collect(Collectors.toList());
-                    } else {
-                        exblankids = allblankids;
-                    }
-                    if (exblankids != null && exblankids.size() > 0) {
-                        processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().set(ApsProcessOperationProcessEquDo::getLockmark, "y")
-                                .in(ApsProcessOperationProcessEquDo::getBlankid, exblankids));
-                    }
+            }
+            //还原排程过程中,开工/报工的作业的计划时间
+            apsProcessOperationProcessEquDao.repairePlanStartDate();
+            apsProcessOperationProcessEquDao.repairePlanStartDate2();
 
-                    throw new CustomException(productionScheduleRetVo.getMsg() + " " + DateUtil.formatDateTime(new Date()));
+            if (StrUtil.isNotBlank(productionScheduleRetVo.getMsg())) {
+                // 排程异常后恢复历史排程结果为锁定状态
+                List<String> blankids = CollUtil.distinct(productionScheduleRetVo.getProcesses().stream().map(v -> v.getProduceOrder().get(0).getId()).collect(Collectors.toList()));
+                List<String> allblankids = apsBlankOrders.stream().map(v -> v.getId()).collect(Collectors.toList());
+                List<String> exblankids = null;
+                if (blankids != null && blankids.size() > 0) {
+                    exblankids = allblankids.stream().filter(v -> !blankids.contains(v)).collect(Collectors.toList());
+                } else {
+                    exblankids = allblankids;
                 }
-                if (!list.isEmpty()) {
-                    List<ApsProcessOperationProcessEquCheckVo> waitStartList = list.stream().filter(item -> item.getWorkstatus().equals("待开工")).collect(Collectors.toList());
-                    for (ApsProcessOperationProcessEquCheckVo equDo : waitStartList) {
-                        try {
-                            apsProcessOperationProcessEquService.checkProcessingTimeConflict(equDo,
-                                    null, null, null, equDo.getProcessWay(), new LinkedList<>());
-                            ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(equDo.getId());
-                            // 判断是否存在设备不可用
-                            apsProcessOperationProcessEquService.inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
-                                    apsProcessOperationProcessEquDo.getProcessdeviceid(),
-                                    apsProcessOperationProcessEquDo.getPlanstartdate(),
-                                    apsProcessOperationProcessEquDo.getPlanenddate(),
-                                    new LinkedList<>());
-                        } catch (Exception e) {
-                            logger.error("判断冲突失败:" + equDo.getId(), e);
-                        }
+                if (exblankids != null && exblankids.size() > 0) {
+                    processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>().set(ApsProcessOperationProcessEquDo::getLockmark, "y")
+                            .in(ApsProcessOperationProcessEquDo::getBlankid, exblankids));
+                }
+
+                throw new CustomException(productionScheduleRetVo.getMsg() + " " + DateUtil.formatDateTime(new Date()));
+            }
+            if (!list.isEmpty()) {
+                List<ApsProcessOperationProcessEquCheckVo> waitStartList = list.stream().filter(item -> item.getWorkstatus().equals("待开工")).collect(Collectors.toList());
+                for (ApsProcessOperationProcessEquCheckVo equDo : waitStartList) {
+                    try {
+                        apsProcessOperationProcessEquService.checkProcessingTimeConflict(equDo,
+                                null, null, null, equDo.getProcessWay(), new LinkedList<>());
+                        ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = apsProcessOperationProcessEquService.getById(equDo.getId());
+                        // 判断是否存在设备不可用
+                        apsProcessOperationProcessEquService.inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
+                                apsProcessOperationProcessEquDo.getProcessdeviceid(),
+                                apsProcessOperationProcessEquDo.getPlanstartdate(),
+                                apsProcessOperationProcessEquDo.getPlanenddate(),
+                                new LinkedList<>());
+                    } catch (Exception e) {
+                        logger.error("判断冲突失败:" + equDo.getId(), e);
                     }
                 }
             }
-
         }
     }