|
@@ -182,15 +182,16 @@ public class ReportCheckServiceImpl implements ReportCheckService {
|
|
|
currentProcessOperationMainDo.setCheckoutroll(currentProcessOperationMainDo.getCheckoutroll() + 1);
|
|
|
currentProcessOperationEqu.setCheckoutroll(currentProcessOperationEqu.getCheckoutroll() + 1);
|
|
|
}
|
|
|
- apsProcessOperationService.updateById(currentProcessOperationMainDo);
|
|
|
currentProcessOperationEqu.setWorkstatus(JOBSTATUS_TO_BE_END);
|
|
|
currentProcessOperationEqu.setBachmaterialprocess("");
|
|
|
- apsProcessOperationProcessEquService.updateById(currentProcessOperationEqu);
|
|
|
// 更新 更新该报工检验记录所有输出物料 以及待加工料卷批次号
|
|
|
updateProcessOutputMater(apsWorkInProgressInventoryDos, reportOutputDos,
|
|
|
operationOutMaterDoList,
|
|
|
currentProcessOperationMainDo,
|
|
|
currentProcessOperationEqu);
|
|
|
+ // 更新当前工序作业和作业明细的数据
|
|
|
+ apsProcessOperationService.updateById(currentProcessOperationMainDo);
|
|
|
+ apsProcessOperationProcessEquService.updateById(currentProcessOperationEqu);
|
|
|
// 更新报工输出物料 检验状态
|
|
|
apsReportOutputService.update(new LambdaUpdateWrapper<ApsReportOutputDo>()
|
|
|
.in(ApsReportOutputDo::getId, reportOutputDos.stream().map(ApsReportOutputDo::getId).collect(Collectors.toList()))
|
|
@@ -391,11 +392,11 @@ public class ReportCheckServiceImpl implements ReportCheckService {
|
|
|
log.info("开始更新工序作业的输出物料和在制品相关信息");
|
|
|
// 需要作为待加工料卷批次号的批次号
|
|
|
Map<String, List<String>> toBeProcessedDataMap = new HashMap<>();
|
|
|
-
|
|
|
+ List<String> unqualifiedOutPutIds = new ArrayList<>();
|
|
|
// 循环报工输出物料信息
|
|
|
reportOutputDos.forEach(reportOutputDo -> {
|
|
|
String outputid = reportOutputDo.getOutputid();
|
|
|
- // 获取报工记录对应的输出物料
|
|
|
+ // 获取工序作业对应的输出物料
|
|
|
ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo = operationOutMaterDoList.stream()
|
|
|
.filter(materDo -> materDo.getId().equals(outputid)).findFirst().orElse(null);
|
|
|
// 报工记录对应的
|
|
@@ -420,6 +421,7 @@ public class ReportCheckServiceImpl implements ReportCheckService {
|
|
|
apsProcessOperationOutMaterDo.setFailrollnum(apsProcessOperationOutMaterDo.getFailrollnum() + 1);
|
|
|
apsWorkInProgressInventoryDo.setWorkinprocessstatus(WAITING);
|
|
|
apsWorkInProgressInventoryDo.setWorkinprocesstype(REJECTS);
|
|
|
+ unqualifiedOutPutIds.add(outputid);
|
|
|
} else {
|
|
|
currentProcessOperationMainDo.setOutputqualifiednum(currentProcessOperationMainDo.getOutputqualifiednum() + 1);
|
|
|
apsProcessOperationOutMaterDo.setGoodrollnum(apsProcessOperationOutMaterDo.getGoodrollnum() + 1);
|
|
@@ -461,11 +463,12 @@ public class ReportCheckServiceImpl implements ReportCheckService {
|
|
|
log.debug("需要向下一节点流转的批次号:{}", toBeProcessedDataMap);
|
|
|
// 当前工序的下一个工序作业信息
|
|
|
String nextprocessid = currentProcessOperationMainDo.getNextprocessid();
|
|
|
+ List<ApsProcessOperationDo> nextProcessOperations;
|
|
|
log.debug("当前工序的下一个工序:{}", nextprocessid);
|
|
|
// 当前工序存在下一个工序且 存在代加工的在制品信息时
|
|
|
if (!toBeProcessedDataMap.isEmpty() && StringUtils.isNotBlank(nextprocessid)) {
|
|
|
log.debug("更新剩余代报工卷数和待开工卷数");
|
|
|
- List<ApsProcessOperationDo> nextProcessOperations = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
|
|
|
+ nextProcessOperations = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
|
|
|
.in(ApsProcessOperationDo::getId, Arrays.asList(nextprocessid.split(",")))
|
|
|
.in(ApsProcessOperationDo::getPlaninputid, toBeProcessedDataMap.keySet())
|
|
|
.eq(BaseDo::getDeleted, NO_DELETED));
|
|
@@ -516,22 +519,136 @@ public class ReportCheckServiceImpl implements ReportCheckService {
|
|
|
apsProcessOperationProcessEquService.saveOrUpdateBatch(updateProcessEquData);
|
|
|
}
|
|
|
}
|
|
|
+ //本次流转取消卷数
|
|
|
+ Map<String, Integer> circulationCancellationMap = new HashMap<>();
|
|
|
+ if (!unqualifiedOutPutIds.isEmpty()) {
|
|
|
+ Map<String, Long> unqualifiedOutPutMap = unqualifiedOutPutIds.stream().collect(Collectors.groupingBy(outputid -> outputid, Collectors.counting()));
|
|
|
+ for (Map.Entry<String, Long> entry : unqualifiedOutPutMap.entrySet()) {
|
|
|
+ String key = entry.getKey();
|
|
|
+ // 待分配取消卷数
|
|
|
+ int toBeAllocated = Math.toIntExact(entry.getValue());
|
|
|
+ ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo = operationOutMaterDoList.stream()
|
|
|
+ .filter(outMater -> key.contains(outMater.getId()))
|
|
|
+ .findFirst().orElse(null);
|
|
|
+ if (apsProcessOperationOutMaterDo == null) {
|
|
|
+ log.error("无法获取到正确的工序作业输出物料");
|
|
|
+ throw new CustomException("无法获取到正确的工序作业输出物料");
|
|
|
+ }
|
|
|
+ int cancellation;
|
|
|
+ if (toBeAllocated > 0) {
|
|
|
+ log.info("开始更新备料相关数据!卷数:{},输出物料id:{}", toBeAllocated, key);
|
|
|
+ // 该作业明细的计划加工卷数*该作业的输出物料的计划备料卷数/该作业的计划加工卷数
|
|
|
+ apsProcessOperationOutMaterDo.setPlanstockrollnum((int) Math.floor((double) (currentProcessOperationEqu.getPlanprocessrall() *
|
|
|
+ apsProcessOperationOutMaterDo.getPlanstockrollnum()) / currentProcessOperationMainDo.getPlanprocessrall()));
|
|
|
+ // 如果该作业明细输出物料的计划备料卷数≥待分配取消卷,则本次备料取消卷数=待分配取消卷 否则 本次备料取消卷数=该作业明细输出物料的计划备料卷数;
|
|
|
+ cancellation = apsProcessOperationOutMaterDo.getPlanstockrollnum() >= toBeAllocated ?
|
|
|
+ toBeAllocated : apsProcessOperationOutMaterDo.getPlanstockrollnum();
|
|
|
+ /**
|
|
|
+ * 备料已取消卷数=备料已取消卷数+本次备料取消卷数
|
|
|
+ * 备料剩余需输出卷数=备料剩余需输出卷数-本次备料取消卷数
|
|
|
+ * 待分配取消卷=待分配取消卷-本次备料取消卷数
|
|
|
+ */
|
|
|
+ calculateAboutRollNum(apsProcessOperationOutMaterDo, ApsProcessOperationOutMaterDo::getStockcancelroll,
|
|
|
+ ApsProcessOperationOutMaterDo::setStockcancelroll, cancellation, 1);
|
|
|
+ calculateAboutRollNum(apsProcessOperationOutMaterDo, ApsProcessOperationOutMaterDo::getStockleaveoutroll,
|
|
|
+ ApsProcessOperationOutMaterDo::setStockleaveoutroll, cancellation, -1);
|
|
|
+ calculateAboutRollNum(apsProcessOperationOutMaterDo, ApsProcessOperationOutMaterDo::getStockleaveoutroll,
|
|
|
+ ApsProcessOperationOutMaterDo::setStockleaveoutroll, cancellation, -1);
|
|
|
+ toBeAllocated = toBeAllocated - cancellation;
|
|
|
+ }
|
|
|
+ // 流转卷数相关
|
|
|
+ if (toBeAllocated > 0) {
|
|
|
+ log.info("开始更新流转卷数相关数据!卷数:{},输出物料id:{}", toBeAllocated, key);
|
|
|
+ //计划流转卷数=该作业明细的计划加工卷数*该作业的输出物料的计划流转卷数/该作业的计划加工卷数
|
|
|
+ apsProcessOperationOutMaterDo.setPlanmoverollnum((int) Math.floor((double) (currentProcessOperationEqu.getPlanprocessrall() *
|
|
|
+ apsProcessOperationOutMaterDo.getPlanmoverollnum()) / currentProcessOperationMainDo.getPlanprocessrall()));
|
|
|
+ // 如果该作业明细输出物料的计划流转卷数≥待分配取消卷,则本次流转取消卷数=待分配取消卷; 则本次成品取消卷数=该作业明细输出物料的计划流转卷数;
|
|
|
+ cancellation = apsProcessOperationOutMaterDo.getPlanmoverollnum() >= toBeAllocated ?
|
|
|
+ toBeAllocated : apsProcessOperationOutMaterDo.getPlanmoverollnum();
|
|
|
+ /**
|
|
|
+ * 流转已取消卷数=流转已取消卷数+本次流转取消卷数
|
|
|
+ * 流转剩余需输出卷数=流转剩余需输出卷数-本次流转取消卷数
|
|
|
+ * 更新后道作业取消卷数,参见【更新后道作业取消卷数】
|
|
|
+ * 待分配取消卷=待分配取消卷-本次流转取消卷数
|
|
|
+ */
|
|
|
+ calculateAboutRollNum(apsProcessOperationOutMaterDo, ApsProcessOperationOutMaterDo::getMovecancelroll,
|
|
|
+ ApsProcessOperationOutMaterDo::setMovecancelroll, cancellation, 1);
|
|
|
+ calculateAboutRollNum(apsProcessOperationOutMaterDo, ApsProcessOperationOutMaterDo::getMoveleaveoutroll,
|
|
|
+ ApsProcessOperationOutMaterDo::setMoveleaveoutroll, cancellation, -1);
|
|
|
+ if (circulationCancellationMap.containsKey(key)) {
|
|
|
+ circulationCancellationMap.put(key, circulationCancellationMap.get(key) + cancellation);
|
|
|
+ } else {
|
|
|
+ circulationCancellationMap.put(key, cancellation);
|
|
|
+ }
|
|
|
+ toBeAllocated = toBeAllocated - cancellation;
|
|
|
+ }
|
|
|
+ // 成品输出卷数
|
|
|
+ if (toBeAllocated > 0) {
|
|
|
+ log.info("开始更新成品输出卷数相关数据!卷数:{},输出物料id:{}", toBeAllocated, key);
|
|
|
+ //计算该作业明细输出物料的计划成品卷数=该作业明细的计划加工卷数*该作业的输出物料的计划成品卷数/该作业的计划加工卷数
|
|
|
+ apsProcessOperationOutMaterDo.setPlanprodrollnum((int) Math.floor((double) (currentProcessOperationEqu.getPlanprocessrall() *
|
|
|
+ apsProcessOperationOutMaterDo.getPlanprodrollnum()) / currentProcessOperationMainDo.getPlanprocessrall()));
|
|
|
+ // 如果该作业明细输出物料的计划成品卷数≥待分配取消卷,则本次流转取消卷数=待分配取消卷; 则本次成品取消卷数=该作业明细输出物料的计划成品卷数;
|
|
|
+ cancellation = apsProcessOperationOutMaterDo.getPlanprodrollnum() >= toBeAllocated ?
|
|
|
+ toBeAllocated : apsProcessOperationOutMaterDo.getPlanprodrollnum();
|
|
|
+ /**
|
|
|
+ * 成品已取消卷数=成品已取消卷数+本次成品取消卷数
|
|
|
+ * 成品剩余需输出卷数=成品剩余需输出卷数-本次成品取消卷数
|
|
|
+ */
|
|
|
+ calculateAboutRollNum(apsProcessOperationOutMaterDo, ApsProcessOperationOutMaterDo::getProdcancelroll,
|
|
|
+ ApsProcessOperationOutMaterDo::setProdcancelroll, cancellation, 1);
|
|
|
+ calculateAboutRollNum(apsProcessOperationOutMaterDo, ApsProcessOperationOutMaterDo::getProdleaveoutroll,
|
|
|
+ ApsProcessOperationOutMaterDo::setProdleaveoutroll, cancellation, -1);
|
|
|
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
log.info("开始更新在制品和工序作业输出物料信息");
|
|
|
// 保存在制品
|
|
|
apsWorkInProgressInventoryService.saveOrUpdateBatch(apsWorkInProgressInventoryDos);
|
|
|
// 保存工序作业输出物料
|
|
|
apsProcessOperationOutMaterService.saveOrUpdateBatch(operationOutMaterDoList);
|
|
|
-
|
|
|
- int unqualifiedCount = (int) reportOutputDos.stream().filter(info -> NO.equals(info.getQualified())).count();
|
|
|
- if (unqualifiedCount > 0) {
|
|
|
- CancelProcessOperationVo cancelProcessOperationVo = new CancelProcessOperationVo();
|
|
|
- cancelProcessOperationVo.setCraftrouteid(null);
|
|
|
- cancelProcessOperationVo.setCurcancelroll(unqualifiedCount);
|
|
|
- cancelProcessOperationVo.setApsprocessoperationdo(currentProcessOperationMainDo);
|
|
|
- cancelProcessOperationVo.setSetincancelroll(false);
|
|
|
- cancelProcessOperationVo.setUpdatecuropration(false);
|
|
|
- apsProcessOperationService.cancelProcessOperation(cancelProcessOperationVo);
|
|
|
+ // 更新后道作业取消卷数
|
|
|
+ if (StringUtils.isNotBlank(nextprocessid) && !circulationCancellationMap.isEmpty()) {
|
|
|
+ ApsProcessOperationDo apsProcessOperationDo;
|
|
|
+ CancelProcessOperationVo cancelProcessOperationVo;
|
|
|
+ for (Map.Entry<String, Integer> entry : circulationCancellationMap.entrySet()) {
|
|
|
+ String outPutId = entry.getKey();
|
|
|
+ Integer value = entry.getValue();
|
|
|
+ List<ApsProcessOperationProcessEquDo> apsProcessOperationProcessEquDos = apsProcessOperationProcessEquService.getBaseMapper().getDataByInputIdAndId(outPutId, Arrays.asList(currentProcessOperationEqu.getNextprocessesids().split(",")));
|
|
|
+ for (ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo : apsProcessOperationProcessEquDos) {
|
|
|
+ if (value <= 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ apsProcessOperationDo = apsProcessOperationService.getById(apsProcessOperationProcessEquDo.getProcessid());
|
|
|
+ if (apsProcessOperationDo == null) {
|
|
|
+ log.error("无法根据id:{}获取工序作业信息", apsProcessOperationProcessEquDo.getProcessid());
|
|
|
+ throw new CustomException("无法获取工序作业信息");
|
|
|
+ }
|
|
|
+ // 剩余待开工卷数
|
|
|
+ int toBeStartedQty = apsProcessOperationProcessEquDo.getPlanprocessrall() - apsProcessOperationProcessEquDo.getStartingroll() - apsProcessOperationProcessEquDo.getCancelroll();
|
|
|
+ // 本次取消卷数
|
|
|
+ int cancelQty = toBeStartedQty >= value ? value : toBeStartedQty;
|
|
|
+ log.debug("工序作业:{}的本次取消卷数:{}",apsProcessOperationProcessEquDo.getId(),cancelQty);
|
|
|
+ //取消和更新作业明细
|
|
|
+ apsProcessOperationService.cancelProcessOperationEqu(cancelQty,apsProcessOperationDo, apsProcessOperationProcessEquDo);
|
|
|
+ //取消和更新工序作业
|
|
|
+ cancelProcessOperationVo = new CancelProcessOperationVo();
|
|
|
+ cancelProcessOperationVo.setCraftrouteid(null);
|
|
|
+ cancelProcessOperationVo.setCurcancelroll(cancelQty);
|
|
|
+ cancelProcessOperationVo.setCurcancelroll(cancelQty);
|
|
|
+ cancelProcessOperationVo.setApsprocessoperationdo(apsProcessOperationDo);
|
|
|
+ cancelProcessOperationVo.setSetincancelroll(false);
|
|
|
+ cancelProcessOperationVo.setUpdatecuropration(false);
|
|
|
+ apsProcessOperationService.cancelProcessOperation(cancelProcessOperationVo);
|
|
|
+ // TODO:XH add 2024/9/3 不在更新使用方法中的更新逻辑
|
|
|
+// apsProcessOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
+// .eq(ApsProcessOperationProcessEquDo::getId, apsProcessOperationProcessEquDo.getId())
|
|
|
+// .set(ApsProcessOperationProcessEquDo::getCancelroll,cancelQty+apsProcessOperationProcessEquDo.getCancelroll())
|
|
|
+// );
|
|
|
+ value = value - cancelQty;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
log.info("更新工序作业的输出物料和在制品相关信息结束");
|
|
|
return;
|
|
@@ -626,13 +743,20 @@ public class ReportCheckServiceImpl implements ReportCheckService {
|
|
|
* @param getPojoData
|
|
|
* @param setPojoData
|
|
|
* @param changeRollNum
|
|
|
+ * @param type 1:加法 -1:减法
|
|
|
* @return
|
|
|
*/
|
|
|
public void calculateAboutRollNum(ApsProcessOperationOutMaterDo materDo,
|
|
|
Function<ApsProcessOperationOutMaterDo, Integer> getPojoData,
|
|
|
BiConsumer<ApsProcessOperationOutMaterDo, Integer> setPojoData,
|
|
|
- int changeRollNum) {
|
|
|
- setPojoData.accept(materDo, getPojoData.apply(materDo) + changeRollNum);
|
|
|
+ int changeRollNum,
|
|
|
+ int type) {
|
|
|
+ if (1 == type) {
|
|
|
+ setPojoData.accept(materDo, getPojoData.apply(materDo) + changeRollNum);
|
|
|
+ } else {
|
|
|
+ setPojoData.accept(materDo, getPojoData.apply(materDo) - changeRollNum);
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
/**
|