Bläddra i källkod

aps-坯料计划增加是否提交工艺路线字段

sucheng 10 månader sedan
förälder
incheckning
e25bdd0c4d

+ 2 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsBlankOrderService.java

@@ -60,4 +60,6 @@ public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
 
     //插单重新排程
     void insertSchedule(Map<String, Object> params);
+
+    R addMaterial(AddMaterialReq req);
 }

+ 148 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java

@@ -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 {
@@ -2968,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();
+    }
 }

+ 5 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsBlankOrderDo.java

@@ -302,5 +302,10 @@ public class ApsBlankOrderDo extends BaseDo {
      */
     @TableField("EXPECTEDDAYS")
     private Integer expecteddays;
+    /**
+     * 是否提交工艺路线
+     */
+    @TableField("ISSUBMITPROCESSROUTE")
+    private Integer issubmitprocessroute;
 
 }

+ 23 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/AddMaterialReq.java

@@ -0,0 +1,23 @@
+package com.rongwei.bsentity.vo;
+
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2024/9/19
+ */
+@Data
+public class AddMaterialReq {
+    //批次号 多个英文逗号隔开
+    private String batchNumbers;
+
+    //坯料计划ID
+    private String blankId;
+
+    //旧的批次号
+    private String oldBatchNumbers;
+
+    //坯料计划第一道工序作业的ID
+    private String processId;
+
+}

+ 10 - 4
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsBlankOrderController.java

@@ -5,10 +5,7 @@ import com.rongwei.bscommon.sys.service.ApsBlankOrderService;
 import com.rongwei.bscommon.sys.service.ApsService;
 import com.rongwei.bsentity.domain.ApsBlankOrderDo;
 import com.rongwei.bsentity.domain.ApsProductionTechnicalRequirementDo;
-import com.rongwei.bsentity.vo.ApsPlanVo;
-import com.rongwei.bsentity.vo.CheckAndSaveOrUpdateBlankReq;
-import com.rongwei.bsentity.vo.CheckScheduleReq;
-import com.rongwei.bsentity.vo.OrderLockVo;
+import com.rongwei.bsentity.vo.*;
 import com.rongwei.rwcommon.base.R;
 import com.rongwei.rwcommon.vo.CriteriaQuery;
 import lombok.extern.slf4j.Slf4j;
@@ -200,5 +197,14 @@ public class ApsBlankOrderController {
         log.info("生产计划跟踪报表,入参为:{}", req);
         return apsBlankOrderService.productPlanReport(req);
     }
+
+    /**
+     * 领料
+     */
+    @PostMapping("/addMaterial")
+    public R addMaterial(@RequestBody AddMaterialReq req){
+        log.info("领料 入参:{}", req);
+        return apsBlankOrderService.addMaterial(req);
+    }
 }