Ver código fonte

aps-生产状态通用接口逻辑变更

sucheng 1 ano atrás
pai
commit
910ed93b12

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

@@ -53,8 +53,8 @@ public interface ApsProcessOperationProcessEquDao extends BaseMapper<ApsProcessO
     @Select("select BLANKID AS 'blankId',MIN(PROCESSSTATUS) AS 'productionStatus' from aps_process_operation where DELETED = 0 AND BLANKID = (select BLANKID from aps_process_operation where ID = #{processOperationId}) GROUP BY BLANKID")
     CommonUpdateProductionStatusReq selectProcessMinStatus(@Param("processOperationId") String processOperationId);
 
-    @Select("select PRODUCTIONORDERID AS 'orderId',MIN(PRODUCTSTATUS) AS 'productionStatus' from aps_blank_order where DELETED = 0 AND PRODUCTIONORDERID = (select PRODUCTIONORDERID from aps_blank_order where ID = #{blankId}) GROUP BY PRODUCTIONORDERID")
-    CommonUpdateProductionStatusReq selectBlankMinStatus(@Param("blankId") String blankId);
+    @Select("select PRODUCTIONORDERID AS 'orderId',MIN(PRODUCTSTATUS) AS 'minProductionStatus',MAX(PRODUCTSTATUS) AS 'maxProductionStatus' from aps_blank_order where DELETED = 0 AND PRODUCTIONORDERID = (select PRODUCTIONORDERID from aps_blank_order where ID = #{blankId}) GROUP BY PRODUCTIONORDERID")
+    CommonUpdateProductionStatusReq selectBlankMinAndMaxStatus(@Param("blankId") String blankId);
 
     @Update("update aps_process_operation_process_equ set STARTINGROLL = STARTINGROLL - 1,WAITREPORTID = null where ID = #{processequid}")
     void updateByCancelRecord(@Param("processequid") String processequid);
@@ -62,13 +62,13 @@ 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);
+    List<CommonUpdateProductionStatusReq> selectNeedUpdate(@Param("productIdList") List<String> productIdList);
 
     @Select("select apo.PRODUCTIONORDERID from aps_blank_order apo LEFT JOIN aps_process_operation apo2 ON apo2.DELETED = 0 AND apo.ID = apo2.BLANKID where apo.DELETED = 0 AND apo2.ID = #{processOperationId} limit 1")
     String selectOrderIdByProcessOperationId(@Param("processOperationId") String processOperationId);
 
-    @Select("select apo.ID AS 'blankId',MIN(apo2.PROCESSSTATUS) AS 'productionStatus' from aps_blank_order apo LEFT JOIN aps_process_operation apo2 ON apo2.DELETED = 0 AND apo.ID = apo2.BLANKID where apo.DELETED = 0 AND apo.PRODUCTIONORDERID = #{orderId} GROUP BY apo.ID")
-    List<CommonUpdateProductionStatusReq> selectProcessMinStatusList(@Param("orderId") String orderId);
+    @Select("select apo.ID AS 'blankId',MIN(apo2.PROCESSSTATUS) AS 'minProductionStatus',MAX(apo2.PROCESSSTATUS) AS 'maxProductionStatus' from aps_blank_order apo LEFT JOIN aps_process_operation apo2 ON apo2.DELETED = 0 AND apo.ID = apo2.BLANKID where apo.DELETED = 0 AND apo.PRODUCTIONORDERID = #{orderId} GROUP BY apo.ID")
+    List<CommonUpdateProductionStatusReq> selectProcessMinAndmaxStatusList(@Param("orderId") String orderId);
 
     void publish(@Param("productIdList") List<String> productIdList);
 

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

@@ -12,6 +12,7 @@ import com.rongwei.bsentity.vo.CommonUpdateProductionStatusReq;
 import com.rongwei.bsentity.vo.OptionalEquipmentVo;
 import com.rongwei.bsentity.vo.ProcessIdRelationVo;
 import com.rongwei.rwcommon.base.R;
+import com.rongwei.safecommon.utils.SaveConstans;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -187,6 +188,7 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
 
     /**
      * 换线作业
+     *
      * @param changingWiresVos
      * @return
      */
@@ -197,20 +199,21 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
 
     /**
      * 根据工序作业明细 获取可选设备
+     *
      * @param operationJobDetailsId
      * @return
      */
     @Override
     public R getOptionalEquipment(List<String> operationJobDetailsId) {
-        if(operationJobDetailsId.isEmpty()){
+        if (operationJobDetailsId.isEmpty()) {
             log.error("工序作业明细必选");
             return R.error("工序作业明细必选");
         }
-        log.debug("根据工序作业明细:{},获取可选设备",operationJobDetailsId);
+        log.debug("根据工序作业明细:{},获取可选设备", operationJobDetailsId);
         // 防止工序作业ID重复
-        operationJobDetailsId= operationJobDetailsId.stream().distinct().collect(Collectors.toList());
+        operationJobDetailsId = operationJobDetailsId.stream().distinct().collect(Collectors.toList());
         List<OptionalEquipmentVo> optionalEquipment = this.baseMapper.getOptionalEquipmentById(operationJobDetailsId);
-        if(optionalEquipment.isEmpty()){
+        if (optionalEquipment.isEmpty()) {
             log.error("当前所选作业不存在共同的加工设备");
             return R.error("没有可共用的加工设备,无法合并换线");
         }
@@ -221,32 +224,52 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         //查询此工序的所属订单ID
         String orderId = this.baseMapper.selectOrderIdByProcessOperationId(processOperationId);
 
-        //查询此工序所属订单的所有坯料计划的最小生产状态和坯料计划ID
-        List<CommonUpdateProductionStatusReq> twoList = this.baseMapper.selectProcessMinStatusList(orderId);
+        //查询此工序所属订单的所有坯料计划的最小生产状态、最大生产状态和坯料计划ID
+        List<CommonUpdateProductionStatusReq> twoList = this.baseMapper.selectProcessMinAndmaxStatusList(orderId);
+        //根据最小生产状态和最大生产状态,判断当前最新的生产状态,等待更新
+        for (CommonUpdateProductionStatusReq commonUpdateProductionStatusReq : twoList) {
+            setProductStatusByMinAndMax(commonUpdateProductionStatusReq);
+        }
+
 
         //查询此坯料计划目前的生产状态信息
         List<ApsBlankOrderDo> list = apsBlankOrderService.list(new QueryWrapper<ApsBlankOrderDo>().lambda().eq(ApsBlankOrderDo::getProductionorderid, orderId));
 
-        if (twoList.size() <= 0 || list.size() <= 0){
+        if (twoList.size() <= 0 || list.size() <= 0) {
             return;
         }
         List<ApsBlankOrderDo> needUpdateList = new LinkedList<>();
         for (CommonUpdateProductionStatusReq two : twoList) {
-            for (ApsBlankOrderDo apsBlankOrderDo : list) {
-                //如果不为空,并且状态不同
-                if(ObjectUtil.isNotEmpty(two.getBlankId()) && two.getBlankId().equals(apsBlankOrderDo.getId())
-                        && ObjectUtil.isNotEmpty(two.getProductionStatus()) && ObjectUtil.isNotEmpty(apsBlankOrderDo.getProductstatus())
-                        && !two.getProductionStatus().equals(apsBlankOrderDo.getProductstatus())){
-                    //更新坯料计划的生产状态
-                    ApsBlankOrderDo blankOrderDo = new ApsBlankOrderDo();
-                    blankOrderDo.setId(two.getBlankId());
-                    blankOrderDo.setProductstatus(two.getProductionStatus());
-                    needUpdateList.add(blankOrderDo);
+            if (ObjectUtil.isNotEmpty(two.getProductionStatus())) {
+                for (ApsBlankOrderDo apsBlankOrderDo : list) {
+                    //如果不为空,并且状态不同
+                    if (ObjectUtil.isNotEmpty(two.getBlankId()) && two.getBlankId().equals(apsBlankOrderDo.getId())
+                            && ObjectUtil.isNotEmpty(two.getProductionStatus()) && ObjectUtil.isNotEmpty(apsBlankOrderDo.getProductstatus())
+                            && !two.getProductionStatus().equals(apsBlankOrderDo.getProductstatus())) {
+                        //更新坯料计划的生产状态
+                        ApsBlankOrderDo blankOrderDo = new ApsBlankOrderDo();
+                        blankOrderDo.setId(two.getBlankId());
+                        blankOrderDo.setProductstatus(two.getProductionStatus());
+                        //更新坯料计划的排程状态
+                        /**
+                         * 如果生产状态=待排程,则排程状态=待排程
+                         * 如果生产状态=待发布,则排程状态=待发布
+                         * 如果生产状态=待开工或加工中或已完工,则排程状态=已发布
+                         */
+                        if (two.getProductionStatus().equals(TO_BE_SCHEDULED)) {
+                            blankOrderDo.setSchedulingstatus(SaveConstans.SchedulingStatus.TO_BE_SCHEDULED);
+                        } else if (two.getProductionStatus().equals(TO_BE_PUBLISHED)) {
+                            blankOrderDo.setSchedulingstatus(SaveConstans.SchedulingStatus.TO_BE_PUBLISHED);
+                        } else {
+                            blankOrderDo.setSchedulingstatus(SaveConstans.SchedulingStatus.PUBLISHED);
+                        }
+                        needUpdateList.add(blankOrderDo);
+                    }
                 }
             }
         }
         //更新坯料计划
-        if(needUpdateList.size()>0){
+        if (needUpdateList.size() > 0) {
             apsBlankOrderService.updateBatchById(needUpdateList);
         }
 
@@ -254,27 +277,59 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         updateOrder(twoList.get(0).getBlankId());
     }
 
+    private void setProductStatusByMinAndMax(CommonUpdateProductionStatusReq item) {
+        //根据最小生产状态和最大生产状态,判断当前最新的生产状态,等待更新
+        String maxProductionStatus = item.getMaxProductionStatus();
+        String minProductionStatus = item.getMinProductionStatus();
+        if(ObjectUtil.isEmpty(maxProductionStatus) || ObjectUtil.isEmpty(minProductionStatus)){
+            return;
+        }
+        /*
+         * 如果作业最大生产状态=待排程,则生产状态=待排程
+         * 如果作业最大生产状态=待发布,则生产状态=待发布
+         * 如果作业最大生产状态=待开工,则生产状态=待开工
+         * 如果作业最大生产状态=加工中或已完工,并且作业最小生产状态<已完工,则生产状态=加工中
+         * 如果作业最大生产状态=作业最小生产状态=已完工,则生产状态=已完工
+         */
+        //如果作业最大生产状态=待排程,则生产状态=待排程
+        if (maxProductionStatus.equals(TO_BE_SCHEDULED)) {
+            item.setProductionStatus(TO_BE_SCHEDULED);
+        }
+        //如果作业最大生产状态=待发布,则生产状态=待发布
+        if (maxProductionStatus.equals(TO_BE_PUBLISHED)) {
+            item.setProductionStatus(TO_BE_PUBLISHED);
+        }
+        //如果作业最大生产状态=待开工,则生产状态=待开工
+        if (maxProductionStatus.equals(TO_BE_STARTED)) {
+            item.setProductionStatus(TO_BE_STARTED);
+        }
+        //如果作业最大生产状态=加工中或已完工,并且作业最小生产状态<已完工(50),则生产状态=加工中
+        if ((maxProductionStatus.equals(PROCESSING) || maxProductionStatus.equals(COMPLETED)) && Integer.parseInt(minProductionStatus) < Integer.parseInt(COMPLETED)) {
+            item.setProductionStatus(PROCESSING);
+        }
+        //如果作业最大生产状态=作业最小生产状态=已完工,则生产状态=已完工
+        if (minProductionStatus.equals(maxProductionStatus) && minProductionStatus.equals(COMPLETED)) {
+            item.setProductionStatus(COMPLETED);
+        }
+    }
+
 
     private void updateOrder(String blankId) {
         //查询此坯料计划的所属订单的最小生产状态和订单ID
-        CommonUpdateProductionStatusReq three = this.baseMapper.selectBlankMinStatus(blankId);
+        CommonUpdateProductionStatusReq three = this.baseMapper.selectBlankMinAndMaxStatus(blankId);
         if (ObjectUtil.isEmpty(three)) {
             return;
         }
-        //更新订单
-        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);
+        //根据最小生产状态和最大生产状态,判断当前最新的生产状态,等待更新
+        setProductStatusByMinAndMax(three);
+
+        if (ObjectUtil.isNotEmpty(three.getProductionStatus())) {
+            //更新订单
+            ApsProductionOrderDo apsProductionOrderDo = new ApsProductionOrderDo();
+            apsProductionOrderDo.setId(three.getOrderId());
+            apsProductionOrderDo.setProductionstatus(three.getProductionStatus());
+            apsProductionOrderService.updateById(apsProductionOrderDo);
+        }
 
         //更新产品明细的生产状态
         //订单ID
@@ -287,21 +342,27 @@ public class ApsProcessOperationProcessEquServiceImpl extends ServiceImpl<ApsPro
         if (list.size() > 0) {
             List<String> productIdList = list.stream().map(ApsProductDetailDo::getId).collect(Collectors.toList());
             //查找产品的最新坯料状态
-            List<ApsProductDetailDo> productDetailDoList = apsProcessOperationProcessEquDao.selectNeedUpdate(productIdList);
+            List<CommonUpdateProductionStatusReq> four = apsProcessOperationProcessEquDao.selectNeedUpdate(productIdList);
+            //根据最小生产状态和最大生产状态,判断当前最新的生产状态,等待更新
+            for (CommonUpdateProductionStatusReq commonUpdateProductionStatusReq : four) {
+                setProductStatusByMinAndMax(commonUpdateProductionStatusReq);
+            }
+
+
             //需要更新的数组
             List<ApsProductDetailDo> needUpdateList = new LinkedList<>();
 
-            for (ApsProductDetailDo apsProductDetailDo : productDetailDoList) {
+            for (CommonUpdateProductionStatusReq vo : four) {
                 //对比当前生产状态判断是否需要更新
                 for (ApsProductDetailDo productDetailDo : list) {
                     //同一产品明细
-                    if (apsProductDetailDo.getId().equals(productDetailDo.getId())) {
+                    if (vo.getProductDetailId().equals(productDetailDo.getId())) {
                         //比较状态
-                        if (apsProductDetailDo.getProductstatus() != null && !apsProductDetailDo.getProductstatus().equals(productDetailDo.getProductstatus())) {
+                        if (vo.getProductionStatus() != null && !vo.getProductionStatus().equals(productDetailDo.getProductstatus())) {
                             //不相等则更新
                             ApsProductDetailDo needUpdate = new ApsProductDetailDo();
-                            needUpdate.setId(apsProductDetailDo.getId());
-                            needUpdate.setProductstatus(apsProductDetailDo.getProductstatus());
+                            needUpdate.setId(vo.getProductDetailId());
+                            needUpdate.setProductstatus(vo.getProductionStatus());
 
                             needUpdateList.add(needUpdate);
                         }

+ 4 - 3
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml

@@ -211,10 +211,11 @@
         </where>
         order by a1.PLANSTARTDATE asc,a1.PLANENDDATE asc
     </select>
-    <select id="selectNeedUpdate" resultType="com.rongwei.bsentity.domain.ApsProductDetailDo">
+    <select id="selectNeedUpdate" resultType="com.rongwei.bsentity.vo.CommonUpdateProductionStatusReq">
         SELECT
-            apd.ID AS 'id',
-            MIN( abo.PRODUCTSTATUS ) AS 'productstatus'
+            apd.ID AS 'productDetailId',
+            MIN( abo.PRODUCTSTATUS ) AS 'minProductionStatus',
+            MAX( abo.PRODUCTSTATUS ) AS 'maxProductionStatus'
         FROM
             aps_product_detail apd
             LEFT JOIN aps_process_output_product apop ON apd.ID = apop.PRODUCTID

+ 15 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CommonUpdateProductionStatusReq.java

@@ -28,8 +28,23 @@ public class CommonUpdateProductionStatusReq {
      */
     private String orderId;
 
+    /**
+     * 产品明细ID
+     */
+    private String productDetailId;
+
     /**
      * 生产状态
      */
     private String productionStatus;
+
+    /**
+     * 最小生产状态
+     */
+    private String minProductionStatus;
+
+    /**
+     * 最大生产状态
+     */
+    private String maxProductionStatus;
 }