|
@@ -1,6 +1,5 @@
|
|
|
package com.rongwei.bscommon.sys.service.impl;
|
|
|
|
|
|
-import cn.hutool.core.collection.CollUtil;
|
|
|
import cn.hutool.core.date.DateUnit;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
@@ -29,6 +28,7 @@ import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
@@ -38,6 +38,7 @@ import static com.rongwei.safecommon.utils.SaveConstans.ForcedConflictsDescripti
|
|
|
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.*;
|
|
|
|
|
|
/**
|
|
@@ -335,6 +336,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
Date planenddate = processEqus.getPlanenddate();
|
|
|
ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(processEqus.getProcessid());
|
|
|
String processWay = apsProcessOperationDo.getProcessway();
|
|
|
+ // 单卷加工时长
|
|
|
+ BigDecimal onceprocessmin = apsProcessOperationDo.getOnceprocessmin();
|
|
|
updateConflictVo.setOldPlanEnddate(planstartdate);
|
|
|
updateConflictVo.setOldPlanStartdate(planenddate);
|
|
|
updateConflictVo.setCurrentProcessWay(processWay);
|
|
@@ -346,10 +349,11 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
processEqus.setProcessworkshop(changingWiresVo.getWorkshopName());
|
|
|
processEqus.setProcessdeviceid(changingWiresVo.getEquId());
|
|
|
processEqus.setProcessdevice(changingWiresVo.getEquName());
|
|
|
- // 计计划开工时间=计划开工时间-开工时间间隔
|
|
|
+ // 计划开工时间=计划开工时间-开工时间间隔
|
|
|
processEqus.setPlanstartdate(new Date(planstartdate.getTime() - timeInterval));
|
|
|
- // 计划完工时间=计划完工时间-开工时间间隔
|
|
|
+ // 计划完工时间=计划完工时间-开工时间间隔
|
|
|
processEqus.setPlanenddate(new Date(processEqus.getPlanenddate().getTime() - timeInterval));
|
|
|
+
|
|
|
checkConflictVos.add(new CheckConflictVo(processEqus.getId(), processEqus.getProcessdeviceid(),
|
|
|
processEqus.getPlanstartdate(), processEqus.getPlanenddate()));
|
|
|
saveList.add(processEqus);
|
|
@@ -359,48 +363,61 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
//加工中的状态 将未加工的改变为重新生成
|
|
|
if (JOBSTATUS_TO_BE_STARTING.equals(processEqus.getWorkstatus())) {
|
|
|
emptyBackup.set(true);
|
|
|
- ApsProcessOperationProcessEquDo newProcessEqu = new ApsProcessOperationProcessEquDo();
|
|
|
- BeanUtils.copyProperties(processEqus, newProcessEqu);
|
|
|
-
|
|
|
// 获取加工时长
|
|
|
- long processingTime = DateUtil.between(processEqus.getPlanenddate(), processEqus.getPlanstartdate(), DateUnit.SECOND, false);
|
|
|
+ // long processingTime = DateUtil.between(processEqus.getPlanenddate(), processEqus.getPlanstartdate(), DateUnit.SECOND, false);
|
|
|
+ // 需要拆分工序作业
|
|
|
+ if (processEqus.getPlanprocessrall() - processEqus.getStartingroll() - processEqus.getCancelroll() > 0) {
|
|
|
+ ApsProcessOperationProcessEquDo newProcessEqu = new ApsProcessOperationProcessEquDo();
|
|
|
+ BeanUtils.copyProperties(processEqus, newProcessEqu);
|
|
|
+ newProcessEqu.setId(SecurityUtil.getUUID());
|
|
|
+ newProcessEqu.setProcessworkshopid(changingWiresVo.getWorkshopId());
|
|
|
+ newProcessEqu.setProcessworkshop(changingWiresVo.getWorkshopName());
|
|
|
+ newProcessEqu.setProcessdeviceid(changingWiresVo.getEquId());
|
|
|
+ newProcessEqu.setProcessdevice(changingWiresVo.getEquName());
|
|
|
+ newProcessEqu.setCancelroll(0);
|
|
|
+ //计划加工卷数=计划加工卷数-已开工卷数
|
|
|
+ newProcessEqu.setPlanprocessrall(newProcessEqu.getPlanprocessrall() - newProcessEqu.getStartingroll());
|
|
|
+ // 更新计划完工时间
|
|
|
+ if (PROCESS_WAY_MERGE.equals(apsProcessOperationDo.getProcessway())) {
|
|
|
+ // 如果工序作业的加工方式是合并加工,则计划完工时间=计划开工时间+工序作业单卷加工时长 - 开工时间间隔
|
|
|
+ newProcessEqu.setPlanenddate(new Date(newProcessEqu.getPlanenddate().getTime() + TimeUnit.MINUTES.toMillis(onceprocessmin.intValue()) - timeInterval));
|
|
|
+ } else {
|
|
|
+ // 如果工序作业的加工方式不是合并加工,则计划完工时间=计划开工时间+工序作业单卷加工时长*(计划加工卷数) - 开工时间间隔
|
|
|
+ newProcessEqu.setPlanenddate(new Date(newProcessEqu.getPlanenddate().getTime() + TimeUnit.MINUTES.toMillis((long) timeInterval * newProcessEqu.getPlanprocessrall()) - timeInterval));
|
|
|
+ }
|
|
|
+
|
|
|
+ newProcessEqu.setStartingroll(0);
|
|
|
+ newProcessEqu.setReportroll(0);
|
|
|
+ newProcessEqu.setCheckoutroll(0);
|
|
|
+
|
|
|
+ newProcessEqu.setUnfinishroll(newProcessEqu.getPlanprocessrall());
|
|
|
+ newProcessEqu.setWorkstatus(JOBSTATUS_TO_BE_START);
|
|
|
+ newProcessEqu.setClosestatus(SaveConstans.CloseStatus.UNFINISHED);
|
|
|
+ affectedIdList.add(newProcessEqu.getId());
|
|
|
+ updateConflictVo.setApsProcessOperationProcessEquDo(newProcessEqu);
|
|
|
+ checkConflictVos.add(new CheckConflictVo(processEqus.getId(), newProcessEqu.getProcessdeviceid(),
|
|
|
+ newProcessEqu.getPlanstartdate(), newProcessEqu.getPlanenddate()));
|
|
|
+ saveList.add(newProcessEqu);
|
|
|
+ updateConflictVoList.add(updateConflictVo);
|
|
|
+ }
|
|
|
/************更新换线后工序作业的信息********************/
|
|
|
- newProcessEqu.setId(SecurityUtil.getUUID());
|
|
|
- affectedIdList.add(newProcessEqu.getId());
|
|
|
- newProcessEqu.setProcessworkshopid(changingWiresVo.getWorkshopId());
|
|
|
- newProcessEqu.setProcessworkshop(changingWiresVo.getWorkshopName());
|
|
|
- newProcessEqu.setProcessdeviceid(changingWiresVo.getEquId());
|
|
|
- newProcessEqu.setProcessdevice(changingWiresVo.getEquName());
|
|
|
- // 更新计划完工时间
|
|
|
- newProcessEqu.setPlanenddate(CalculateCompletionTime(newProcessEqu.getPlanstartdate(), processingTime,
|
|
|
- newProcessEqu.getPlanprocessrall() - newProcessEqu.getStartingroll(),
|
|
|
- newProcessEqu.getPlanprocessrall()));
|
|
|
- //计划加工卷数=计划加工卷数-已开工卷数
|
|
|
- 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()));
|
|
|
|
|
|
+ //更新计划加工卷数
|
|
|
+ processEqus.setPlanprocessrall(processEqus.getStartingroll() + processEqus.getCancelroll());
|
|
|
|
|
|
- saveList.add(newProcessEqu);
|
|
|
- /************更新原数据的数量信息***********************/
|
|
|
// 更新计划完工时间
|
|
|
- processEqus.setPlanenddate(CalculateCompletionTime(processEqus.getPlanstartdate(), processingTime,
|
|
|
- processEqus.getStartingroll(), processEqus.getPlanprocessrall()));
|
|
|
- //更新计划加工卷数
|
|
|
- processEqus.setPlanprocessrall(processEqus.getStartingroll());
|
|
|
+ if (PROCESS_WAY_MERGE.equals(apsProcessOperationDo.getProcessway())) {
|
|
|
+ // 如果工序作业的加工方式是合并加工,则计划完工时间=计划开工时间+工序作业单卷加工时长
|
|
|
+ processEqus.setPlanenddate(new Date(processEqus.getPlanenddate().getTime() + TimeUnit.MINUTES.toMillis(onceprocessmin.intValue())));
|
|
|
+ } else {
|
|
|
+ // 如果工序作业的加工方式不是合并加工,则计划完工时间=计划开工时间+工序作业单卷加工时长*计划加工卷数
|
|
|
+ processEqus.setPlanenddate(new Date(processEqus.getPlanenddate().getTime() + TimeUnit.MINUTES.toMillis((long) onceprocessmin.intValue() * processEqus.getPlanprocessrall())));
|
|
|
+ }
|
|
|
+
|
|
|
// 更新未完工卷数
|
|
|
processEqus.setUnfinishroll(processEqus.getPlanprocessrall() - processEqus.getReportroll());
|
|
|
// 作业状态
|
|
|
- processEqus.setWorkstatus(processEqus.getUnfinishroll() == 0 ? JOBSTATUS_TO_BE_END : JOBSTATUS_TO_BE_STARTING);
|
|
|
+ processEqus.setWorkstatus(processEqus.getUnfinishroll() - processEqus.getCancelroll() == 0 ? JOBSTATUS_TO_BE_END : JOBSTATUS_TO_BE_STARTING);
|
|
|
/**
|
|
|
* 更新完工状态
|
|
|
* 如果作业明细的完工状态=未完工,并且作业明细的已开工卷数=0,则作业状态=待开工;
|
|
@@ -412,11 +429,6 @@ 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());
|
|
|
saveList.add(processEqus);
|
|
|
}
|
|
|
// 更新坯料交货期
|
|
@@ -436,11 +448,11 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
// 删除工序作业备份
|
|
|
ApsUtils.clearBackup(currentUser);
|
|
|
}
|
|
|
- if(!saveList.isEmpty()){
|
|
|
+ if (!saveList.isEmpty()) {
|
|
|
this.saveOrUpdateBatch(saveList);
|
|
|
}
|
|
|
- if(!updateConflictVoList.isEmpty()){
|
|
|
- updateConflictVoList.forEach(data->{
|
|
|
+ if (!updateConflictVoList.isEmpty()) {
|
|
|
+ updateConflictVoList.forEach(data -> {
|
|
|
ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
|
|
|
affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
|
|
|
data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getCurrentProcessWay()));
|
|
@@ -458,16 +470,16 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
|
|
|
/**
|
|
|
* 计算计划完工时间
|
|
|
- * = 计划开工时间+加工时长*(已开工卷数/计划加工卷数)
|
|
|
+ * = 计划开工时间+加工时长/原计划加工卷数*本次计划加工卷数
|
|
|
*
|
|
|
- * @param planStartTime
|
|
|
- * @param processingTime
|
|
|
- * @param startingroll
|
|
|
- * @param planprocessrall
|
|
|
+ * @param planStartTime 加工开始时间
|
|
|
+ * @param processingTime 原计划加工时长
|
|
|
+ * @param startingroll 本次计划加工卷数
|
|
|
+ * @param planprocessrall 原计划加工卷数
|
|
|
* @return
|
|
|
*/
|
|
|
private Date CalculateCompletionTime(Date planStartTime, long processingTime, int startingroll, int planprocessrall) {
|
|
|
- int i = new BigDecimal(processingTime).multiply(new BigDecimal(startingroll)).divide(new BigDecimal(planprocessrall)).intValue();
|
|
|
+ int i = new BigDecimal(processingTime).divide(new BigDecimal(planprocessrall)).multiply(new BigDecimal(startingroll)).intValue();
|
|
|
return DateUtil.offsetSecond(planStartTime, i);
|
|
|
}
|
|
|
|
|
@@ -506,8 +518,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
/// 设计到修改的工序作业ID
|
|
|
ApsUtils.checkScheduling(null);
|
|
|
List<String> affectedIdList = new ArrayList<>();
|
|
|
- List<UpdateConflictVo> updateConflictVos= new ArrayList<>();
|
|
|
- Set <String> blankIdSet = new HashSet<>();
|
|
|
+ List<UpdateConflictVo> updateConflictVos = new ArrayList<>();
|
|
|
+ Set<String> blankIdSet = new HashSet<>();
|
|
|
UpdateConflictVo vo;
|
|
|
for (ChangeStartTimeVo changeStartTimeVo : changeStartTimeVos) {
|
|
|
vo = new UpdateConflictVo();
|
|
@@ -531,16 +543,16 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
vo.setApsProcessOperationProcessEquDo(processEquDo);
|
|
|
vo.setOldEquId(changeStartTimeVo.getEquId());
|
|
|
vo.setOldPlanEnddate(processEquDo.getPlanstartdate());
|
|
|
- vo.setCurrentProcessWay( operationDo.getProcessway());
|
|
|
+ vo.setCurrentProcessWay(operationDo.getProcessway());
|
|
|
vo.setOldPlanStartdate(processEquDo.getPlanenddate());
|
|
|
updateConflictVos.add(vo);
|
|
|
this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
- .eq(ApsProcessOperationProcessEquDo::getId,id)
|
|
|
- .set(ApsProcessOperationProcessEquDo::getPlanstartdate,changeStartTimeVo.getPlanStartTime())
|
|
|
- .set(ApsProcessOperationProcessEquDo::getPlanenddate,changeStartTimeVo.getPlanEndTime())
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getId, id)
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getPlanstartdate, changeStartTimeVo.getPlanStartTime())
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getPlanenddate, changeStartTimeVo.getPlanEndTime())
|
|
|
);
|
|
|
}
|
|
|
- updateConflictVos.forEach(data->{
|
|
|
+ updateConflictVos.forEach(data -> {
|
|
|
ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo = data.getApsProcessOperationProcessEquDo();
|
|
|
affectedIdList.addAll(checkProcessingTimeConflict(apsProcessOperationProcessEquDo,
|
|
|
data.getOldPlanStartdate(), data.getOldPlanEnddate(), data.getCurrentProcessWay()));
|
|
@@ -550,7 +562,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
apsProcessOperationProcessEquDo.getPlanstartdate(),
|
|
|
apsProcessOperationProcessEquDo.getPlanenddate());
|
|
|
});
|
|
|
- blankIdSet.forEach(blankId->{
|
|
|
+ blankIdSet.forEach(blankId -> {
|
|
|
// 更新坯料交货期
|
|
|
apsBlankOrderService.updateBlankDeliveryDate(null, blankId);
|
|
|
});
|
|
@@ -630,7 +642,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
|
|
|
this.updateById(apsProcessOperationProcessEquDo);
|
|
|
// 更新坯料交货期
|
|
|
- apsBlankOrderService. updateBlankDeliveryDate(null,apsProcessOperationDo.getBlankid());
|
|
|
+ apsBlankOrderService.updateBlankDeliveryDate(null, apsProcessOperationDo.getBlankid());
|
|
|
affectedIdList.addAll(jobDetailsVo.getReturnAboutIds());
|
|
|
return R.ok(this.ganttService.getListById(affectedIdList));
|
|
|
}
|
|
@@ -851,7 +863,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
}
|
|
|
List<String> conflictdeList = new ArrayList<>(Arrays.asList(oldConflictDesc.split(",")));
|
|
|
conflictdeList.remove(removeConflictDesc);
|
|
|
- return conflictdeList.stream().distinct().collect(Collectors.joining( ","));
|
|
|
+ return conflictdeList.stream().distinct().collect(Collectors.joining(","));
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -876,9 +888,9 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
newConflictdes = addNewConflictsDesc(processEquDo.getConflictdes(), EQUIPMENT_RUN_TIME);
|
|
|
}
|
|
|
this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
- .eq(ApsProcessOperationProcessEquDo::getId,processEquDo.getId())
|
|
|
- .set(ApsProcessOperationProcessEquDo::getConflictdes,newConflictdes)
|
|
|
- .set(ApsProcessOperationProcessEquDo::getHasconflict,StringUtils.isBlank(newConflictdes) &&
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getId, processEquDo.getId())
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getConflictdes, newConflictdes)
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getHasconflict, StringUtils.isBlank(newConflictdes) &&
|
|
|
StringUtils.isBlank(processEquDo.getSoftconflictdes()) ? LOCKMARK_N : LOCKMARK_Y)
|
|
|
);
|
|
|
}
|
|
@@ -927,13 +939,14 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
|
|
|
StringUtils.isBlank(apsProcessOperationProcessEquDo.getSoftconflictdes()) ?
|
|
|
LOCKMARK_N : LOCKMARK_Y);
|
|
|
this.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
- .eq(ApsProcessOperationProcessEquDo::getId,apsProcessOperationProcessEquDo.getId())
|
|
|
- .set(ApsProcessOperationProcessEquDo::getConflictdes,newConflictsDesc)
|
|
|
- .set(ApsProcessOperationProcessEquDo::getHasconflict,apsProcessOperationProcessEquDo.getHasconflict())
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getId, apsProcessOperationProcessEquDo.getId())
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getConflictdes, newConflictsDesc)
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getHasconflict, apsProcessOperationProcessEquDo.getHasconflict())
|
|
|
);
|
|
|
}
|
|
|
return affectedIdList;
|
|
|
}
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|