Procházet zdrojové kódy

aps借调更新工序逻辑

sucheng před 1 rokem
rodič
revize
f5b9fecd2f

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

@@ -2,6 +2,7 @@ package com.rongwei.bscommon.sys.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo;
+import com.rongwei.bsentity.domain.ApsProductDetailDo;
 import com.rongwei.bsentity.vo.CommonUpdateProductionStatusReq;
 import com.rongwei.bsentity.vo.GanttVos;
 import com.rongwei.bsentity.vo.ProcessIdRelationVo;
@@ -58,6 +59,8 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
 
     @Update("update asp_check_items set WAITREPORTID = null where ID = #{deviceId}")
     void updateEquByCancelRecord(@Param("deviceId") String deviceId);
+
+    List<ApsProductDetailDo> selectNeedUpdate(@Param("productIdList") List<String> productIdList);
 }
 
 

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

@@ -12,4 +12,6 @@ public interface ApsProcessOperationProcessEquService extends IService<ApsProces
 
     R updateProductionStatus(CommonUpdateProductionStatusReq request);
 
+    String updateProcessByProcessEquId(String processOperationEquId);
+
 }

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

@@ -36,4 +36,6 @@ public interface ApsProcessOperationService extends IService<ApsProcessOperation
     更新后面所有工序信息
      */
     List<ApsProcessOperationOutMaterDo> resetProcessOperation(List<ApsProcessOperationOutMaterDo> apsProcessOperationOutMaterDoList);
+
+    R updateBorrowProcess(Map<String, Object> params);
 }

+ 73 - 12
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProcessOperationProcessEquServiceImpl.java

@@ -1,19 +1,14 @@
 package com.rongwei.bscommon.sys.service.impl;
 
 import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.rongwei.bscommon.sys.dao.ApsProcessOperationDao;
 import com.rongwei.bscommon.sys.dao.ApsProcessOperationProcessEquDao;
-import com.rongwei.bscommon.sys.service.ApsBlankOrderService;
-import com.rongwei.bscommon.sys.service.ApsProcessOperationProcessEquService;
-import com.rongwei.bscommon.sys.service.ApsProcessOperationService;
-import com.rongwei.bscommon.sys.service.ApsProductionOrderService;
-import com.rongwei.bsentity.domain.ApsBlankOrderDo;
-import com.rongwei.bsentity.domain.ApsProcessOperationDo;
-import com.rongwei.bsentity.domain.ApsProcessOperationProcessEquDo;
-
-import com.rongwei.bsentity.domain.ApsProductionOrderDo;
+import com.rongwei.bscommon.sys.service.*;
+import com.rongwei.bsentity.domain.*;
+
 import com.rongwei.bsentity.vo.CommonUpdateProductionStatusReq;
 import com.rongwei.bsentity.vo.ProcessIdRelationVo;
 import com.rongwei.rwcommon.base.R;
@@ -24,7 +19,9 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
 import javax.annotation.Resource;
+import java.util.LinkedList;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  *
@@ -41,6 +38,8 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     private ApsBlankOrderService apsBlankOrderService;
     @Autowired
     private ApsProductionOrderService apsProductionOrderService;
+    @Autowired
+    private ApsProductDetailService apsProductDetailService;
 
     /**
      * 更新工序的待加工批次号信息
@@ -88,12 +87,16 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     public R updateProductionStatus(CommonUpdateProductionStatusReq request) {
 
         //根据粒度顺序
+        //作业明细->工序作业
         if (ObjectUtil.isNotEmpty(request.getProcessOperationEquId())) {
             updateProcess(request.getProcessOperationEquId());
         }
+        //工序作业->坯料计划
+        //工序作业->订单
         if (ObjectUtil.isNotEmpty(request.getProcessOperationId())) {
             updateBlank(request.getProcessOperationId());
         }
+        //坯料计划->产品明细
         if (ObjectUtil.isNotEmpty(request.getBlankId())) {
             updateOrder(request.getBlankId());
         }
@@ -104,10 +107,25 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
     }
 
     private void updateProcess(String processOperationEquId) {
+        String processOperationId = updateProcessByProcessEquId(processOperationEquId);
+
+        if(ObjectUtil.isEmpty(processOperationId)){
+            return;
+        }
+
+        //更新坯料计划
+        updateBlank(processOperationId);
+    }
+
+    /**
+     * 从作业明细表中的任意一个子表ID开始,自动计算更新工序作业的状态,完成后返回其中一个工序作业的ID(不一定要用)
+     * @param processOperationEquId
+     */
+    public String updateProcessByProcessEquId(String processOperationEquId) {
         //查询所有子表明细的最小生产状态和工序作业ID
         CommonUpdateProductionStatusReq one = this.baseMapper.selectEquMinStatus(processOperationEquId);
         if(ObjectUtil.isEmpty(one)){
-            return;
+            return "";
         }
         //工序作业ID
         String processId = one.getProcessOperationId();
@@ -158,8 +176,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         apsProcessOperationDo.setId(processId);
         apsProcessOperationService.updateById(apsProcessOperationDo);
 
-        //更新坯料计划
-        updateBlank(one.getProcessOperationId());
+        return one.getProcessOperationId();
     }
 
     private void updateBlank(String processOperationId) {
@@ -174,6 +191,41 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         apsBlankOrderDo.setProductstatus(two.getProductionStatus());
         apsBlankOrderService.updateById(apsBlankOrderDo);
 
+        //更新产品明细的生产状态
+        //查询订单的所有产品明细
+        //订单ID
+        String orderId = two.getOrderId();
+        List<ApsProductDetailDo> list = apsProductDetailService.list(new QueryWrapper<ApsProductDetailDo>().lambda().eq(ApsProductDetailDo::getMainid, orderId));
+        if(list.size() > 0) {
+            List<String> productIdList = list.stream().map(ApsProductDetailDo::getId).collect(Collectors.toList());
+            //查找产品的最新坯料状态
+            List<ApsProductDetailDo> productDetailDoList = apsProcessOperationProcessEquDao.selectNeedUpdate(productIdList);
+            //需要更新的数组
+            List<ApsProductDetailDo> needUpdateList = new LinkedList<>();
+
+            for (ApsProductDetailDo apsProductDetailDo : productDetailDoList) {
+                //对比当前生产状态判断是否需要更新
+                for (ApsProductDetailDo productDetailDo : list) {
+                    //同一产品明细
+                    if(apsProductDetailDo.getId().equals(productDetailDo.getId())){
+                        //比较状态
+                        if(!apsProductDetailDo.getProductstatus().equals(productDetailDo.getProductstatus())){
+                            //不相等则更新
+                            ApsProductDetailDo needUpdate = new ApsProductDetailDo();
+                            needUpdate.setId(apsProductDetailDo.getId());
+                            needUpdate.setProductstatus(apsProductDetailDo.getProductstatus());
+
+                            needUpdateList.add(needUpdate);
+                        }
+                    }
+                }
+            }
+
+            if(needUpdateList.size()>0){
+                apsProductDetailService.updateBatchById(needUpdateList);
+            }
+        }
+
         //更新订单
         updateOrder(two.getBlankId());
     }
@@ -188,6 +240,15 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         ApsProductionOrderDo apsProductionOrderDo = new ApsProductionOrderDo();
         apsProductionOrderDo.setId(three.getOrderId());
         apsProductionOrderDo.setProductionstatus(three.getProductionStatus());
+        if(three.getProductionStatus().equals("10")){
+            apsProductionOrderDo.setSchedulstatus("待排程");
+        }
+        if(three.getProductionStatus().equals("20")){
+            apsProductionOrderDo.setSchedulstatus("待发布");
+        }
+        if("30,40,50".contains(three.getProductionStatus())){
+            apsProductionOrderDo.setSchedulstatus("已发布");
+        }
         apsProductionOrderService.updateById(apsProductionOrderDo);
     }
 }

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

@@ -58,6 +58,10 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
     @Autowired
     SysMindMappingService sysMindMappingService;
 
+    @Autowired
+    private ApsProcessOperationProcessEquService apsProcessOperationProcessEquService;
+
+
     private final static Map<String, String> UNIT_MAP = new HashMap<String, String>() {{
         put("kg", "公斤");
         put("ton", "吨");
@@ -675,6 +679,121 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
         }
     }
 
+    @Override
+    public R updateBorrowProcess(Map<String, Object> params) {
+        String processId;
+        try {
+            processId = params.get("processId").toString();
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("入参有误");
+        }
+
+        //迭代更新当前工序作业及其所有后续工序
+        updateProcessByProcessId(processId);
+
+        return R.ok();
+    }
+
+    //根据工序ID更新,明细和工序的状态
+    private void updateProcessByProcessId(String processId) {
+        //=============迭代开始,更新当前工序及其明细==================
+
+        //查询当前工序作业详情
+        ApsProcessOperationDo apsProcessOperationDo = apsProcessOperationService.getById(processId);
+
+        //查询上道工序作业详情
+        ApsProcessOperationDo previousProcessOperation = apsProcessOperationService.getById(apsProcessOperationDo.getPreviousprocessid());
+
+
+        //查询当前工序的所有作业明细
+        List<ApsProcessOperationProcessEquDo> list = apsProcessOperationProcessEquService.list(new QueryWrapper<ApsProcessOperationProcessEquDo>().lambda().eq(ApsProcessOperationProcessEquDo::getProcessid, processId));
+
+        //所有需要更新的工序作业明细
+        List<ApsProcessOperationProcessEquDo> needUpdateProcessEquList = new LinkedList<>();
+
+        //获取任一作业明细的ID,用于更新工序作业
+        String processOperationProcessEquId = "";
+        //遍历作业明细
+        for (ApsProcessOperationProcessEquDo apsProcessOperationProcessEquDo : list) {
+            if(ObjectUtil.isEmpty(processOperationProcessEquId)){
+                processOperationProcessEquId = apsProcessOperationProcessEquDo.getId();
+            }
+
+
+            //创建待更新对象
+            ApsProcessOperationProcessEquDo needUpdate = new ApsProcessOperationProcessEquDo();
+            needUpdate.setId(apsProcessOperationProcessEquDo.getId());
+
+            /**
+             * 完工状态
+             * 如果未完工卷数=0,
+             * 或者(有上道工序作业,并且上道工序作业已完工状态=已完工,并且作业明细待加工料卷批次号数量-工序作业已取消卷数<=0,并且已开工卷数=已检验卷数),则=已完工
+             * 如果未完工卷数>0,并且(没有上道工序作业,或者上道工序作业已完工状态=未完工,或者作业明细待加工料卷批次号数量-工序作业已取消卷数>0,或者已开工卷数不等于已检验卷数),则=未完工
+             */
+            //先判断未完工卷数
+
+            Integer unfinishroll = apsProcessOperationProcessEquDo.getUnfinishroll();
+            if (unfinishroll == 0) {
+                needUpdate.setClosestatus("已完工");
+            }
+            //有上道工序作业 && 上道工序作业已完工状态=已完工 && 作业明细待加工料卷批次号数量-工序作业已取消卷数<=0 && 已开工卷数=已检验卷数
+            if (ObjectUtil.isNotEmpty(apsProcessOperationDo.getPreviousprocessid())
+                    && previousProcessOperation.getClosestatus().equals("已完工")
+                    && (apsProcessOperationProcessEquDo.getBachmaterialprocess().split(",").length - apsProcessOperationDo.getCancelroll()) <= 0
+                    && apsProcessOperationProcessEquDo.getStartingroll().equals(apsProcessOperationProcessEquDo.getCheckoutroll())) {
+                needUpdate.setClosestatus("已完工");
+            }
+            if (unfinishroll > 0) {
+                //没有上道工序作业 || 上道工序作业已完工状态=未完工 || 作业明细待加工料卷批次号数量-工序作业已取消卷数>0 || 已开工卷数不等于已检验卷数
+                if (ObjectUtil.isEmpty(apsProcessOperationDo.getPreviousprocessid())
+                        || previousProcessOperation.getClosestatus().equals("未完工")
+                        && (apsProcessOperationProcessEquDo.getBachmaterialprocess().split(",").length - apsProcessOperationDo.getCancelroll()) > 0
+                        && !apsProcessOperationProcessEquDo.getStartingroll().equals(apsProcessOperationProcessEquDo.getCheckoutroll())) {
+                    needUpdate.setClosestatus("未完工");
+                }
+            }
+
+            //作业状态
+            /**
+             * 如果已开工卷数=0,则=待开工;
+             * 如果已开工卷数>0,并且完工状态=未完工,则=加工中;(先更新完工状态)
+             * 如果未完工卷数=0,并且完工状态=已完工,则=已完工(先更新完工状态)
+             */
+            if (apsProcessOperationProcessEquDo.getStartingroll() == 0) {
+                needUpdate.setWorkstatus("待开工");
+            }
+            if (apsProcessOperationProcessEquDo.getStartingroll() > 0 && needUpdate.getClosestatus().equals("未完工")) {
+                needUpdate.setWorkstatus("加工中");
+            }
+            if (apsProcessOperationProcessEquDo.getUnfinishroll() == 0 && needUpdate.getClosestatus().equals("已完工")) {
+                needUpdate.setWorkstatus("已完工");
+            }
+
+            needUpdateProcessEquList.add(needUpdate);
+
+        }
+        //更新
+        apsProcessOperationProcessEquService.updateBatchById(needUpdateProcessEquList);
+        //================作业明细更新完毕===================
+
+        if (ObjectUtil.isNotEmpty(processOperationProcessEquId)) {
+            //更新工序作业
+            apsProcessOperationProcessEquService.updateProcessByProcessEquId(processOperationProcessEquId);
+        }
+
+        //===============当前工序及其明细更新完毕===============
+        //===============判断是否存在下道工序,如果有,则继续更新工序,开始迭代,没有则结束迭代=================
+        if(ObjectUtil.isNotEmpty(apsProcessOperationDo.getNextprocessid())){
+            String[] nextProcessIdList = apsProcessOperationDo.getNextprocessid().split(",");
+            for (String nextProcessId : nextProcessIdList) {
+                updateProcessByProcessId(nextProcessId);
+            }
+        }else {
+            return;
+        }
+    }
+
     /*
     工艺步骤管理/输入物料描述
      */

+ 20 - 0
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -190,6 +190,26 @@
         </where>
         order by a1.PLANSTARTDATE asc,a1.PLANENDDATE asc
     </select>
+    <select id="selectNeedUpdate" resultType="com.rongwei.bsentity.domain.ApsProductDetailDo">
+        SELECT
+            apd.ID AS 'id',
+            MIN( abo.PRODUCTSTATUS ) AS 'productstatus'
+        FROM
+            aps_product_detail apd
+            LEFT JOIN aps_process_output_product apop ON apd.ID = apop.PRODUCTID
+            AND apop.DELETED = 0
+            LEFT JOIN aps_blank_order abo ON apop.BLANKID = abo.ID
+            AND abo.DELETED = 0
+        WHERE
+            apd.DELETED = 0
+            AND apd.ID IN
+            <foreach collection="productIdList" open="(" close=")" separator="," item="item">
+                #{item}
+            </foreach>
+        GROUP BY
+            apd.ID,
+            abo.ID
+    </select>
 
 
     <sql id="appendSql">

+ 1 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProductDetailDo.java

@@ -20,6 +20,7 @@ import java.util.Date;
 @TableName("aps_product_detail")
 public class ApsProductDetailDo extends BaseDo {
 
+    private String id;
 
     /**
      * 物料名称

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

@@ -93,5 +93,19 @@ public class ApsProcessOperationController {
             return R.error("更新后面所有工序信息异常:" + e.getMessage());
         }
     }
+
+    /**
+     *坯料计划使用备料保存后,更新被借调工序的所有后续工序
+     */
+    @PostMapping("/updateBorrowProcess")
+    public R updateBorrowProcess(@RequestBody Map<String, Object> params) {
+        try {
+            log.info("更新被借调工序;参数为:{}", params);
+            return apsProcessOperationService.updateBorrowProcess(params);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return R.error("更新被借调工序失败");
+        }
+    }
 }