package com.ruoyi.common.utils;
|
|
import com.ruoyi.purchase.dto.ProcurementBusinessSummaryDto;
|
import com.ruoyi.purchase.vo.SupplierTransactionsDetailsVo;
|
import com.ruoyi.purchase.vo.SupplierTransactionsVo;
|
import com.ruoyi.sales.pojo.SalesLedgerProduct;
|
import com.ruoyi.sales.vo.CustomerTransactionsDetailsVo;
|
import com.ruoyi.sales.vo.CustomerTransactionsVo;
|
|
import java.math.BigDecimal;
|
import java.math.RoundingMode;
|
import java.util.Collection;
|
import java.util.List;
|
|
/**
|
* 金额精度工具:统一保留 6 位小数
|
*/
|
public final class AmountUtils {
|
|
public static final int AMOUNT_SCALE = 6;
|
public static final RoundingMode AMOUNT_ROUNDING = RoundingMode.HALF_UP;
|
|
private AmountUtils() {
|
}
|
|
public static BigDecimal scaleAmount(BigDecimal value) {
|
if (value == null) {
|
return BigDecimal.ZERO.setScale(AMOUNT_SCALE, AMOUNT_ROUNDING);
|
}
|
return value.setScale(AMOUNT_SCALE, AMOUNT_ROUNDING);
|
}
|
|
public static BigDecimal calcTaxExclusiveTotalPrice(BigDecimal taxInclusiveTotalPrice, BigDecimal taxRate) {
|
if (taxInclusiveTotalPrice == null || taxRate == null) {
|
return scaleAmount(BigDecimal.ZERO);
|
}
|
BigDecimal divisor = BigDecimal.ONE.add(
|
taxRate.divide(BigDecimal.valueOf(100), AMOUNT_SCALE, AMOUNT_ROUNDING)
|
);
|
return scaleAmount(taxInclusiveTotalPrice.divide(divisor, AMOUNT_SCALE, AMOUNT_ROUNDING));
|
}
|
|
public static void normalizeSalesLedgerProduct(SalesLedgerProduct product) {
|
if (product == null) {
|
return;
|
}
|
product.setTaxInclusiveUnitPrice(scaleAmount(product.getTaxInclusiveUnitPrice()));
|
product.setTaxInclusiveTotalPrice(scaleAmount(product.getTaxInclusiveTotalPrice()));
|
product.setTaxExclusiveTotalPrice(scaleAmount(product.getTaxExclusiveTotalPrice()));
|
}
|
|
public static void normalizeSalesLedgerProducts(Collection<SalesLedgerProduct> products) {
|
if (products == null) {
|
return;
|
}
|
products.forEach(AmountUtils::normalizeSalesLedgerProduct);
|
}
|
|
public static void normalizeContractAmount(Object entity) {
|
if (entity == null) {
|
return;
|
}
|
try {
|
java.lang.reflect.Field field = entity.getClass().getDeclaredField("contractAmount");
|
field.setAccessible(true);
|
field.set(entity, scaleAmount((BigDecimal) field.get(entity)));
|
} catch (NoSuchFieldException ignored) {
|
} catch (Exception e) {
|
throw new RuntimeException("标准化合同金额失败", e);
|
}
|
}
|
|
public static void normalizeSupplierTransaction(SupplierTransactionsVo vo) {
|
if (vo == null) {
|
return;
|
}
|
vo.setContractAmounts(scaleAmount(vo.getContractAmounts()));
|
vo.setShippedAmount(scaleAmount(vo.getShippedAmount()));
|
vo.setUnshippedAmount(scaleAmount(vo.getUnshippedAmount()));
|
}
|
|
public static void normalizeSupplierTransactionDetail(SupplierTransactionsDetailsVo vo) {
|
if (vo == null) {
|
return;
|
}
|
vo.setContractAmount(scaleAmount(vo.getContractAmount()));
|
vo.setShippedAmount(scaleAmount(vo.getShippedAmount()));
|
vo.setUnshippedAmount(scaleAmount(vo.getUnshippedAmount()));
|
}
|
|
public static void normalizeCustomerTransaction(CustomerTransactionsVo vo) {
|
if (vo == null) {
|
return;
|
}
|
vo.setContractAmounts(scaleAmount(vo.getContractAmounts()));
|
vo.setShippedAmount(scaleAmount(vo.getShippedAmount()));
|
vo.setUnshippedAmount(scaleAmount(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()));
|
}
|
|
public static void normalizeProcurementBusinessSummary(ProcurementBusinessSummaryDto dto) {
|
if (dto == null) {
|
return;
|
}
|
dto.setPurchaseAmount(scaleAmount(dto.getPurchaseAmount()));
|
dto.setAveragePrice(scaleAmount(dto.getAveragePrice()));
|
dto.setReturnAmount(scaleAmount(dto.getReturnAmount()));
|
}
|
|
public static void normalizeProcurementBusinessSummaryList(List<ProcurementBusinessSummaryDto> list) {
|
if (list == null) {
|
return;
|
}
|
list.forEach(AmountUtils::normalizeProcurementBusinessSummary);
|
}
|
}
|