10 天以前 901e3c96c76f168ddbeaa10562a4d2d6f4d3ba8c
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -388,6 +388,12 @@
                for (SalesLedgerProductImportDto salesLedgerProductImportDto : salesLedgerProductImportDtos) {
                    SalesLedgerProduct salesLedgerProduct = new SalesLedgerProduct();
                    BeanUtils.copyProperties(salesLedgerProductImportDto, salesLedgerProduct);
                    salesLedgerProduct.setSingleQuantity(normalizeSingleQuantity(salesLedgerProduct.getSingleQuantity()));
                    salesLedgerProduct.setTotalQuantity(normalizeTotalQuantity(
                            salesLedgerProduct.getTotalQuantity(),
                            salesLedgerProduct.getQuantity(),
                            salesLedgerProduct.getSingleQuantity()
                    ));
                    salesLedgerProduct.setSalesLedgerId(salesLedger.getId());
                    salesLedgerProduct.setType(1);
                    // 计算不含税总价
@@ -590,7 +596,11 @@
    public void handleSalesLedgerProducts(Long salesLedgerId, List<SalesLedgerProduct> products, SaleEnum type) {
        // 按ID分组,区分新增和更新的记录
        Map<Boolean, List<SalesLedgerProduct>> partitionedProducts = products.stream()
                .peek(p -> p.setSalesLedgerId(salesLedgerId))
                .peek(p -> {
                    p.setSalesLedgerId(salesLedgerId);
                    p.setSingleQuantity(normalizeSingleQuantity(p.getSingleQuantity()));
                    p.setTotalQuantity(normalizeTotalQuantity(p.getTotalQuantity(), p.getQuantity(), p.getSingleQuantity()));
                })
                .collect(Collectors.partitioningBy(p -> p.getId() != null));
        List<SalesLedgerProduct> updateList = partitionedProducts.get(true);
@@ -620,6 +630,23 @@
        return entity;
    }
    private BigDecimal normalizeSingleQuantity(BigDecimal singleQuantity) {
        if (singleQuantity == null || singleQuantity.compareTo(BigDecimal.ZERO) <= 0) {
            return BigDecimal.ONE;
        }
        return singleQuantity;
    }
    private BigDecimal normalizeTotalQuantity(BigDecimal totalQuantity, BigDecimal quantity, BigDecimal singleQuantity) {
        if (totalQuantity != null && totalQuantity.compareTo(BigDecimal.ZERO) > 0) {
            return totalQuantity;
        }
        if (quantity == null || quantity.compareTo(BigDecimal.ZERO) <= 0) {
            return BigDecimal.ZERO;
        }
        return quantity.multiply(normalizeSingleQuantity(singleQuantity));
    }
    @Transactional(readOnly = true)
    public String generateSalesContractNo() {
        LocalDate currentDate = LocalDate.now();