gongchunyi
10 小时以前 71e05a80df83069c9611ba5ef0fdc2a37eb6a3ae
fix: 客户往来金额调整为2位小数
已修改2个文件
46 ■■■■■ 文件已修改
src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/common/utils/AmountUtils.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/basic/service/impl/CustomerServiceImpl.java
@@ -398,12 +398,15 @@
            }
            for (CustomerTransactionsVo vo : records) {
                BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getCustomerId(), BigDecimal.ZERO);
                vo.setShippedAmount(outboundAmount);
                BigDecimal contractAmounts = vo.getContractAmounts() == null ? BigDecimal.ZERO : vo.getContractAmounts();
                BigDecimal unshippedAmount = contractAmounts.subtract(outboundAmount);
                BigDecimal contractAmounts = AmountUtils.scaleMoney(vo.getContractAmounts());
                // 已出库金额按分(2位小数)处理,避免按含税单价累计出库金额产生误差导致全部发货后仍有未出库零头
                BigDecimal shippedAmount = AmountUtils.scaleMoney(outboundAmount);
                BigDecimal unshippedAmount = contractAmounts.subtract(shippedAmount);
                if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) {
                    unshippedAmount = BigDecimal.ZERO;
                }
                vo.setContractAmounts(contractAmounts);
                vo.setShippedAmount(shippedAmount);
                vo.setUnshippedAmount(unshippedAmount);
                AmountUtils.normalizeCustomerTransaction(vo);
            }
@@ -426,12 +429,15 @@
            }
            for (CustomerTransactionsDetailsVo vo : records) {
                BigDecimal outboundAmount = shippedAmountMap.getOrDefault(vo.getSalesLedgerId(), BigDecimal.ZERO);
                vo.setShippedAmount(outboundAmount);
                BigDecimal contractAmount = vo.getContractAmount() == null ? BigDecimal.ZERO : vo.getContractAmount();
                BigDecimal unshippedAmount = contractAmount.subtract(outboundAmount);
                BigDecimal contractAmount = AmountUtils.scaleMoney(vo.getContractAmount());
                // 已出库金额按分(2位小数)处理,避免按含税单价累计出库金额产生误差导致全部发货后仍有未出库零头
                BigDecimal shippedAmount = AmountUtils.scaleMoney(outboundAmount);
                BigDecimal unshippedAmount = contractAmount.subtract(shippedAmount);
                if (unshippedAmount.compareTo(BigDecimal.ZERO) < 0) {
                    unshippedAmount = BigDecimal.ZERO;
                }
                vo.setContractAmount(contractAmount);
                vo.setShippedAmount(shippedAmount);
                vo.setUnshippedAmount(unshippedAmount);
                AmountUtils.normalizeCustomerTransactionDetail(vo);
            }
src/main/java/com/ruoyi/common/utils/AmountUtils.java
@@ -13,12 +13,15 @@
import java.util.List;
/**
 * 金额精度工具:统一保留 6 位小数
 * 金额精度工具:默认统一保留 6 位小数,金额(元)保留 2 位小数
 */
public final class AmountUtils {
    public static final int AMOUNT_SCALE = 6;
    public static final RoundingMode AMOUNT_ROUNDING = RoundingMode.HALF_UP;
    /** 金额(元)保留小数位数(分) */
    public static final int MONEY_SCALE = 2;
    private AmountUtils() {
    }
@@ -28,6 +31,17 @@
            return BigDecimal.ZERO.setScale(AMOUNT_SCALE, AMOUNT_ROUNDING);
        }
        return value.setScale(AMOUNT_SCALE, AMOUNT_ROUNDING);
    }
    /**
     * 金额(元)精度处理:四舍五入保留 2 位小数,
     * 避免按含税单价累计出库金额时产生误差,全部发货后仍显示未出库零头
     */
    public static BigDecimal scaleMoney(BigDecimal value) {
        if (value == null) {
            return BigDecimal.ZERO.setScale(MONEY_SCALE, AMOUNT_ROUNDING);
        }
        return value.setScale(MONEY_SCALE, AMOUNT_ROUNDING);
    }
    public static BigDecimal calcTaxExclusiveTotalPrice(BigDecimal taxInclusiveTotalPrice, BigDecimal taxRate) {
@@ -92,18 +106,18 @@
        if (vo == null) {
            return;
        }
        vo.setContractAmounts(scaleAmount(vo.getContractAmounts()));
        vo.setShippedAmount(scaleAmount(vo.getShippedAmount()));
        vo.setUnshippedAmount(scaleAmount(vo.getUnshippedAmount()));
        vo.setContractAmounts(scaleMoney(vo.getContractAmounts()));
        vo.setShippedAmount(scaleMoney(vo.getShippedAmount()));
        vo.setUnshippedAmount(scaleMoney(vo.getUnshippedAmount()));
    }
    public static void normalizeCustomerTransactionDetail(CustomerTransactionsDetailsVo vo) {
        if (vo == null) {
            return;
        }
        vo.setContractAmount(scaleAmount(vo.getContractAmount()));
        vo.setShippedAmount(scaleAmount(vo.getShippedAmount()));
        vo.setUnshippedAmount(scaleAmount(vo.getUnshippedAmount()));
        vo.setContractAmount(scaleMoney(vo.getContractAmount()));
        vo.setShippedAmount(scaleMoney(vo.getShippedAmount()));
        vo.setUnshippedAmount(scaleMoney(vo.getUnshippedAmount()));
    }
    public static void normalizeProcurementBusinessSummary(ProcurementBusinessSummaryDto dto) {