Browse Source

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

fangpy 8 tháng trước cách đây
mục cha
commit
70be6a632a

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

@@ -81,6 +81,9 @@ public interface ApsProductionOrderDao extends BaseMapper<ApsProductionOrderDo>
     List<BlankIdAndWorkShopVo> getWorkShopByBlankId(@Param("blankIdList") List<String> blankIdList);
 
     List<ApsProcessOperationDo> selectListAndPlanDate(@Param("blankIdList") List<String> blankIdList);
+
+    @Select("select DISTINCT apop.CHANGEALLOY from aps_blank_order abo LEFT JOIN aps_process_output_product apop ON abo.ID = apop.BLANKID AND apop.DELETED = 0 WHERE abo.DELETED = 0 AND abo.PRODUCTIONORDERID = #{id} AND apop.CHANGEALLOY != '' AND apop.CHANGEALLOY is not null ")
+    List<String> selectChangeAlloyByOrderId(@Param("id") String id);
 }
 
 

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

@@ -44,4 +44,6 @@ public interface ApsProductionOrderService extends IService<ApsProductionOrderDo
     R generalMsInsert(OrderSaveOrUpdateVo req);
 
     R generalMsUpdate(OrderSaveOrUpdateVo req);
+
+    R removeBatchNumberByOrderId(String orderId);
 }

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

@@ -114,6 +114,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     private ApsProcessOperationProcessEquBackupService apsProcessOperationProcessEquBackupService;
     @Autowired
     private ReportCheckService reportCheckService;
+    @Autowired
+    private ApsProcessOperationProcessEquServiceImpl apsProcessOperationProcessEquServiceImpl;
 
 
     @Override
@@ -252,10 +254,14 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     .set(ApsBlankOrderDo::getProductstatus, producttStatus)
                     .set(ApsBlankOrderDo::getSchedulingstatus, schedulingstatus));
         });
-        // 更新产品明细的生产状态
-        apsProductDetailDao.publishCancel(blankIds);
+//        // 更新产品明细的生产状态
+//        apsProductDetailDao.publishCancel(blankIds);
         // 更新订单的生产状态
         apsProcessOperationDao.publishCancel(productionOrderIds);
+        //更新产品明细的生产状态
+        for (String productionOrderId : productionOrderIds) {
+            apsProcessOperationProcessEquServiceImpl.updateProductDetail(productionOrderId);
+        }
         // 根据坯料ID 删除 备份数据
         ApsUtils.clearBackup(null);
         return R.ok();
@@ -316,10 +322,13 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     .set(ApsBlankOrderDo::getProductstatus, producttStatus)
                     .set(ApsBlankOrderDo::getSchedulingstatus, schedulingstatus));
         });
-        // 更新产品明细的生产状态
-        apsProductDetailDao.publishCancel(blankIds);
+//        // 更新产品明细的生产状态
+//        apsProductDetailDao.publishCancel(blankIds);
         // 更新订单的生产状态
         apsProcessOperationDao.publishCancel(productionOrderIds);
+        for (String productionOrderId : productionOrderIds) {
+            apsProcessOperationProcessEquServiceImpl.updateProductDetail(productionOrderId);
+        }
         // 根据坯料ID 删除 备份数据
         ApsUtils.clearBackup(null);
         return R.ok();
@@ -1982,11 +1991,17 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         //如果在制品不为空,并且为新增备料
         if (ObjectUtil.isNotEmpty(req.getProgressId()) && apsBlankOrderDo.getPreparematerial().equals("是")) {
             //将对应备料库(在制品库存表【aps_work_in_progress_inventory表】)中的备料计划ID(PLANMATERIALID)字段设置为坯料计划的ID
-            ApsWorkInProgressInventoryDo apsWorkInProgressInventoryDo = new ApsWorkInProgressInventoryDo();
-            apsWorkInProgressInventoryDo.setId(req.getProgressId());
-            apsWorkInProgressInventoryDo.setPlanmaterialid(apsBlankOrderDo.getId());
-            apsWorkInProgressInventoryDo.setWorkinprocessstatus(SaveConstans.WorkInProgressStatus.WAIT_WORK);
-            apsWorkInProgressInventoryService.updateById(apsWorkInProgressInventoryDo);
+//            ApsWorkInProgressInventoryDo apsWorkInProgressInventoryDo = new ApsWorkInProgressInventoryDo();
+//            apsWorkInProgressInventoryDo.setId(req.getProgressId());
+//            apsWorkInProgressInventoryDo.setPlanmaterialid(apsBlankOrderDo.getId());
+//            apsWorkInProgressInventoryDo.setWorkinprocessstatus(SaveConstans.WorkInProgressStatus.WAIT_WORK);
+//            apsWorkInProgressInventoryService.updateById(apsWorkInProgressInventoryDo);
+            apsWorkInProgressInventoryService.update(new UpdateWrapper<ApsWorkInProgressInventoryDo>().lambda()
+                    .set(ApsWorkInProgressInventoryDo::getPlanmaterialid, apsBlankOrderDo.getId())
+                    .setSql("REMARK = WORKINPROCESSSTATUS")
+                    .set(ApsWorkInProgressInventoryDo::getWorkinprocessstatus, SaveConstans.WorkInProgressStatus.WAIT_WORK)
+                    .eq(ApsWorkInProgressInventoryDo::getDeleted, "0")
+                    .eq(ApsWorkInProgressInventoryDo::getId, req.getProgressId()));
 
             //借调逻辑
             borrowBlank(progressWork);
@@ -2371,11 +2386,21 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
         this.baseMapper.deleteProcessEquBackupByBlankId(req.getId());
 
         //如果是否备料=是,备料对应在制品的备料计划ID=(空),在制品状态=备料中
-        if (apsBlankOrderDo.getPreparematerial().equals("是")) {
+        if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getPreparematerialbatchno())) {
+//            apsWorkInProgressInventoryService.update(new UpdateWrapper<ApsWorkInProgressInventoryDo>().lambda()
+//                    .set(ApsWorkInProgressInventoryDo::getPlanmaterialid, "")
+//                    .set(ApsWorkInProgressInventoryDo::getWorkinprocessstatus, SaveConstans.WorkInProgressStatus.WAITING)
+//                    .eq(ApsWorkInProgressInventoryDo::getBlankid, req.getId()));
+            List<String> batchNumberList = Arrays.asList(apsBlankOrderDo.getPreparematerialbatchno().split(","));
             apsWorkInProgressInventoryService.update(new UpdateWrapper<ApsWorkInProgressInventoryDo>().lambda()
-                    .set(ApsWorkInProgressInventoryDo::getBlankid, "")
-                    .set(ApsWorkInProgressInventoryDo::getWorkinprocessstatus, SaveConstans.WorkInProgressStatus.WAITING)
-                    .eq(ApsWorkInProgressInventoryDo::getBlankid, req.getId()));
+                    .set(ApsWorkInProgressInventoryDo::getPlanmaterialid, null)
+                    .setSql("WORKINPROCESSSTATUS = IF(REMARK = '待加工','备料中',REMARK)")
+                    .eq(ApsWorkInProgressInventoryDo::getDeleted, "0")
+                    .in(ApsWorkInProgressInventoryDo::getBatchnumber, batchNumberList));
+            //更新坯料计划该字段为空
+            apsBlankOrderService.update(new UpdateWrapper<ApsBlankOrderDo>().lambda()
+                    .set(ApsBlankOrderDo::getPreparematerialbatchno, null)
+                    .eq(ApsBlankOrderDo::getId, apsBlankOrderDo.getId()));
         }
 
         //查询此订单的其他任一一个坯料计划的Id,重新更新订单的状态
@@ -3247,6 +3272,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     .setSql("WORKINPROCESSSTATUS = IF(REMARK = '待加工','备料中',REMARK)")
                     .eq(ApsWorkInProgressInventoryDo::getDeleted, "0")
                     .in(ApsWorkInProgressInventoryDo::getBatchnumber, delBatchNumberList));
+            //更新坯料计划该字段为空
+            apsBlankOrderService.update(new UpdateWrapper<ApsBlankOrderDo>().lambda()
+                    .set(ApsBlankOrderDo::getPreparematerialbatchno, null)
+                    .eq(ApsBlankOrderDo::getId, apsBlankOrderDo.getId()));
         }
 
         //更新坯料计划的第一道工序作业的所有工序作业明细的待加工料卷批次号=领料批次号逗号拼接

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

@@ -2086,10 +2086,6 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
                     Integer nextCurCancelRoll = (int) Math.floor((double) (curcancelroll * processOperationDo.getPlanprocessrall()) / apsProcessOperationDo.getPlanprocessrall());
                     cancelProcessOperationVo1.setCurcancelroll(nextCurCancelRoll);
                     processOperationDo.setInputunqualifiedroll(processOperationDo.getInputunqualifiedroll() + nextCurCancelRoll);
-                    if (cancelProcessOperationVo.getBhgCancel()) {
-                        processOperationDo.setInputunqualifiednum(processOperationDo.getInputunqualifiednum() + nextCurCancelRoll);
-                        cancelProcessOperationVo1.setBhgCancel(true);
-                    }
                     cancelProcessOperationVo1.setApsprocessoperationdo(processOperationDo);
                     cancelProcessOperation(cancelProcessOperationVo1);
                 }
@@ -2217,7 +2213,7 @@ public class ApsProcessOperationServiceImpl extends ServiceImpl<ApsProcessOperat
         if (StringUtils.isNotBlank(processOperationProcessEquDo.getNextprocessesids())) {
             List<ApsProcessOperationProcessEquDo> processOperationProcessEquDos = apsProcessOperationDao.getNextProcessOperationEqus(processOperationProcessEquDo.getNextprocessesids().replace(",", "','"));
             for (ApsProcessOperationProcessEquDo processOperationEquDo : processOperationProcessEquDos) {
-                cancelProcessOperationEqu((int) Math.floor((double) (curEquCancelRoll * processOperationEquDo.getPlanprocessrall()) / processOperationProcessEquDo.getPlanprocessrall()), apsProcessOperationDo, processOperationEquDo, bhgCancel);
+                cancelProcessOperationEqu((int) Math.floor((double) (curEquCancelRoll * processOperationEquDo.getPlanprocessrall()) / processOperationProcessEquDo.getPlanprocessrall()), apsProcessOperationDo, processOperationEquDo, false);
             }
         }
 

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

@@ -127,6 +127,10 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
     private ProcessInstService processInstService;
     @Resource
     private CXAdminFeginClient cxAdminFeginClient;
+    @Autowired
+    private ApsProductionTechnicalRequirementService apsProductionTechnicalRequirementService;
+    @Autowired
+    private ApsWorkInProgressInventoryService apsWorkInProgressInventoryService;
 
 
     public static final String ERROR_MSG = "%s上诉订单的排程交货期大于承诺交货期";
@@ -331,6 +335,76 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
 //            }
 //        }
 
+            //==========校验订单技术要求============
+            /**
+             * 如果技术要求的订单产品在产品明细中不存在,错误提示:技术要求的订单产品{订单产品}已删除或已变更,请重新选择该技术要求的订单产品
+             * 如果有产品明细没有技术要求,错误提示:请填写{订单产品1},{订单产品2}的技术要求
+             * 如果合金成分要求为空,错误提示:请加载合金成分要求
+             * 校验所有坯料输出成品合金成分
+             *  如果坯料输出成品没有替代合金,并且合金没有加载合金成分要求,错误提示:{合金}合金成分要求没有加载
+             *  如果坯料输出成品有替代合金,并且替代合金没有加载合金成分要求,错误提示:{合金}替代合金成分要求没有加载
+             * 如果合金有多个合金成分要求,错误提示:{合金}合金成分要求不能有多个
+             */
+            //已有的产品明细的ID集合
+            List<String> nowOrderDetailIdList = apsProductDetailVoList.stream().map(ApsProductDetailVo::getId).collect(Collectors.toList());
+            //查询技术要求
+            List<ApsProductionTechnicalRequirementDo> apsProductionTechnicalRequirementDoList = apsProductionTechnicalRequirementService.list(new LambdaQueryWrapper<ApsProductionTechnicalRequirementDo>().eq(ApsProductionTechnicalRequirementDo::getOrderid, id));
+            //技术要求对应的产品明细ID集合
+            List<String> technicalHaveDetailIdList = new LinkedList<>();
+            for (ApsProductionTechnicalRequirementDo apsProductionTechnicalRequirementDo : apsProductionTechnicalRequirementDoList) {
+                if (ObjectUtil.isNotEmpty(apsProductionTechnicalRequirementDo.getOrderdetailids())) {
+                    String[] split1 = apsProductionTechnicalRequirementDo.getOrderdetailids().split(",");
+                    technicalHaveDetailIdList.addAll(Arrays.asList(split1));
+                    String[] split2 = apsProductionTechnicalRequirementDo.getOrderdetailnames().split(",");
+                    for (int i = 0; i < split1.length; i++) {
+                        String orderDetailId = split1[i];
+                        if (!nowOrderDetailIdList.contains(orderDetailId)) {
+                            return R.error("技术要求的订单产品" + split2[i] + "已删除或已变更,请重新选择该技术要求的订单产品");
+                        }
+                    }
+                }
+            }
+            for (String nowOrderDetailId : nowOrderDetailIdList) {
+                if (!technicalHaveDetailIdList.contains(nowOrderDetailId)) {
+                    ApsProductDetailVo apsProductDetailVo = apsProductDetailVoList.stream().filter(item -> item.getId().equals(nowOrderDetailId)).findFirst().orElse(null);
+                    return R.error("请填写" + apsProductDetailVo.getInputmaterialdescription() + "的技术要求");
+                }
+            }
+
+            List<ApsOrderAlloyCompositionDo> apsOrderAlloyCompositionDoList = apsOrderAlloyCompositionService.list(new LambdaQueryWrapper<ApsOrderAlloyCompositionDo>().eq(ApsOrderAlloyCompositionDo::getProductionorderid, id));
+            if (ObjectUtil.isEmpty(apsOrderAlloyCompositionDoList)) {
+                return R.error("请加载合金成分要求");
+            }
+            List<String> productDetailAlloyList = apsProductDetailVoList.stream().map(ApsProductDetailVo::getAlloy).collect(Collectors.toList());
+            for (String productDetailAlloy : productDetailAlloyList) {
+                if (ObjectUtil.isEmpty(apsOrderAlloyCompositionDoList.stream().filter(item -> item.getAlloy().equals(productDetailAlloy)).findFirst().orElse(null))) {
+                    return R.error(productDetailAlloy + "合金成分要求没有加载");
+                }
+
+            }
+
+            List<String> changeAlloyList = this.baseMapper.selectChangeAlloyByOrderId(id);
+            for (String changeAlloy : changeAlloyList) {
+                if (ObjectUtil.isEmpty(apsOrderAlloyCompositionDoList.stream().filter(item -> item.getAlloy().equals(changeAlloy)).findFirst().orElse(null))) {
+                    return R.error(changeAlloy + "替代合金成分要求没有加载");
+                }
+            }
+
+            Map<String, Integer> alloyCountMap = new HashMap<>();
+            apsOrderAlloyCompositionDoList.forEach(item -> {
+                if (alloyCountMap.containsKey(item.getAlloy())) {
+                    alloyCountMap.put(item.getAlloy(), alloyCountMap.get(item.getAlloy()) + 1);
+                } else {
+                    alloyCountMap.put(item.getAlloy(), 1);
+                }
+            });
+            for (String key : alloyCountMap.keySet()) {
+                if (alloyCountMap.get(key) > 1) {
+                    return R.error(key + "合金成分要求不能有多个");
+                }
+            }
+
+
             /**
              * 校验每个订单产品
              * 如果订单产品暂不评审=否,并且坯料计划输出总重量 = 0,则错误提示:订单产品 {输入物料描述}坯料计划未填写
@@ -945,6 +1019,29 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
         return R.ok();
     }
 
+    @Override
+    public R removeBatchNumberByOrderId(String orderId) {
+        //查询所有的坯料计划
+        List<ApsBlankOrderDo> apsBlankOrderDoList = apsBlankOrderService.list(new QueryWrapper<ApsBlankOrderDo>().lambda().eq(ApsBlankOrderDo::getProductionorderid, orderId));
+        for (ApsBlankOrderDo apsBlankOrderDo : apsBlankOrderDoList) {
+            //如果是否备料=是,备料对应在制品的备料计划ID=(空),在制品状态=备料中
+            if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getPreparematerialbatchno())) {
+                List<String> batchNumberList = Arrays.asList(apsBlankOrderDo.getPreparematerialbatchno().split(","));
+                apsWorkInProgressInventoryService.update(new UpdateWrapper<ApsWorkInProgressInventoryDo>().lambda()
+                        .set(ApsWorkInProgressInventoryDo::getPlanmaterialid, null)
+                        .setSql("WORKINPROCESSSTATUS = IF(REMARK = '待加工','备料中',REMARK)")
+                        .eq(ApsWorkInProgressInventoryDo::getDeleted, "0")
+                        .in(ApsWorkInProgressInventoryDo::getBatchnumber, batchNumberList));
+
+                //更新坯料计划该字段为空
+                apsBlankOrderService.update(new UpdateWrapper<ApsBlankOrderDo>().lambda()
+                        .set(ApsBlankOrderDo::getPreparematerialbatchno, null)
+                        .eq(ApsBlankOrderDo::getId, apsBlankOrderDo.getId()));
+            }
+        }
+        return R.ok();
+    }
+
 }
 
 

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

@@ -623,7 +623,6 @@ public class ReportCheckServiceImpl implements ReportCheckService {
                 cancelProcessOperationVo.setApsprocessoperationdo(apsProcessOperationDo);
                 cancelProcessOperationVo.setSetincancelroll(false);
                 cancelProcessOperationVo.setUpdatecuropration(false);
-                cancelProcessOperationVo.setBhgCancel(true);
                 apsProcessOperationService.cancelProcessOperation(cancelProcessOperationVo);
                 value = value - cancelQty;
             }
@@ -985,7 +984,6 @@ public class ReportCheckServiceImpl implements ReportCheckService {
                     cancelProcessOperationVo.setApsprocessoperationdo(apsProcessOperationDo);
                     cancelProcessOperationVo.setSetincancelroll(false);
                     cancelProcessOperationVo.setUpdatecuropration(false);
-                    cancelProcessOperationVo.setBhgCancel(true);
                     apsProcessOperationService.cancelProcessOperation(cancelProcessOperationVo);
                     value = value - cancelQty;
                 }

+ 0 - 2
cx-aps/cx-aps-entity/src/main/java/com/rongwei/bsentity/vo/CancelProcessOperationVo.java

@@ -13,8 +13,6 @@ public class CancelProcessOperationVo {
     private Boolean setincancelroll = true;
     //是否更新本道作业明细
     private Boolean updatecuropration = true;
-    //是否因为检验不合格取消
-    private Boolean bhgCancel = false;
     //修改的作业
     private ApsProcessOperationDo apsprocessoperationdo;
 }

+ 12 - 4
cx-aps/cx-aps-server/src/main/java/com/rongwei/bsserver/controller/ApsProductionOrderController.java

@@ -14,10 +14,7 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.List;
 
@@ -174,4 +171,15 @@ public class ApsProductionOrderController {
     public R generalMsUpdate(@RequestBody OrderSaveOrUpdateVo req) {
         return apsProductionOrderService.generalMsUpdate(req);
     }
+
+    /**
+     * 撤回订单时,需要的操作,释放备料或领料信息
+     */
+    @GetMapping("/removeBatchNumberByOrderId")
+    public R removeBatchNumberByOrderId(@RequestParam String orderId) {
+        if (StringUtils.isEmpty(orderId)) {
+            return R.error("订单ID不能为空");
+        }
+        return apsProductionOrderService.removeBatchNumberByOrderId(orderId);
+    }
 }