|
@@ -40,13 +40,13 @@ import java.util.stream.Collectors;
|
|
|
|
|
|
import static com.rongwei.bscommon.sys.utils.ApsUtils.addNewConflictsDesc;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.CloseStatus.UNFINISHED;
|
|
|
-import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.EQUIPMENT_RUN_TIME;
|
|
|
-import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.EQ_TIME_CROSS;
|
|
|
+import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescription.*;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.JobStatus.*;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_N;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_Y;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.ProcessWay.PROCESS_WAY_MERGE;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.ProductionStatus.*;
|
|
|
+import static com.rongwei.safecommon.utils.SaveConstans.UNForcedConflictsDescription.*;
|
|
|
|
|
|
/**
|
|
|
*
|
|
@@ -85,6 +85,12 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
private ApsProcessOperationProcessEquService apsProcessOperationProcessEquService;
|
|
|
@Autowired
|
|
|
private ProcessServiceImpl processService;
|
|
|
+ @Autowired
|
|
|
+ private ApsProcessOperationEquService apsProcessOperationEquService;
|
|
|
+ @Autowired
|
|
|
+ private AspCheckItemsService aspCheckItemsService;
|
|
|
+ @Autowired
|
|
|
+ private ApsScheduleConfigService apsScheduleConfigService;
|
|
|
|
|
|
/**
|
|
|
* 更新工序的待加工批次号信息
|
|
@@ -578,6 +584,137 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void checkSomeNewInspection(ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo) {
|
|
|
+ /*
|
|
|
+ 如果加工设备不是工序作业指定的可选设备,记录冲突:加工设备不是工艺要求的可选设备
|
|
|
+ 如果作业明细计划开工时间<前道作业明细计划完工时间,记录冲突:计划开工时间早于前道计划完工时间
|
|
|
+ 如果与前道作业明细间隔时间<该作业最小流转时间,则记录冲突:与前道间隔时间小于作业最小流转时间
|
|
|
+ 与前道作业明细间隔时间=该作业明细计划开工时间-前道作业明细计划完工时间
|
|
|
+ 如果作业明细加工设备相同,则该作业最小流转时间=取其大(排程设置的机台流转时间,作业的最小流转等待时间)
|
|
|
+ 如果作业明细加工车间不同,则该作业最小流转时间=取其大(排程设置的车间流转时间,作业的最小流转等待时间)
|
|
|
+ 如果作业明细加工工厂不同,则该作业最小流转时间=取其大(排程设置的工厂流转时间,作业的最小流转等待时间)
|
|
|
+
|
|
|
+ 如果作业明细计划完工时间超出订单坯料计划期望交货期,记录警告:完工时间超出坯料计划交货期
|
|
|
+ 如果该作业不是铸轧,并且作业明细计划完工时间-该坯料计划非铸轧作业明细的最早计划开工时间>坯料计划冷轧交货天数,记录警告:不满足冷轧交货天数
|
|
|
+ */
|
|
|
+ //工序作业ID
|
|
|
+ String processid = apsProcessOperationProcessEquDo.getProcessid();
|
|
|
+ //查询工艺步骤指定的可选设备
|
|
|
+ List<ApsProcessOperationEquDo> processOperationEquDos = apsProcessOperationEquService.list(new LambdaQueryWrapper<ApsProcessOperationEquDo>().eq(ApsProcessOperationEquDo::getMainid, processid));
|
|
|
+ long count = processOperationEquDos.stream().filter(item -> item.getResourceid().equals(apsProcessOperationProcessEquDo.getProcessdeviceid())).count();
|
|
|
+ String newConflictdes = apsProcessOperationProcessEquDo.getConflictdes();
|
|
|
+ if (count <= 0) {
|
|
|
+ //如果加工设备不是工艺步骤指定的可选设备,记录冲突:加工设备不是工艺要求的可选设备
|
|
|
+ apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
|
|
|
+ apsProcessOperationProcessEquDo.getProcessdeviceid(), NO_NEED_EQU, 1, null);
|
|
|
+ newConflictdes = addNewConflictsDesc(newConflictdes, NO_NEED_EQU);
|
|
|
+ } else {
|
|
|
+ apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
|
|
|
+ apsProcessOperationProcessEquDo.getProcessdeviceid(), NO_NEED_EQU, 2, null);
|
|
|
+ newConflictdes = removeConflictsDesc(newConflictdes, NO_NEED_EQU);
|
|
|
+ }
|
|
|
+ //查询工序作业详情
|
|
|
+ ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(apsProcessOperationProcessEquDo.getProcessid());
|
|
|
+
|
|
|
+ //存在前道工序作业明细
|
|
|
+ if (StringUtils.isNotBlank(apsProcessOperationProcessEquDo.getPreviousprocessesids())) {
|
|
|
+ //查询前道作业明细
|
|
|
+ ApsProcessOperationProcessEquDo previousProcessEqu = this.getById(apsProcessOperationProcessEquDo.getPreviousprocessesids());
|
|
|
+ //如果作业计划开工时间<前道作业计划完工时间,记录冲突:计划开工时间早于前道计划完工时间
|
|
|
+ if (apsProcessOperationProcessEquDo.getPlanstartdate().compareTo(previousProcessEqu.getPlanenddate()) < 0) {
|
|
|
+ apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
|
|
|
+ "作业明细计划开工时间:" + apsProcessOperationProcessEquDo.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 1, null);
|
|
|
+ newConflictdes = addNewConflictsDesc(newConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
|
|
|
+ } else {
|
|
|
+ apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
|
|
|
+ "作业明细计划开工时间:" + apsProcessOperationProcessEquDo.getPlanstartdate() + ",前道作业明细计划完工时间:" + previousProcessEqu.getPlanenddate(), PREVIOUS_ENDTIME_AFTER_NOW, 2, null);
|
|
|
+ newConflictdes = removeConflictsDesc(newConflictdes, PREVIOUS_ENDTIME_AFTER_NOW);
|
|
|
+ }
|
|
|
+
|
|
|
+ //与前道作业明细间隔时间=该作业明细计划开工时间-前道作业明细计划完工时间
|
|
|
+ long betweenPrevious = DateUtil.between(apsProcessOperationProcessEquDo.getPlanstartdate(), previousProcessEqu.getPlanenddate(), DateUnit.MINUTE);
|
|
|
+ /*
|
|
|
+ * 如果作业明细加工设备相同,则该作业最小流转时间=取其大(排程设置的机台流转时间,作业的最小流转等待时间)
|
|
|
+ * 如果作业明细加工车间不同,则该作业最小流转时间=取其大(排程设置的车间流转时间,作业的最小流转等待时间)
|
|
|
+ * 如果作业明细加工工厂不同,则该作业最小流转时间=取其大(排程设置的工厂流转时间,作业的最小流转等待时间)
|
|
|
+ */
|
|
|
+ //排程设置
|
|
|
+ ApsScheduleConfigDo apsScheduleConfigDo = apsScheduleConfigService.getById("1");
|
|
|
+ //最小流转时间
|
|
|
+ long minReturnTime = apsProcessOperationDo.getMinflowwaitmin().longValue();
|
|
|
+ //作业明细加工设备相同
|
|
|
+ if (previousProcessEqu.getProcessdeviceid().equals(apsProcessOperationProcessEquDo.getProcessdeviceid())) {
|
|
|
+ if (apsScheduleConfigDo.getWorkshopin().longValue() > minReturnTime) {
|
|
|
+ minReturnTime = apsScheduleConfigDo.getWorkshopin().longValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //作业明细加工车间不同
|
|
|
+ if (!previousProcessEqu.getProcessworkshopid().equals(apsProcessOperationProcessEquDo.getProcessworkshopid())) {
|
|
|
+ if (apsScheduleConfigDo.getWorkshopcross().longValue() > minReturnTime) {
|
|
|
+ minReturnTime = apsScheduleConfigDo.getWorkshopcross().longValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //作业明细加工工厂不同
|
|
|
+ AspCheckItemsDo equ1 = aspCheckItemsService.getById(previousProcessEqu.getProcessdeviceid());
|
|
|
+ AspCheckItemsDo equ2 = aspCheckItemsService.getById(apsProcessOperationProcessEquDo.getProcessdeviceid());
|
|
|
+ if (!equ1.getTenantid().equals(equ2.getTenantid())) {
|
|
|
+ if (apsScheduleConfigDo.getFactorycross().longValue() > minReturnTime) {
|
|
|
+ minReturnTime = apsScheduleConfigDo.getFactorycross().longValue();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //如果与前道工序作业间隔时间<作业最小流转时间,则记录冲突:与前道间隔时间小于作业最小流转时间
|
|
|
+ if (betweenPrevious < minReturnTime) {
|
|
|
+ apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
|
|
|
+ "与前道工序作业间隔时间:" + betweenPrevious + ",作业最小流转时间:" + minReturnTime, SMALL_THAN_MIN_RETURN_TIME, 1, null);
|
|
|
+ newConflictdes = addNewConflictsDesc(newConflictdes, SMALL_THAN_MIN_RETURN_TIME);
|
|
|
+ } else {
|
|
|
+ apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
|
|
|
+ "与前道工序作业间隔时间:" + betweenPrevious + ",作业最小流转时间:" + minReturnTime, SMALL_THAN_MIN_RETURN_TIME, 2, null);
|
|
|
+ newConflictdes = removeConflictsDesc(newConflictdes, SMALL_THAN_MIN_RETURN_TIME);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //查询坯料计划信息
|
|
|
+ ApsBlankOrderDo apsBlankOrderDo = apsBlankOrderService.getById(apsProcessOperationProcessEquDo.getBlankid());
|
|
|
+ //如果作业明细计划完工时间超出订单期望交货期,记录警告:完工时间超出订单交货期
|
|
|
+ //警告
|
|
|
+ String newSoftconflictdes = apsProcessOperationProcessEquDo.getSoftconflictdes();
|
|
|
+ if (apsProcessOperationProcessEquDo.getPlanenddate().compareTo(apsBlankOrderDo.getDeliverydate()) > 0){
|
|
|
+ apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
|
|
|
+ "作业明细计划完工时间:" + apsProcessOperationProcessEquDo.getPlanenddate() + ",坯料计划期望交货期:" + apsBlankOrderDo.getDeliverydate(), PLAN_END_DATE_AFTER_DELIVERY_DATE, 1, null);
|
|
|
+ newSoftconflictdes = addNewConflictsDesc(newSoftconflictdes, PLAN_END_DATE_AFTER_DELIVERY_DATE);
|
|
|
+ } else {
|
|
|
+ apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
|
|
|
+ "作业明细计划完工时间:" + apsProcessOperationProcessEquDo.getPlanenddate() + ",坯料计划期望交货期:" + apsBlankOrderDo.getDeliverydate(), PLAN_END_DATE_AFTER_DELIVERY_DATE, 2, null);
|
|
|
+ newSoftconflictdes = removeConflictsDesc(newSoftconflictdes, PLAN_END_DATE_AFTER_DELIVERY_DATE);
|
|
|
+ }
|
|
|
+ //如果该作业不是铸轧,并且作业明细计划完工时间-该坯料计划非铸轧作业明细的最早计划开工时间>坯料计划冷轧交货天数,记录警告:不满足冷轧交货天数
|
|
|
+ if (!apsProcessOperationDo.getProcess().equals("铸轧")) {
|
|
|
+ //查询该坯料计划非铸轧作业明细的最早计划开工时间
|
|
|
+ Date earlyPlanStartDate = this.baseMapper.getEarltPlanStartDate(apsProcessOperationProcessEquDo.getBlankid());
|
|
|
+ if (DateUtil.between(apsProcessOperationProcessEquDo.getPlanenddate(), earlyPlanStartDate, DateUnit.DAY) > apsBlankOrderDo.getExpecteddays()) {
|
|
|
+ apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
|
|
|
+ "作业明细计划完工时间:" + apsProcessOperationProcessEquDo.getPlanenddate() + ",该坯料计划非铸轧作业明细的最早计划开工时间:" + earlyPlanStartDate+",坯料计划冷轧交货天数:"+apsBlankOrderDo.getExpecteddays(), NO_ABOUT_EXPECTED_DAYS, 1, null);
|
|
|
+ newSoftconflictdes = addNewConflictsDesc(newSoftconflictdes, NO_ABOUT_EXPECTED_DAYS);
|
|
|
+ } else {
|
|
|
+ apsConflictLogService.recordLog(apsProcessOperationProcessEquDo.getId(),
|
|
|
+ "作业明细计划完工时间:" + apsProcessOperationProcessEquDo.getPlanenddate() + ",该坯料计划非铸轧作业明细的最早计划开工时间:" + earlyPlanStartDate+",坯料计划冷轧交货天数:"+apsBlankOrderDo.getExpecteddays(), NO_ABOUT_EXPECTED_DAYS, 2, null);
|
|
|
+ newSoftconflictdes = removeConflictsDesc(newSoftconflictdes, NO_ABOUT_EXPECTED_DAYS);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getId, apsProcessOperationProcessEquDo.getId())
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getConflictdes, newConflictdes)
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getSoftconflictdes, newSoftconflictdes)
|
|
|
+ .set(BaseDo::getModifydate, new Date())
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getHasconflict, StringUtils.isBlank(newConflictdes) &&
|
|
|
+ StringUtils.isBlank(newSoftconflictdes) ? LOCKMARK_N : LOCKMARK_Y)
|
|
|
+ );
|
|
|
+ apsProcessOperationProcessEquDo.setConflictdes(newConflictdes);
|
|
|
+ apsProcessOperationProcessEquDo.setSoftconflictdes(newSoftconflictdes);
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 计算计划完工时间
|
|
|
* = 计划开工时间+加工时长/原计划加工卷数*本次计划加工卷数
|
|
@@ -1520,6 +1657,9 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
.set(ApsProcessOperationProcessEquDo::getHasconflict, StringUtils.isBlank(newConflictdes) &&
|
|
|
StringUtils.isBlank(processEquDo.getSoftconflictdes()) ? LOCKMARK_N : LOCKMARK_Y)
|
|
|
);
|
|
|
+ processEquDo.setConflictdes(newConflictdes);
|
|
|
+ //新增的冲突判断
|
|
|
+ checkSomeNewInspection(processEquDo);
|
|
|
}
|
|
|
|
|
|
/**
|