From d3e304221464c5f66f3c24e3186baff0f313660e Mon Sep 17 00:00:00 2001
From: liyong <18434998025@163.com>
Date: 星期二, 03 二月 2026 11:36:36 +0800
Subject: [PATCH] feat(product-process): 生产核算字段重构

---
 src/main/java/com/ruoyi/production/service/ProductionProductMainService.java            |    5 
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java           |    9 
 src/main/java/com/ruoyi/production/controller/SalesLedgerWorkController.java            |  185 +++++++-------
 src/main/resources/mapper/production/ProductOrderMapper.xml                             |    3 
 src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java            |   20 -
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java   |   13 
 src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml          |    2 
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java                  |   35 +-
 src/main/resources/mapper/production/ProductionProductMainMapper.xml                    |   16 +
 src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java              |    3 
 src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java |    8 
 src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java         |  367 +++++++++++++++---------------
 12 files changed, 335 insertions(+), 331 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/controller/SalesLedgerWorkController.java b/src/main/java/com/ruoyi/production/controller/SalesLedgerWorkController.java
index d4265bf..bd3610c 100644
--- a/src/main/java/com/ruoyi/production/controller/SalesLedgerWorkController.java
+++ b/src/main/java/com/ruoyi/production/controller/SalesLedgerWorkController.java
@@ -1,93 +1,92 @@
-package com.ruoyi.production.controller;
-
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.common.utils.poi.ExcelUtil;
-import com.ruoyi.framework.aspectj.lang.annotation.Log;
-import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
-import com.ruoyi.framework.web.controller.BaseController;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.production.dto.ProcessSchedulingDto;
-import com.ruoyi.production.dto.ProductionReportDto;
-import com.ruoyi.production.dto.SalesLedgerSchedulingProcessDto;
-import com.ruoyi.production.dto.SalesLedgerWorkDto;
-import com.ruoyi.production.pojo.SalesLedgerWork;
-import com.ruoyi.production.service.SalesLedgerWorkService;
-import com.ruoyi.production.service.impl.SalesLedgerWorkServiceImpl;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.*;
-
-import javax.servlet.http.HttpServletResponse;
-import java.util.List;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:43
- */
-@RestController
-@Api(tags = "鐢熶骇鎶ュ伐(鎺掍骇璁板綍)")
-@RequestMapping("/salesLedger/work")
-@Deprecated // 鏍囪璇ョ被宸插純鐢�
-public class SalesLedgerWorkController extends BaseController {
-
-
-    @Autowired
-    private SalesLedgerWorkServiceImpl salesLedgerWorkService;
-
-    @GetMapping("/listPage")
-    @Log(title = "鐢熶骇鎶ュ伐-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
-    @ApiOperation("鐢熶骇鎶ュ伐-鍒嗛〉鏌ヨ")
-    public AjaxResult listPage(Page page, SalesLedgerWorkDto salesLedgerWorkDto) {
-        IPage<SalesLedgerWorkDto> listPage = salesLedgerWorkService.listPage(page, salesLedgerWorkDto);
-        return AjaxResult.success(listPage);
-    }
-
-    /**
-     * 瀵煎嚭
-     * @param response
-     */
-    @PostMapping("/export")
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇鎶ュ伐-瀵煎嚭")
-    public void export(HttpServletResponse response) {
-        Page page = new Page(-1,-1);
-        SalesLedgerWorkDto salesLedgerSchedulingDto = new SalesLedgerWorkDto();
-        IPage<SalesLedgerWorkDto> result = salesLedgerWorkService.listPage(page,salesLedgerSchedulingDto);
-        result.getRecords().forEach(item -> {
-            item.setDaiNum(item.getFinishedNum().subtract(item.getSchedulingNum()));
-            item.setStatusName(item.getStatus().toString());
-        });
-        ExcelUtil<SalesLedgerWorkDto> util = new ExcelUtil<>(SalesLedgerWorkDto.class);
-        util.exportExcel(response, result.getRecords(), "宸ュ簭鎺掍骇");
-    }
-
-    @GetMapping("/list")
-    @Log(title = "鐢熶骇鎶ュ伐-鏌ヨ", businessType = BusinessType.OTHER)
-    @ApiOperation("鐢熶骇鎶ュ伐-鏌ヨ")
-    public AjaxResult list(@RequestParam("id") Long id) {
-        List<ProductionReportDto> list = salesLedgerWorkService.getList(id);
-        return AjaxResult.success(list);
-    }
-
-    @PostMapping("/productionReport")
-    @Log(title = "鐢熶骇绠$悊-鐢熶骇鎶ュ伐", businessType = BusinessType.INSERT)
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇鎶ュ伐")
-    @Transactional(rollbackFor = Exception.class)
-    public AjaxResult productionReport(@RequestBody ProductionReportDto productionReportDto) {
-        int result = salesLedgerWorkService.productionReport(productionReportDto);
-        return AjaxResult.success(result);
-    }
-
-
-    @PostMapping("/productionReportUpdate")
-    @Log(title = "鐢熶骇绠$悊-鐢熶骇鎶ュ伐-淇敼", businessType = BusinessType.UPDATE)
-    @ApiOperation("鐢熶骇绠$悊-鐢熶骇鎶ュ伐-淇敼")
-    @Transactional(rollbackFor = Exception.class)
-    public AjaxResult productionReportUpdate(@RequestBody ProductionReportDto productionReportDto) {
-        int result = salesLedgerWorkService.productionReportUpdate(productionReportDto);
-        return AjaxResult.success(result);
-    }
-
-}
+//package com.ruoyi.production.controller;
+//
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+//import com.ruoyi.common.utils.poi.ExcelUtil;
+//import com.ruoyi.framework.aspectj.lang.annotation.Log;
+//import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+//import com.ruoyi.framework.web.controller.BaseController;
+//import com.ruoyi.framework.web.domain.AjaxResult;
+//import com.ruoyi.production.dto.ProcessSchedulingDto;
+//import com.ruoyi.production.dto.ProductionReportDto;
+//import com.ruoyi.production.dto.SalesLedgerSchedulingProcessDto;
+//import com.ruoyi.production.dto.SalesLedgerWorkDto;
+//import com.ruoyi.production.pojo.SalesLedgerWork;
+//import com.ruoyi.production.service.SalesLedgerWorkService;
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.transaction.annotation.Transactional;
+//import org.springframework.web.bind.annotation.*;
+//
+//import javax.servlet.http.HttpServletResponse;
+//import java.util.List;
+//
+///**
+// * @author :yys
+// * @date : 2025/7/21 14:43
+// */
+//@RestController
+//@Api(tags = "鐢熶骇鎶ュ伐(鎺掍骇璁板綍)")
+//@RequestMapping("/salesLedger/work")
+//@Deprecated // 鏍囪璇ョ被宸插純鐢�
+//public class SalesLedgerWorkController extends BaseController {
+//
+//
+//    @Autowired
+//    private SalesLedgerWorkServiceImpl salesLedgerWorkService;
+//
+//    @GetMapping("/listPage")
+//    @Log(title = "鐢熶骇鎶ュ伐-鍒嗛〉鏌ヨ", businessType = BusinessType.OTHER)
+//    @ApiOperation("鐢熶骇鎶ュ伐-鍒嗛〉鏌ヨ")
+//    public AjaxResult listPage(Page page, SalesLedgerWorkDto salesLedgerWorkDto) {
+//        IPage<SalesLedgerWorkDto> listPage = salesLedgerWorkService.listPage(page, salesLedgerWorkDto);
+//        return AjaxResult.success(listPage);
+//    }
+//
+//    /**
+//     * 瀵煎嚭
+//     * @param response
+//     */
+//    @PostMapping("/export")
+//    @ApiOperation("鐢熶骇绠$悊-鐢熶骇鎶ュ伐-瀵煎嚭")
+//    public void export(HttpServletResponse response) {
+//        Page page = new Page(-1,-1);
+//        SalesLedgerWorkDto salesLedgerSchedulingDto = new SalesLedgerWorkDto();
+//        IPage<SalesLedgerWorkDto> result = salesLedgerWorkService.listPage(page,salesLedgerSchedulingDto);
+//        result.getRecords().forEach(item -> {
+//            item.setDaiNum(item.getFinishedNum().subtract(item.getSchedulingNum()));
+//            item.setStatusName(item.getStatus().toString());
+//        });
+//        ExcelUtil<SalesLedgerWorkDto> util = new ExcelUtil<>(SalesLedgerWorkDto.class);
+//        util.exportExcel(response, result.getRecords(), "宸ュ簭鎺掍骇");
+//    }
+//
+//    @GetMapping("/list")
+//    @Log(title = "鐢熶骇鎶ュ伐-鏌ヨ", businessType = BusinessType.OTHER)
+//    @ApiOperation("鐢熶骇鎶ュ伐-鏌ヨ")
+//    public AjaxResult list(@RequestParam("id") Long id) {
+//        List<ProductionReportDto> list = salesLedgerWorkService.getList(id);
+//        return AjaxResult.success(list);
+//    }
+//
+//    @PostMapping("/productionReport")
+//    @Log(title = "鐢熶骇绠$悊-鐢熶骇鎶ュ伐", businessType = BusinessType.INSERT)
+//    @ApiOperation("鐢熶骇绠$悊-鐢熶骇鎶ュ伐")
+//    @Transactional(rollbackFor = Exception.class)
+//    public AjaxResult productionReport(@RequestBody ProductionReportDto productionReportDto) {
+//        int result = salesLedgerWorkService.productionReport(productionReportDto);
+//        return AjaxResult.success(result);
+//    }
+//
+//
+//    @PostMapping("/productionReportUpdate")
+//    @Log(title = "鐢熶骇绠$悊-鐢熶骇鎶ュ伐-淇敼", businessType = BusinessType.UPDATE)
+//    @ApiOperation("鐢熶骇绠$悊-鐢熶骇鎶ュ伐-淇敼")
+//    @Transactional(rollbackFor = Exception.class)
+//    public AjaxResult productionReportUpdate(@RequestBody ProductionReportDto productionReportDto) {
+//        int result = salesLedgerWorkService.productionReportUpdate(productionReportDto);
+//        return AjaxResult.success(result);
+//    }
+//
+//}
diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
index 818b6f1..e63e032 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
@@ -10,6 +10,7 @@
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Mapper
@@ -30,4 +31,6 @@
     ProductOrder getOrderByMainId(@Param("productMainId") Long productMainId);
 
     IPage<ProductionProductMainDto> listProductionDetails(@Param("ew") SalesLedgerProductionAccountingDto salesLedgerProductionAccountingDto, Page page);
+
+    ArrayList<Long> listMain(List<Long> idList);
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java b/src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java
index b410df7..cb56f29 100644
--- a/src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java
+++ b/src/main/java/com/ruoyi/production/pojo/SalesLedgerProductionAccounting.java
@@ -23,24 +23,9 @@
     private Long id;
 
     /**
-     * 閿�鍞帓浜�-鎶ュ伐琛╥d
+     * 鎶ュ伐琛╥d
      */
-    private Long salesLedgerWorkId;
-
-    /**
-     * 閿�鍞帓浜ц〃id
-     */
-    private Long salesLedgerSchedulingId;
-
-    /**
-     * 閿�鍞彴璐d
-     */
-    private Long salesLedgerId;
-
-    /**
-     * 閿�鍞骇鍝乮d
-     */
-    private Long salesLedgerProductId;
+    private Long productMainId;
 
     /**
      * 鐢熶骇浜篿d
@@ -101,6 +86,5 @@
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
 
-    private Long ProductMainId;
 
 }
diff --git a/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java b/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
index af6e414..72d868c 100644
--- a/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductionProductMainService.java
@@ -6,10 +6,15 @@
 import com.ruoyi.production.dto.ProductionProductMainDto;
 import com.ruoyi.production.pojo.ProductionProductMain;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public interface ProductionProductMainService extends IService<ProductionProductMain> {
     IPage<ProductionProductMainDto> listPageProductionProductMainDto(Page page, ProductionProductMainDto productionProductMainDto);
 
     Boolean addProductMain(ProductionProductMainDto productionProductMainDto);
 
     Boolean removeProductMain(Long id);
+
+    ArrayList<Long> listMain(List<Long> idList);
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
index 7f73d6b..bbc4b79 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductProcessRouteItemServiceImpl.java
@@ -101,14 +101,12 @@
 //                    // 鍒犻櫎璐ㄦ
 //                    qualityInspectMapper.delete(new LambdaQueryWrapper<QualityInspect>()
 //                            .eq(QualityInspect::getProductMainId, mainId));
+                    salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
+                            .eq(SalesLedgerProductionAccounting::getProductMainId, main.getId()));
                 }
             }
             // 鏌ヨ璁㈠崟 + 鍒犻櫎鏍哥畻
-            ProductOrder productOrder = productOrderMapper.selectById(productOrderId);
-            if (productOrder != null && productOrder.getSalesLedgerId() != null) {
-                salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
-                        .eq(SalesLedgerProductionAccounting::getSalesLedgerId, productOrder.getSalesLedgerId()));
-            }
+
             // 鍒犻櫎鍏宠仈宸ュ崟
             productWorkOrderMapper.delete(new LambdaQueryWrapper<ProductWorkOrder>()
                     .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId));
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 8ac0c7e..71c8690 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -33,6 +33,7 @@
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
@@ -229,10 +230,7 @@
             productOrderMapper.updateById(productOrder);
             /*娣诲姞鐢熶骇鏍哥畻*/
             SalesLedgerProductionAccounting salesLedgerProductionAccounting = SalesLedgerProductionAccounting.builder()
-                    .salesLedgerWorkId(productionProductMain.getId())
-                    .salesLedgerSchedulingId(0L)
-                    .salesLedgerId(productOrder.getSalesLedgerId())
-                    .salesLedgerProductId(productOrder.getSaleLedgerProductId())
+                    .productMainId(productionProductMain.getId())
                     .schedulingUserId(user.getUserId())
                     .schedulingUserName(user.getNickName())
                     .finishedNum(productQty)
@@ -261,7 +259,7 @@
         /*鍒犻櫎鏍哥畻*/
         salesLedgerProductionAccountingMapper.delete(
                 new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
-                        .eq(SalesLedgerProductionAccounting::getSalesLedgerWorkId, productionProductMain.getId())
+                        .eq(SalesLedgerProductionAccounting::getProductMainId, productionProductMain.getId())
         );
         /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
         ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(productionProductMain.getWorkOrderId());
@@ -302,4 +300,9 @@
         productionProductMainMapper.deleteById(productionProductMain.getId());
         return true;
     }
+
+    @Override
+    public ArrayList<Long> listMain(List<Long> idList) {
+        return productionProductMainMapper.listMain(idList);
+    }
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java
index 2135a8b..6573b73 100644
--- a/src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/SalesLedgerWorkServiceImpl.java
@@ -1,185 +1,182 @@
-package com.ruoyi.production.service.impl;
-
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
-import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.framework.security.LoginUser;
-import com.ruoyi.framework.web.domain.AjaxResult;
-import com.ruoyi.procurementrecord.dto.Details;
-import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
-import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
-import com.ruoyi.procurementrecord.service.impl.ProcurementRecordOutServiceImpl;
-import com.ruoyi.procurementrecord.service.impl.ProcurementRecordServiceImpl;
-import com.ruoyi.production.dto.ProductionReportDto;
-import com.ruoyi.production.dto.SalesLedgerWorkDto;
-import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper;
-import com.ruoyi.production.mapper.SalesLedgerWorkMapper;
-import com.ruoyi.production.pojo.SalesLedgerProductionAccounting;
-import com.ruoyi.production.pojo.SalesLedgerWork;
-import com.ruoyi.production.service.SalesLedgerProductionAccountingService;
-import com.ruoyi.production.service.SalesLedgerWorkService;
-import com.ruoyi.project.system.domain.SysUser;
-import com.ruoyi.project.system.mapper.SysUserMapper;
-import com.ruoyi.sales.mapper.LossMapper;
-import com.ruoyi.sales.pojo.Loss;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.BeanUtils;
-import org.springframework.stereotype.Service;
-import org.springframework.util.CollectionUtils;
-
-import java.math.BigDecimal;
-import java.math.RoundingMode;
-import java.time.LocalDate;
-import java.time.format.DateTimeFormatter;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * @author :yys
- * @date : 2025/7/21 14:40
- */
-@Service
-@RequiredArgsConstructor
-@Slf4j
-public class SalesLedgerWorkServiceImpl extends ServiceImpl<SalesLedgerWorkMapper, SalesLedgerWork> implements SalesLedgerWorkService {
-
-    private final SalesLedgerWorkMapper salesLedgerWorkMapper;
-
-    private final SysUserMapper sysUserMapper;
-
-    private final LossMapper lossMapper;
-
-    private final SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
-
-    @Override
-    public IPage<SalesLedgerWorkDto> listPage(Page page, SalesLedgerWorkDto salesLedgerWorkDto) {
-        IPage<SalesLedgerWorkDto> iPage = salesLedgerWorkMapper.listPage(page, salesLedgerWorkDto);
-        List<Loss> losses = lossMapper.selectList(null);
-        if(!CollectionUtils.isEmpty(losses)){
-            iPage.getRecords().forEach(item -> {
-                String[] split = item.getSpecificationModel().split("\\*");
-                if(split.length == 2 && isNumeric(split[1]) && isNumeric(split[0])){
-                    // 璁$畻鎹熻�楋紙100000浠h〃 鎹熻�楃殑 100 鍜� 鍗曚綅杞崲鐨�1000锛�
-                    BigDecimal divide = new BigDecimal(split[0])
-                            .multiply(new BigDecimal(split[1]))
-                            .multiply(item.getFinishedNum())
-                            .multiply(losses.get(0).getRate())
-                            .divide(new BigDecimal(100000), 2, RoundingMode.HALF_UP);
-                    item.setLoss(divide.toString());
-                }
-
-            });
-        }
-        return iPage;
-    }
-
-    public static boolean isNumeric(String str) {
-        if (str == null || str.isEmpty()) {
-            return false;
-        }
-        // 閬嶅巻瀛楃涓茬殑姣忎釜瀛楃锛屾鏌ユ槸鍚︿负鏁板瓧
-        for (int i = 0; i < str.length(); i++) {
-            if (!Character.isDigit(str.charAt(i))) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    private final ProcurementRecordServiceImpl procurementRecordService;
-
-    @Override
-    public int productionReport(ProductionReportDto productionReportDto) {
-        SalesLedgerWork salesLedgerWork = salesLedgerWorkMapper.selectById(productionReportDto.getId());
-        SysUser sysUser = sysUserMapper.selectUserById(productionReportDto.getSchedulingUserId());
-        if (salesLedgerWork == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
-        if (salesLedgerWork.getStatus() == 3) throw new RuntimeException("鎶ュ伐宸插畬鎴�");
-        if (sysUser == null) throw new RuntimeException("鐢熶骇浜轰笉瀛樺湪");
-        salesLedgerWork.setFinishedNum(salesLedgerWork.getFinishedNum().add(productionReportDto.getFinishedNum()));
-        if(salesLedgerWork.getSchedulingNum().compareTo(salesLedgerWork.getFinishedNum()) <= 0){
-            salesLedgerWork.setStatus(3);
-        }else{
-            salesLedgerWork.setStatus(2);
-        }
-        salesLedgerWorkMapper.updateById(salesLedgerWork);
-        // 鏂板鎶ュ伐鏁版嵁
-        SalesLedgerProductionAccounting.SalesLedgerProductionAccountingBuilder builder = SalesLedgerProductionAccounting.builder()
-                .salesLedgerWorkId(salesLedgerWork.getId())
-                .salesLedgerSchedulingId(salesLedgerWork.getSalesLedgerSchedulingId())
-                .salesLedgerId(salesLedgerWork.getSalesLedgerId())
-                .salesLedgerProductId((long)salesLedgerWork.getSalesLedgerProductId())
-                .schedulingUserId(sysUser.getUserId())
-                .schedulingUserName(sysUser.getNickName())
-                .finishedNum(productionReportDto.getFinishedNum())
-                .workHours(salesLedgerWork.getWorkHours())
-                .process(salesLedgerWork.getProcess())
-                .schedulingDate(LocalDate.parse(productionReportDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE));
-        salesLedgerProductionAccountingMapper.insert(builder.build());
-        // 鐢熶骇鎶ュ伐鎴愬姛 -> 鍏ュ簱
-        LoginUser loginUser = SecurityUtils.getLoginUser();
-        ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
-        procurementRecordOutAdd.setType(2);
-        procurementRecordOutAdd.setTypeName("鐢熶骇鍏ュ簱");
-        procurementRecordOutAdd.setNickName(loginUser.getNickName());
-        List<Details> details = new ArrayList<>();
-        Details details1 = new Details();
-        details1.setInboundQuantity(productionReportDto.getFinishedNum());
-        details1.setId(Integer.parseInt(salesLedgerWork.getSalesLedgerProductId().toString()));
-        details1.setUnitPrice(productionReportDto.getUnitPrice());
-        details1.setTotalPrice(productionReportDto.getTotalPrice());
-        details.add(details1);
-        procurementRecordOutAdd.setDetails(details);
-        procurementRecordService.add(procurementRecordOutAdd);
-
-        return 0;
-    }
-
-    @Override
-    public int productionReportUpdate(ProductionReportDto productionReportDto) {
-        SalesLedgerProductionAccounting salesLedgerProductionAccounting = salesLedgerProductionAccountingMapper.selectById(productionReportDto.getId());
-        if(salesLedgerProductionAccounting == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
-        SysUser sysUser = sysUserMapper.selectUserById(productionReportDto.getSchedulingUserId());
-        if(sysUser == null) throw new RuntimeException("鐢熶骇浜轰笉瀛樺湪");
-        salesLedgerProductionAccounting.setFinishedNum(productionReportDto.getFinishedNum());
-        salesLedgerProductionAccounting.setSchedulingUserId(sysUser.getUserId());
-        salesLedgerProductionAccounting.setSchedulingUserName(sysUser.getNickName());
-        salesLedgerProductionAccounting.setSchedulingDate(LocalDate.parse(productionReportDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE));
-        salesLedgerProductionAccountingMapper.updateById(salesLedgerProductionAccounting);
-
-        // 鏇存柊鎶ュ伐鏁版嵁
-        SalesLedgerWork salesLedgerWork = salesLedgerWorkMapper.selectById(salesLedgerProductionAccounting.getSalesLedgerWorkId());
-        if(salesLedgerWork == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
-        salesLedgerWork.setFinishedNum(productionReportDto.getFinishedNum());
-        if(salesLedgerWork.getSchedulingNum().compareTo(salesLedgerWork.getFinishedNum()) <= 0){
-            salesLedgerWork.setStatus(3);
-        }else{
-            salesLedgerWork.setStatus(2);
-        }
-        salesLedgerWork.setSchedulingUserId(sysUser.getUserId());
-        salesLedgerWork.setSchedulingUserName(sysUser.getNickName());
-        salesLedgerWork.setSchedulingDate(LocalDate.parse(productionReportDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE));
-        salesLedgerWorkMapper.updateById(salesLedgerWork);
-        return 0;
-    }
-
-    @Override
-    public List<ProductionReportDto> getList(Long id) {
-        SalesLedgerWork salesLedgerWork = salesLedgerWorkMapper.selectById(id);
-        if(salesLedgerWork == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
-        LambdaQueryWrapper<SalesLedgerProductionAccounting> salesLedgerProductionAccountingLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        salesLedgerProductionAccountingLambdaQueryWrapper.eq(SalesLedgerProductionAccounting::getSalesLedgerWorkId, id);
-        List<SalesLedgerProductionAccounting> salesLedgerProductionAccountingList = salesLedgerProductionAccountingMapper.selectList(salesLedgerProductionAccountingLambdaQueryWrapper);
-        if(CollectionUtils.isEmpty(salesLedgerProductionAccountingList)) throw new RuntimeException("娌℃湁鐢熶骇璁板綍鏁版嵁");
-        return salesLedgerProductionAccountingList.stream().map(salesLedgerProductionAccounting -> {
-            ProductionReportDto productionReportDto = new ProductionReportDto();
-            BeanUtils.copyProperties(salesLedgerProductionAccounting, productionReportDto);
-            productionReportDto.setSchedulingDate(salesLedgerProductionAccounting.getSchedulingDate().format(DateTimeFormatter.ISO_LOCAL_DATE));
-            productionReportDto.setSchedulingNum(salesLedgerWork.getSchedulingNum());
-            return productionReportDto;
-        }).collect(Collectors.toList());
-    }
-}
+//package com.ruoyi.production.service.impl;
+//
+//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+//import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+//import com.ruoyi.common.utils.SecurityUtils;
+//import com.ruoyi.framework.security.LoginUser;
+//import com.ruoyi.framework.web.domain.AjaxResult;
+//import com.ruoyi.procurementrecord.dto.Details;
+//import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
+//import com.ruoyi.procurementrecord.dto.ProcurementRecordOutAdd;
+//import com.ruoyi.procurementrecord.service.impl.ProcurementRecordOutServiceImpl;
+//import com.ruoyi.procurementrecord.service.impl.ProcurementRecordServiceImpl;
+//import com.ruoyi.production.dto.ProductionReportDto;
+//import com.ruoyi.production.dto.SalesLedgerWorkDto;
+//import com.ruoyi.production.mapper.SalesLedgerProductionAccountingMapper;
+//import com.ruoyi.production.mapper.SalesLedgerWorkMapper;
+//import com.ruoyi.production.pojo.SalesLedgerProductionAccounting;
+//import com.ruoyi.production.pojo.SalesLedgerWork;
+//import com.ruoyi.production.service.SalesLedgerProductionAccountingService;
+//import com.ruoyi.production.service.SalesLedgerWorkService;
+//import com.ruoyi.project.system.domain.SysUser;
+//import com.ruoyi.project.system.mapper.SysUserMapper;
+//import com.ruoyi.sales.mapper.LossMapper;
+//import com.ruoyi.sales.pojo.Loss;
+//import lombok.RequiredArgsConstructor;
+//import lombok.extern.slf4j.Slf4j;
+//import org.springframework.beans.BeanUtils;
+//import org.springframework.stereotype.Service;
+//import org.springframework.util.CollectionUtils;
+//
+//import java.math.BigDecimal;
+//import java.math.RoundingMode;
+//import java.time.LocalDate;
+//import java.time.format.DateTimeFormatter;
+//import java.util.ArrayList;
+//import java.util.List;
+//import java.util.stream.Collectors;
+//
+///**
+// * @author :yys
+// * @date : 2025/7/21 14:40
+// */
+//@Service
+//@RequiredArgsConstructor
+//@Slf4j
+//public class SalesLedgerWorkServiceImpl extends ServiceImpl<SalesLedgerWorkMapper, SalesLedgerWork> implements SalesLedgerWorkService {
+//
+//    private final SalesLedgerWorkMapper salesLedgerWorkMapper;
+//
+//    private final SysUserMapper sysUserMapper;
+//
+//    private final LossMapper lossMapper;
+//
+//    private final SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
+//
+//    @Override
+//    public IPage<SalesLedgerWorkDto> listPage(Page page, SalesLedgerWorkDto salesLedgerWorkDto) {
+//        IPage<SalesLedgerWorkDto> iPage = salesLedgerWorkMapper.listPage(page, salesLedgerWorkDto);
+//        List<Loss> losses = lossMapper.selectList(null);
+//        if(!CollectionUtils.isEmpty(losses)){
+//            iPage.getRecords().forEach(item -> {
+//                String[] split = item.getSpecificationModel().split("\\*");
+//                if(split.length == 2 && isNumeric(split[1]) && isNumeric(split[0])){
+//                    // 璁$畻鎹熻�楋紙100000浠h〃 鎹熻�楃殑 100 鍜� 鍗曚綅杞崲鐨�1000锛�
+//                    BigDecimal divide = new BigDecimal(split[0])
+//                            .multiply(new BigDecimal(split[1]))
+//                            .multiply(item.getFinishedNum())
+//                            .multiply(losses.get(0).getRate())
+//                            .divide(new BigDecimal(100000), 2, RoundingMode.HALF_UP);
+//                    item.setLoss(divide.toString());
+//                }
+//
+//            });
+//        }
+//        return iPage;
+//    }
+//
+//    public static boolean isNumeric(String str) {
+//        if (str == null || str.isEmpty()) {
+//            return false;
+//        }
+//        // 閬嶅巻瀛楃涓茬殑姣忎釜瀛楃锛屾鏌ユ槸鍚︿负鏁板瓧
+//        for (int i = 0; i < str.length(); i++) {
+//            if (!Character.isDigit(str.charAt(i))) {
+//                return false;
+//            }
+//        }
+//        return true;
+//    }
+//
+//    private final ProcurementRecordServiceImpl procurementRecordService;
+//
+//    @Override
+//    public int productionReport(ProductionReportDto productionReportDto) {
+//        SalesLedgerWork salesLedgerWork = salesLedgerWorkMapper.selectById(productionReportDto.getId());
+//        SysUser sysUser = sysUserMapper.selectUserById(productionReportDto.getSchedulingUserId());
+//        if (salesLedgerWork == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
+//        if (salesLedgerWork.getStatus() == 3) throw new RuntimeException("鎶ュ伐宸插畬鎴�");
+//        if (sysUser == null) throw new RuntimeException("鐢熶骇浜轰笉瀛樺湪");
+//        salesLedgerWork.setFinishedNum(salesLedgerWork.getFinishedNum().add(productionReportDto.getFinishedNum()));
+//        if(salesLedgerWork.getSchedulingNum().compareTo(salesLedgerWork.getFinishedNum()) <= 0){
+//            salesLedgerWork.setStatus(3);
+//        }else{
+//            salesLedgerWork.setStatus(2);
+//        }
+//        salesLedgerWorkMapper.updateById(salesLedgerWork);
+//        // 鏂板鎶ュ伐鏁版嵁
+//        SalesLedgerProductionAccounting.SalesLedgerProductionAccountingBuilder builder = SalesLedgerProductionAccounting.builder()
+//                .productMainId(null)
+//                .schedulingUserId(sysUser.getUserId())
+//                .schedulingUserName(sysUser.getNickName())
+//                .finishedNum(productionReportDto.getFinishedNum())
+//                .workHours(salesLedgerWork.getWorkHours())
+//                .process(salesLedgerWork.getProcess())
+//                .schedulingDate(LocalDate.parse(productionReportDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE));
+//        salesLedgerProductionAccountingMapper.insert(builder.build());
+//        // 鐢熶骇鎶ュ伐鎴愬姛 -> 鍏ュ簱
+//        LoginUser loginUser = SecurityUtils.getLoginUser();
+//        ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
+//        procurementRecordOutAdd.setType(2);
+//        procurementRecordOutAdd.setTypeName("鐢熶骇鍏ュ簱");
+//        procurementRecordOutAdd.setNickName(loginUser.getNickName());
+//        List<Details> details = new ArrayList<>();
+//        Details details1 = new Details();
+//        details1.setInboundQuantity(productionReportDto.getFinishedNum());
+//        details1.setId(Integer.parseInt(salesLedgerWork.getSalesLedgerProductId().toString()));
+//        details1.setUnitPrice(productionReportDto.getUnitPrice());
+//        details1.setTotalPrice(productionReportDto.getTotalPrice());
+//        details.add(details1);
+//        procurementRecordOutAdd.setDetails(details);
+//        procurementRecordService.add(procurementRecordOutAdd);
+//
+//        return 0;
+//    }
+//
+//    @Override
+//    public int productionReportUpdate(ProductionReportDto productionReportDto) {
+//        SalesLedgerProductionAccounting salesLedgerProductionAccounting = salesLedgerProductionAccountingMapper.selectById(productionReportDto.getId());
+//        if(salesLedgerProductionAccounting == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
+//        SysUser sysUser = sysUserMapper.selectUserById(productionReportDto.getSchedulingUserId());
+//        if(sysUser == null) throw new RuntimeException("鐢熶骇浜轰笉瀛樺湪");
+//        salesLedgerProductionAccounting.setFinishedNum(productionReportDto.getFinishedNum());
+//        salesLedgerProductionAccounting.setSchedulingUserId(sysUser.getUserId());
+//        salesLedgerProductionAccounting.setSchedulingUserName(sysUser.getNickName());
+//        salesLedgerProductionAccounting.setSchedulingDate(LocalDate.parse(productionReportDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE));
+//        salesLedgerProductionAccountingMapper.updateById(salesLedgerProductionAccounting);
+//
+//        // 鏇存柊鎶ュ伐鏁版嵁
+//        SalesLedgerWork salesLedgerWork = salesLedgerWorkMapper.selectById(salesLedgerProductionAccounting.getSalesLedgerWorkId());
+//        if(salesLedgerWork == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
+//        salesLedgerWork.setFinishedNum(productionReportDto.getFinishedNum());
+//        if(salesLedgerWork.getSchedulingNum().compareTo(salesLedgerWork.getFinishedNum()) <= 0){
+//            salesLedgerWork.setStatus(3);
+//        }else{
+//            salesLedgerWork.setStatus(2);
+//        }
+//        salesLedgerWork.setSchedulingUserId(sysUser.getUserId());
+//        salesLedgerWork.setSchedulingUserName(sysUser.getNickName());
+//        salesLedgerWork.setSchedulingDate(LocalDate.parse(productionReportDto.getSchedulingDate(), DateTimeFormatter.ISO_LOCAL_DATE));
+//        salesLedgerWorkMapper.updateById(salesLedgerWork);
+//        return 0;
+//    }
+//
+//    @Override
+//    public List<ProductionReportDto> getList(Long id) {
+//        SalesLedgerWork salesLedgerWork = salesLedgerWorkMapper.selectById(id);
+//        if(salesLedgerWork == null) throw new RuntimeException("鎶ュ伐鏁版嵁涓嶅瓨鍦�");
+//        LambdaQueryWrapper<SalesLedgerProductionAccounting> salesLedgerProductionAccountingLambdaQueryWrapper = new LambdaQueryWrapper<>();
+//        salesLedgerProductionAccountingLambdaQueryWrapper.eq(SalesLedgerProductionAccounting::getSalesLedgerWorkId, id);
+//        List<SalesLedgerProductionAccounting> salesLedgerProductionAccountingList = salesLedgerProductionAccountingMapper.selectList(salesLedgerProductionAccountingLambdaQueryWrapper);
+//        if(CollectionUtils.isEmpty(salesLedgerProductionAccountingList)) throw new RuntimeException("娌℃湁鐢熶骇璁板綍鏁版嵁");
+//        return salesLedgerProductionAccountingList.stream().map(salesLedgerProductionAccounting -> {
+//            ProductionReportDto productionReportDto = new ProductionReportDto();
+//            BeanUtils.copyProperties(salesLedgerProductionAccounting, productionReportDto);
+//            productionReportDto.setSchedulingDate(salesLedgerProductionAccounting.getSchedulingDate().format(DateTimeFormatter.ISO_LOCAL_DATE));
+//            productionReportDto.setSchedulingNum(salesLedgerWork.getSchedulingNum());
+//            return productionReportDto;
+//        }).collect(Collectors.toList());
+//    }
+//}
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
index f596e88..f6d6b27 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerProductServiceImpl.java
@@ -15,6 +15,7 @@
 import com.ruoyi.production.dto.ProductStructureDto;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.impl.SalesLedgerProductionAccountingServiceImpl;
 import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
 import com.ruoyi.purchase.pojo.PurchaseLedger;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
@@ -92,6 +93,8 @@
     private ProductStructureMapper productStructureMapper;
     @Autowired
     private StockInventoryMapper stockInventoryMapper;
+    @Autowired
+    private SalesLedgerProductionAccountingServiceImpl salesLedgerProductionAccountingServiceImpl;
 
     @Override
     public SalesLedgerProduct selectSalesLedgerProductById(Long id) {
@@ -228,9 +231,7 @@
             /*鍒犻櫎瀵瑰簲鐨勭敓浜ф暟鎹苟閲嶆柊鏂板*/
             deleteProductionData(Arrays.asList(salesLedgerProduct.getId()));
             // 鍒犻櫎鐢熶骇鏍哥畻鏁版嵁
-            LambdaQueryWrapper<SalesLedgerProductionAccounting> reportWrapper = new LambdaQueryWrapper<>();
-            reportWrapper.in(SalesLedgerProductionAccounting::getSalesLedgerId, salesLedgerId);
-            salesLedgerProductionAccountingMapper.delete(reportWrapper);
+
             addProductionData(salesLedgerProduct);
         }
 
@@ -407,6 +408,8 @@
                             }
                         });
                         qualityInspectMapper.deleteByProductMainIds(productMainIds);
+                        salesLedgerProductionAccountingMapper.delete(new LambdaQueryWrapper<SalesLedgerProductionAccounting>()
+                                .in(SalesLedgerProductionAccounting::getProductMainId, productMainIds));
                     }
 
                     // 鍒犻櫎鐢熶骇涓昏〃鏁版嵁
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index c80ea78..3a42fc7 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -25,6 +25,8 @@
 import com.ruoyi.other.pojo.TempFile;
 import com.ruoyi.production.mapper.*;
 import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.service.ProductionProductMainService;
+import com.ruoyi.production.service.impl.ProductionProductMainServiceImpl;
 import com.ruoyi.project.system.domain.SysDept;
 import com.ruoyi.project.system.domain.SysUser;
 import com.ruoyi.project.system.mapper.SysDeptMapper;
@@ -146,7 +148,9 @@
     private ProductMapper productMapper;
     @Autowired
     private ProductStructureMapper productStructureMapper;
-;
+    @Autowired
+    private ProductionProductMainService productionProductMainService;
+    ;
 
     @Override
     public List<SalesLedger> selectSalesLedgerList(SalesLedgerDto salesLedgerDto) {
@@ -178,7 +182,7 @@
                     .eq(ShippingInfo::getSalesLedgerProductId, product.getId())
                     .orderByDesc(ShippingInfo::getCreateTime)
                     .last("limit 1"));
-            if(shippingInfo != null){
+            if (shippingInfo != null) {
                 product.setShippingStatus(shippingInfo.getStatus());
             }
         }
@@ -350,7 +354,7 @@
 //            // 浜у搧澶х被鏁版嵁
 //            List<Product> productList = productMapper.selectList(new LambdaQueryWrapper<Product>().in(Product::getProductName,
 //                    salesLedgerProductImportDtoList.stream().map(SalesLedgerImportDto::getProductCategory).collect(Collectors.toList())));
-            List<Map<String,Object>> list = productModelMapper.getProductAndModelList();
+            List<Map<String, Object>> list = productModelMapper.getProductAndModelList();
             // 褰曞叆浜烘暟鎹�
             List<SysUser> sysUsers = sysUserMapper.selectList(new LambdaQueryWrapper<SysUser>().in(SysUser::getNickName,
                     salesLedgerImportDtoList.stream().map(SalesLedgerImportDto::getEntryPerson).collect(Collectors.toList())));
@@ -358,7 +362,7 @@
                 SalesLedger salesLedger1 = salesLedgerMapper.selectOne(new LambdaQueryWrapper<SalesLedger>()
                         .eq(SalesLedger::getSalesContractNo, salesLedgerImportDto.getSalesContractNo())
                         .last("LIMIT 1"));
-                if(salesLedger1 != null){
+                if (salesLedger1 != null) {
                     continue;
                 }
                 SalesLedger salesLedger = new SalesLedger();
@@ -391,7 +395,7 @@
                     throw new RuntimeException("閿�鍞崟鍙�:" + salesLedgerImportDto.getSalesContractNo() + ",鏃犲搴斾骇鍝佹暟鎹紒");
                 salesLedger.setContractAmount(salesLedgerProductImportDtos.stream()
                         .map(SalesLedgerProductImportDto::getTaxInclusiveTotalPrice)
-                        .reduce(BigDecimal.ZERO,BigDecimal::add));
+                        .reduce(BigDecimal.ZERO, BigDecimal::add));
                 salesLedgerMapper.insert(salesLedger);
 
 
@@ -553,25 +557,20 @@
         // 鍒犻櫎鍙戣揣鍙拌处璁板綍
         List<ShippingInfo> shippingInfos = shippingInfoMapper.selectList(new LambdaQueryWrapper<ShippingInfo>()
                 .in(ShippingInfo::getSalesLedgerId, idList));
-        if(CollectionUtils.isNotEmpty(shippingInfos)){
+        if (CollectionUtils.isNotEmpty(shippingInfos)) {
             shippingInfoServiceImpl.delete(shippingInfos.stream().map(ShippingInfo::getId).collect(Collectors.toList()));
         }
         // 鍒犻櫎闄勪欢琛�
         commonFileService.deleteByBusinessIds(idList, FileNameType.SALE.getValue());
 
         // 鍒犻櫎鐢熶骇绠℃帶鏁版嵁
-        // 鍒犻櫎鐢熶骇璁㈠崟鏁版嵁
-        LambdaQueryWrapper<SalesLedgerScheduling> in = new LambdaQueryWrapper<SalesLedgerScheduling>()
-                .in(SalesLedgerScheduling::getSalesLedgerId, idList);
-        salesLedgerSchedulingMapper.delete(in);
-        // 鍒犻櫎鐢熶骇娲惧伐鏁版嵁
-        LambdaQueryWrapper<SalesLedgerWork> workOrderWrapper = new LambdaQueryWrapper<>();
-        workOrderWrapper.in(SalesLedgerWork::getSalesLedgerId, idList);
-        salesLedgerWorkMapper.delete(workOrderWrapper);
-        // 鍒犻櫎鐢熶骇鏍哥畻鏁版嵁
-        LambdaQueryWrapper<SalesLedgerProductionAccounting> reportWrapper = new LambdaQueryWrapper<>();
-        reportWrapper.in(SalesLedgerProductionAccounting::getSalesLedgerId, idList);
-        salesLedgerProductionAccountingMapper.delete(reportWrapper);
+        //鏌ヨ鐢熶骇鎶ュ伐id
+        ArrayList<Long> mainIdList = productionProductMainService.listMain(idList);
+        if (CollectionUtils.isNotEmpty(mainIdList)) {
+            mainIdList.stream().forEach(mainId -> {
+                productionProductMainService.removeProductMain(mainId);
+            });
+        }
         // 2. 鍐嶅垹闄や富琛ㄦ暟鎹�
         return salesLedgerMapper.deleteBatchIds(idList);
     }
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 2581105..ff4b68f 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -66,8 +66,7 @@
         select pr.*
         from process_route pr
                  left join product_model pm on pr.product_model_id = pm.id
-                 left join sales_ledger_product slp on pm.id = slp.product_model_id
-        where slp.id = #{productModelId}
+        where pm.id = #{productModelId}
     </select>
     <select id="listProcessBom" resultType="com.ruoyi.production.dto.ProductStructureDto">
         select ps.id,
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index 1cfc0d8..9c3bf3d 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -71,7 +71,7 @@
         slpa.work_hours * slpa.finished_num AS wages
         FROM
         production_product_main ppm
-        LEFT JOIN sales_ledger_production_accounting slpa ON slpa.sales_ledger_work_id = ppm.id
+        LEFT JOIN sales_ledger_production_accounting slpa ON slpa.product_main_id = ppm.id
         LEFT JOIN production_product_output ppo ON ppm.id = ppo.product_main_id
         LEFT JOIN product_work_order pwo ON pwo.id = ppm.work_order_id
         LEFT JOIN product_order po ON po.id = pwo.product_order_id
@@ -93,6 +93,20 @@
             </if>
         </where>
     </select>
+    <select id="listMain" resultType="java.lang.Long">
+        SELECT ppm.id FROM production_product_main ppm
+            left join product_work_order pwo on pwo.id = ppm.work_order_id
+                  left join product_order po on po.id = pwo.product_order_id
+                  left join sales_ledger sl on sl.id = po.sales_ledger_id
+        <where>
+            <if test="idList != null and idList.size() > 0">
+                and sl.id in
+                <foreach item="id" collection="idList" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
+        </where>
+    </select>
 
     <delete id="deleteByWorkOrderIds" parameterType="java.util.List">
         DELETE FROM production_product_main
diff --git a/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml b/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
index 3535b77..fdbe7cc 100644
--- a/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
+++ b/src/main/resources/mapper/production/SalesLedgerProductionAccountingMapper.xml
@@ -68,7 +68,7 @@
         '%'
         ) as output_rate
         FROM sales_ledger_production_accounting slpa
-        LEFT JOIN production_product_main ppm ON slpa.sales_ledger_work_id = ppm.id
+        LEFT JOIN production_product_main ppm ON slpa.product_main_id = ppm.id
         LEFT JOIN production_product_output ppout ON ppm.id = ppout.product_main_id
         <where>
             <if test="ew.schedulingUserName != null and ew.schedulingUserName !=''">

--
Gitblit v1.9.3