From 000112976716cb6676e61b35e818481db8eb99a1 Mon Sep 17 00:00:00 2001
From: gaoluyang <2820782392@qq.com>
Date: 星期日, 11 十月 2026 14:46:40 +0800
Subject: [PATCH] 天津-奇缘恒艺 录数据需求修改

---
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java |   57 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 55 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index 751739c..84b849c 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -18,6 +18,8 @@
 import com.ruoyi.basic.mapper.ProductMapper;
 import com.ruoyi.basic.mapper.ProductModelMapper;
 import com.ruoyi.basic.pojo.Customer;
+import com.ruoyi.basic.pojo.ProductModel;
+import com.ruoyi.basic.service.IProductService;
 import com.ruoyi.basic.utils.FileUtil;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.SaleEnum;
@@ -106,6 +108,7 @@
     private final FileUtil fileUtil;
     private final AccountInvoiceApplicationMapper accountInvoiceApplicationMapper;
     private final AccountSalesCollectionMapper accountSalesCollectionMapper;
+    private final IProductService productService;
 
     @Autowired
     private SysDeptMapper sysDeptMapper;
@@ -327,7 +330,7 @@
                     .in("customer_name", salesLedgerImportDtoList.stream()
                             .map(SalesLedgerImportDto::getCustomerName).collect(Collectors.toList()))
                     .and(wrapper -> wrapper.eq("type", 0)
-                            .or(wrapper2 -> wrapper2.eq("type", 1).eq("is_assigned", 1)))
+                            .or(wrapper2 -> wrapper2.eq("type", 1).eq("usage_status", 1)))
                     .and(wrapper -> wrapper.eq("usage_user", loginUserId)
                             .or(wrapper2 -> wrapper2.eq("create_user", loginUserId)
                                     .or(wrapper3 -> wrapper3.exists("select 1 from customer_user cu where cu.customer_id = customer.id and cu.user_id = " + loginUserId)))));
@@ -385,6 +388,7 @@
                 salesLedger.setContractAmount(salesLedgerProductImportDtos.stream()
                         .map(SalesLedgerProductImportDto::getTaxInclusiveTotalPrice)
                         .reduce(BigDecimal.ZERO, BigDecimal::add));
+                salesLedger.setNetContractAmount(salesLedger.getContractAmount());
                 salesLedgerMapper.insert(salesLedger);
 
 
@@ -590,7 +594,18 @@
             );
         }
 
-        // 5. 淇濆瓨閿�鍞彴璐﹂檮浠�
+        // 5. 鍏滃簳锛氱‘淇濆疄闄呭悎鍚岄噾棰濇湁鍒濆鍊肩瓑浜庡悎鍚岄噾棰�
+        if (salesLedger.getNetContractAmount() == null) {
+            SalesLedger dbLedger = salesLedgerMapper.selectById(salesLedger.getId());
+            if (dbLedger != null && dbLedger.getNetContractAmount() == null && dbLedger.getContractAmount() != null) {
+                SalesLedger updateEntity = new SalesLedger();
+                updateEntity.setId(salesLedger.getId());
+                updateEntity.setNetContractAmount(dbLedger.getContractAmount());
+                salesLedgerMapper.updateById(updateEntity);
+            }
+        }
+
+        // 6. 淇濆瓨閿�鍞彴璐﹂檮浠�
         fileUtil.saveStorageAttachment(ApplicationTypeEnum.FILE, RecordTypeEnum.SALES_LEDGER, salesLedger.getId(), salesLedgerDto.getStorageBlobDTOs());
 
         return 1;
@@ -598,6 +613,13 @@
 
     @Override
     public void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, SaleEnum type) {
+        // 閿�鍞彴璐︽墜宸ュ綍鍏ャ�屽搧鍚�+鏉愯川+瑙勬牸鍨嬪彿銆嶆椂锛岃嚜鍔ㄦ敞鍐屽埌浜у搧缁存姢
+        if (SaleEnum.SALE.equals(type)) {
+            for (SalesLedgerProduct product : products) {
+                registerProductFromLedgerProduct(product);
+            }
+        }
+
         // 鎸塈D鍒嗙粍锛屽尯鍒嗘柊澧炲拰鏇存柊鐨勮褰�
         Map<Boolean, List<SalesLedgerProduct>> partitionedProducts = products.stream()
                 .peek(p -> p.setSalesLedgerId(salesLedgerId))
@@ -621,6 +643,28 @@
                 // 娣诲姞鐢熶骇鏁版嵁
                 salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct);
             }
+        }
+    }
+
+    /**
+     * 鎵嬪伐褰曞叆銆屽搧鍚�+鏉愯川+瑙勬牸鍨嬪彿銆嶆椂锛屽湪浜у搧缁存姢鑷姩娉ㄥ唽锛�
+     * 鍝佸悕=涓�绾уぇ绫伙紝鏉愯川=澶х被涓嬬殑瀛愮被锛岃鏍煎瀷鍙�=瀛愮被涓嬬殑瑙勬牸
+     */
+    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());
         }
     }
 
@@ -728,6 +772,15 @@
             amountField.setAccessible(true);
             amountField.set(entity, totalAmount);
 
+            // 瀹為檯鍚堝悓閲戦鍒濆鍊肩瓑浜庡悎鍚岄噾棰�
+            try {
+                Field netAmountField = mainEntityClass.getDeclaredField("netContractAmount");
+                netAmountField.setAccessible(true);
+                netAmountField.set(entity, totalAmount);
+            } catch (NoSuchFieldException ignored) {
+                // 瀛愮被鍙兘娌℃湁璇ュ瓧娈碉紝蹇界暐
+            }
+
             mainMapper.updateById(entity);
         } catch (Exception e) {
             throw new RuntimeException("鍔ㄦ�佹洿鏂颁富琛ㄩ噾棰濆け璐�", e);

--
Gitblit v1.9.3