src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -20,6 +20,7 @@
import com.ruoyi.basic.utils.FileUtil;
import com.ruoyi.common.enums.FileNameType;
import com.ruoyi.common.exception.base.BaseException;
import com.ruoyi.common.utils.AmountUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
@@ -61,7 +62,6 @@
import java.io.InputStream;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
@@ -122,6 +122,7 @@
        PurchaseLedger purchaseLedger = new PurchaseLedger();
        // DTO转Entity
        BeanUtils.copyProperties(purchaseLedgerDto, purchaseLedger);
        AmountUtils.normalizeContractAmount(purchaseLedger);
        SalesLedger salesLedger = salesLedgerMapper.selectById(purchaseLedgerDto.getSalesLedgerId());
        //录入人
        SysUser sysUser = userMapper.selectUserById(purchaseLedgerDto.getRecorderId());
@@ -235,6 +236,7 @@
        // 设置字段
        for (SalesLedgerProduct product : products) {
            AmountUtils.normalizeSalesLedgerProduct(product);
            product.setSalesLedgerId(salesLedgerId);
            Long productId = product.getProductId();
@@ -276,10 +278,10 @@
        }
        // 计算总含税金额
        BigDecimal totalTaxInclusiveAmount = products.stream()
        BigDecimal totalTaxInclusiveAmount = AmountUtils.scaleAmount(products.stream()
                .map(SalesLedgerProduct::getTaxInclusiveTotalPrice)
                .filter(Objects::nonNull)
                .reduce(BigDecimal.ZERO, BigDecimal::add);
                .reduce(BigDecimal.ZERO, BigDecimal::add));
        // 更新主表的总金额字段
        if (salesLedgerId != null) {
@@ -377,7 +379,9 @@
        // 4. 转换 DTO
        PurchaseLedgerDto resultDto = new PurchaseLedgerDto();
        BeanUtils.copyProperties(purchaseLedger, resultDto);
        AmountUtils.normalizeContractAmount(resultDto);
        if (!products.isEmpty()) {
            AmountUtils.normalizeSalesLedgerProducts(products);
            resultDto.setHasChildren(true);
            resultDto.setProductData(products);
            resultDto.setStorageBlobVOS(fileUtil.getStorageBlobVOsByApplicationAndRecordTypeAndRecordId(ApplicationTypeEnum.FILE, RecordTypeEnum.PURCHASE_LEDGER, purchaseLedger.getId()));
@@ -420,6 +424,7 @@
        queryWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId())
                .eq(SalesLedgerProduct::getType, 2);
        List<SalesLedgerProduct> productList = salesLedgerProductMapper.selectList(queryWrapper);
        AmountUtils.normalizeSalesLedgerProducts(productList);
        resultDto.setProductData(productList);
        return resultDto;
    }
@@ -451,7 +456,14 @@
    @Override
    public IPage<PurchaseLedgerDto> selectPurchaseLedgerListPage(IPage ipage, PurchaseLedgerDto purchaseLedger) {
        return purchaseLedgerMapper.selectPurchaseLedgerListPage(ipage, purchaseLedger);
        IPage<PurchaseLedgerDto> page = purchaseLedgerMapper.selectPurchaseLedgerListPage(ipage, purchaseLedger);
        if (!CollectionUtils.isEmpty(page.getRecords())) {
            page.getRecords().forEach(record -> {
                AmountUtils.normalizeContractAmount(record);
                AmountUtils.normalizeSalesLedgerProducts(record.getProductData());
            });
        }
        return page;
    }
    @Override
@@ -556,8 +568,14 @@
                    BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct);
                    salesLedgerProduct.setSalesLedgerId(salesLedger.getId());
                    salesLedgerProduct.setType(2);
                    AmountUtils.normalizeSalesLedgerProduct(salesLedgerProduct);
                    // 计算不含税总价
                    salesLedgerProduct.setTaxExclusiveTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice().divide(new BigDecimal(1).add(salesLedgerProduct.getTaxRate().divide(new BigDecimal(100))), 2, RoundingMode.HALF_UP));
                    salesLedgerProduct.setTaxExclusiveTotalPrice(
                            AmountUtils.calcTaxExclusiveTotalPrice(
                                    salesLedgerProduct.getTaxInclusiveTotalPrice(),
                                    salesLedgerProduct.getTaxRate()
                            )
                    );
                    list.stream()
                            .filter(map -> map.get("productName").equals(salesLedgerProduct.getProductCategory()) && map.get("model").equals(salesLedgerProduct.getSpecificationModel()))
                            .findFirst()
@@ -605,7 +623,9 @@
        // 4. 转换 DTO
        PurchaseLedgerDto resultDto = new PurchaseLedgerDto();
        BeanUtils.copyProperties(purchaseLedger, resultDto);
        AmountUtils.normalizeContractAmount(resultDto);
        if (!products.isEmpty()) {
            AmountUtils.normalizeSalesLedgerProducts(products);
            resultDto.setHasChildren(true);
            resultDto.setProductData(products);
        }
@@ -623,6 +643,7 @@
        approveProcessVO.setApproveUserIds(purchaseLedger.getApproveUserIds());
        approveProcessVO.setApproveUser(loginUser.getUserId());
        approveProcessVO.setApproveTime(LocalDate.now().toString());
        approveProcessVO.setPrice(AmountUtils.scaleAmount(purchaseLedger.getContractAmount()));
        approveProcessService.addApprove(approveProcessVO);
    }