3 天以前 4edc95df6cdd003dd485fdaaaeafbd75cc368c22
src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -27,6 +27,8 @@
import com.ruoyi.framework.security.LoginUser;
import com.ruoyi.other.mapper.TempFileMapper;
import com.ruoyi.other.pojo.TempFile;
import com.ruoyi.procurementrecord.dto.SimplePP;
import com.ruoyi.procurementrecord.service.ProcurementPriceManagementService;
import com.ruoyi.project.system.domain.SysUser;
import com.ruoyi.project.system.mapper.SysUserMapper;
import com.ruoyi.purchase.dto.PurchaseLedgerDto;
@@ -53,6 +55,7 @@
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
@@ -101,6 +104,8 @@
    private final InvoiceRegistrationProductMapper invoiceRegistrationProductMapper;
    private final StringRedisTemplate redisTemplate;
    private final ProcurementPriceManagementService procurementPriceManagementService;
    @Value("${file.upload-dir}")
    private String uploadDir;
@@ -244,7 +249,7 @@
        if (products == null || products.isEmpty()) {
            throw new BaseException("产品信息不存在");
        }
        PurchaseLedger ledger = purchaseLedgerMapper.selectById(salesLedgerId);
        // 提前收集所有需要查询的ID
        Set<Long> productIds = products.stream()
                .map(SalesLedgerProduct::getProductId)
@@ -310,6 +315,28 @@
                salesLedgerProductMapper.insert(salesLedgerProduct);
            }
        }
        updateList.addAll(insertList);
        updateList.forEach(it->{
            SimplePP simplePP = new SimplePP();
            simplePP.setProductId(it.getProductId());
            simplePP.setSupplierName(ledger.getSupplierName());
            simplePP.setSupplierId(ledger.getSupplierId());
            simplePP.setUnit(it.getUnit());
            simplePP.setProductName(it.getProductCategory());
            simplePP.setSpecification(it.getSpecificationModel());
            simplePP.setFinalPrice(it.getTaxInclusiveUnitPrice().divide(
                    BigDecimal.ONE.add(it.getTaxRate().divide(new BigDecimal("100"), 4, RoundingMode.HALF_UP)),
                    2,  // 保留4位(可根据业务调整)
                    RoundingMode.HALF_UP
            ));
            simplePP.setRemark(
                    "系统根据采购提交自动生成。采购合同号为:" + purchaseLedger.getPurchaseContractNumber() + "。"
            );
            procurementPriceManagementService.autoCreateRecord(simplePP);
        });
        // 计算总含税金额
        BigDecimal totalTaxInclusiveAmount = products.stream()
@@ -518,16 +545,17 @@
    @Override
    public PurchaseLedgerDto getPurchaseByCode(PurchaseLedgerDto purchaseLedgerDto) {
        // 1. 查询主表
        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>()            .eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedgerDto.getPurchaseContractNumber())            .last("LIMIT 1"));
        PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectOne(new LambdaQueryWrapper<PurchaseLedger>().eq(PurchaseLedger::getPurchaseContractNumber, purchaseLedgerDto.getPurchaseContractNumber())            .last("LIMIT 1"));
        if (purchaseLedger == null) {
            throw new BaseException("采购台账不存在");
        }
        // 2. 查询子表
        LambdaQueryWrapper<SalesLedgerProduct> productWrapper = new LambdaQueryWrapper<>();
        productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId())            .eq(SalesLedgerProduct::getType, 2);
        productWrapper.eq(SalesLedgerProduct::getSalesLedgerId, purchaseLedger.getId()).eq(SalesLedgerProduct::getType, 2);
        List<SalesLedgerProduct> products = salesLedgerProductMapper.selectList(productWrapper);
        // 4. 转换 DTO
        PurchaseLedgerDto resultDto = new PurchaseLedgerDto();    BeanUtils.copyProperties(purchaseLedger, resultDto);
        PurchaseLedgerDto resultDto = new PurchaseLedgerDto();
        BeanUtils.copyProperties(purchaseLedger, resultDto);
        if (!products.isEmpty()) {
            resultDto.setHasChildren(true);
            resultDto.setProductData(products);