From 5640d1300795c002438962386049bb65fb4f2216 Mon Sep 17 00:00:00 2001
From: 吴羡 <16976746+Xian-TT3@user.noreply.gitee.com>
Date: 星期二, 22 九月 2026 18:05:34 +0800
Subject: [PATCH] feat: 采购台账产品层级自动注册与材质字段、大类删除限制、审批模板启用后仅可修改状态

---
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java |   34 ++++++++++++++++++++++++++++++++++
 1 files changed, 34 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index 7c25815..ead2eb3 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -22,6 +22,7 @@
 import com.ruoyi.basic.pojo.Product;
 import com.ruoyi.basic.pojo.ProductModel;
 import com.ruoyi.basic.pojo.SupplierManage;
+import com.ruoyi.basic.service.IProductService;
 import com.ruoyi.basic.utils.FileUtil;
 import com.ruoyi.common.enums.ApprovalStatusEnum;
 import com.ruoyi.common.enums.ReviewStatusEnum;
@@ -103,6 +104,7 @@
     private final SupplierManageMapper supplierManageMapper;
     private final ProductMapper productMapper;
     private final ProductModelMapper productModelMapper;
+    private final IProductService productService;
     private final SysUserMapper sysUserMapper;
     private final StringRedisTemplate redisTemplate;
     private final QualityInspectMapper qualityInspectMapper;
@@ -631,6 +633,11 @@
         }
         Integer ledgerType = type == null ? 2 : type;
 
+        // 鎵嬪伐褰曞叆銆屽搧鍚�+鏉愯川+瑙勬牸鍨嬪彿銆嶆椂锛岃嚜鍔ㄦ敞鍐屽埌浜у搧缁存姢
+        for (SalesLedgerProduct product : products) {
+            registerProductFromLedgerProduct(product);
+        }
+
         // 鎻愬墠鏀堕泦鎵�鏈夐渶瑕佹煡璇㈢殑ID
         Set<Long> productIds = products.stream()
                 .map(SalesLedgerProduct::getProductId)
@@ -658,6 +665,11 @@
         // 璁剧疆瀛楁
         for (SalesLedgerProduct product : products) {
             product.setSalesLedgerId(salesLedgerId);
+
+            // 鎵嬪伐褰曞叆鍝佸悕/鏉愯川/瑙勬牸鍨嬪彿鐨勮宸插湪娉ㄥ唽鏃跺啓鍏ワ紝涓嶅啀鐢ㄤ骇鍝佹爲鑺傜偣鍚嶇О瑕嗙洊
+            if (StringUtils.isNotEmpty(product.getMaterial())) {
+                continue;
+            }
 
             Long productId = product.getProductId();
             if (productId != null && productMap.containsKey(productId)) {
@@ -710,6 +722,28 @@
         }
     }
 
+    /**
+     * 鎵嬪伐褰曞叆銆屽搧鍚�+鏉愯川+瑙勬牸鍨嬪彿銆嶆椂锛屽湪浜у搧缁存姢鑷姩娉ㄥ唽锛�
+     * 鍝佸悕=涓�绾уぇ绫伙紝鏉愯川=澶х被涓嬬殑瀛愮被锛岃鏍煎瀷鍙�=瀛愮被涓嬬殑瑙勬牸
+     */
+    private void registerProductFromLedgerProduct(SalesLedgerProduct product) {
+        String productName = StringUtils.trim(product.getProductCategory());
+        String material = StringUtils.trim(product.getMaterial());
+        String modelName = StringUtils.trim(product.getSpecificationModel());
+        if (StringUtils.isEmpty(productName) || StringUtils.isEmpty(material) || StringUtils.isEmpty(modelName)) {
+            return;
+        }
+        product.setProductCategory(productName);
+        product.setMaterial(material);
+        product.setSpecificationModel(modelName);
+
+        ProductModel productModel = productService.ensureProductHierarchy(productName, material, modelName, product.getUnit());
+        if (productModel != null) {
+            product.setProductId(productModel.getProductId());
+            product.setProductModelId(productModel.getId());
+        }
+    }
+
     @Override
     @Transactional(rollbackFor = Exception.class)
     public int deletePurchaseLedgerByIds(Long[] ids) {

--
Gitblit v1.9.3