gongchunyi
14 小时以前 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;
@@ -30,7 +30,9 @@
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.Collectors;
/**
@@ -56,7 +58,10 @@
    @Autowired
    private ReceiptPaymentMapper receiptPaymentMapper;
    @Autowired
    private ISalesLedgerProductService salesLedgerProductService;
    @Autowired
    private ProcurementRecordService procurementRecordService;
    /**
     * 查询销售台账列表
     */
@@ -102,6 +107,20 @@
        List<SalesLedger> list = salesLedgerService.selectSalesLedgerList(salesLedgerDto);
        ExcelUtil<SalesLedger> util = new ExcelUtil<SalesLedger>(SalesLedger.class);
        util.exportExcel(response, list, "销售台账数据");
    }
    /**
     * 导出开票登记列表
     */
    @Log(title = "导出开票登记列表", businessType = BusinessType.EXPORT)
    @PostMapping("/exportOne")
    public void exportOne(HttpServletResponse response, SalesLedgerDto salesLedgerDto) {
        Page page = new Page();
        page.setCurrent(-1);
        page.setSize(-1);
        IPage<SalesLedger> salesLedgerIPage = listPage(page, salesLedgerDto);
        ExcelUtil<SalesLedger> util = new ExcelUtil<SalesLedger>(SalesLedger.class);
        util.exportExcel(response, salesLedgerIPage == null ? new ArrayList<>() : salesLedgerIPage.getRecords(), "导出开票登记列表");
    }
    /**
@@ -252,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));
    }
}