|
@@ -4653,6 +4653,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
blankIdList = new LinkedList<>(Arrays.asList(blankIds.split(",")));
|
|
|
}
|
|
|
if (haveLenZha) {
|
|
|
+ Date lenzhaStartDate = DateUtil.date();
|
|
|
try {
|
|
|
log.info("开始冷轧重排");
|
|
|
//冷轧重排
|
|
@@ -4678,9 +4679,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
}
|
|
|
log.info("开始推算冷轧调度时间之后的重叠数据");
|
|
|
//推算非退火、非铸轧的重叠数据,按序排列
|
|
|
- sortLenZha(chongpaiEndDate, tenantId);
|
|
|
+ sortLenZha(chongpaiEndDate, tenantId, lenzhaStartDate);
|
|
|
}
|
|
|
if (haveTuiHuo) {
|
|
|
+ Date tuihuoStartDate = DateUtil.date();
|
|
|
try {
|
|
|
log.info("开始退火重排");
|
|
|
//退火重排
|
|
@@ -4706,7 +4708,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
}
|
|
|
log.info("开始推算退火调度时间之后的重叠数据");
|
|
|
//推算退火,按序排列
|
|
|
- sortTuiHuo(chongpaiEndDate, tenantId);
|
|
|
+ sortTuiHuo(chongpaiEndDate, tenantId, tuihuoStartDate);
|
|
|
}
|
|
|
//调度排程结束
|
|
|
//将之前锁定的作业和明细重新解锁
|
|
@@ -4729,7 +4731,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public void sortTuiHuo(DateTime chongpaiEndDate, String tenantId) {
|
|
|
+ public void sortTuiHuo(DateTime chongpaiEndDate, String tenantId, Date tuihuoStartDate) {
|
|
|
//查询后续所有的明细(退火)
|
|
|
List<ApsProcessOperationProcessEquDo> list = this.baseMapper.selectAllNeedSortTuiHuo(chongpaiEndDate, tenantId);
|
|
|
//根据设备分组聚合
|
|
@@ -4742,6 +4744,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
List<ApsProcessOperationProcessEquDo> equList = map.get(key);
|
|
|
//按照计划开工时间排序
|
|
|
equList.sort(Comparator.comparing(ApsProcessOperationProcessEquDo::getPlanstartdate));
|
|
|
+ //取出刚刚排程完的数据(不需要移动)
|
|
|
+ List<ApsProcessOperationProcessEquDo> notMoveDataList = equList.stream().filter(item -> item.getModifydate().after(tuihuoStartDate)).collect(Collectors.toList());
|
|
|
|
|
|
//设置基准
|
|
|
// LinkedList<ApsProcessOperationProcessEquDo> baseList = new LinkedList<>(equList);
|
|
@@ -4756,8 +4760,17 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = equList.get(i);
|
|
|
// //基准去除当前明细
|
|
|
// baseList.remove(apsProcessOperationProcessEquDo);
|
|
|
+ long count = notMoveDataList.stream().filter(item -> item.getId().equals(apsProcessOperationProcessEquDo.getId())).count();
|
|
|
+ if (count > 0) {
|
|
|
+ baseList2.add(apsProcessOperationProcessEquDo);
|
|
|
+ basePlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
|
|
|
+ isChange = false;
|
|
|
+ continue;
|
|
|
+ }
|
|
|
//如果是第一个,直接结束循环
|
|
|
if (i == 0) {
|
|
|
+ //判断是否与不可修改的数据冲突,如果冲突,继续后推
|
|
|
+ checkNotMoveData(notMoveDataList, apsProcessOperationProcessEquDo);
|
|
|
baseList2.add(apsProcessOperationProcessEquDo);
|
|
|
basePlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
|
|
|
isChange = false;
|
|
@@ -4779,6 +4792,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
int between = (int) DateUtil.between(apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getPlanstartdate(), DateUnit.SECOND);
|
|
|
DateTime newPlanEndDate = DateUtil.offsetSecond(needUpdateDo.getPlanstartdate(), between);
|
|
|
needUpdateDo.setPlanenddate(newPlanEndDate);
|
|
|
+ //判断是否与不可修改的数据冲突,如果冲突,继续后推
|
|
|
+ checkNotMoveData(notMoveDataList, needUpdateDo);
|
|
|
//待更新
|
|
|
needUpdateList.add(needUpdateDo);
|
|
|
//放入基准
|
|
@@ -4806,6 +4821,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
int between = (int) DateUtil.between(apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getPlanstartdate(), DateUnit.SECOND);
|
|
|
DateTime newPlanEndDate = DateUtil.offsetSecond(needUpdateDo.getPlanstartdate(), between);
|
|
|
needUpdateDo.setPlanenddate(newPlanEndDate);
|
|
|
+ //判断是否与不可修改的数据冲突,如果冲突,继续后推
|
|
|
+ checkNotMoveData(notMoveDataList, needUpdateDo);
|
|
|
//待更新
|
|
|
needUpdateList.add(needUpdateDo);
|
|
|
//放入基准
|
|
@@ -4814,6 +4831,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
isChange = true;
|
|
|
newPlanStartDate = needUpdateDo.getPlanstartdate();
|
|
|
} else {//没有冲突,直接放入基准
|
|
|
+ //判断是否与不可修改的数据冲突,如果冲突,继续后推
|
|
|
+ checkNotMoveData(notMoveDataList, apsProcessOperationProcessEquDo);
|
|
|
baseList2.add(apsProcessOperationProcessEquDo);
|
|
|
basePlanstartdate = apsProcessOperationProcessEquDo.getPlanstartdate();
|
|
|
isChange = false;
|
|
@@ -5052,7 +5071,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
|
|
|
//去除后续的冲突
|
|
|
@Override
|
|
|
- public void sortLenZha(DateTime chongpaiEndDate, String tenantId) {
|
|
|
+ public void sortLenZha(DateTime chongpaiEndDate, String tenantId, Date lenzhaStartDate) {
|
|
|
//查询后续所有的明细(非退火、非铸轧)
|
|
|
List<ApsProcessOperationProcessEquDo> list = this.baseMapper.selectAllNeedSortLenZha(chongpaiEndDate, tenantId);
|
|
|
//根据设备分组聚合
|
|
@@ -5066,6 +5085,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
//按照计划开工时间排序
|
|
|
equList.sort(Comparator.comparing(ApsProcessOperationProcessEquDo::getPlanstartdate));
|
|
|
|
|
|
+ //取出刚刚排程完的数据(不需要移动)
|
|
|
+ List<ApsProcessOperationProcessEquDo> notMoveDataList = equList.stream().filter(item -> item.getModifydate().after(lenzhaStartDate)).collect(Collectors.toList());
|
|
|
+
|
|
|
//设置基准
|
|
|
// LinkedList<ApsProcessOperationProcessEquDo> baseList = new LinkedList<>(equList);
|
|
|
//设置已排序基准
|
|
@@ -5073,10 +5095,17 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
|
|
|
for (int i = 0; i < equList.size(); i++) {
|
|
|
ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = equList.get(i);
|
|
|
+ long count = notMoveDataList.stream().filter(item -> item.getId().equals(apsProcessOperationProcessEquDo.getId())).count();
|
|
|
+ if (count > 0) {
|
|
|
+ baseList2.add(apsProcessOperationProcessEquDo);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
// //基准去除当前明细
|
|
|
// baseList.remove(apsProcessOperationProcessEquDo);
|
|
|
//如果是第一个,直接结束循环
|
|
|
if (i == 0) {
|
|
|
+ //判断是否与不可修改的数据冲突,如果冲突,继续后推
|
|
|
+ checkNotMoveData(notMoveDataList, apsProcessOperationProcessEquDo);
|
|
|
baseList2.add(apsProcessOperationProcessEquDo);
|
|
|
continue;
|
|
|
}
|
|
@@ -5092,11 +5121,15 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
int between = (int) DateUtil.between(apsProcessOperationProcessEquDo.getPlanenddate(), apsProcessOperationProcessEquDo.getPlanstartdate(), DateUnit.SECOND);
|
|
|
DateTime newPlanEndDate = DateUtil.offsetSecond(needUpdateDo.getPlanstartdate(), between);
|
|
|
needUpdateDo.setPlanenddate(newPlanEndDate);
|
|
|
+ //判断是否与不可修改的数据冲突,如果冲突,继续后推
|
|
|
+ checkNotMoveData(notMoveDataList, needUpdateDo);
|
|
|
//待更新
|
|
|
needUpdateList.add(needUpdateDo);
|
|
|
//放入基准
|
|
|
baseList2.add(needUpdateDo);
|
|
|
} else {//没有冲突,直接放入基准
|
|
|
+ //判断是否与不可修改的数据冲突,如果冲突,继续后推
|
|
|
+ checkNotMoveData(notMoveDataList, apsProcessOperationProcessEquDo);
|
|
|
baseList2.add(apsProcessOperationProcessEquDo);
|
|
|
}
|
|
|
}
|
|
@@ -5106,6 +5139,24 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void checkNotMoveData(List<ApsProcessOperationProcessEquDo> notMoveDataList, ApsProcessOperationProcessEquDo needUpdateDo) {
|
|
|
+ for (ApsProcessOperationProcessEquDo equDo : notMoveDataList) {
|
|
|
+ if (!needUpdateDo.getPlanenddate().after(equDo.getPlanstartdate())) {
|
|
|
+ break;
|
|
|
+ }else if (!needUpdateDo.getPlanstartdate().before(equDo.getPlanenddate())){
|
|
|
+ }else {
|
|
|
+ Date planstartdate = needUpdateDo.getPlanstartdate();
|
|
|
+ Date planenddate = needUpdateDo.getPlanenddate();
|
|
|
+ //移动开始时间为上一个的结束时间
|
|
|
+ needUpdateDo.setPlanstartdate(equDo.getPlanenddate());
|
|
|
+ //结束时间为当前的开始时间推算原来的加工时间(计划结束-计划开始)
|
|
|
+ int between = (int) DateUtil.between(planenddate, planstartdate, DateUnit.SECOND);
|
|
|
+ DateTime newPlanEndDate = DateUtil.offsetSecond(needUpdateDo.getPlanstartdate(), between);
|
|
|
+ needUpdateDo.setPlanenddate(newPlanEndDate);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private void tuihuoChongpai(DateTime chongpaiStartDate, DateTime chongpaiEndDate, ApsScheduleConfigDo apsScheduleConfigDo, SysUserVo currentUser, List<String> blankIdsList) {
|
|
|
//错误数据纠正挪动
|
|
|
this.baseMapper.moveErrorNoPreviousProcessEqu(chongpaiStartDate, chongpaiEndDate, CXCommonUtils.getCurrentUserFactoryId(currentUser), "退火");
|