From 9c43ef7d1ce78d5a576c63eb635776646f7b6cc2 Mon Sep 17 00:00:00 2001
From: yuan <123@>
Date: 星期五, 04 九月 2026 10:36:37 +0800
Subject: [PATCH] fix: 统一销售和采购相关页面金额、单价、数量、总价保留6位小数

---
 doc/20260829_alter_sales_purchase_amount_scale_6.sql                                         |   90 +++++++++++++++++++++++++++++++++++++++++++++
 src/main/java/com/ruoyi/account/service/impl/sales/AccountSalesCollectionServiceImpl.java    |    2 
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java                |    2 
 src/main/java/com/ruoyi/account/service/impl/purchase/AccountPurchasePaymentServiceImpl.java |    2 
 src/main/resources/mapper/sales/SalesLedgerProductMapper.xml                                 |    4 +-
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java                 |    2 
 src/main/java/com/ruoyi/sales/pojo/SalesQuotationProduct.java                                |    7 ++-
 7 files changed, 100 insertions(+), 9 deletions(-)

diff --git a/doc/20260829_alter_sales_purchase_amount_scale_6.sql b/doc/20260829_alter_sales_purchase_amount_scale_6.sql
new file mode 100644
index 0000000..0ea6b08
--- /dev/null
+++ b/doc/20260829_alter_sales_purchase_amount_scale_6.sql
@@ -0,0 +1,90 @@
+-- 閿�鍞�/閲囪喘鐩稿叧椤甸潰閲戦銆佸崟浠枫�佹暟閲忋�佹�讳环缁熶竴淇濈暀 6 浣嶅皬鏁�
+-- 娑夊強椤甸潰锛氶攢鍞姤浠枫�侀攢鍞彴璐︺�佸鎴烽��璐с�佸鎴峰線鏉ャ�侀噰璐彴璐︺�佷緵搴斿晢寰�鏉ャ�侀噰璐��璐с�侀噰璐姤琛�
+-- 缁熶竴浣跨敤 decimal(18, 6)锛氭暣鏁颁綅淇濈暀 12 浣嶏紝閬垮厤鐢� decimal(10, 2) 鐩存帴鏀瑰皬鏁颁綅瀵艰嚧鐨勬孩鍑�
+
+-- ----------------------------
+-- 閿�鍞姤浠凤紙sales_quotation / sales_quotation_product锛�
+-- ----------------------------
+ALTER TABLE `sales_quotation`
+    MODIFY COLUMN `total_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '鎶ヤ环閲戦';
+
+ALTER TABLE `sales_quotation_product`
+    MODIFY COLUMN `quantity` decimal(18, 6) NULL DEFAULT NULL COMMENT '鏁伴噺',
+    MODIFY COLUMN `unit_price` decimal(18, 6) NULL DEFAULT NULL COMMENT '鍗曚环',
+    MODIFY COLUMN `amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '閲戦';
+
+-- ----------------------------
+-- 閿�鍞彴璐︼紙sales_ledger / sales_ledger_product锛�
+-- ----------------------------
+ALTER TABLE `sales_ledger`
+    MODIFY COLUMN `contract_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '鍚堝悓閲戦锛堜骇鍝佸惈绋庢�讳环锛�',
+    MODIFY COLUMN `net_contract_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '瀹為檯鍚堝悓閲戦锛堟墸鍑忛��璐у悗锛�';
+
+ALTER TABLE `sales_ledger_product`
+    MODIFY COLUMN `quantity` decimal(18, 6) NOT NULL COMMENT '鏁伴噺',
+    MODIFY COLUMN `min_stock` decimal(18, 6) NULL DEFAULT NULL COMMENT '鏈�浣庡簱瀛�',
+    MODIFY COLUMN `tax_inclusive_unit_price` decimal(18, 6) NOT NULL COMMENT '鍚◣鍗曚环',
+    MODIFY COLUMN `tax_inclusive_total_price` decimal(18, 6) NOT NULL COMMENT '鍚◣鎬讳环',
+    MODIFY COLUMN `tax_exclusive_total_price` decimal(18, 6) NOT NULL COMMENT '涓嶅惈绋庢�讳环',
+    MODIFY COLUMN `warn_num` decimal(18, 6) NULL DEFAULT NULL COMMENT '棰勮鏁伴噺';
+
+-- 鍙拌处妯℃澘锛堜繚瀛�/濂楃敤妯℃澘鏃朵笌浜у搧琛ㄧ粨鏋勪繚鎸佷竴鑷达級
+ALTER TABLE `sales_ledger_product_template`
+    MODIFY COLUMN `quantity` decimal(18, 6) NULL DEFAULT NULL COMMENT '鏁伴噺',
+    MODIFY COLUMN `min_stock` decimal(18, 6) NULL DEFAULT NULL COMMENT '鏈�浣庡簱瀛�',
+    MODIFY COLUMN `tax_inclusive_unit_price` decimal(18, 6) NULL DEFAULT NULL COMMENT '鍚◣鍗曚环',
+    MODIFY COLUMN `tax_inclusive_total_price` decimal(18, 6) NULL DEFAULT NULL COMMENT '鍚◣鎬讳环',
+    MODIFY COLUMN `tax_exclusive_total_price` decimal(18, 6) NULL DEFAULT NULL COMMENT '涓嶅惈绋庢�讳环',
+    MODIFY COLUMN `warn_num` decimal(18, 6) NULL DEFAULT NULL COMMENT '棰勮鏁伴噺';
+
+-- ----------------------------
+-- 瀹㈡埛閫�璐э紙return_management / return_sale_product / sales_refund_amount_order锛�
+-- ----------------------------
+ALTER TABLE `return_management`
+    MODIFY COLUMN `refund_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '閫�娆炬�婚';
+
+ALTER TABLE `return_sale_product`
+    MODIFY COLUMN `num` decimal(18, 6) NOT NULL COMMENT '閫�璐т骇鍝佹暟閲�',
+    MODIFY COLUMN `price` decimal(18, 6) NULL DEFAULT NULL COMMENT '鍗曚环',
+    MODIFY COLUMN `amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '閲戦';
+
+ALTER TABLE `sales_refund_amount_order`
+    MODIFY COLUMN `refund_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '搴旈��娆鹃噾棰�',
+    MODIFY COLUMN `refunded_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '宸查��娆鹃噾棰�',
+    MODIFY COLUMN `not_refunded_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '鏈��娆鹃噾棰�';
+
+-- ----------------------------
+-- 瀹㈡埛寰�鏉ワ紙鍥炴閲戦鏉ユ簮锛歛ccount_sales_collection銆乺eceipt_payment锛�
+-- ----------------------------
+ALTER TABLE `account_sales_collection`
+    MODIFY COLUMN `collection_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '鏀舵閲戦';
+
+ALTER TABLE `receipt_payment`
+    MODIFY COLUMN `receipt_payment_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '鍥炴閲戦';
+
+-- ----------------------------
+-- 閲囪喘鍙拌处锛坧urchase_ledger / purchase_ledger_template锛�
+-- ----------------------------
+ALTER TABLE `purchase_ledger`
+    MODIFY COLUMN `contract_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '鍚堝悓閲戦',
+    MODIFY COLUMN `net_contract_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '瀹為檯鍚堝悓閲戦锛堟墸鍑忛��璐у悗锛�';
+
+ALTER TABLE `purchase_ledger_template`
+    MODIFY COLUMN `contract_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '鍚堝悓閲戦';
+
+-- ----------------------------
+-- 渚涘簲鍟嗗線鏉ワ紙浠樻閲戦鏉ユ簮锛歛ccount_purchase_payment锛�
+-- ----------------------------
+ALTER TABLE `account_purchase_payment`
+    MODIFY COLUMN `payment_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '浠樻閲戦';
+
+-- ----------------------------
+-- 閲囪喘閫�璐э紙purchase_return_orders / purchase_return_order_products锛�
+-- ----------------------------
+ALTER TABLE `purchase_return_orders`
+    MODIFY COLUMN `total_discount_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '鏁村崟鎶樻墸棰�',
+    MODIFY COLUMN `total_discount_rate` decimal(18, 6) NULL DEFAULT NULL COMMENT '鏁村崟鎶樻墸鐜�',
+    MODIFY COLUMN `total_amount` decimal(18, 6) NULL DEFAULT NULL COMMENT '鎴愪氦閲戦';
+
+ALTER TABLE `purchase_return_order_products`
+    MODIFY COLUMN `return_quantity` decimal(18, 6) NOT NULL DEFAULT 0.000000 COMMENT '閫�璐ф暟閲�';
diff --git a/src/main/java/com/ruoyi/account/service/impl/purchase/AccountPurchasePaymentServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/purchase/AccountPurchasePaymentServiceImpl.java
index 1246d68..a0bbe95 100644
--- a/src/main/java/com/ruoyi/account/service/impl/purchase/AccountPurchasePaymentServiceImpl.java
+++ b/src/main/java/com/ruoyi/account/service/impl/purchase/AccountPurchasePaymentServiceImpl.java
@@ -97,7 +97,7 @@
         if (dto.getPaymentDate() == null) {
             throw new ServiceException("璇烽�夋嫨浠樻鏃ユ湡");
         }
-        if (dto.getPaymentAmount() == null || dto.getPaymentAmount().compareTo(BigDecimal.valueOf(0.01)) < 0) {
+        if (dto.getPaymentAmount() == null || dto.getPaymentAmount().compareTo(new BigDecimal("0.000001")) < 0) {
             throw new ServiceException("璇疯緭鍏ヤ粯娆鹃噾棰�");
         }
         if (StringUtils.isEmpty(dto.getPurchaseContractNumber())) {
diff --git a/src/main/java/com/ruoyi/account/service/impl/sales/AccountSalesCollectionServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/sales/AccountSalesCollectionServiceImpl.java
index 6b905c9..20374ae 100644
--- a/src/main/java/com/ruoyi/account/service/impl/sales/AccountSalesCollectionServiceImpl.java
+++ b/src/main/java/com/ruoyi/account/service/impl/sales/AccountSalesCollectionServiceImpl.java
@@ -102,7 +102,7 @@
         if (dto.getPaymentDate() == null) {
             throw new ServiceException("璇烽�夋嫨鍥炴鏃ユ湡");
         }
-        if (dto.getPaymentAmount() == null || dto.getPaymentAmount().compareTo(BigDecimal.valueOf(0.01)) < 0) {
+        if (dto.getPaymentAmount() == null || dto.getPaymentAmount().compareTo(new BigDecimal("0.000001")) < 0) {
             throw new ServiceException("璇疯緭鍏ュ洖娆鹃噾棰�");
         }
         if (StringUtils.isEmpty(dto.getSalesContractNo())) {
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 2836d14..765c811 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -992,7 +992,7 @@
                     salesLedgerProduct.setSalesLedgerId(salesLedger.getId());
                     salesLedgerProduct.setType(2);
                     // 璁$畻涓嶅惈绋庢�讳环
-                    salesLedgerProduct.setTaxExclusiveTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice().divide(new BigDecimal(1).add(salesLedgerProduct.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP));
+                    salesLedgerProduct.setTaxExclusiveTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice().divide(new BigDecimal(1).add(salesLedgerProduct.getTaxRate().divide(new BigDecimal(100))), 6, RoundingMode.HALF_UP));
                     // 浜у搧澶х被/瑙勬牸鍨嬪彿涓嶅瓨鍦ㄦ椂鑷姩鍒涘缓
                     String productName = salesLedgerProduct.getProductCategory();
                     if (StringUtils.isNotBlank(productName)) {
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesQuotationProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesQuotationProduct.java
index 2e55e79..53b9651 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesQuotationProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesQuotationProduct.java
@@ -4,6 +4,7 @@
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
+import java.math.BigDecimal;
 import java.time.LocalDateTime;
 
 @Data
@@ -27,11 +28,11 @@
     @Schema(description = "鍗曚綅")
     private String unit;
     @Schema(description = "鍗曚环")
-    private Double unitPrice;
+    private BigDecimal unitPrice;
     @Schema(description = "鏁伴噺")
-    private Integer quantity;
+    private BigDecimal quantity;
     @Schema(description = "閲戦")
-    private Double amount;
+    private BigDecimal amount;
     @Schema(description = "鍒涘缓鏃堕棿")
     @TableField(fill = FieldFill.INSERT)
     private LocalDateTime createTime;
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index cf1a444..dc327bb 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -334,7 +334,7 @@
             BigDecimal remain = stockInventory.getQualitity()
                     .subtract(stockInventory.getLockedQuantity())
                     .subtract(required)
-                    .divide(BigDecimal.ONE, 2, RoundingMode.CEILING);
+                    .divide(BigDecimal.ONE, 6, RoundingMode.CEILING);
             if (remain.compareTo(BigDecimal.ZERO) < 0) {
                 count++;
                 stringBuffer.append(structure.getProductName())
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index 2d18023..fc1fee8 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -139,8 +139,8 @@
         SUM(slp.quantity) AS purchaseNum,
         SUM(slp.tax_inclusive_total_price) AS purchaseAmount,
         COUNT(DISTINCT slp.sales_ledger_id) AS purchaseTimes,
-        <!-- 骞冲潎鍗曚环 = 鎬婚噰璐噾棰�/鎬婚噰璐暟閲忥紝淇濈暀2浣嶅皬鏁帮紝閬垮厤闄�0 -->
-        ROUND(IF(SUM(slp.quantity) = 0, 0, SUM(slp.tax_inclusive_total_price) / SUM(slp.quantity)), 2) AS averagePrice,
+        <!-- 骞冲潎鍗曚环 = 鎬婚噰璐噾棰�/鎬婚噰璐暟閲忥紝淇濈暀6浣嶅皬鏁帮紝閬垮厤闄�0 -->
+        ROUND(IF(SUM(slp.quantity) = 0, 0, SUM(slp.tax_inclusive_total_price) / SUM(slp.quantity)), 6) AS averagePrice,
         <!-- 璇ヤ骇鍝佸ぇ绫讳笅鏈�鍚庝竴涓綍鍏ユ棩鏈燂紙鍙栧彴璐︿富琛ㄧ殑entry_date锛� -->
         MAX(sl.entry_date) AS entryDate,
         COALESCE(NULLIF(SUM(t1.return_quantity), 0), 0) AS return_quantity,

--
Gitblit v1.9.3