From 3d167f368849084e805850ae310de8c76121c139 Mon Sep 17 00:00:00 2001 From: XinanXf <123456> Date: Thu, 12 Jun 2025 16:09:57 +0800 Subject: [PATCH] =?UTF-8?q?=E9=8A=B7=E5=94=AE=E8=A8=82=E5=96=AE=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=E5=88=A9=E6=BD=A4=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xingyun/sc/bo/sale/GetSaleOrderBo.java | 8 +++++-- .../xingyun/sc/bo/sale/QuerySaleOrderBo.java | 6 +++++ .../controller/sale/SaleOrderController.java | 15 +++++++++---- .../sc/excel/sale/SaleOrderExportModel.java | 9 ++++++++ .../lframework/xingyun/sc/util/CalUtils.java | 22 +++++++++++++++++++ 5 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 xingyun-sc/src/main/java/com/lframework/xingyun/sc/util/CalUtils.java diff --git a/xingyun-sc/src/main/java/com/lframework/xingyun/sc/bo/sale/GetSaleOrderBo.java b/xingyun-sc/src/main/java/com/lframework/xingyun/sc/bo/sale/GetSaleOrderBo.java index b68bb7c..fcf6b68 100644 --- a/xingyun-sc/src/main/java/com/lframework/xingyun/sc/bo/sale/GetSaleOrderBo.java +++ b/xingyun-sc/src/main/java/com/lframework/xingyun/sc/bo/sale/GetSaleOrderBo.java @@ -201,8 +201,12 @@ public class GetSaleOrderBo extends BaseBo { @ApiModelProperty("订单明细") private List details; - - + /** + * 毛利率 仅做校验,不做存储 + * 毛利率 = 本单利润/含税总金额* 100% + */ + @ApiModelProperty("毛利率") + private String grossMargin; public GetSaleOrderBo() { diff --git a/xingyun-sc/src/main/java/com/lframework/xingyun/sc/bo/sale/QuerySaleOrderBo.java b/xingyun-sc/src/main/java/com/lframework/xingyun/sc/bo/sale/QuerySaleOrderBo.java index 2b99d83..d14380e 100644 --- a/xingyun-sc/src/main/java/com/lframework/xingyun/sc/bo/sale/QuerySaleOrderBo.java +++ b/xingyun-sc/src/main/java/com/lframework/xingyun/sc/bo/sale/QuerySaleOrderBo.java @@ -186,6 +186,12 @@ public class QuerySaleOrderBo extends BaseBo implements BaseDto { @ApiModelProperty(value = "序列号") private String productName; + /** + * 毛利率 仅做计算,不做存储 + * 毛利率 = 本单利润/含税总金额* 100% + */ + @ApiModelProperty("毛利率") + private String grossMargin; public QuerySaleOrderBo(SaleOrder dto) { diff --git a/xingyun-sc/src/main/java/com/lframework/xingyun/sc/controller/sale/SaleOrderController.java b/xingyun-sc/src/main/java/com/lframework/xingyun/sc/controller/sale/SaleOrderController.java index a99b832..335c4bb 100644 --- a/xingyun-sc/src/main/java/com/lframework/xingyun/sc/controller/sale/SaleOrderController.java +++ b/xingyun-sc/src/main/java/com/lframework/xingyun/sc/controller/sale/SaleOrderController.java @@ -30,6 +30,7 @@ import com.lframework.xingyun.sc.excel.sale.SaleOrderExportModel; import com.lframework.xingyun.sc.mappers.SaleOrderDetailMapper; import com.lframework.xingyun.sc.service.sale.SaleOrderDetailService; import com.lframework.xingyun.sc.service.sale.SaleOrderService; +import com.lframework.xingyun.sc.util.CalUtils; import com.lframework.xingyun.sc.vo.sale.ApprovePassSaleOrderVo; import com.lframework.xingyun.sc.vo.sale.ApproveRefuseSaleOrderVo; import com.lframework.xingyun.sc.vo.sale.BatchApprovePassSaleOrderVo; @@ -123,7 +124,7 @@ public class SaleOrderController extends DefaultBaseController { public InvokeResult> query(@Valid QuerySaleOrderVo vo) { PageResult pageResult = saleOrderService.query(getPageIndex(vo), getPageSize(vo), - vo); + vo); List datas = pageResult.getDatas(); List results = null; @@ -134,6 +135,9 @@ public class SaleOrderController extends DefaultBaseController { if(results!=null){ for (QuerySaleOrderBo result : results) { List orderDetails=saleOrderDetailMapper.getBySaleOrderId(result.getId()); + // 计算毛利率 = 本单利润/含税总金额* 100% + String grossMargin = CalUtils.CalGrossMargin(result.getThisOrderProfit(),result.getTotalAmount()); + result.setGrossMargin(grossMargin); List productNames = new ArrayList<>(); for (SaleOrderDetail orderDetail : orderDetails) { @@ -146,9 +150,6 @@ public class SaleOrderController extends DefaultBaseController { result.setProductName(String.join(", ", productNames)); } } - - - return InvokeResultBuilder.success(PageResultUtil.rebuild(pageResult, results)); } @@ -187,6 +188,10 @@ public class SaleOrderController extends DefaultBaseController { //拼接产品名称 for (QuerySaleOrderBo result : results) { List orderDetails = OrderIdDetailMap.get(result.getId()); + // 计算毛利率 = 本单利润/含税总金额* 100% + String grossMargin = CalUtils.CalGrossMargin(result.getThisOrderProfit(),result.getTotalAmount()); + result.setGrossMargin(grossMargin); + List productNames = new ArrayList<>(); for (SaleOrderDetail orderDetail : orderDetails) { Product product= productService.findById(orderDetail.getProductId()); @@ -243,6 +248,8 @@ public class SaleOrderController extends DefaultBaseController { detail.setPurchaseDecimal(purchaseDecimal); detail.setTotalPurchasePrice(totalPurchasePrice); } + // 计算毛利率 = 本单利润/含税总金额* 100% + result.setGrossMargin(CalUtils.CalGrossMargin(result.getThisOrderProfit(),result.getTotalAmount())); } return InvokeResultBuilder.success(result); diff --git a/xingyun-sc/src/main/java/com/lframework/xingyun/sc/excel/sale/SaleOrderExportModel.java b/xingyun-sc/src/main/java/com/lframework/xingyun/sc/excel/sale/SaleOrderExportModel.java index 7074ea4..73a7fda 100644 --- a/xingyun-sc/src/main/java/com/lframework/xingyun/sc/excel/sale/SaleOrderExportModel.java +++ b/xingyun-sc/src/main/java/com/lframework/xingyun/sc/excel/sale/SaleOrderExportModel.java @@ -86,6 +86,14 @@ public class SaleOrderExportModel extends BaseBo implements Ex @ExcelProperty("利润") private BigDecimal thisOrderProfit; + /** + * 毛利率 仅做计算,不做存储 + * 毛利率 = 本单利润/含税总金额* 100% + */ + @ExcelProperty("毛利率") + private String grossMargin; + + /** * 销售数量 */ @@ -181,6 +189,7 @@ public class SaleOrderExportModel extends BaseBo implements Ex this.setTotalAmount(dto.getTotalAmount()); this.setCustomMoney(dto.getCustomMoney()); this.setThisOrderProfit(dto.getThisOrderProfit()); + this.setGrossMargin(dto.getGrossMargin()); this.setTotalNum(dto.getTotalNum()); this.setTotalGiftNum(dto.getTotalGiftNum()); this.setIsLease(dto.getIsLease() == 1 ? "是" : "否"); diff --git a/xingyun-sc/src/main/java/com/lframework/xingyun/sc/util/CalUtils.java b/xingyun-sc/src/main/java/com/lframework/xingyun/sc/util/CalUtils.java new file mode 100644 index 0000000..8fc5541 --- /dev/null +++ b/xingyun-sc/src/main/java/com/lframework/xingyun/sc/util/CalUtils.java @@ -0,0 +1,22 @@ +package com.lframework.xingyun.sc.util; + +import java.math.BigDecimal; +import java.math.RoundingMode; + +public class CalUtils { + + // 计算毛利率 = 本单利润/含税总金额* 100% + public static String CalGrossMargin(BigDecimal thisOrderProfit, BigDecimal totalAmount) { + if (totalAmount == null || totalAmount.compareTo(BigDecimal.ZERO) == 0) { + return "0.000%"; + } + + BigDecimal margin = thisOrderProfit + .divide(totalAmount, 6, RoundingMode.HALF_UP) // 增加到6位小数 + .multiply(BigDecimal.valueOf(100)) + .setScale(3, RoundingMode.HALF_UP); + + return margin.stripTrailingZeros().toPlainString() + "%"; + } +} +