From 8d5e82d82c37c1c9236e0c679f199db53585c1ad Mon Sep 17 00:00:00 2001
From: gongchunyi <deslre0381@gmail.com>
Date: 星期三, 15 四月 2026 13:05:35 +0800
Subject: [PATCH] feat: 销售订单产品入库

---
 src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java                    |    3 +
 src/main/resources/mapper/sales/SalesLedgerMapper.xml                    |    3 +
 src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java      |    7 +++
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java   |   41 ++++++++++++++++++++
 src/main/java/com/ruoyi/sales/pojo/SalesLedger.java                      |    6 +++
 src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java           |    2 +
 src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java |    7 +--
 doc/河南鹤壁天沐钢化玻璃厂.sql                                                      |    5 ++
 8 files changed, 69 insertions(+), 5 deletions(-)

diff --git "a/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql" "b/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql"
index 190bcec..b315b4e 100644
--- "a/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql"
+++ "b/doc/\346\262\263\345\215\227\351\271\244\345\243\201\345\244\251\346\262\220\351\222\242\345\214\226\347\216\273\347\222\203\345\216\202.sql"
@@ -97,4 +97,7 @@
     MODIFY COLUMN `tax_rate` decimal(5, 0) NULL COMMENT '绋庣巼' AFTER `min_stock`,
     MODIFY COLUMN `tax_inclusive_unit_price` decimal(18, 2) NULL COMMENT '鍚◣鍗曚环' AFTER `tax_rate`,
     MODIFY COLUMN `tax_inclusive_total_price` decimal(18, 2) NULL COMMENT '鍚◣鎬讳环' AFTER `tax_inclusive_unit_price`,
-    MODIFY COLUMN `tax_exclusive_total_price` decimal(18, 2) NULL COMMENT '涓嶅惈绋庢�讳环' AFTER `tax_inclusive_total_price`;
\ No newline at end of file
+    MODIFY COLUMN `tax_exclusive_total_price` decimal(18, 2) NULL COMMENT '涓嶅惈绋庢�讳环' AFTER `tax_inclusive_total_price`;
+
+ALTER TABLE `sales_ledger`
+    ADD COLUMN `stock_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '鍏ュ簱鐘舵�侊細0-鏈叆搴擄紝1-宸插叆搴�' AFTER `delivery_status`;
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java b/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
index df0d011..3b9bee6 100644
--- a/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
+++ b/src/main/java/com/ruoyi/common/enums/StockInQualifiedRecordTypeEnum.java
@@ -6,13 +6,13 @@
 @Getter
 public enum StockInQualifiedRecordTypeEnum implements BaseEnum<String> {
 
-
     CUSTOMIZATION_STOCK_IN("0", "鍚堟牸鑷畾涔夊叆搴�"),
     PRODUCTION_REPORT_STOCK_IN("2", "鐢熶骇鎶ュ伐-鍏ュ簱"),
     PURCHASE_STOCK_IN("7", "閲囪喘-鍏ュ簱"),
     QUALITYINSPECT_STOCK_IN("6", "璐ㄦ-鍚堟牸鍏ュ簱"),
     DEFECTIVE_PASS("11", "涓嶅悎鏍�-璁╂鏀捐"),
-    RETURN_HE_IN("14", "閿�鍞��璐�-鍚堟牸鍏ュ簱");
+    RETURN_HE_IN("14", "閿�鍞��璐�-鍚堟牸鍏ュ簱"),
+    SALE_STOCK_IN("15", "閿�鍞�-鍚堟牸鍏ュ簱");
 
 
     private final String code;
@@ -22,5 +22,4 @@
         this.code = code;
         this.value = value;
     }
-
-}
+}
\ No newline at end of file
diff --git a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
index 09d9c23..01c2c96 100644
--- a/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
+++ b/src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -395,4 +395,11 @@
         return AjaxResult.success(list);
     }
 
+    @PostMapping("/salesStock")
+    @ApiOperation("閿�鍞彴璐︿骇鍝佸叆搴�")
+    public AjaxResult salesStock(@RequestBody SalesLedger salesLedger) {
+        salesLedgerService.salesStock(salesLedger);
+        return AjaxResult.success();
+    }
+
 }
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
index 06c0a40..19e872b 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerDto.java
@@ -62,4 +62,7 @@
 
     @ApiModelProperty(value = "鏄惁鍙戣揣")
     private Integer deliveryStatus;
+
+    @ApiModelProperty(value = "鍏ュ簱鐘舵��")
+    private Integer stockStatus;
 }
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
index deda7c8..e77e4f7 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedger.java
@@ -148,6 +148,12 @@
     @ApiModelProperty("鍙戣揣鐘舵�侊細1-鏈彂璐э紝2-瀹℃壒涓紝3-瀹℃壒涓嶉�氳繃锛�4-瀹℃壒閫氳繃锛�5-宸插彂璐�")
     private Integer deliveryStatus;
 
+    /**
+     * 鍏ュ簱鐘舵�侊細0-鏈叆搴擄紝1-宸插叆搴�
+     */
+    @ApiModelProperty("鍏ュ簱鐘舵�侊細0-鏈叆搴擄紝1-宸插叆搴�")
+    private Integer stockStatus;
+
     @TableField(exist = false)
     @ApiModelProperty(value = "浜よ揣澶╂暟宸�")
     private Integer deliveryDaysDiff;
diff --git a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
index e8440af..444be9d 100644
--- a/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
+++ b/src/main/java/com/ruoyi/sales/service/ISalesLedgerService.java
@@ -66,4 +66,6 @@
     SalesInvoicesDto salesInvoices(List<Long> salesLedgerIds);
 
     List<SalesLabelDto> salesLabel(Long salesLedgerId);
+
+    void salesStock(SalesLedger salesLedger);
 }
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 0ed7d6e..88d6432 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,7 @@
 import com.ruoyi.basic.service.ICustomerRegionsService;
 import com.ruoyi.common.enums.FileNameType;
 import com.ruoyi.common.enums.SaleEnum;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
 import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.DateUtils;
@@ -47,6 +48,8 @@
 import com.ruoyi.sales.service.ISalesLedgerProductProcessBindService;
 import com.ruoyi.sales.service.ISalesLedgerProductProcessService;
 import com.ruoyi.sales.service.ISalesLedgerService;
+import com.ruoyi.stock.dto.StockInventoryDto;
+import com.ruoyi.stock.service.StockInventoryService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.io.FilenameUtils;
@@ -125,6 +128,8 @@
     private final ISalesLedgerProductProcessBindService salesLedgerProductProcessBindService;
 
     private final ISalesLedgerProcessRouteService salesLedgerProcessRouteService;
+
+    private final StockInventoryService stockInventoryService;
 
     @Autowired
     private SysDeptMapper sysDeptMapper;
@@ -732,6 +737,7 @@
                 String contractNo = generateSalesContractNo();
                 salesLedger.setSalesContractNo(contractNo);
                 salesLedger.setDeliveryStatus(1);
+                salesLedger.setStockStatus(0);
                 salesLedgerMapper.insert(salesLedger);
             } else {
                 if (salesLedger.getDeliveryStatus() == 5) {
@@ -1500,4 +1506,39 @@
             return totalAmount;
         }
     }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void salesStock(SalesLedger salesLedger) {
+        if (salesLedger == null || salesLedger.getId() == null) {
+            throw new NullPointerException("鍏ュ簱澶辫触,璇烽�夋嫨闇�瑕佸叆搴撶殑閿�鍞鍗�");
+        }
+        //  鏌ヨ閿�鍞鍗曟槸鍚﹀瓨鍦�
+        SalesLedger ledger = baseMapper.selectById(salesLedger.getId());
+        if (ledger == null) {
+            throw new ServiceException("鍏ュ簱澶辫触,閿�鍞鍗曚笉瀛樺湪");
+        }
+        if (ledger.getStockStatus() == null) {
+            throw new ServiceException("鍏ュ簱澶辫触,閿�鍞鍗曞叆搴撶姸鎬佸紓甯�");
+        }
+        if (ledger.getStockStatus() == 1) {
+            throw new ServiceException("鍏ュ簱澶辫触,璇ラ攢鍞鍗曞凡鍏ュ簱,璇峰嬁閲嶅鍏ュ簱");
+        }
+        //  鏌ヨ閿�鍞鍗曠殑浜у搧
+        List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(Wrappers.<SalesLedgerProduct>lambdaQuery().eq(SalesLedgerProduct::getSalesLedgerId, ledger.getId()));
+        if (salesLedgerProducts == null || salesLedgerProducts.isEmpty()) {
+            throw new ServiceException("鍏ュ簱澶辫触,鏈煡璇㈠埌璇ラ攢鍞鍗曠殑閿�鍞骇鍝�");
+        }
+        for (SalesLedgerProduct product : salesLedgerProducts) {
+            if (product.getProductModelId() == null) {
+                continue;
+            }
+            StockInventoryDto dto = new StockInventoryDto();
+            dto.setRecordId(product.getId());
+            dto.setRecordType(StockInQualifiedRecordTypeEnum.SALE_STOCK_IN.getCode());
+            dto.setQualitity(product.getQuantity());
+            dto.setProductModelId(product.getProductModelId());
+            stockInventoryService.addstockInventory(dto);
+        }
+    }
 }
diff --git a/src/main/resources/mapper/sales/SalesLedgerMapper.xml b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
index 7612cda..70b4bd4 100644
--- a/src/main/resources/mapper/sales/SalesLedgerMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerMapper.xml
@@ -90,6 +90,9 @@
             <if test="salesLedgerDto.deliveryStatus != null">
                 AND T1.delivery_status = #{salesLedgerDto.deliveryStatus}
             </if>
+            <if test="salesLedgerDto.stockStatus != null">
+                AND T1.stock_status = #{salesLedgerDto.stockStatus}
+            </if>
         </where>
         ORDER BY T1.entry_date DESC
     </select>

--
Gitblit v1.9.3