|
@@ -675,6 +675,68 @@ 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(",")) {
|
|
|
+ //此时前道的明细为当前明细
|
|
|
+ ApsProcessOperationProcessEquDo previousProcessEqu = apsProcessOperationProcessEquDo;
|
|
|
+ //查询后道的明细
|
|
|
+ ApsProcessOperationProcessEquDo nextProcessEqu = this.getById(nextProcessEquId);
|
|
|
+ //如果作业计划开工时间<前道作业计划完工时间,记录冲突:计划开工时间早于前道计划完工时间
|
|
|
+ if (nextProcessEqu.getPlanstartdate().compareTo(previousProcessEqu.getPlanenddate()) < 0) {
|
|
|
+ apsConflictLogService.recordLog(nextProcessEqu.getId(),
|
|
|
+ "作业明细计划开工时间:" + nextProcessEqu.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 1, null);
|
|
|
+ newConflictdes = addNewConflictsDesc(newConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
|
|
|
+ } else {
|
|
|
+ apsConflictLogService.recordLog(nextProcessEqu.getId(),
|
|
|
+ "作业明细计划开工时间:" + nextProcessEqu.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 2, null);
|
|
|
+ newConflictdes = removeConflictsDesc(newConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
|
|
|
+ }
|
|
|
+
|
|
|
+ //与前道作业明细间隔时间=该作业明细计划开工时间-前道作业明细计划完工时间
|
|
|
+ long betweenPrevious = DateUtil.between(nextProcessEqu.getPlanstartdate(), previousProcessEqu.getPlanenddate(), DateUnit.MINUTE);
|
|
|
+ /*
|
|
|
+ * 如果作业明细加工设备相同,则该作业最小流转时间=取其大(排程设置的机台流转时间,作业的最小流转等待时间)
|
|
|
+ * 如果作业明细加工车间不同,则该作业最小流转时间=取其大(排程设置的车间流转时间,作业的最小流转等待时间)
|
|
|
+ * 如果作业明细加工工厂不同,则该作业最小流转时间=取其大(排程设置的工厂流转时间,作业的最小流转等待时间)
|
|
|
+ */
|
|
|
+ //排程设置
|
|
|
+ ApsScheduleConfigDo apsScheduleConfigDo = apsScheduleConfigService.getById("1");
|
|
|
+ //最小流转时间
|
|
|
+ long minReturnTime = apsProcessOperationDo.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);
|
|
|
+ newConflictdes = addNewConflictsDesc(newConflictdes, SMALL_THAN_MIN_RETURN_TIME);
|
|
|
+ } else {
|
|
|
+ apsConflictLogService.recordLog(nextProcessEqu.getId(),
|
|
|
+ "与前道工序作业间隔时间:" + betweenPrevious + ",作业最小流转时间:" + minReturnTime, SMALL_THAN_MIN_RETURN_TIME, 2, null);
|
|
|
+ newConflictdes = removeConflictsDesc(newConflictdes, SMALL_THAN_MIN_RETURN_TIME);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//查询坯料计划信息
|
|
|
ApsBlankOrderDo apsBlankOrderDo = apsBlankOrderService.getById(apsProcessOperationProcessEquDo.getBlankid());
|
|
|
//如果作业明细计划完工时间超出订单期望交货期,记录警告:完工时间超出订单交货期
|