|
@@ -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);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
}
|
|
|
|