liyong
2026-04-30 256fdc569dbb5bfde6f73ef84319d4cdb1905811
fix(sales): 修复销售台账产品生产数据重复添加问题

- 在addProductionData方法中添加检查逻辑,避免重复创建生产订单
- 移动生产数据添加逻辑到循环外部,确保每个产品都执行生产数据创建
- 防止因重复调用导致的数据异常和业务流程错误
已修改2个文件
23 ■■■■■ 文件已修改
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -266,6 +266,10 @@
     * 新增生产数据
     */
    public void addProductionData(SalesLedgerProduct salesLedgerProduct) {
        List<ProductOrder> productOrders = productOrderMapper.selectList(new QueryWrapper<ProductOrder>().lambda().eq(ProductOrder::getSaleLedgerProductId, salesLedgerProduct.getId()));
        if (!productOrders.isEmpty()) {
            return;
        }
        ProductOrder productOrder = new ProductOrder();
        productOrder.setSalesLedgerId(salesLedgerProduct.getSalesLedgerId());
        productOrder.setProductModelId(salesLedgerProduct.getProductModelId());
src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -304,7 +304,7 @@
                int tableStart = 10;
                Row headerRow = sheet.createRow(tableStart);
                headerRow.setHeightInPoints((short)18);
                headerRow.setHeightInPoints((short) 18);
                String[] headers = {"序号", "物料编号", "品名/规格", "单位", "数量", "订单号", "共四联"};
                for (int i = 0; i < headers.length; i++) {
@@ -334,7 +334,7 @@
                for (int i = 0; i < productList.size(); i++) {
                    SalesLedgerProduct p = productList.get(i);
                    Row dataRow = sheet.createRow(currentRow++);
                    dataRow.setHeightInPoints((short)18);
                    dataRow.setHeightInPoints((short) 18);
                    String materialCode = "";
                    if (p.getProductModelId() != null) {
@@ -370,7 +370,7 @@
                for (int i = 0; i < needEmpty; i++) {
                    int seq = productList.size() + i;
                    Row dataRow = sheet.createRow(currentRow++);
                    dataRow.setHeightInPoints((short)18);
                    dataRow.setHeightInPoints((short) 18);
                    for (int c = 0; c <= 5; c++) dataRow.createCell(c).setCellStyle(dataCenterStyle);
@@ -389,12 +389,12 @@
                // 合计
                Row totalRow = sheet.createRow(currentRow);
                totalRow.setHeightInPoints((short)18);
                totalRow.setHeightInPoints((short) 18);
                // 合计放在第二列,不合并单元格
                totalRow.createCell(1).setCellValue("合计");
                totalRow.createCell(4).setCellValue(totalQuantity.doubleValue());
                // 设置样式
                for (int c = 0; c <= 5; c++) {
                    Cell cell = totalRow.getCell(c) != null ? totalRow.getCell(c) : totalRow.createCell(c);
@@ -1029,10 +1029,13 @@
                salesLedgerProduct.setNoInvoiceAmount(salesLedgerProduct.getTaxInclusiveTotalPrice());
                salesLedgerProduct.setPendingInvoiceTotal(salesLedgerProduct.getTaxInclusiveTotalPrice());
                salesLedgerProductMapper.insert(salesLedgerProduct);
            }
        }
        if (isProduce) {
            for (SalesLedgerProduct salesLedgerProduct : products) {
                // 添加生产数据
                if (isProduce) {
                    salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct);
                }
                salesLedgerProductServiceImpl.addProductionData(salesLedgerProduct);
            }
        }
    }