|
@@ -1897,6 +1897,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
blankUpdateWrapper.set(ApsBlankOrderDo::getBlankappearance, apsBlankOrderDo.getBlankappearance());
|
|
|
blankUpdateWrapper.set(ApsBlankOrderDo::getMaxheatroll, apsBlankOrderDo.getMaxheatroll());
|
|
|
blankUpdateWrapper.set(ApsBlankOrderDo::getBlankcomefrom, apsBlankOrderDo.getBlankcomefrom());
|
|
|
+ blankUpdateWrapper.set(ApsBlankOrderDo::getIssubmitprocessroute, apsBlankOrderDo.getIssubmitprocessroute());
|
|
|
|
|
|
this.update(blankUpdateWrapper);
|
|
|
} else {
|
|
@@ -2085,6 +2086,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
/**
|
|
|
* 如果有评审日志,并且变更内容为空,则错误提示:请填写变更内容(暂未实现)
|
|
|
* 如果有任一坯料计划的承诺交货期-起或止为空,错误提示:请填写所有坯料计划的承诺交货期
|
|
|
+ * 如果有坯料计划的承诺交货期-起<排程交货期-起,错误提示:第{几}个坯料计划的承诺交货期-起不能早于排程交货期-起{排程交货期}
|
|
|
* 如果有坯料计划的承诺交货期-止 < 排程交货期,错误提示:第{几}个坯料计划的承诺交货期-止不能早于排程交货期{排程交货期}
|
|
|
*/
|
|
|
if (req.getCheckDevice()) {
|
|
@@ -2094,6 +2096,9 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
if (ObjectUtil.isEmpty(apsBlankOrderDo.getScheduledateend())) {
|
|
|
return R.error("第" + j + "个坯料计划 排程交货期-止不能为空");
|
|
|
}
|
|
|
+ if (apsBlankOrderDo.getPromisedatestart().compareTo(apsBlankOrderDo.getScheduledatestart()) < 0) {
|
|
|
+ return R.error("第" + j + "个坯料计划的承诺交货期-起不能早于排程交货期-起" + DateUtil.format(apsBlankOrderDo.getScheduledatestart(), "yyyy-MM-dd"));
|
|
|
+ }
|
|
|
if (apsBlankOrderDo.getPromisedateend().compareTo(apsBlankOrderDo.getScheduledateend()) < 0) {
|
|
|
return R.error("第" + j + "个坯料计划的承诺交货期-止不能早于排程交货期-止" + DateUtil.format(apsBlankOrderDo.getScheduledateend(), "yyyy-MM-dd"));
|
|
|
}
|
|
@@ -2964,4 +2969,151 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
processLoadingMap.put(lastProcessId, processLoading);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public R addMaterial(AddMaterialReq req) {
|
|
|
+ if (ObjectUtil.isEmpty(req.getBatchNumbers())) {
|
|
|
+ return R.error("批次号不可为空");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isEmpty(req.getBlankId())) {
|
|
|
+ return R.error("坯料计划ID为空");
|
|
|
+ }
|
|
|
+ if (ObjectUtil.isEmpty(req.getProcessId())) {
|
|
|
+ return R.error("坯料计划第一道工序作业的ID为空");
|
|
|
+ }
|
|
|
+ //分割批次号
|
|
|
+ List<String> batchNumberList = Arrays.asList(req.getBatchNumbers().split(","));
|
|
|
+ //查询坯料计划详情
|
|
|
+ ApsBlankOrderDo apsBlankOrderDo = apsBlankOrderService.getById(req.getBlankId());
|
|
|
+ //如果坯料类型=热轧,检查每个批次号
|
|
|
+ //如果批次号不是9位数,则错误提示:热轧坯料批次号{批次号}错误,应该是9位
|
|
|
+ if (apsBlankOrderDo.getBlanktype().equals("热轧")) {
|
|
|
+ for (String s : batchNumberList) {
|
|
|
+ if (s.length() != 9) {
|
|
|
+ return R.error("热轧坯料批次号" + s + "错误,应该是9位");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //原来的批次号
|
|
|
+ String oldBatchNumbers = req.getOldBatchNumbers();
|
|
|
+ LinkedList<String> oldBatchNumberList = new LinkedList<>();
|
|
|
+ if (ObjectUtil.isNotEmpty(oldBatchNumbers)) {
|
|
|
+ oldBatchNumberList = new LinkedList<>(Arrays.asList(oldBatchNumbers.split(",")));
|
|
|
+ }
|
|
|
+
|
|
|
+ //新的批次号集合
|
|
|
+ List<String> addBatchNumberList = new LinkedList<>();
|
|
|
+ //删除的批次号集合
|
|
|
+ List<String> delBatchNumberList = new LinkedList<>();
|
|
|
+
|
|
|
+ for (String s : oldBatchNumberList) {
|
|
|
+ if (!batchNumberList.contains(s)) {
|
|
|
+ delBatchNumberList.add(s);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ for (String s : batchNumberList) {
|
|
|
+ if (!oldBatchNumberList.contains(s)) {
|
|
|
+ addBatchNumberList.add(s);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 如果坯料类型=铸轧,检查每个批次号
|
|
|
+ * 如果该批次号物料在制品库存中没找到,则错误提示:批次号{批次号}错误
|
|
|
+ * 如果在制品备料计划ID不为空,并且不等于该坯料计划ID,错误提示:该坯料已经被其他坯料计划领料
|
|
|
+ * 如果在制品状态=待加工或加工中或待检验,错误提示:批次号{批次号}错误,该料卷在加工中
|
|
|
+ * 如果在制品状态=待入库或已入库或已出库,并且订单号对应订单的客户的客户类型不是内部客户,错误提示:批次号{批次号}错误,该料卷是其他客户订单的成品
|
|
|
+ * 如果在制品状态=备料中,并且在制品类型=不良在制品,错误提示:批次号{批次号}错误,该料卷检验不合格
|
|
|
+ * 查找该批次号物料=在制品的作业输出物料ID对应输出物料
|
|
|
+ * 如果{该批次号物料的输入物料描述}与{坯料的输入物料描述}不相同,
|
|
|
+ * 错误提示:该批次号{批次号}物料:{该批次号物料的输入物料描述}不是该坯料计划所需的坯料{坯料的输入物料描述}
|
|
|
+ */
|
|
|
+ //如果坯料类型=铸轧,检查每个批次号
|
|
|
+ if (apsBlankOrderDo.getBlanktype().equals("铸轧")) {
|
|
|
+ List<ApsWorkInProgressInventoryDo> workInProgressInventoryDos =
|
|
|
+ apsWorkInProgressInventoryService.list(new QueryWrapper<ApsWorkInProgressInventoryDo>().lambda()
|
|
|
+ .eq(ApsWorkInProgressInventoryDo::getDeleted, "0")
|
|
|
+ .in(ApsWorkInProgressInventoryDo::getBatchnumber, addBatchNumberList));
|
|
|
+ for (String s : addBatchNumberList) {
|
|
|
+ //如果该批次号物料在制品库存中没找到,则错误提示:批次号{批次号}错误
|
|
|
+ ApsWorkInProgressInventoryDo apsWorkInProgressInventoryDo = workInProgressInventoryDos.stream().filter(item -> item.getBatchnumber().equals(s)).findFirst().orElse(null);
|
|
|
+ if (ObjectUtil.isEmpty(apsWorkInProgressInventoryDo)) {
|
|
|
+ return R.error("批次号" + s + "错误");
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果在制品备料计划ID不为空,并且不等于该坯料计划ID,错误提示:该坯料已经被其他坯料计划领料
|
|
|
+ if (ObjectUtil.isNotEmpty(apsWorkInProgressInventoryDo.getPlanmaterialid())
|
|
|
+ && !apsWorkInProgressInventoryDo.getPlanmaterialid().equals(req.getBlankId())) {
|
|
|
+ ApsBlankOrderDo blankOrderDo = apsBlankOrderService.getById(apsWorkInProgressInventoryDo.getPlanmaterialid());
|
|
|
+ return R.error("该坯料已经被坯料计划" + blankOrderDo.getBlanknumber() + "领料");
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果在制品状态=待加工或加工中或待检验,错误提示:批次号{批次号}错误,该料卷在加工中
|
|
|
+ if (Arrays.asList("待加工", "加工中", "待检验").contains(apsWorkInProgressInventoryDo.getWorkinprocessstatus())) {
|
|
|
+ return R.error("批次号" + s + "错误,该料卷在加工中");
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果在制品状态=备料中、待入库或已入库或已出库,并且订单号对应订单的客户的客户类型不是内部客户,错误提示:批次号{批次号}错误,该料卷是其他客户订单的成品
|
|
|
+ if (Arrays.asList("备料中", "待入库", "已入库", "已出库").contains(apsWorkInProgressInventoryDo.getWorkinprocessstatus())) {
|
|
|
+ ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(apsWorkInProgressInventoryDo.getProcessoperationid());
|
|
|
+ ApsBlankOrderDo blankOrderDo = apsBlankOrderService.getById(apsProcessOperationDo.getBlankid());
|
|
|
+ ApsProductionOrderDo apsProductionOrderDo = apsProductionOrderService.getById(blankOrderDo.getProductionorderid());
|
|
|
+
|
|
|
+ if (ObjectUtil.isNotEmpty(apsProductionOrderDo) && apsProductionOrderDo.getOrdertype().equals("客户订单")) {
|
|
|
+ return R.error("批次号" + s + "错误,该料卷是其他客户订单的成品");
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ //如果在制品类型=不良在制品,错误提示:批次号{批次号}错误,该料卷检验不合格
|
|
|
+ if (apsWorkInProgressInventoryDo.getWorkinprocesstype().equals("不良在制品")) {
|
|
|
+ return R.error("批次号" + s + "错误,该料卷检验不合格");
|
|
|
+ }
|
|
|
+
|
|
|
+ //查找该批次号物料=在制品的作业输出物料ID对应输出物料
|
|
|
+ //如果{该批次号物料的输入物料描述}与{坯料的输入物料描述}不相同,
|
|
|
+ //错误提示:该批次号{批次号}物料:{该批次号物料的输入物料描述}不是该坯料计划所需的坯料{坯料的输入物料描述}
|
|
|
+
|
|
|
+ String joboutputmaterialid = apsWorkInProgressInventoryDo.getJoboutputmaterialid();
|
|
|
+ ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo = apsProcessOperationOutMaterService.getById(joboutputmaterialid);
|
|
|
+ String s1 = apsProcessOperationOutMaterDo.getOutputfinishproduct().split(" ")[0];
|
|
|
+ String s2 = apsBlankOrderDo.getInputreportdescribe();
|
|
|
+ if (!s1.equals(s2)) {
|
|
|
+ return R.error("该批次号" + s + "物料:" + s1 + "不是该坯料计划所需的坯料" + s2 + "");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 检验通过,
|
|
|
+ * 原批次号(修改前的值),对应的所有在制品的在制品状态=备料中,在制品的备料计划ID=(空)
|
|
|
+ * 更新坯料计划的第一道工序作业的所有工序作业明细的待加工料卷批次号=领料批次号逗号拼接
|
|
|
+ * 在制品的在制品状态=待加工
|
|
|
+ * 在制品的备料计划ID=该坯料计划ID
|
|
|
+ */
|
|
|
+ //原批次号(修改前的值),对应的所有在制品的在制品状态=备料中,在制品的备料计划ID=(空)
|
|
|
+ apsWorkInProgressInventoryService.update(new UpdateWrapper<ApsWorkInProgressInventoryDo>().lambda()
|
|
|
+ .set(ApsWorkInProgressInventoryDo::getPlanmaterialid, null)
|
|
|
+ .set(ApsWorkInProgressInventoryDo::getWorkinprocessstatus, "备料中")
|
|
|
+ .eq(ApsWorkInProgressInventoryDo::getDeleted, "0")
|
|
|
+ .in(ApsWorkInProgressInventoryDo::getBatchnumber, delBatchNumberList));
|
|
|
+
|
|
|
+ //更新坯料计划的第一道工序作业的所有工序作业明细的待加工料卷批次号=领料批次号逗号拼接
|
|
|
+ apsProcessOperationProcessEquService.update(new UpdateWrapper<ApsProcessOperationProcessEquDo>().lambda()
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getBachmaterialprocess, String.join(",", batchNumberList))
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getDeleted, "0")
|
|
|
+ .eq(ApsProcessOperationProcessEquDo::getProcessid, req.getProcessId()));
|
|
|
+
|
|
|
+ //在制品的在制品状态=待加工
|
|
|
+ //在制品的备料计划ID=该坯料计划ID
|
|
|
+ apsWorkInProgressInventoryService.update(new UpdateWrapper<ApsWorkInProgressInventoryDo>().lambda()
|
|
|
+ .set(ApsWorkInProgressInventoryDo::getPlanmaterialid, req.getBlankId())
|
|
|
+ .set(ApsWorkInProgressInventoryDo::getWorkinprocessstatus, "待加工")
|
|
|
+ .eq(ApsWorkInProgressInventoryDo::getDeleted, "0")
|
|
|
+ .in(ApsWorkInProgressInventoryDo::getBatchnumber, addBatchNumberList));
|
|
|
+
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
}
|