Browse Source

Merge remote-tracking branch 'origin/mode-min-unit' into mode-min-unit

fangpy 1 year ago
parent
commit
531ae85a95
20 changed files with 265 additions and 114 deletions
  1. 12 3
      bs-common/src/main/java/com/rongwei/safecommon/utils/SaveConstans.java
  2. 4 1
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProcessOperationOutMaterDao.java
  3. 4 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProcessOutputProductDao.java
  4. 2 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProductDetailDao.java
  5. 1 1
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProductionOrderDao.java
  6. 3 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/ApsBlankOrderService.java
  7. 100 69
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java
  8. 1 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsProductionOrderServiceImpl.java
  9. 9 0
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsReportRecordsServiceImpl.java
  10. 1 1
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/GanttServiceImpl.java
  11. 26 16
      cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ReportCheckServiceImpl.java
  12. 7 7
      cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationDao.xml
  13. 23 0
      cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationOutMaterDao.xml
  14. 1 1
      cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationProcessEquDao.xml
  15. 31 0
      cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProductDetailDao.xml
  16. 14 15
      cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProductionOrderDao.xml
  17. 6 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsBlankOrderDo.java
  18. 6 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProcessOutputProductDo.java
  19. 5 0
      cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProductionTechnicalRequirementDo.java
  20. 9 0
      cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsBlankOrderController.java

+ 12 - 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";
     }
 
     /**
@@ -873,4 +873,13 @@ public class SaveConstans {
          */
         public static final String WAITING_JUDGMENT = "待判";
     }
+
+    /**
+     * 外观类型
+     */
+    public static class BlankAppearanceType {
+        public static final String ALUMINUM_COIL = "铝卷";
+        public static final String ALUMINUM_PLATE = "铝板";
+        public static final String ALUMINUM_INGOT = "铝锭";
+    }
 }

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

@@ -1,7 +1,6 @@
 package com.rongwei.bscommon.sys.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.rongwei.bsentity.domain.ApsProcessOperationDo;
 import com.rongwei.bsentity.domain.ApsProcessOperationOutMaterDo;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
@@ -16,6 +15,10 @@ public interface ApsProcessOperationOutMaterDao extends BaseMapper<ApsProcessOpe
     @Select("SELECT * FROM aps_process_operation_out_mater WHERE DELETED = 0 AND MAINID = #{mainid}")
     List<ApsProcessOperationOutMaterDo> getProcessOperationOutMaterByMainId(@Param("mainid") String mainid);
 
+    void reportCheckUpdateAboutVolumesNum(@Param("id") String id,
+                                          @Param("unqualifiedQuantity") long unqualifiedQuantity,
+                                          @Param("qualifiedQuantity") long qualifiedQuantity,
+                                          @Param("inspectQuantity") int inspectQuantity);
 }
 
 

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

@@ -5,6 +5,7 @@ import com.rongwei.bsentity.domain.ApsOrderAlloyCompositionDo;
 import com.rongwei.bsentity.domain.ApsProcessOutputProductDo;
 import org.apache.ibatis.annotations.Param;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.annotations.Update;
 
 import java.util.List;
 
@@ -16,6 +17,9 @@ public interface ApsProcessOutputProductDao extends BaseMapper<ApsProcessOutputP
     List<ApsProcessOutputProductDo> getProcessOutputProductByBlankId(@Param("blankid") String blankid);
     @Select("SELECT * FROM aps_process_output_product WHERE  DELETED = 0 AND PRODUCTID = #{productid}")
     List<ApsProcessOutputProductDo> getProcessOutputProductByProductid(@Param("productid") String productid);
+
+    @Update("update aps_process_output_product set ROLLNUM = ROLLNUM+1 where ID = #{outputid}")
+    void updateRollNumById(@Param("outputid") String outputid);
 }
 
 

+ 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);
 }

+ 1 - 1
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/dao/ApsProductionOrderDao.java

@@ -65,7 +65,7 @@ public interface ApsProductionOrderDao extends BaseMapper<ApsProductionOrderDo>
             "order by po.ORDERNO,b.ID")
     List<ApsProductionOrderDo> getReportUnqualify();
 
-    @Update("update aps_production_order set AUDITSTATUS = '待计划评审', CHANGEDATE = now(), TECHNICALREVIEWERID = null,TECHNICALREVIEWERNAME = null,TECHNICALREVIEWDATE=null,QUALITYREVIEWERID=null,QUALITYREVIEWERNAME=null,QUALITYREVIEWDATE=null,REVIEWERID=null,REVIEWERNAME=null,REVIEWDATE=null where ID = #{id}")
+    @Update("update aps_production_order set AUDITSTATUS = '待提交', CHANGEDATE = now() where ID = #{id}")
     void changeOrderById(@Param("id") String id);
 
     @Select("SELECT * FROM aps_production_order WHERE DELETED = 0 AND ID = #{id}")

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

@@ -50,4 +50,7 @@ public interface ApsBlankOrderService extends IService<ApsBlankOrderDo> {
 
     R checkAndUpdateBlankAndOutput(ApsProductionTechnicalRequirementDo req);
     void updateBlankSplicingColumn(String blankId);
+
+    R checkSchedule(List<String> blankIdList);
+
 }

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

@@ -12,7 +12,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;
@@ -47,6 +46,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>
@@ -106,6 +106,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     @Autowired
     private ApsProcessOperationProcessEquBackupService apsProcessOperationProcessEquBackupService;
 
+    public static String removeExtraZerosAndDecimal(BigDecimal bd) {
+        bd = bd.stripTrailingZeros();
+        return bd.toPlainString();
+    }
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -144,7 +148,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         deleteBackup(blankids, apsProductionOrderIds);
     }
 
-
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void blankApsCancel(List<String> apsBlankIds) {
@@ -260,44 +263,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();
     }
@@ -655,7 +666,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
 
         // 工序作业明细ID
-        List<String> apsProcessOperationIds = processes.stream().map(ProductionProcesses::getId).distinct().collect(Collectors.toList());
+        List<String> apsProcessOperationIds = processes.stream().map(ProductionProcesses::getBsProcessesId)
+                .flatMap(List::stream)
+                .distinct()
+                .collect(Collectors.toList());
         SysUserVo currentUser = CXCommonUtils.getCurrentUser();
         //删除备份
         ApsUtils.clearBackup(null);
@@ -1445,18 +1459,25 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
 
         //=============校验坯料长度=================
-        //如果坯料产品类型对应产品外观类型是铝板或板锭,并且坯料长度为空,则提示:坯料是铝板和板锭时长度必填
-        if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProducttypeid())) {
-            //目前数据字典存在3层关系,选择只能选择最后一层,二开查询最后一层的父节点对应数据的父节点,判断是否为铝板或板锭的主键ID
-            String pid = this.baseMapper.selectDictAboutProductType(apsBlankOrderDo.getProducttypeid());
-            //如果是铝板或板锭
-            if (ObjectUtil.isNotEmpty(pid) && (pid.equals(SaveConstans.ProductionType.BANDING_ID) || pid.equals(SaveConstans.ProductionType.LVBAN_ID))) {
-                //坯料长度为空
-                if (ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
-                    return R.error("坯料是铝板和板锭时长度必填");
-                }
-            }
-        }
+        //如果坯料需求的外观类型是板锭或铝板,并且坯料长度为空,则提示:坯料是板锭和铝板时长度必填
+        if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getBlankappearance())
+                && Arrays.asList(SaveConstans.BlankAppearanceType.ALUMINUM_PLATE, SaveConstans.BlankAppearanceType.ALUMINUM_INGOT).contains(apsBlankOrderDo.getBlankappearance())
+                && ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
+            return R.error("坯料是铝板和铝锭时长度必填");
+        }
+
+//        //如果坯料产品类型对应产品外观类型是铝板或板锭,并且坯料长度为空,则提示:坯料是铝板和板锭时长度必填
+//        if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProducttypeid())) {
+//            //目前数据字典存在3层关系,选择只能选择最后一层,二开查询最后一层的父节点对应数据的父节点,判断是否为铝板或板锭的主键ID
+//            String pid = this.baseMapper.selectDictAboutProductType(apsBlankOrderDo.getProducttypeid());
+//            //如果是铝板或板锭
+//            if (ObjectUtil.isNotEmpty(pid) && (pid.equals(SaveConstans.ProductionType.BANDING_ID) || pid.equals(SaveConstans.ProductionType.LVBAN_ID))) {
+//                //坯料长度为空
+//                if (ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
+//                    return R.error("坯料是铝板和板锭时长度必填");
+//                }
+//            }
+//        }
         if (checkLevel == 2 || checkLevel == 3) {
             //==============拼接工艺路线输出成品和工艺输出物料规格==============
             //查询坯料计划对应工艺路线的输出成品
@@ -1753,7 +1774,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         return R.ok();
     }
 
-
     public R checkBlankOrder(CheckAndSaveOrUpdateBlankReq req, int j) {
         //获取校验等级
         Integer checkLevel = req.getCheckLevel();
@@ -1766,18 +1786,24 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
 
 
         //=============校验坯料长度=================
-        //如果坯料产品类型对应产品外观类型是铝板或板锭,并且坯料长度为空,则提示:坯料是铝板和板锭时长度必填
-        if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProducttypeid())) {
-            //目前数据字典存在3层关系,选择只能选择最后一层,二开查询最后一层的父节点对应数据的父节点,判断是否为铝板或板锭的主键ID
-            String pid = this.baseMapper.selectDictAboutProductType(apsBlankOrderDo.getProducttypeid());
-            //如果是铝板或板锭
-            if (ObjectUtil.isNotEmpty(pid) && (pid.equals(SaveConstans.ProductionType.BANDING_ID) || pid.equals(SaveConstans.ProductionType.LVBAN_ID))) {
-                //坯料长度为空
-                if (ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
-                    return R.error("第" + j + "个坯料计划 坯料是铝板和板锭时长度必填");
-                }
-            }
-        }
+        //如果坯料需求的外观类型是板锭或铝板,并且坯料长度为空,则提示:坯料是板锭和铝板时长度必填
+        if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getBlankappearance())
+                && Arrays.asList(SaveConstans.BlankAppearanceType.ALUMINUM_PLATE, SaveConstans.BlankAppearanceType.ALUMINUM_INGOT).contains(apsBlankOrderDo.getBlankappearance())
+                && ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
+            return R.error("第" + j + "个坯料计划 坯料是铝板和铝锭时长度必填");
+        }
+//        //如果坯料产品类型对应产品外观类型是铝板或板锭,并且坯料长度为空,则提示:坯料是铝板和板锭时长度必填
+//        if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProducttypeid())) {
+//            //目前数据字典存在3层关系,选择只能选择最后一层,二开查询最后一层的父节点对应数据的父节点,判断是否为铝板或板锭的主键ID
+//            String pid = this.baseMapper.selectDictAboutProductType(apsBlankOrderDo.getProducttypeid());
+//            //如果是铝板或板锭
+//            if (ObjectUtil.isNotEmpty(pid) && (pid.equals(SaveConstans.ProductionType.BANDING_ID) || pid.equals(SaveConstans.ProductionType.LVBAN_ID))) {
+//                //坯料长度为空
+//                if (ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
+//                    return R.error("第" + j + "个坯料计划 坯料是铝板和板锭时长度必填");
+//                }
+//            }
+//        }
         if (checkLevel == 3) {
             //==============校验交期==================
             /**
@@ -2197,11 +2223,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         return R.ok();
     }
 
-    public static String removeExtraZerosAndDecimal(BigDecimal bd) {
-        bd = bd.stripTrailingZeros();
-        return bd.toPlainString();
-    }
-
     /**
      * 根据坯料计划ID,更新 拼接字段(输出订单产品、输出成品、坯料输出物料类型、坯料输出物料规格)
      *
@@ -2276,4 +2297,14 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
             throw new CustomException("没有找到该坯料计划的输出成品");
         }
     }
+
+    @Override
+    public R checkSchedule(List<String> blankIdList) {
+        //是否正在排程
+        ApsUtils.checkScheduling(null);
+
+        //
+
+        return null;
+    }
 }

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

@@ -395,6 +395,7 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
 
     @Override
     @Transactional
+    @Deprecated
     public R changeOrder(ApsProductionOrderDo req) {
         if (ObjectUtil.isEmpty(req.getId())) {
             return R.error("订单Id不能为空");

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

@@ -70,6 +70,8 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
     private ApsCraftEquService apsCraftEquService;
     @Autowired
     private ReportCheckServiceImpl reportCheckService;
+    @Resource
+    private ApsProcessOutputProductDao apsProcessOutputProductDao;
 
     @Override
     @Transactional
@@ -605,6 +607,13 @@ public class ApsReportRecordsServiceImpl extends ServiceImpl<ApsReportRecordsDao
                         apsProductionOrderDo,
                         apsBlankOrderDo);
             }
+
+            //更新物料子表 对应 工序作业输出物料 的已输出卷数
+            for (ApsReportOutputDo apsReportOutputDo : apsReportOutputDos) {
+                //需要更新(+1)的工序作业输出物料ID
+                String outputid = apsReportOutputDo.getOutputid();
+                apsProcessOutputProductDao.updateRollNumById(outputid);
+            }
         }
 
         //=========更新生产状态等=============

+ 1 - 1
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/GanttServiceImpl.java

@@ -258,7 +258,7 @@ public class GanttServiceImpl implements GanttService {
             workShopVo.setStart_date(workShopEntry.getValue().get(0).getPlanstartdate());
             resultVo.add(workShopVo);
             // 对数据按照设备进行分组
-            LinkedHashMap<String, List<GanttVos>> processMap = workShopEntry.getValue().stream().collect(Collectors.groupingBy(info -> info.getProcessdeviceid(),
+            LinkedHashMap<String, List<GanttVos>> processMap = workShopEntry.getValue().stream().collect(Collectors.groupingBy(GanttVos::getProcessdeviceid,
                     LinkedHashMap::new, Collectors.toList()));
             // 对数据按照 设备进行分组
             for (Map.Entry<String, List<GanttVos>> deviceEntry : processMap.entrySet()) {

+ 26 - 16
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ReportCheckServiceImpl.java

@@ -2,7 +2,9 @@ package com.rongwei.bscommon.sys.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.rongwei.bscommon.sys.dao.ApsBlankOrderDao;
+import com.rongwei.bscommon.sys.dao.ApsProcessOperationOutMaterDao;
 import com.rongwei.bscommon.sys.service.ApsReportRecordsService;
 import com.rongwei.bscommon.sys.service.ReportCheckService;
 import com.rongwei.bsentity.domain.*;
@@ -18,9 +20,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static com.rongwei.safecommon.utils.SaveConstans.WorkInProgressStatus.*;
@@ -60,6 +60,8 @@ public class ReportCheckServiceImpl implements ReportCheckService {
     private ApsProcessOperationOutMaterServiceImpl apsProcessOperationOutMaterService;
     @Autowired
     private ApsProcessOperationProcessEquServiceImpl apsProcessOperationProcessEquService;
+    @Autowired
+    private ApsProcessOperationOutMaterDao apsProcessOperationOutMaterDao;
 
     /**
      * 保存检验结果后更新相关信息
@@ -182,6 +184,14 @@ public class ReportCheckServiceImpl implements ReportCheckService {
         int qualifiedQuantity = qualifiedOutPutList.size();
         // 更新已检验卷数
         int inspectQuantity = reportOutputDos.size();
+        /***********************更新 工序作业输出物料的  输出已检验卷数 输出不合格卷数 输出合格卷数****************************************/
+        Map<String, List<ApsReportOutputDo>> collect = reportOutputDos.stream().collect(Collectors.groupingBy(ApsReportOutputDo::getOutputid));
+        collect.forEach((k, v) -> {
+            long unqualifiedQty = v.stream().filter(info -> NO.equals(info.getQualified())).count();
+            long passingQty = v.stream().filter(info -> YES.equals(info.getQualified())).count();
+            apsProcessOperationOutMaterDao.reportCheckUpdateAboutVolumesNum(k, unqualifiedQty, passingQty, v.size());
+        });
+        /*********************** 工序作业输出物料 更新结束****************************************/
         // 订单信息
         //currentProductionOrderDoDispose(productionOrderDo, unqualificationOutPutList);
         log.debug("开始更新在制品库存信息");
@@ -199,7 +209,7 @@ public class ReportCheckServiceImpl implements ReportCheckService {
 
         /**********************执行数据更新操作*************************/
         if (!nextProcessIds.isEmpty() && StringUtils.isNotBlank(toBeProcessedBatchNum)) {
-            log.debug("开始增加后道工序作业:{}的待加工批次号:{}",nextProcessIds,toBeProcessedBatchNum);
+            log.debug("开始增加后道工序作业:{}的待加工批次号:{}", nextProcessIds, toBeProcessedBatchNum);
             //更新后续工序的待加工批次号信息
             apsProcessOperationService.updateBachmaterialprocessByIds(nextProcessIds, toBeProcessedBatchNum,
                     unqualifiedQuantity);
@@ -208,31 +218,30 @@ public class ReportCheckServiceImpl implements ReportCheckService {
         }
         /***************************存在不合格批次信息时 更新更新报工记录对应订单的订单评审状态=待计划评审, 订单调整日期=今天*************************************/
         if (unqualifiedQuantity > 0) {
-            apsProductionOrderService.getBaseMapper().changeOrderById(productionOrderDo.getId());
+            LambdaUpdateWrapper<ApsProductionOrderDo> lambdaUpdateWrapper = Wrappers.lambdaUpdate();
+            lambdaUpdateWrapper.eq(ApsProductionOrderDo::getId,productionOrderDo.getId());
+            lambdaUpdateWrapper.set(ApsProductionOrderDo::getAuditstatus,"待提交");
+            lambdaUpdateWrapper.set(ApsProductionOrderDo::getChangedate,new Date());
+            apsProductionOrderService.update(lambdaUpdateWrapper);
         }
         /************************更新工序*******************************/
-        log.debug("开始更新工序作业明细");
-        // 更新工序作业明细表的输出已检验卷数,不合格卷数,合格卷数完工状态,作业状态,生产状态
-        apsProcessOperationProcessEquService.updateAboutCheckBatchNum(processOperationEquId, inspectQuantity,
-                qualifiedQuantity, unqualifiedQuantity, previousprocessid, currentProcessOperationMainDo.getId());
         // 更新工序主表的 已检验卷数,不合格卷数,合格卷数 , 完工状态,作业状态,生产状态
         log.debug("开始更新工序作业");
         apsProcessOperationService.updateAboutCheckBatchNum(currentProcessOperationMainDo.getId(), inspectQuantity,
                 qualifiedQuantity, unqualifiedQuantity);
+
+        log.debug("开始更新工序作业明细");
+        // 更新工序作业明细表的输出已检验卷数,不合格卷数,合格卷数完工状态,作业状态,生产状态
+        apsProcessOperationProcessEquService.updateAboutCheckBatchNum(processOperationEquId, inspectQuantity,
+                qualifiedQuantity, unqualifiedQuantity, previousprocessid, currentProcessOperationMainDo.getId());
+
         /***************更新在制品信息****************************/
-//        // 需要刪除的ID
-//        List<String> deletedIdList = apsWorkInProgressInventoryDos.stream()
-//                .filter(info -> DELETED.equals(info.getDeleted())).map(ApsWorkInProgressInventoryDo::getId).collect(Collectors.toList());
         List<ApsWorkInProgressInventoryDo> updateList = apsWorkInProgressInventoryDos.stream()
                 .filter(info -> NO_DELETED.equals(info.getDeleted())).collect(Collectors.toList());
         if (!updateList.isEmpty()) {
             log.debug("更新在制品信息");
             apsWorkInProgressInventoryService.updateWorkinprocessstatus(apsWorkInProgressInventoryDos);
         }
-//        if (!deletedIdList.isEmpty()) {
-//            log.debug("删除的在制品");
-//            apsWorkInProgressInventoryService.removeByIds(deletedIdList);
-//        }
         /********************************更新当前报工记录的待检验批次号*************************************/
 //        apsReportRecordsService.update(new LambdaUpdateWrapper<ApsReportRecordsDo>().eq(ApsReportRecordsDo::getId, id)
 //                .set(ApsReportRecordsDo::getCheckstatus, VERIFIED)
@@ -271,6 +280,7 @@ public class ReportCheckServiceImpl implements ReportCheckService {
                 .eq(ApsReportRecordsDo::getId, id));
         return R.ok();
     }
+
     /**
      * 更新工序作业对应的订单信息
      * 如果存在不合格的批次信息 需要更新 订单相关信息

+ 7 - 7
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationDao.xml

@@ -7,9 +7,9 @@
 
         update aps_process_operation
         <set>
-            <if test="batchNum != null and batchNum!=''">
-                BACHMATERIALPROCESS = CONCAT_WS(',',BACHMATERIALPROCESS,#{batchNum}),
-            </if>
+<!--            <if test="batchNum != null and batchNum!=''">-->
+<!--                BACHMATERIALPROCESS = CONCAT_WS(',',BACHMATERIALPROCESS,#{batchNum}),-->
+<!--            </if>-->
             INPUTUNQUALIFIEDROLL = INPUTUNQUALIFIEDROLL +#{unqualifiedQuantity}
         </set>
         <where>
@@ -25,14 +25,14 @@
             OUTPUTQUALIFIEDNUM = IFNULL(OUTPUTQUALIFIEDNUM,0)+ #{qualifiedQuantity},
             OUTPUTUNQUALIFIEDNUM = IFNULL(OUTPUTUNQUALIFIEDNUM,0) +#{unqualifiedQuantity},
             CHECKOUTROLL = IFNULL(CHECKOUTROLL,0) +#{currentCheckNum},
-            UNFINISHROLL = UNFINISHROLL -#{currentCheckNum}
+            UNFINISHROLL = UNFINISHROLL -#{currentCheckNum},
+            <!-- 完工状态-->
+            CLOSESTATUS = case when UNFINISHROLL -#{currentCheckNum} = SECONDROLL+CANCELROLL then '已完工' else '加工中' end,
 <!--            ,-->
 <!--            &lt;!&ndash;实际完工时间&ndash;&gt;-->
 <!--            ACTUALFINISHDATE = (select IF(COUNT(ID) !=0 ,NULL,NOW()) from aps_process_operation_process_equ where-->
 <!--            PROCESSID =#{id} and CLOSESTATUS !='已完工'),-->
-<!--            &lt;!&ndash; 完工状态&ndash;&gt;-->
-<!--            CLOSESTATUS = (select IF(COUNT(ID) !=0 ,'未完工','已完工') from aps_process_operation_process_equ where-->
-<!--            PROCESSID =#{id} and CLOSESTATUS !='已完工'),-->
+
 <!--            &lt;!&ndash; 作业状态&ndash;&gt;-->
 <!--            WORKSTATUS = (select IF(COUNT(ID) !=0 ,'加工中','已完工') from aps_process_operation_process_equ where-->
 <!--            PROCESSID =#{id} and CLOSESTATUS !='已完工'),-->

+ 23 - 0
cx-aps/cx-aps-common/src/main/resources/mybatis/ApsProcessOperationOutMaterDao.xml

@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.rongwei.bscommon.sys.dao.ApsProcessOperationOutMaterDao">
+    <update id="reportCheckUpdateAboutVolumesNum">
+        update aps_process_operation_out_mater
+        <set>
+            <if test="unqualifiedQuantity != 0">
+                INSPECTROLLNUM=INSPECTROLLNUM+#{unqualifiedQuantity},
+            </if>
+            <if test="qualifiedQuantity!=0">
+                FAILROLLNUM=FAILROLLNUM+#{qualifiedQuantity},
+            </if>
+            <if test="inspectQuantity!=0">
+                GOODROLLNUM=GOODROLLNUM+#{inspectQuantity}
+            </if>
+        </set>
+        <where>
+            ID=#{id}
+        </where>
+    </update>
+</mapper>

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

@@ -257,7 +257,7 @@
             </if>
             <if test="processids != null ">and a1.PROCESSID in (${processids})</if>
         </where>
-        order by a1.PLANSTARTDATE asc,a1.PLANENDDATE,c.VALUE asc
+        order by a1.PROCESSWORKSHOP,a1.PROCESSDEVICE,a1.PLANSTARTDATE asc,a1.PLANENDDATE,c.VALUE asc
     </select>
     <select id="selectNeedUpdate" resultType="com.rongwei.bsentity.vo.CommonUpdateProductionStatusReq">
         SELECT

+ 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'

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

@@ -296,4 +296,10 @@ public class ApsBlankOrderDo extends BaseDo {
      */
     @TableField(value = "ROUTELENGTHEND")
     private BigDecimal routelengthend;
+
+    /**
+     * 坯料外观类型
+     */
+    @TableField(value = "BLANKAPPEARANCE")
+    private String blankappearance;
 }

+ 6 - 0
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/domain/ApsProcessOutputProductDo.java

@@ -4,6 +4,7 @@ import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.rongwei.rwcommon.base.BaseDo;
 import lombok.Data;
@@ -403,5 +404,10 @@ public class ApsProcessOutputProductDo extends BaseDo {
      */
     private String outmaterspecification;
 
+    /**
+     * 坯料外观类型
+     */
+    private String blankappearance;
+
     private static final long serialVersionUID = 1L;
 }

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

@@ -235,5 +235,10 @@ public class ApsProductionTechnicalRequirementDo extends BaseDo implements Seria
      */
     private String blankproducttypeid;
 
+    /**
+     * 坯料外观类型
+     */
+    private String blankappearance;
+
     private static final long serialVersionUID = 1L;
 }

+ 9 - 0
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsBlankOrderController.java

@@ -167,5 +167,14 @@ public class ApsBlankOrderController {
         }
 
     }
+
+    /**
+     * 根据坯料计划ID查询排程相关提醒
+     */
+    @PostMapping("/checkSchedule")
+    public R checkSchedule(@RequestBody List<String> blankIdList) {
+        log.info("checkSchedule 检查排程相关提醒,入参为:{}", blankIdList);
+        return apsBlankOrderService.checkSchedule(blankIdList);
+    }
 }