Преглед на файлове

aps-订单评审-坯料计划保存校验,校验工序作业

sucheng преди 1 година
родител
ревизия
c3baea1c20

+ 4 - 0
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProcessOperationDao.java

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwei.bsentity.domain.ApsProcessOperationDo;
+import com.rongwei.bsentity.vo.ApsProcessOperationAndMaterialVo;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
 import org.apache.ibatis.annotations.Update;
@@ -39,4 +40,7 @@ public interface ApsProcessOperationDao extends BaseMapper<ApsProcessOperationDo
 
     @Select("select MAINID,GROUP_CONCAT(EQUIPMENTID) as EQUIDS from aps_resources_equipment where DELETED='0' group by MAINID")
     List<Map<String, Object>> getEquGroupIds();
+
+    @Select("select apo.*,apoom.ID AS 'outputMaterialId',apoom.OUTPUTMATERIAL AS 'outputMaterial',apoom.PLANROLLNUM AS 'planRollNum',apoom.PLANSTOCKROLLNUM AS 'planStockRollNum',apoom.PLANPRODROLLNUM AS 'planProdRollNum' from aps_process_operation apo LEFT JOIN aps_process_operation_out_mater apoom ON apoom.MAINID = apo.ID AND apoom.DELETED = 0 where apo.DELETED = 0 AND apo.BLANKID = #{blankId}")
+    List<ApsProcessOperationAndMaterialVo> selectOperationAndMaterialByBlankId(@Param("blankId") String blankId);
 }

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

@@ -25,4 +25,7 @@ public interface ApsProcessOperationService extends IService<ApsProcessOperation
     清除工艺路线
      */
     void clearCraftRoute(Map<String, Object> params);
+
+    R checkOperation(Map<String, Object> params);
+
 }

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

@@ -1,11 +1,14 @@
 package com.rongwei.bscommon.sys.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.json.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.rongwei.bscommon.sys.dao.ApsProcessOperationDao;
 import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bsentity.domain.*;
+import com.rongwei.bsentity.vo.ApsProcessOperationAndMaterialVo;
 import com.rongwei.bsentity.vo.PreviousProcessVo;
 import com.rongwei.commonservice.service.SysMindMappingService;
 import com.rongwei.rwcommon.base.R;
@@ -455,6 +458,62 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
         apsProcessOperationDao.updateSysMindMapping(blankid);
     }
 
+    @Override
+    public R checkOperation(Map<String, Object> params) {
+        String blankId;
+        try {
+            blankId = params.get("BLANKID").toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("请输入正确的坯料计划ID");
+        }
+        //查询坯料计划对应的工序作业
+        List<ApsProcessOperationDo> apsProcessOperationList = this.baseMapper.selectList(new QueryWrapper<ApsProcessOperationDo>().lambda().eq(ApsProcessOperationDo::getBlankid, blankId));
+        //查询坯料计划对应的输出物料
+        List<ApsProcessOperationOutMaterDo> apsProcessOperationOutMaterList = apsProcessOperationOutMaterService.getBaseMapper().selectList(new QueryWrapper<ApsProcessOperationOutMaterDo>().lambda().eq(ApsProcessOperationOutMaterDo::getBlankid, blankId));
+
+        //如果有前道工序作业,并且该工序输入物料ID不是前道工序作业的输出物料ID,错误提示:{工序}{工序显示名}的输入物料不存在,请重新选择
+
+        //遍历工序作业
+        for (ApsProcessOperationDo apsProcessOperationDo : apsProcessOperationList) {
+            //如果有前道工序
+            if (ObjectUtil.isNotEmpty(apsProcessOperationDo.getPreviousprocessid())) {
+                //获取当前工序的输入物料ID
+                String planInputId = apsProcessOperationDo.getPlaninputid();
+
+                //获取前道工序的输出物料的ID list
+                List<String> previousProcessOutMaterialIdList = apsProcessOperationOutMaterList.stream().filter(item -> item.getMainid().equals(apsProcessOperationDo.getPreviousprocessid())).map(ApsProcessOperationOutMaterDo::getId).collect(Collectors.toList());
+                //该工序输入物料ID不是前道工序作业的输出物料ID
+                if (!previousProcessOutMaterialIdList.contains(planInputId)) {
+                    return R.error(apsProcessOperationDo.getProcess() + apsProcessOperationDo.getProcessname() + "的输入物料不存在,请重新选择");
+                }
+            }
+        }
+
+        //检查该工序作业所有输出物料,如果(计划输出卷数-计划备料卷数-计划成品卷数)不等于所有后道工序作业计划加工卷数合计;错误提示:{工序}{工序显示名}的{输出物料} 计划输出卷数-计划备料卷数-计划成品卷数必须等于所有后道工序作业计划加工卷数合计
+        //遍历输出物料
+        for (ApsProcessOperationOutMaterDo apsProcessOperationOutMaterDo : apsProcessOperationOutMaterList) {
+            //查询使用此输出物料的工序作业
+            List<ApsProcessOperationDo> processList = apsProcessOperationList.stream().filter(item -> ObjectUtil.isNotEmpty(item.getPlaninputid()) && item.getPlaninputid().equals(apsProcessOperationOutMaterDo.getId())).collect(Collectors.toList());
+            if (processList.size() > 0) {
+                //遍历工序作业,计算 计划加工卷数合计
+                int planProcessRollAll = 0;
+                for (ApsProcessOperationDo apsProcessOperationDo : processList) {
+                    planProcessRollAll += apsProcessOperationDo.getPlanprocessrall();
+                }
+                //计算输出物料的 (计划输出卷数-计划备料卷数-计划成品卷数)值
+                int outputRollAll = apsProcessOperationOutMaterDo.getPlanrollnum() - apsProcessOperationOutMaterDo.getPlanstockrollnum() - apsProcessOperationOutMaterDo.getPlanprodrollnum();
+                if (planProcessRollAll != outputRollAll) {
+                    //根据输出物料查询其工序信息
+                    ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationList.stream().filter(item -> item.getId().equals(apsProcessOperationOutMaterDo.getMainid())).findFirst().get();
+                    return R.error(apsProcessOperationDo.getProcess() + apsProcessOperationDo.getProcessname() + "的" + apsProcessOperationOutMaterDo.getOutputmaterial() + " 计划输出卷数-计划备料卷数-计划成品卷数必须等于所有后道工序作业计划加工卷数合计");
+                }
+            }
+        }
+        return R.ok();
+
+    }
+
     /*
     工艺步骤管理/输入物料描述
      */

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

@@ -9,7 +9,7 @@ import lombok.EqualsAndHashCode;
 import lombok.experimental.Accessors;
 
 import java.math.BigDecimal;
-import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * <p>
@@ -322,25 +322,25 @@ public class ApsProcessOperationDo extends BaseDo {
      * 计划开工时间
      */
     @TableField("PLANSTARTDATE")
-    private LocalDateTime planstartdate;
+    private Date planstartdate;
 
     /**
      * 实际开工时间
      */
     @TableField("ACTUALSTARTDATE")
-    private LocalDateTime actualstartdate;
+    private Date actualstartdate;
 
     /**
      * 计划完工时间
      */
     @TableField("PLANENDDATE")
-    private LocalDateTime planenddate;
+    private Date planenddate;
 
     /**
      * 实际完工时间
      */
     @TableField("ACTUALFINISHDATE")
-    private LocalDateTime actualfinishdate;
+    private Date actualfinishdate;
 
     /**
      * 实际可输入卷数

+ 28 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/ApsProcessOperationAndMaterialVo.java

@@ -0,0 +1,28 @@
+package com.rongwei.bsentity.vo;
+
+import com.rongwei.bsentity.domain.ApsProcessOperationDo;
+import lombok.Data;
+
+/**
+ * @author :sc
+ * @since :2024/3/26
+ */
+@Data
+public class ApsProcessOperationAndMaterialVo extends ApsProcessOperationDo {
+    //物料主键ID
+    private String outputMaterialId;
+
+    //物料名
+    private String outputMaterial;
+
+    //计划输出卷数
+    private Integer planRollNum;
+
+    //计划备料卷数
+    private Integer planStockRollNum;
+
+    //计划成品卷数
+    private Integer planProdRollNum;
+
+
+}

+ 10 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsProcessOperationController.java

@@ -57,5 +57,15 @@ public class ApsProcessOperationController {
             log.info("清除工艺路线异常:" + e.getMessage());
         }
     }
+
+    /**
+     * 校验工序作业
+     * 检查该工序作业所有输出物料,如果(计划输出卷数-计划备料卷数-计划成品卷数)不等于所有后道工序作业计划加工卷数合计;错误提示:{工序}{工序显示名}的{输出物料} 计划输出卷数-计划备料卷数-计划成品卷数必须等于所有后道工序作业计划加工卷数合计;
+     */
+    @PostMapping("/checkOperation")
+    public R checkOperation(@RequestBody Map<String, Object> params) {
+        log.info("校验工序作业;参数为:{}", params);
+        return apsProcessOperationService.checkOperation(params);
+    }
 }