gongchunyi
18 小时以前 ccef20c2aa1bda974f2b7908cd106b46e556c86b
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,9 +29,10 @@
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.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
@@ -57,7 +58,10 @@
    @Autowired
    private ReceiptPaymentMapper receiptPaymentMapper;
    @Autowired
    private ISalesLedgerProductService salesLedgerProductService;
    @Autowired
    private ProcurementRecordService procurementRecordService;
    /**
     * 查询销售台账列表
     */
@@ -267,4 +271,57 @@
        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("该产品库存充足");
    }
    /**
     * 根据采购合同号查询详情
     */
    @GetMapping("/getSalesByCode")
    public AjaxResult getSalesByCode(SalesLedgerDto salesLedgerDto) {
        return AjaxResult.success(salesLedgerService.getSalesByCode(salesLedgerDto));
    }
}