ソースを参照

feature 修改取消发布的逻辑

xiahan 1 年間 前
コミット
45bab34db1

+ 3 - 3
bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java

@@ -660,15 +660,15 @@ public class SaveConstans {
         /**
          * 待排程
          */
-        public static final String SCHEDULSTATUS_TOSCHEDULE = "待排程";
+        public static final String SCHEDULSTATUS_TOSCHEDULE = "10";
         /**
          * 待发布
          */
-        public static final String SCHEDULSTATUS_TORELEASE = "待发布";
+        public static final String SCHEDULSTATUS_TORELEASE = "20";
         /**
          * 已发布
          */
-        public static final String SCHEDULSTATUS_HASRELEASE = "已发布";
+        public static final String SCHEDULSTATUS_HASRELEASE = "30";
     }
 
     /**

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

@@ -60,4 +60,6 @@ public interface ApsProductDetailDao extends BaseMapper<ApsProductDetailDo> {
 
     @Select("SELECT * FROM aps_product_detail WHERE DELETED = 0 AND MAINID = #{mainId}")
     List<ApsProductDetailDo> getProductDetailByMainId(@Param("mainId") String mainId);
+
+    void publishCancel(@Param("productionOrderIds") List<String> productionOrderIds);
 }

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

@@ -11,7 +11,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.google.common.collect.Lists;
 import com.rongwei.bscommon.sys.dao.*;
 import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bscommon.sys.utils.ApsUtils;
@@ -46,6 +45,7 @@ import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_N;
 import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_Y;
 import static com.rongwei.safecommon.utils.SaveConstans.ProductionStatus.*;
 import static com.rongwei.safecommon.utils.SaveConstans.SchedulingStatus.PUBLISHED;
+import static com.rongwei.safecommon.utils.SaveConstans.SchedulstatusTyep.*;
 
 /**
  * <p>
@@ -105,6 +105,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     @Autowired
     private ApsProcessOperationProcessEquBackupServiceImpl apsProcessOperationProcessEquBackupService;
 
+    public static String removeExtraZerosAndDecimal(BigDecimal bd) {
+        bd = bd.stripTrailingZeros();
+        return bd.toPlainString();
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -143,7 +147,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         deleteBackup(blankids, apsProductionOrderIds);
     }
 
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void blankApsCancel(List<String> apsBlankIds) {
@@ -259,44 +262,52 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             log.debug("坯料计划为空");
             return R.error("坯料计划id 必传");
         }
-        List<String> searchCondition = new ArrayList<String>() {{
-            add("40");
-            add("50");
-        }};
-        // 判断是否存在已发布的工序作业
-        List<ApsBlankOrderDo> apsBlankOrderDos = this.baseMapper.selectBatchIds(blankIds);
-        List<ApsBlankOrderDo> collect1 = apsBlankOrderDos.stream().filter(info -> searchCondition.contains(info.getProductstatus())).collect(Collectors.toList());
-        if (!collect1.isEmpty()) {
-            logger.error("存在已开工的坯料计划:{}", collect1);
-            return R.error("存在已开工的坯料计划");
-        }
-        // 更新坯料计划的生产状态为已发布
-        this.update(new LambdaUpdateWrapper<ApsBlankOrderDo>().in(ApsBlankOrderDo::getId, blankIds)
-                .set(ApsBlankOrderDo::getProductstatus, "20")
-                .set(ApsBlankOrderDo::getSchedulingstatus, TO_BE_PUBLISHED)
-                .set(ApsBlankOrderDo::getLockmark, LOCKMARK_N));
-        // 更新坯料计划对应工序作业的状态为待开工
-        apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
-                .in(ApsProcessOperationDo::getBlankid, blankIds)
-                .set(ApsProcessOperationDo::getProcessstatus, "20")
-                .set(ApsProcessOperationDo::getLockmark, LOCKMARK_N)
-                .set(ApsProcessOperationDo::getWorkstatus, JOBSTATUS_TO_BE_START));
-        // 更新坯料计划对应产品明细的生产状态为待开工
-        apsProductDetailDao.updateProductStatusByBlankId(blankIds, "20");
-        // 更新工序作业明细的生产状态为待开工
-        processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
-                .in(ApsProcessOperationProcessEquDo::getBlankid, blankIds)
-                .set(ApsProcessOperationProcessEquDo::getLockmark, LOCKMARK_N)
-                .set(ApsProcessOperationProcessEquDo::getWorkstatus, JOBSTATUS_TO_BE_START)
-        );
-        List<String> collect = apsBlankOrderDos.stream().map(ApsBlankOrderDo::getProductionorderid).distinct().collect(Collectors.toList());
-        // 更新工序作业的状态
-        apsProcessOperationDao.publishCancel(collect);
-        // 根据坯料ID 删除 备份数据
-        // 更新订单表的生产状态
+        List<String> productionOrderIds = new ArrayList<>();
+        // 虚幻坯料计划
         blankIds.forEach(blankId -> {
-            processOperationProcessEquService.updateOrder(blankId);
+            // 更新工序作业生产状态
+            apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
+                    .eq(ApsProcessOperationDo::getBlankid, blankId)
+                    .eq(ApsProcessOperationDo::getProcessstatus, TO_BE_STARTED)
+                    .set(ApsProcessOperationDo::getProcessstatus, TO_BE_PUBLISHED));
+            // 工序作业信息
+            List<ApsProcessOperationDo> processOperationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
+                    .eq(ApsProcessOperationDo::getBlankid, blankId).orderByDesc(ApsProcessOperationDo::getProcessstatus));
+            // 坯料计划排程状态
+            String schedulingstatus;
+            // 坯料计划生产状态
+            String producttStatus;
+            if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_PUBLISHED)) {
+                schedulingstatus = SCHEDULSTATUS_TORELEASE;
+                producttStatus = TO_BE_PUBLISHED;
+            } else if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_SCHEDULED)) {
+                schedulingstatus = SCHEDULSTATUS_TOSCHEDULE;
+                producttStatus = TO_BE_SCHEDULED;
+            } else {
+                schedulingstatus = SCHEDULSTATUS_HASRELEASE;
+                List<String> processStatusList = processOperationDos.stream()
+                        .map(ApsProcessOperationDo::getProcessstatus)
+                        .distinct()
+                        .collect(Collectors.toList());
+                if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_STARTED)) {
+                    producttStatus = TO_BE_STARTED;
+                } else if (processStatusList.size() == 1 && processStatusList.get(0).equals(COMPLETED)) {
+                    producttStatus = COMPLETED;
+                } else {
+                    producttStatus = PROCESSING;
+                }
+            }
+            ApsBlankOrderDo blankOrderDo = this.getById(blankId);
+            productionOrderIds.add(blankOrderDo.getProductionorderid());
+            this.update(new LambdaUpdateWrapper<ApsBlankOrderDo>().eq(ApsBlankOrderDo::getId, blankId)
+                    .set(ApsBlankOrderDo::getProductstatus, producttStatus)
+                    .set(ApsBlankOrderDo::getSchedulingstatus, schedulingstatus));
         });
+        // 更新产品明细的生产状态
+        apsProductDetailDao.publishCancel(blankIds);
+        // 更新订单的生产状态
+        apsProcessOperationDao.publishCancel(productionOrderIds);
+        // 根据坯料ID 删除 备份数据
         ApsUtils.clearBackup(null);
         return R.ok();
     }
@@ -1753,7 +1764,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         return R.ok();
     }
 
-
     public R checkBlankOrder(CheckAndSaveOrUpdateBlankReq req, int j) {
         //获取校验等级
         Integer checkLevel = req.getCheckLevel();
@@ -2197,11 +2207,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         return R.ok();
     }
 
-    public static String removeExtraZerosAndDecimal(BigDecimal bd) {
-        bd = bd.stripTrailingZeros();
-        return bd.toPlainString();
-    }
-
     /**
      * 根据坯料计划ID,更新 拼接字段(输出订单产品、输出成品、坯料输出物料类型、坯料输出物料规格)
      *

+ 31 - 0
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProductDetailDao.xml

@@ -105,4 +105,35 @@
         </foreach>
         )
     </update>
+    <select id="publishCancel">
+        <if test="productionOrderIds != null and productionOrderIds.size() >0">
+            <foreach collection="productionOrderIds" item="orderId" separator=";">
+                update aps_product_detail b
+                <set>
+                    PRODUCTSTATUS=(
+                    SELECT
+                    CASE
+                    WHEN GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS) = '10' THEN '10'
+                    WHEN GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS) = '20' THEN '20'
+                    WHEN GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS) = '30' THEN '30'
+                    WHEN GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS) = '40' THEN '40'
+                    WHEN GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS) = '50' THEN '50'
+                    WHEN FIND_IN_SET('50',GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS)) THEN '40'
+                    WHEN FIND_IN_SET('40',GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS)) THEN '40'
+                    WHEN FIND_IN_SET('30',GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS)) THEN '30'
+                    WHEN FIND_IN_SET('20',GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS)) THEN '20'
+                    ELSE b.PRODUCTSTATUS
+                    END
+                    FROM  aps_blank_order abo
+                    where abo.DELETED='0'
+                    and abo.PRODUCTIONORDERID =#{orderId}
+                    GROUP BY abo.PRODUCTIONORDERID
+                    )
+                </set>
+                <where>
+                    MAINID = #{orderId} and DELETED='0'
+                </where>
+            </foreach>
+        </if>
+    </select>
 </mapper>

+ 14 - 15
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProductionOrderDao.xml

@@ -158,23 +158,22 @@
                     PRODUCTIONSTATUS=(
                     SELECT
                     CASE
-                        WHEN GROUP_CONCAT(DISTINCT apo.PROCESSSTATUS) = '10' THEN '10'
-                        WHEN GROUP_CONCAT(DISTINCT apo.PROCESSSTATUS) = '20' THEN '20'
-                        WHEN GROUP_CONCAT(DISTINCT apo.PROCESSSTATUS) = '30' THEN '30'
-                        WHEN GROUP_CONCAT(DISTINCT apo.PROCESSSTATUS) = '40' THEN '40'
-                        WHEN GROUP_CONCAT(DISTINCT apo.PROCESSSTATUS) = '50' THEN '50'
-                        WHEN FIND_IN_SET('50',GROUP_CONCAT(DISTINCT apo.PROCESSSTATUS)) THEN '40'
-                        WHEN FIND_IN_SET('40',GROUP_CONCAT(DISTINCT apo.PROCESSSTATUS)) THEN '40'
-                        WHEN FIND_IN_SET('30',GROUP_CONCAT(DISTINCT apo.PROCESSSTATUS)) THEN '30'
-                        WHEN FIND_IN_SET('20',GROUP_CONCAT(DISTINCT apo.PROCESSSTATUS)) THEN '20'
-                        ELSE b.PRODUCTIONSTATUS
+                    WHEN GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS) = '10' THEN '10'
+                    WHEN GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS) = '20' THEN '20'
+                    WHEN GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS) = '30' THEN '30'
+                    WHEN GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS) = '40' THEN '40'
+                    WHEN GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS) = '50' THEN '50'
+                    WHEN FIND_IN_SET('50',GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS)) THEN '40'
+                    WHEN FIND_IN_SET('40',GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS)) THEN '40'
+                    WHEN FIND_IN_SET('30',GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS)) THEN '30'
+                    WHEN FIND_IN_SET('20',GROUP_CONCAT(DISTINCT abo.PRODUCTSTATUS)) THEN '20'
+                    ELSE b.PRODUCTIONSTATUS
                     END
-                    FROM
-                    aps_process_operation apo
-                    LEFT JOIN aps_blank_order abo ON apo.BLANKID = abo.ID AND abo.DELETED='0'
-                    where apo.DELETED='0'
+                    FROM aps_blank_order abo
+                    where abo.DELETED='0'
                     and abo.PRODUCTIONORDERID =#{id}
-                    GROUP BY abo.PRODUCTIONORDERID)
+                    GROUP BY abo.PRODUCTIONORDERID
+                    )
                 </set>
                 <where>
                     ID = #{id} and DELETED='0'