zss
3 天以前 f0f79969b93f248fd2c0348cf31ba3c688f4064d
src/main/java/com/ruoyi/sales/controller/SalesLedgerController.java
@@ -10,16 +10,16 @@
import com.ruoyi.framework.web.controller.BaseController;
import com.ruoyi.framework.web.domain.AjaxResult;
import com.ruoyi.framework.web.page.TableDataInfo;
import com.ruoyi.procurementrecord.dto.ProcurementPageDto;
import com.ruoyi.procurementrecord.service.ProcurementRecordService;
import com.ruoyi.sales.dto.InvoiceLedgerDto;
import com.ruoyi.sales.dto.SalesLedgerDto;
import com.ruoyi.sales.mapper.InvoiceLedgerMapper;
import com.ruoyi.sales.mapper.InvoiceRegistrationProductMapper;
import com.ruoyi.sales.mapper.ReceiptPaymentMapper;
import com.ruoyi.sales.pojo.InvoiceLedger;
import com.ruoyi.sales.pojo.InvoiceRegistrationProduct;
import com.ruoyi.sales.pojo.ReceiptPayment;
import com.ruoyi.sales.pojo.SalesLedger;
import com.ruoyi.sales.pojo.*;
import com.ruoyi.sales.service.ICommonFileService;
import com.ruoyi.sales.service.ISalesLedgerProductService;
import com.ruoyi.sales.service.ISalesLedgerService;
import lombok.AllArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
@@ -29,8 +29,8 @@
import javax.servlet.http.HttpServletResponse;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
@@ -57,6 +57,10 @@
    @Autowired
    private ReceiptPaymentMapper receiptPaymentMapper;
    @Autowired
    private ISalesLedgerProductService salesLedgerProductService;
    @Autowired
    private ProcurementRecordService procurementRecordService;
    /**
     * 查询销售台账列表
@@ -206,7 +210,6 @@
        List<Long> salesLedgerIds = iPage.getRecords().stream().map(SalesLedger::getId).collect(Collectors.toList());
        List<InvoiceLedgerDto> invoiceLedgerDtoList = invoiceLedgerMapper.invoicedTotal(salesLedgerIds);
        if(CollectionUtils.isEmpty(invoiceLedgerDtoList)){
            iPage.setTotal(iPage.getRecords().size());
            return iPage;
        }
        // 计算回款金额,待回款金额
@@ -261,10 +264,58 @@
        }
        if (ObjectUtils.isNotEmpty(salesLedgerDto.getStatus())) {
            if (salesLedgerDto.getStatus()) {
                iPage.getRecords().removeIf(salesLedger -> Objects.equals(salesLedger.getNoInvoiceAmountTotal(), new BigDecimal("0.00")));
                // 获取删除数量
                long count = iPage.getRecords()
                        .stream()
                        .filter(salesLedger -> salesLedger.getNoInvoiceAmountTotal() != null && salesLedger.getNoInvoiceAmountTotal().compareTo(BigDecimal.ZERO) == 0)
                        .count();
                iPage.setTotal(iPage.getTotal() - count);
                iPage.getRecords().removeIf(salesLedger -> salesLedger.getNoInvoiceAmountTotal() != null && salesLedger.getNoInvoiceAmountTotal().compareTo(BigDecimal.ZERO) == 0);
            }
        }
        iPage.setTotal(iPage.getRecords().size());
        return iPage;
    }
    /**
     * 销售台账页面发货,查询库存是否充足
     */
    @GetMapping("/getProductInventory")
    public AjaxResult getProductInventory(SalesLedgerProduct salesLedgerProduct){
        List<SalesLedgerProduct> list = salesLedgerProductService.selectSalesLedgerProductList(salesLedgerProduct);
        if(CollectionUtils.isEmpty(list)){
            throw new RuntimeException("该产品不存在");
        }
        Map<Long, BigDecimal> requiredQuantities = list.stream()
                .filter(p -> p.getProductModelId() != null)
                .collect(Collectors.groupingBy(
                        SalesLedgerProduct::getProductModelId,
                        Collectors.mapping(SalesLedgerProduct::getQuantity, Collectors.reducing(BigDecimal.ZERO, (a, b) -> a.add(b != null ? b : BigDecimal.ZERO)))
                ));
        for (Map.Entry<Long, BigDecimal> entry : requiredQuantities.entrySet()) {
            Long modelId = entry.getKey();
            BigDecimal neededQty = entry.getValue();
            ProcurementPageDto queryDto = new ProcurementPageDto();
            queryDto.setProductModelId(modelId);
            // 获取该规格型号的所有库存记录
            IPage<ProcurementPageDto> inventoryPage = procurementRecordService.listPage(new Page<>(1, -1), queryDto);
            // 汇总所有批次的可用库存
            BigDecimal totalStock = inventoryPage.getRecords().stream()
                    .map(ProcurementPageDto::getInboundNum0)
                    .filter(Objects::nonNull)
                    .reduce(BigDecimal.ZERO, BigDecimal::add);
            if (totalStock.compareTo(neededQty) < 0) {
                String modelName = list.stream()
                        .filter(p -> modelId.equals(p.getProductModelId()))
                        .map(SalesLedgerProduct::getSpecificationModel)
                        .findFirst()
                        .orElse("未知型号");
                return AjaxResult.error("产品 [" + modelName + "] 库存不足,所需: " + neededQty + ", 当前总库存: " + totalStock);
            }
        }
        return AjaxResult.success("该产品库存充足");
    }
}