From e28990c8626f115fccad6fd5f47a6e98b85dacb7 Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期五, 13 三月 2026 10:24:55 +0800
Subject: [PATCH] 主生产计划增加状态字段,根据状态判断是否编辑删除

---
 src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java |   55 +++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 37 insertions(+), 18 deletions(-)

diff --git a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
index 6025b24..b04cf5a 100644
--- a/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
+++ b/src/main/java/com/ruoyi/productionPlan/service/impl/ProductionPlanServiceImpl.java
@@ -16,8 +16,10 @@
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.config.AliDingConfig;
 import com.ruoyi.production.pojo.ProductMaterial;
+import com.ruoyi.production.pojo.ProductMaterialSku;
 import com.ruoyi.production.pojo.ProductOrder;
 import com.ruoyi.production.service.ProductMaterialService;
+import com.ruoyi.production.service.ProductMaterialSkuService;
 import com.ruoyi.production.service.ProductOrderService;
 import com.ruoyi.productionPlan.dto.ProductionPlanDto;
 import com.ruoyi.productionPlan.dto.ProductionPlanImportDto;
@@ -72,6 +74,9 @@
     private ProductOrderPlanMapper productOrderPlanMapper;
 
     @Autowired
+    private ProductMaterialSkuService productMaterialSkuService;
+
+    @Autowired
     private ProductMaterialService productMaterialService;
 
     /**
@@ -111,8 +116,7 @@
         }
 
         //  鏌ヨ涓荤敓浜ц鍒�
-        List<ProductionPlan> plans = productionPlanMapper.selectBatchIds(productionPlanDto.getIds());
-        plans.sort(Comparator.comparingLong(ProductionPlan::getId));
+        List<ProductionPlanDto> plans = productionPlanMapper.selectWithMaterialByIds(productionPlanDto.getIds());
 
         //  鏍¢獙鏄惁瀛樺湪涓嶅悓鐨勪骇鍝佸悕绉�
         String firstProductName = plans.get(0).getProductName();
@@ -121,11 +125,10 @@
         }
 
         // 鏍¢獙鏄惁瀛樺湪涓嶅悓鐨勪骇鍝佽鏍�
-        String firstProductSpec = plans.get(0).getProductSpec();
-        if (plans.stream().anyMatch(p -> !p.getProductSpec().equals(firstProductSpec))) {
+        String firstProductSpec = plans.get(0).getSpecification();
+        if (plans.stream().anyMatch(p -> !p.getSpecification().equals(firstProductSpec))) {
             throw new BaseException("鍚堝苟澶辫触锛屽瓨鍦ㄤ笉鍚岀殑浜у搧瑙勬牸");
         }
-
 
         // 鍙犲姞鍓╀綑鏂规暟
         BigDecimal totalRemainingVolume = plans.stream()
@@ -163,6 +166,7 @@
             if (assignedVolume.add(remainingVolume).compareTo(productionPlanDto.getTotalAssignedQuantity()) >= 0) {
                 // 鏈�鍚庝竴涓鍒掞紝鍒嗛厤鍓╀綑鏂规暟
                 BigDecimal lastRemainingVolume = productionPlanDto.getTotalAssignedQuantity().subtract(assignedVolume);
+                plan.setStatus(1);
                 plan.setAssignedQuantity(plan.getAssignedQuantity().add(lastRemainingVolume));
                 productOrderPlan.setAssignedQuantity(lastRemainingVolume);
                 productionPlanMapper.updateById(plan);
@@ -171,6 +175,7 @@
             }
 
             // 鍒嗛厤褰撳墠璁″垝鏂规暟
+            plan.setStatus(1);
             plan.setAssignedQuantity(plan.getAssignedQuantity().add(remainingVolume));
             productOrderPlan.setAssignedQuantity(remainingVolume);
             // 鏇存柊鐢熶骇璁″垝
@@ -193,6 +198,10 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean update(ProductionPlanDto productionPlanDto) {
+        // 宸蹭笅鍙戠姸鎬侊紝涓嶈兘缂栬緫
+        if (productionPlanDto.getStatus() == 1) {
+            throw new BaseException("宸蹭笅鍙戠姸鎬侊紝涓嶈兘缂栬緫");
+        }
         // 鏌ヨ鏄惁鏈夊叧鑱旇鍗�
         boolean hasProductOrderPlan = productOrderPlanMapper.selectList(Wrappers.<ProductOrderPlan>lambdaQuery().eq(ProductOrderPlan::getProductionPlanId, productionPlanDto.getId())).stream().anyMatch(p -> p.getProductOrderId() != null);
         if (hasProductOrderPlan) {
@@ -209,6 +218,10 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public boolean delete(List<Long> ids) {
+        // 濡傛灉瀛樺湪宸蹭笅鍙戠殑璁″垝锛屽垯涓嶈兘鍒犻櫎
+        if (productionPlanMapper.selectList(Wrappers.<ProductionPlan>lambdaQuery().in(ProductionPlan::getId, ids).eq(ProductionPlan::getStatus, 1)).stream().anyMatch(p -> p.getStatus() == 1)) {
+            throw new BaseException("鍒犻櫎澶辫触锛屽瓨鍦ㄥ凡涓嬪彂鐨勮鍒�");
+        }
         // 濡傛灉鏈夊叧鑱旇鍗曪紝鍒欎笉鑳藉垹闄�
         if (productOrderPlanMapper.selectList(Wrappers.<ProductOrderPlan>lambdaQuery().in(ProductOrderPlan::getProductionPlanId, ids)).stream().anyMatch(p -> p.getProductOrderId() != null)) {
             throw new BaseException("鍒犻櫎澶辫触锛屽瓨鍦ㄥ叧鑱旇鍗�");
@@ -386,20 +399,16 @@
                 plan.setCustomerName(formData.getString("textField_lbkozohg"));
 
                 String materialCode = row.getString("textField_l9xo62q5");
-                plan.setMaterialCode(materialCode);
-
                 // 鏍规嵁鐗╂枡缂栫爜鏌ヨ鐗╂枡淇℃伅琛紝鍏宠仈鐗╂枡ID
                 if (StringUtils.isNotEmpty(materialCode)) {
-                    LambdaQueryWrapper<ProductMaterial> queryWrapper = new LambdaQueryWrapper<>();
-                    queryWrapper.eq(ProductMaterial::getMaterialCode, materialCode);
-                    ProductMaterial productMaterial = productMaterialService.getOne(queryWrapper);
-                    if (productMaterial != null) {
-                        plan.setProductMaterialId(productMaterial.getId());
+                    LambdaQueryWrapper<ProductMaterialSku> skuQueryWrapper = new LambdaQueryWrapper<>();
+                    skuQueryWrapper.eq(ProductMaterialSku::getMaterialCode, materialCode);
+                    ProductMaterialSku sku = productMaterialSkuService.getOne(skuQueryWrapper);
+                    if (sku != null) {
+                        plan.setProductMaterialSkuId(sku.getId());
                     }
                 }
 
-                plan.setProductName(row.getString("textField_l9xo62q7"));
-                plan.setProductSpec(row.getString("textField_l9xo62q8"));
                 plan.setLength(row.getInteger("numberField_lb7lgatg_value"));
                 plan.setWidth(row.getInteger("numberField_lb7lgath_value"));
                 plan.setHeight(row.getInteger("numberField_lb7lgati_value"));
@@ -473,19 +482,19 @@
         //  Map (formInstanceId + materialCode)
         Map<String, ProductionPlan> existMap = new HashMap<>();
         for (ProductionPlan p : existList) {
-            String key = p.getFormInstanceId() + "_" + p.getMaterialCode();
+            String key = p.getFormInstanceId() + "_" + p.getProductMaterialSkuId();
             existMap.put(key, p);
         }
 
         //  閬嶅巻鍚屾鏁版嵁
         for (ProductionPlan plan : list) {
-            String key = plan.getFormInstanceId() + "_" + plan.getMaterialCode();
+            String key = plan.getFormInstanceId() + "_" + plan.getProductMaterialSkuId();
             ProductionPlan exist = existMap.get(key);
             if (exist == null) {
                 // 鏂板
                 this.save(plan);
                 affected++;
-                log.info("鏂板鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getMaterialCode());
+                log.info("鏂板鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialSkuId());
             } else {
                 // 鍒ゆ柇鏄惁闇�瑕佹洿鏂�
                 if (exist.getFormModifiedTime() == null || !exist.getFormModifiedTime().equals(plan.getFormModifiedTime())) {
@@ -493,7 +502,7 @@
                     plan.setCreateTime(exist.getCreateTime());
                     this.updateById(plan);
                     affected++;
-                    log.info("鏇存柊鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getMaterialCode());
+                    log.info("鏇存柊鏁版嵁 formInstanceId={}, materialCode={}", plan.getFormInstanceId(), plan.getProductMaterialSkuId());
                 }
             }
         }
@@ -547,6 +556,16 @@
             entity.setDataSourceType(2);
             entity.setDataSyncType(1);
 
+            // 鏍规嵁鐗╂枡缂栫爜濉厖鍏宠仈ID
+            if (StringUtils.isNotEmpty(dto.getMaterialCode())) {
+                LambdaQueryWrapper<ProductMaterialSku> skuQueryWrapper = new LambdaQueryWrapper<>();
+                skuQueryWrapper.eq(ProductMaterialSku::getMaterialCode, dto.getMaterialCode());
+                ProductMaterialSku sku = productMaterialSkuService.getOne(skuQueryWrapper);
+                if (sku != null) {
+                    entity.setProductMaterialSkuId(sku.getId());
+                }
+            }
+
             entityList.add(entity);
         }
         this.saveBatch(entityList);

--
Gitblit v1.9.3