From 7ab0221edafd81468b37935fd6e8a9f7cebd181f Mon Sep 17 00:00:00 2001
From: huminmin <mac@MacBook-Pro.local>
Date: 星期一, 08 六月 2026 15:14:41 +0800
Subject: [PATCH] 销售台账/采购台账,在新增产品数据的时候,增加一个运费单价(非必填),就像那个含税单价一样,当用户填完数量和运费单价之后,可以直接计算出这个产品的总运费
---
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java | 3 +
src/main/resources/mapper/sales/SalesLedgerProductMapper.xml | 2 +
src/main/java/com/ruoyi/purchase/pojo/SalesLedgerProductTemplate.java | 6 +++
src/main/java/com/ruoyi/common/utils/FreightUtils.java | 33 ++++++++++++++++
src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerProductImportDto.java | 12 ++++++
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java | 4 ++
src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java | 12 ++++++
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java | 8 ++--
doc/20260608_add_freight_fields_to_sales_ledger_product.sql | 7 +++
src/main/java/com/ruoyi/sales/dto/SalesLedgerProductImportDto.java | 12 ++++++
10 files changed, 94 insertions(+), 5 deletions(-)
diff --git a/doc/20260608_add_freight_fields_to_sales_ledger_product.sql b/doc/20260608_add_freight_fields_to_sales_ledger_product.sql
new file mode 100644
index 0000000..f8613c5
--- /dev/null
+++ b/doc/20260608_add_freight_fields_to_sales_ledger_product.sql
@@ -0,0 +1,7 @@
+alter table sales_ledger_product
+ add freight_unit_price decimal(16, 2) null comment '杩愯垂鍗曚环' after tax_inclusive_total_price,
+ add total_freight decimal(16, 2) null comment '鎬昏繍璐�' after freight_unit_price;
+
+alter table sales_ledger_product_template
+ add freight_unit_price decimal(16, 2) null comment '杩愯垂鍗曚环' after tax_inclusive_total_price,
+ add total_freight decimal(16, 2) null comment '鎬昏繍璐�' after freight_unit_price;
diff --git a/src/main/java/com/ruoyi/common/utils/FreightUtils.java b/src/main/java/com/ruoyi/common/utils/FreightUtils.java
new file mode 100644
index 0000000..398bc1d
--- /dev/null
+++ b/src/main/java/com/ruoyi/common/utils/FreightUtils.java
@@ -0,0 +1,33 @@
+package com.ruoyi.common.utils;
+
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
+
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+
+/**
+ * 杩愯垂璁$畻宸ュ叿绫�
+ */
+public class FreightUtils {
+
+ private FreightUtils() {
+ // 绉佹湁鏋勯�犲嚱鏁帮紝闃叉瀹炰緥鍖�
+ }
+
+ /**
+ * 璁$畻鎬昏繍璐�
+ * 鎬昏繍璐� = 鏁伴噺 脳 杩愯垂鍗曚环
+ *
+ * @param product 浜у搧淇℃伅
+ */
+ public static void fillFreightAmount(SalesLedgerProduct product) {
+ if (product == null) {
+ return;
+ }
+ if (product.getQuantity() == null || product.getFreightUnitPrice() == null) {
+ product.setTotalFreight(null);
+ return;
+ }
+ product.setTotalFreight(product.getQuantity().multiply(product.getFreightUnitPrice()).setScale(2, RoundingMode.HALF_UP));
+ }
+}
diff --git a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerProductImportDto.java b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerProductImportDto.java
index 3db4abe..acbe0a8 100644
--- a/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerProductImportDto.java
+++ b/src/main/java/com/ruoyi/purchase/dto/PurchaseLedgerProductImportDto.java
@@ -69,6 +69,18 @@
private BigDecimal taxInclusiveTotalPrice;
/**
+ * 杩愯垂鍗曚环
+ */
+ @Excel(name = "杩愯垂鍗曚环")
+ private BigDecimal freightUnitPrice;
+
+ /**
+ * 鎬昏繍璐�
+ */
+ @Excel(name = "鎬昏繍璐�")
+ private BigDecimal totalFreight;
+
+ /**
* 鍙戠エ绫诲瀷
*/
@Excel(name = "鍙戠エ绫诲瀷")
diff --git a/src/main/java/com/ruoyi/purchase/pojo/SalesLedgerProductTemplate.java b/src/main/java/com/ruoyi/purchase/pojo/SalesLedgerProductTemplate.java
index 793fba6..d53fd50 100644
--- a/src/main/java/com/ruoyi/purchase/pojo/SalesLedgerProductTemplate.java
+++ b/src/main/java/com/ruoyi/purchase/pojo/SalesLedgerProductTemplate.java
@@ -59,6 +59,12 @@
@Schema(description = "鍚◣鎬讳环")
private BigDecimal taxInclusiveTotalPrice;
+ @Schema(description = "杩愯垂鍗曚环")
+ private BigDecimal freightUnitPrice;
+
+ @Schema(description = "鎬昏繍璐�")
+ private BigDecimal totalFreight;
+
@Schema(description = "涓嶅惈绋庢�讳环")
private BigDecimal taxExclusiveTotalPrice;
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 a3458b8..0833069 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -27,6 +27,7 @@
import com.ruoyi.common.enums.ReviewStatusEnum;
import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
import com.ruoyi.common.utils.DateUtils;
+import com.ruoyi.common.utils.FreightUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -678,6 +679,7 @@
// 鎵ц鏇存柊鎿嶄綔
if (!updateList.isEmpty()) {
for (SalesLedgerProduct product : updateList) {
+ FreightUtils.fillFreightAmount(product);
product.setType(ledgerType);
salesLedgerProductMapper.updateById(product);
}
@@ -685,6 +687,7 @@
// 鎵ц鎻掑叆鎿嶄綔
if (!insertList.isEmpty()) {
for (SalesLedgerProduct salesLedgerProduct : insertList) {
+ FreightUtils.fillFreightAmount(salesLedgerProduct);
salesLedgerProduct.setType(ledgerType);
Date entryDate = purchaseLedger.getEntryDate();
@@ -974,6 +977,7 @@
for (PurchaseLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) {
SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct();
BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct);
+ FreightUtils.fillFreightAmount(salesLedgerProduct);
salesLedgerProduct.setSalesLedgerId(salesLedger.getId());
salesLedgerProduct.setType(2);
// 璁$畻涓嶅惈绋庢�讳环
diff --git a/src/main/java/com/ruoyi/sales/dto/SalesLedgerProductImportDto.java b/src/main/java/com/ruoyi/sales/dto/SalesLedgerProductImportDto.java
index 9f05b60..9346354 100644
--- a/src/main/java/com/ruoyi/sales/dto/SalesLedgerProductImportDto.java
+++ b/src/main/java/com/ruoyi/sales/dto/SalesLedgerProductImportDto.java
@@ -62,6 +62,18 @@
private BigDecimal taxInclusiveTotalPrice;
/**
+ * 杩愯垂鍗曚环
+ */
+ @Excel(name = "杩愯垂鍗曚环")
+ private BigDecimal freightUnitPrice;
+
+ /**
+ * 鎬昏繍璐�
+ */
+ @Excel(name = "鎬昏繍璐�")
+ private BigDecimal totalFreight;
+
+ /**
* 鍙戠エ绫诲瀷
*/
@Excel(name = "鍙戠エ绫诲瀷")
diff --git a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
index d9f8eff..53e6c08 100644
--- a/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
+++ b/src/main/java/com/ruoyi/sales/pojo/SalesLedgerProduct.java
@@ -87,6 +87,18 @@
private BigDecimal taxInclusiveTotalPrice;
/**
+ * 杩愯垂鍗曚环
+ */
+ @Excel(name = "杩愯垂鍗曚环")
+ private BigDecimal freightUnitPrice;
+
+ /**
+ * 鎬昏繍璐�
+ */
+ @Excel(name = "鎬昏繍璐�")
+ private BigDecimal totalFreight;
+
+ /**
* 涓嶅惈绋庢�讳环
*/
@Excel(name = "涓嶅惈绋庢�讳环")
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 9f6e004..5153928 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -5,6 +5,7 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.framework.web.domain.R;
+import com.ruoyi.common.utils.FreightUtils;
import com.ruoyi.procurementrecord.utils.StockUtils;
import com.ruoyi.production.mapper.*;
import com.ruoyi.production.pojo.ProductionPlan;
@@ -165,7 +166,7 @@
@Override
@Transactional(rollbackFor = Exception.class)
public int addOrUpdateSalesLedgerProduct(SalesLedgerProduct salesLedgerProduct) {
-
+ FreightUtils.fillFreightAmount(salesLedgerProduct);
int result;
Long salesLedgerId = salesLedgerProduct.getSalesLedgerId();
if (salesLedgerProduct.getId() == null) {
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 7b71ef3..6b77527 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -22,10 +22,7 @@
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.enums.SaleEnum;
import com.ruoyi.common.exception.base.BaseException;
-import com.ruoyi.common.utils.DateUtils;
-import com.ruoyi.common.utils.EnumUtil;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.*;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.framework.web.domain.AjaxResult;
@@ -402,6 +399,7 @@
for (SalesLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) {
SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct();
BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct);
+ FreightUtils.fillFreightAmount(salesLedgerProduct);
salesLedgerProduct.setSalesLedgerId(salesLedger.getId());
salesLedgerProduct.setType(1);
// 璁$畻涓嶅惈绋庢�讳环
@@ -616,6 +614,7 @@
// 鎵ц鏇存柊鎿嶄綔
if (!updateList.isEmpty()) {
for (SalesLedgerProduct product : updateList) {
+ FreightUtils.fillFreightAmount(product);
product.setType(type.getCode());
salesLedgerProductMapper.updateById(product);
}
@@ -623,6 +622,7 @@
// 鎵ц鎻掑叆鎿嶄綔
if (!insertList.isEmpty()) {
for (SalesLedgerProduct salesLedgerProduct : insertList) {
+ FreightUtils.fillFreightAmount(salesLedgerProduct);
salesLedgerProduct.setType(type.getCode());
salesLedgerProductMapper.insert(salesLedgerProduct);
// 娣诲姞鐢熶骇鏁版嵁
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index e2e6277..48890f5 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -14,6 +14,8 @@
T1.tax_rate,
T1.tax_inclusive_unit_price,
T1.tax_inclusive_total_price,
+ T1.freight_unit_price,
+ T1.total_freight,
T1.tax_exclusive_total_price,
T1.invoice_type,
T1.type,
--
Gitblit v1.9.3