|
@@ -302,7 +302,10 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
AtomicReference<Boolean> emptyBackup = new AtomicReference<>(false);
|
|
|
List<CheckConflictVo> checkConflictVos = new ArrayList<>();
|
|
|
List<ApsProcessOperationProcessEquDo> saveList = new ArrayList<>();
|
|
|
- changingWiresVos.forEach(changingWiresVo -> {
|
|
|
+ List<UpdateConflictVo> updateConflictVoList = new ArrayList<>();
|
|
|
+ UpdateConflictVo updateConflictVo;
|
|
|
+ for (ChangingWiresVo changingWiresVo : changingWiresVos) {
|
|
|
+ updateConflictVo = new UpdateConflictVo();
|
|
|
// 工序作业明细
|
|
|
ApsProcessOperationProcessEquDo processEqus = apsProcessOperationProcessEquDos.stream()
|
|
|
.filter(info -> changingWiresVo.getId().equals(info.getId()))
|
|
@@ -315,12 +318,12 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
if (JOBSTATUS_TO_BE_STARTING.equals(processEqus.getWorkstatus()) &&
|
|
|
processEqus.getProcessdeviceid().equals(changingWiresVo.getEquId())) {
|
|
|
log.debug("该工序作业明细:{}加工中且设备未发生变化无需换线", processEqus.getId());
|
|
|
- return;
|
|
|
+ continue;
|
|
|
}
|
|
|
// 加工卷数 = 已报工卷数+已取消卷数时 不更新作业
|
|
|
if (processEqus.getPlanprocessrall() == processEqus.getStartingroll() + processEqus.getCancelroll()) {
|
|
|
log.debug("该工序作业明细:{}已全部报工无需换线", processEqus.getId());
|
|
|
- return;
|
|
|
+ continue;
|
|
|
}
|
|
|
|
|
|
// 获取该工序作业最早的计划开始时间
|
|
@@ -328,6 +331,10 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
Date planenddate = processEqus.getPlanenddate();
|
|
|
ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(processEqus.getProcessid());
|
|
|
String processWay = apsProcessOperationDo.getProcessway();
|
|
|
+ updateConflictVo.setOldPlanEnddate(planstartdate);
|
|
|
+ updateConflictVo.setOldPlanStartdate(planenddate);
|
|
|
+ updateConflictVo.setCurrentProcessWay(processWay);
|
|
|
+ updateConflictVo.setOldEquId(apsProcessOperationDo.getProcessdeviceid());
|
|
|
// 待开工的直接修改
|
|
|
if (JOBSTATUS_TO_BE_START.equals(processEqus.getWorkstatus())) {
|
|
|
// 待开工的工序作业明细 直接更换加工设备 和车间
|
|
@@ -341,48 +348,45 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
processEqus.setPlanenddate(new Date(processEqus.getPlanenddate().getTime() - timeInterval));
|
|
|
checkConflictVos.add(new CheckConflictVo(processEqus.getId(), processEqus.getProcessdeviceid(),
|
|
|
processEqus.getPlanstartdate(), processEqus.getPlanenddate()));
|
|
|
- // 校验可用时间
|
|
|
- affectedIdList.addAll(checkProcessingTimeConflict(processEqus, planstartdate, planenddate, processWay));
|
|
|
- // 判断是否存在设备不可用
|
|
|
- inspectionEquipmentIsAvailable(processEqus, processEqus.getProcessdeviceid(), processEqus.getPlanstartdate()
|
|
|
- , processEqus.getPlanenddate());
|
|
|
saveList.add(processEqus);
|
|
|
+ updateConflictVo.setApsProcessOperationProcessEquDo(processEqus);
|
|
|
+ updateConflictVoList.add(updateConflictVo);
|
|
|
}
|
|
|
//加工中的状态 将未加工的改变为重新生成
|
|
|
if (JOBSTATUS_TO_BE_STARTING.equals(processEqus.getWorkstatus())) {
|
|
|
emptyBackup.set(true);
|
|
|
- ApsProcessOperationProcessEquDo saveProcessEqu = new ApsProcessOperationProcessEquDo();
|
|
|
- BeanUtils.copyProperties(processEqus, saveProcessEqu);
|
|
|
+ ApsProcessOperationProcessEquDo newProcessEqu = new ApsProcessOperationProcessEquDo();
|
|
|
+ BeanUtils.copyProperties(processEqus, newProcessEqu);
|
|
|
|
|
|
// 获取加工时长
|
|
|
long processingTime = DateUtil.between(processEqus.getPlanenddate(), processEqus.getPlanstartdate(), DateUnit.SECOND, false);
|
|
|
/************更新换线后工序作业的信息********************/
|
|
|
- saveProcessEqu.setId(SecurityUtil.getUUID());
|
|
|
- affectedIdList.add(saveProcessEqu.getId());
|
|
|
- saveProcessEqu.setProcessworkshopid(changingWiresVo.getWorkshopId());
|
|
|
- saveProcessEqu.setProcessworkshop(changingWiresVo.getWorkshopName());
|
|
|
- saveProcessEqu.setProcessdeviceid(changingWiresVo.getEquId());
|
|
|
- saveProcessEqu.setProcessdevice(changingWiresVo.getEquName());
|
|
|
+ newProcessEqu.setId(SecurityUtil.getUUID());
|
|
|
+ affectedIdList.add(newProcessEqu.getId());
|
|
|
+ newProcessEqu.setProcessworkshopid(changingWiresVo.getWorkshopId());
|
|
|
+ newProcessEqu.setProcessworkshop(changingWiresVo.getWorkshopName());
|
|
|
+ newProcessEqu.setProcessdeviceid(changingWiresVo.getEquId());
|
|
|
+ newProcessEqu.setProcessdevice(changingWiresVo.getEquName());
|
|
|
// 更新计划完工时间
|
|
|
- saveProcessEqu.setPlanenddate(CalculateCompletionTime(saveProcessEqu.getPlanstartdate(), processingTime,
|
|
|
- saveProcessEqu.getPlanprocessrall() - saveProcessEqu.getStartingroll(),
|
|
|
- saveProcessEqu.getPlanprocessrall()));
|
|
|
+ newProcessEqu.setPlanenddate(CalculateCompletionTime(newProcessEqu.getPlanstartdate(), processingTime,
|
|
|
+ newProcessEqu.getPlanprocessrall() - newProcessEqu.getStartingroll(),
|
|
|
+ newProcessEqu.getPlanprocessrall()));
|
|
|
//计划加工卷数=计划加工卷数-已开工卷数
|
|
|
- saveProcessEqu.setPlanprocessrall(saveProcessEqu.getPlanprocessrall() - saveProcessEqu.getStartingroll());
|
|
|
- saveProcessEqu.setStartingroll(0);
|
|
|
- saveProcessEqu.setReportroll(0);
|
|
|
- saveProcessEqu.setCheckoutroll(0);
|
|
|
- saveProcessEqu.setUnfinishroll(saveProcessEqu.getPlanprocessrall());
|
|
|
- saveProcessEqu.setWorkstatus(JOBSTATUS_TO_BE_START);
|
|
|
- saveProcessEqu.setClosestatus(SaveConstans.CloseStatus.UNFINISHED);
|
|
|
- checkConflictVos.add(new CheckConflictVo(processEqus.getId(), saveProcessEqu.getProcessdeviceid(),
|
|
|
- saveProcessEqu.getPlanstartdate(), saveProcessEqu.getPlanenddate()));
|
|
|
- // 判断是否存在设备不可用
|
|
|
- inspectionEquipmentIsAvailable(saveProcessEqu, saveProcessEqu.getProcessdeviceid(), saveProcessEqu.getPlanstartdate()
|
|
|
- , saveProcessEqu.getPlanenddate());
|
|
|
- // 校验时间重叠问题
|
|
|
- affectedIdList.addAll(checkProcessingTimeConflict(saveProcessEqu, planstartdate, planenddate, processWay));
|
|
|
- saveList.add(saveProcessEqu);
|
|
|
+ newProcessEqu.setPlanprocessrall(newProcessEqu.getPlanprocessrall() - newProcessEqu.getStartingroll());
|
|
|
+ newProcessEqu.setStartingroll(0);
|
|
|
+ newProcessEqu.setReportroll(0);
|
|
|
+ newProcessEqu.setCheckoutroll(0);
|
|
|
+ newProcessEqu.setUnfinishroll(newProcessEqu.getPlanprocessrall());
|
|
|
+ newProcessEqu.setWorkstatus(JOBSTATUS_TO_BE_START);
|
|
|
+ newProcessEqu.setClosestatus(SaveConstans.CloseStatus.UNFINISHED);
|
|
|
+ saveList.add(processEqus);
|
|
|
+ updateConflictVo.setApsProcessOperationProcessEquDo(newProcessEqu);
|
|
|
+ updateConflictVoList.add(updateConflictVo);
|
|
|
+ checkConflictVos.add(new CheckConflictVo(processEqus.getId(), newProcessEqu.getProcessdeviceid(),
|
|
|
+ newProcessEqu.getPlanstartdate(), newProcessEqu.getPlanenddate()));
|
|
|
+
|
|
|
+
|
|
|
+ saveList.add(newProcessEqu);
|
|
|
/************更新原数据的数量信息***********************/
|
|
|
// 更新计划完工时间
|
|
|
processEqus.setPlanenddate(CalculateCompletionTime(processEqus.getPlanstartdate(), processingTime,
|
|
@@ -404,25 +408,25 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
} else {
|
|
|
processEqus.setClosestatus(processEqus.getStartingroll() > 0 ? JOBSTATUS_TO_BE_STARTING : JOBSTATUS_TO_BE_START);
|
|
|
}
|
|
|
- // 校验可用时间
|
|
|
- affectedIdList.addAll(checkProcessingTimeConflict(processEqus, planstartdate, planenddate, processWay));
|
|
|
- // 判断是否存在设备不可用
|
|
|
- inspectionEquipmentIsAvailable(processEqus, processEqus.getProcessdeviceid(), processEqus.getPlanstartdate()
|
|
|
- , processEqus.getPlanenddate());
|
|
|
+// // 校验可用时间
|
|
|
+// affectedIdList.addAll(checkProcessingTimeConflict(processEqus, planstartdate, planenddate, processWay));
|
|
|
+// // 判断是否存在设备不可用
|
|
|
+// inspectionEquipmentIsAvailable(processEqus, processEqus.getProcessdeviceid(), processEqus.getPlanstartdate()
|
|
|
+// , processEqus.getPlanenddate());
|
|
|
saveList.add(processEqus);
|
|
|
}
|
|
|
// 更新坯料交货期
|
|
|
- apsBlankOrderService. updateBlankDeliveryDate(null,apsProcessOperationDo.getBlankid());
|
|
|
- });
|
|
|
- // 换线拆单后 需要校验 是否存在冲突 如果存在冲突 提示
|
|
|
- if (!checkConflictVos.isEmpty()) {
|
|
|
- List<String> promptInformation = this.baseMapper.checkConflict(checkConflictVos);
|
|
|
- if (!promptInformation.isEmpty()) {
|
|
|
- log.error("存在冲突的工序作业");
|
|
|
- return R.error("换线后存在冲突");
|
|
|
- //return R.error(promptInformation.get(0));
|
|
|
- }
|
|
|
+ apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid());
|
|
|
}
|
|
|
+ // 换线拆单后 需要校验 是否存在冲突 如果存在冲突 提示
|
|
|
+// if (!checkConflictVos.isEmpty()) {
|
|
|
+// List<String> promptInformation = this.baseMapper.checkConflict(checkConflictVos);
|
|
|
+// if (!promptInformation.isEmpty()) {
|
|
|
+// log.error("存在冲突的工序作业");
|
|
|
+// return R.error("换线后存在冲突");
|
|
|
+// //return R.error(promptInformation.get(0));
|
|
|
+// }
|
|
|
+// }
|
|
|
if (emptyBackup.get()) {
|
|
|
SysUserVo currentUser = CXCommonUtils.getCurrentUser();
|
|
|
// 删除工序作业备份
|
|
@@ -431,7 +435,18 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
if(!saveList.isEmpty()){
|
|
|
this.saveOrUpdateBatch(saveList);
|
|
|
}
|
|
|
-
|
|
|
+ if(!updateConflictVoList.isEmpty()){
|
|
|
+ updateConflictVoList.forEach(data->{
|
|
|
+ ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
|
|
|
+ affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
|
|
|
+ data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getCurrentProcessWay()));
|
|
|
+ // 判断是否存在设备不可用
|
|
|
+ inspectionEquipmentIsAvailable(apsProcessOperationProcessEquDo,
|
|
|
+ apsProcessOperationProcessEquDo.getProcessdeviceid(),
|
|
|
+ apsProcessOperationProcessEquDo.getPlanstartdate(),
|
|
|
+ apsProcessOperationProcessEquDo.getPlanenddate());
|
|
|
+ });
|
|
|
+ }
|
|
|
|
|
|
// 重新获取甘特图数据并返回前段
|
|
|
return R.ok(ganttService.getListById(affectedIdList));
|