|
@@ -568,7 +568,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
|
|
|
apsProcessOperationProcessEquDo.getProcessdeviceid(),
|
|
|
apsProcessOperationProcessEquDo.getPlanstartdate(),
|
|
|
- apsProcessOperationProcessEquDo.getPlanenddate());
|
|
|
+ apsProcessOperationProcessEquDo.getPlanenddate(),
|
|
|
+ affectedIdList);
|
|
|
});
|
|
|
}
|
|
|
List<String> aboutIds = affectedIdList.stream().distinct().collect(Collectors.toList());
|
|
@@ -586,7 +587,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private void checkSomeNewInspection(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo) {
|
|
|
+ private void checkSomeNewInspection(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo,List<String> affectedIdList) {
|
|
|
/*
|
|
|
如果加工设备不是工序作业指定的可选设备,记录冲突:加工设备不是工艺要求的可选设备
|
|
|
如果作业明细计划开工时间<前道作业明细计划完工时间,记录冲突:计划开工时间早于前道计划完工时间
|
|
@@ -675,6 +676,80 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
newConflictdes = removeConflictsDesc(newConflictdes, SMALL_THAN_MIN_RETURN_TIME);
|
|
|
}
|
|
|
}
|
|
|
+ //存在后道工序作业明细
|
|
|
+ if (StringUtils.isNotBlank(apsProcessOperationProcessEquDo.getNextprocessesids())) {
|
|
|
+ for (String nextProcessEquId : apsProcessOperationProcessEquDo.getNextprocessesids().split(",")) {
|
|
|
+ affectedIdList.add(nextProcessEquId);
|
|
|
+ //此时前道的明细为当前明细
|
|
|
+ ApsProcessOperationProcessEquDo previousProcessEqu = apsProcessOperationProcessEquDo;
|
|
|
+ //查询后道的明细
|
|
|
+ ApsProcessOperationProcessEquDo nextProcessEqu = this.getById(nextProcessEquId);
|
|
|
+ //查询后道的工序作业
|
|
|
+ ApsProcessOperationDo nextProcessOperation = apsProcessOperationService.getById(nextProcessEqu.getProcessid());
|
|
|
+ //后道的冲突
|
|
|
+ String nextNewConflictdes = nextProcessEqu.getConflictdes();
|
|
|
+ //如果作业计划开工时间<前道作业计划完工时间,记录冲突:计划开工时间早于前道计划完工时间
|
|
|
+ if (nextProcessEqu.getPlanstartdate().compareTo(previousProcessEqu.getPlanenddate()) < 0) {
|
|
|
+ apsConflictLogService.recordLog(nextProcessEqu.getId(),
|
|
|
+ "作业明细计划开工时间:" + nextProcessEqu.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 1, null);
|
|
|
+ nextNewConflictdes = addNewConflictsDesc(nextNewConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
|
|
|
+ } else {
|
|
|
+ apsConflictLogService.recordLog(nextProcessEqu.getId(),
|
|
|
+ "作业明细计划开工时间:" + nextProcessEqu.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 2, null);
|
|
|
+ nextNewConflictdes = removeConflictsDesc(nextNewConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
|
|
|
+ }
|
|
|
+
|
|
|
+ //与前道作业明细间隔时间=该作业明细计划开工时间-前道作业明细计划完工时间
|
|
|
+ long betweenPrevious = DateUtil.between(nextProcessEqu.getPlanstartdate(), previousProcessEqu.getPlanenddate(), DateUnit.MINUTE);
|
|
|
+ /*
|
|
|
+ * 如果作业明细加工设备相同,则该作业最小流转时间=取其大(排程设置的机台流转时间,作业的最小流转等待时间)
|
|
|
+ * 如果作业明细加工车间不同,则该作业最小流转时间=取其大(排程设置的车间流转时间,作业的最小流转等待时间)
|
|
|
+ * 如果作业明细加工工厂不同,则该作业最小流转时间=取其大(排程设置的工厂流转时间,作业的最小流转等待时间)
|
|
|
+ */
|
|
|
+ //排程设置
|
|
|
+ ApsScheduleConfigDo apsScheduleConfigDo = apsScheduleConfigService.getById("1");
|
|
|
+ //最小流转时间
|
|
|
+ long minReturnTime = nextProcessOperation.getMinflowwaitmin().longValue();
|
|
|
+ //作业明细加工设备相同
|
|
|
+ if (!previousProcessEqu.getProcessdeviceid().equals(nextProcessEqu.getProcessdeviceid())) {
|
|
|
+ if (apsScheduleConfigDo.getWorkshopin().longValue() > minReturnTime) {
|
|
|
+ minReturnTime = apsScheduleConfigDo.getWorkshopin().longValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //作业明细加工车间不同
|
|
|
+ if (!previousProcessEqu.getProcessworkshopid().equals(nextProcessEqu.getProcessworkshopid())) {
|
|
|
+ if (apsScheduleConfigDo.getWorkshopcross().longValue() > minReturnTime) {
|
|
|
+ minReturnTime = apsScheduleConfigDo.getWorkshopcross().longValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //作业明细加工工厂不同
|
|
|
+ AspCheckItemsDo equ1 = aspCheckItemsService.getById(previousProcessEqu.getProcessdeviceid());
|
|
|
+ AspCheckItemsDo equ2 = aspCheckItemsService.getById(nextProcessEqu.getProcessdeviceid());
|
|
|
+ if (!equ1.getTenantid().equals(equ2.getTenantid())) {
|
|
|
+ if (apsScheduleConfigDo.getFactorycross().longValue() > minReturnTime) {
|
|
|
+ minReturnTime = apsScheduleConfigDo.getFactorycross().longValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果与前道工序作业间隔时间<作业最小流转时间,则记录冲突:与前道间隔时间小于作业最小流转时间
|
|
|
+ if (betweenPrevious < minReturnTime) {
|
|
|
+ apsConflictLogService.recordLog(nextProcessEqu.getId(),
|
|
|
+ "与前道工序作业间隔时间:" + betweenPrevious + ",作业最小流转时间:" + minReturnTime, SMALL_THAN_MIN_RETURN_TIME, 1, null);
|
|
|
+ nextNewConflictdes = addNewConflictsDesc(nextNewConflictdes, SMALL_THAN_MIN_RETURN_TIME);
|
|
|
+ } else {
|
|
|
+ apsConflictLogService.recordLog(nextProcessEqu.getId(),
|
|
|
+ "与前道工序作业间隔时间:" + betweenPrevious + ",作业最小流转时间:" + minReturnTime, SMALL_THAN_MIN_RETURN_TIME, 2, null);
|
|
|
+ nextNewConflictdes = removeConflictsDesc(nextNewConflictdes, SMALL_THAN_MIN_RETURN_TIME);
|
|
|
+ }
|
|
|
+ this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getId, nextProcessEqu.getId())
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getConflictdes, nextNewConflictdes)
|
|
|
+ .set(BaseDo::getModifydate, new Date())
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getHasconflict, StringUtils.isBlank(nextNewConflictdes) &&
|
|
|
+ StringUtils.isBlank(nextProcessEqu.getSoftconflictdes()) ? LOCKMARK_N : LOCKMARK_Y)
|
|
|
+ );
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//查询坯料计划信息
|
|
|
ApsBlankOrderDo apsBlankOrderDo = apsBlankOrderService.getById(apsProcessOperationProcessEquDo.getBlankid());
|
|
|
//如果作业明细计划完工时间超出订单期望交货期,记录警告:完工时间超出订单交货期
|
|
@@ -840,7 +915,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
|
|
|
apsProcessOperationProcessEquDo.getProcessdeviceid(),
|
|
|
apsProcessOperationProcessEquDo.getPlanstartdate(),
|
|
|
- apsProcessOperationProcessEquDo.getPlanenddate());
|
|
|
+ apsProcessOperationProcessEquDo.getPlanenddate(),
|
|
|
+ affectedIdList);
|
|
|
});
|
|
|
// blankIdSet.forEach(blankId -> {
|
|
|
// // 更新坯料交货期
|
|
@@ -930,24 +1006,22 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
});
|
|
|
//避免合并加工时,找到除去本身之外同一计划开工日期同一设备‘更新时间’更改之后存在冲突的工序作业明细
|
|
|
this.updateBatchById(changeApsProcessEquList);
|
|
|
- ApsProcessOperationProcessEquDo finalApsProcessOperationProcessEquDo = apsProcessOperationProcessEquDo;
|
|
|
- changeApsProcessEquList.forEach(detail -> {
|
|
|
+ for (ApsProcessOperationProcessEquDo detail : changeApsProcessEquList) {
|
|
|
//当工序作业为合并加工时处理工序作业明细冲突
|
|
|
- String oldEquId = finalApsProcessOperationProcessEquDo.getProcessdeviceid();
|
|
|
- Date oldPlanstartdate = finalApsProcessOperationProcessEquDo.getPlanstartdate();
|
|
|
- Date oldPlanenddate = finalApsProcessOperationProcessEquDo.getPlanenddate();
|
|
|
- this.updateById(finalApsProcessOperationProcessEquDo);
|
|
|
+ String oldEquId = apsProcessOperationProcessEquDo.getProcessdeviceid();
|
|
|
+ Date oldPlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
|
|
|
+ Date oldPlanenddate = apsProcessOperationProcessEquDo.getPlanenddate();
|
|
|
// 增加受影响的工序作业信息
|
|
|
affectedIdList.addAll(checkProcessingTimeConflict(detail, oldPlanstartdate,
|
|
|
oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway(), new ArrayList<>()));
|
|
|
// 判断是否存在设备不可用
|
|
|
- detail = this.getById(detail.getId());
|
|
|
inspectionEquipmentIsAvailable(detail, detail.getProcessdeviceid()
|
|
|
- , detail.getPlanstartdate(), detail.getPlanenddate());
|
|
|
- if (!detail.getId().equals(finalApsProcessOperationProcessEquDo.getId())) {
|
|
|
+ , detail.getPlanstartdate(), detail.getPlanenddate(),
|
|
|
+ affectedIdList);
|
|
|
+ if (!detail.getId().equals(apsProcessOperationProcessEquDo.getId())) {
|
|
|
mergeWorkerIdList.add(detail.getId());
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
} else {
|
|
|
// 更新开工时间 jobDetailsVo
|
|
|
String equId = jobDetailsVo.getEquId();
|
|
@@ -977,12 +1051,15 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
// 增加受影响的工序作业信息
|
|
|
affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo, oldPlanstartdate,
|
|
|
oldPlanenddate, oldEquId, apsProcessOperationDo.getProcessway(), new ArrayList<>()));
|
|
|
+ }else {
|
|
|
+ this.updateById(apsProcessOperationProcessEquDo);
|
|
|
}
|
|
|
// this.updateById(apsProcessOperationProcessEquDo);
|
|
|
// 判断是否存在设备不可用
|
|
|
apsProcessOperationProcessEquDo = this.getById(apsProcessOperationProcessEquDo.getId());
|
|
|
inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo, apsProcessOperationProcessEquDo.getProcessdeviceid()
|
|
|
- , apsProcessOperationProcessEquDo.getPlanstartdate(), apsProcessOperationProcessEquDo.getPlanenddate());
|
|
|
+ , apsProcessOperationProcessEquDo.getPlanstartdate(), apsProcessOperationProcessEquDo.getPlanenddate(),
|
|
|
+ affectedIdList);
|
|
|
}
|
|
|
// 更新坯料交货期
|
|
|
// apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid());
|
|
@@ -1263,7 +1340,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
newDataList.forEach(newDo -> {
|
|
|
// 判断是否存在设备不可用
|
|
|
inspectionEquipmentIsAvailable(newDo, newDo.getProcessdeviceid()
|
|
|
- , newDo.getPlanstartdate(), newDo.getPlanenddate());
|
|
|
+ , newDo.getPlanstartdate(), newDo.getPlanenddate(),
|
|
|
+ affectedIdList);
|
|
|
});
|
|
|
List<String> aboutIds = affectedIdList.stream().distinct().collect(Collectors.toList());
|
|
|
apsProcessOperationDos.forEach(data -> {
|
|
@@ -1630,7 +1708,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
* @param endDate
|
|
|
*/
|
|
|
public void inspectionEquipmentIsAvailable(ApsProcessOperationProcessEquDo processEquDo,
|
|
|
- String equId, Date startDate, Date endDate) {
|
|
|
+ String equId, Date startDate, Date endDate,
|
|
|
+ List<String> affectedIdList) {
|
|
|
// 查询当前设备是否存在不可以用设备的停机时间为空的数据
|
|
|
List<ApsEquipmentCalendarDo> nullSdTimeList = apsEquipmentCalendarService.list(new LambdaQueryWrapper<ApsEquipmentCalendarDo>()
|
|
|
.eq(ApsEquipmentCalendarDo::getProcessdeviceid, equId)
|
|
@@ -1669,7 +1748,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
);
|
|
|
processEquDo.setConflictdes(newConflictdes);
|
|
|
//新增的冲突判断
|
|
|
- checkSomeNewInspection(processEquDo);
|
|
|
+ checkSomeNewInspection(processEquDo,affectedIdList);
|
|
|
}
|
|
|
|
|
|
/**
|