From 4b189df3b30fa59dca58c5c7e7b5599a692a807a Mon Sep 17 00:00:00 2001
From: yaowanxin <3588231647@qq.com>
Date: 星期一, 12 一月 2026 14:58:52 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jtwy' into jtwy

---
 src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java |   83 +++++++++++++++++++++++----
 src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java          |   56 ++++++++++++++++++
 src/main/resources/mapper/sales/SalesLedgerProductMapper.xml                         |   11 +++
 src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java         |    2 
 src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java                   |    3 +
 5 files changed, 141 insertions(+), 14 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java b/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
index c69ab38..beefe5e 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductProcessRouteItemController.java
@@ -4,13 +4,12 @@
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.ruoyi.framework.web.domain.R;
 import com.ruoyi.production.dto.ProductProcessRouteItemDto;
-import com.ruoyi.production.mapper.ProductOrderMapper;
-import com.ruoyi.production.mapper.ProductWorkOrderMapper;
-import com.ruoyi.production.pojo.ProductOrder;
-import com.ruoyi.production.pojo.ProductProcessRouteItem;
-import com.ruoyi.production.pojo.ProductWorkOrder;
+import com.ruoyi.production.mapper.*;
+import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductProcessRouteItemService;
 import com.ruoyi.production.service.ProductWorkOrderService;
+import com.ruoyi.quality.mapper.QualityInspectMapper;
+import com.ruoyi.quality.pojo.QualityInspect;
 import com.ruoyi.sales.mapper.SalesLedgerMapper;
 import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
 import com.ruoyi.sales.pojo.SalesLedger;
@@ -43,6 +42,16 @@
     private ProductWorkOrderMapper productWorkOrderMapper;
 
     private SalesLedgerProductMapper salesLedgerProductMapper;
+
+    private ProductionProductMainMapper productionProductMainMapper;
+
+    private ProductionProductInputMapper productionProductInputMapper;
+
+    private ProductionProductOutputMapper productionProductOutputMapper;
+
+    private QualityInspectMapper qualityInspectMapper;
+
+    private SalesLedgerProductionAccountingMapper salesLedgerProductionAccountingMapper;
 
     @GetMapping("list")
     @ApiOperation("鏍规嵁Id鏌ヨ宸ヨ壓椤圭洰")
@@ -130,22 +139,70 @@
     @ApiOperation("鍒犻櫎鐢熶骇宸ヨ壓璺嚎")
     @Transactional(rollbackFor = Exception.class)
     public R deleteRouteItem(@RequestBody ProductProcessRouteItemDto processRouteItemDto) {
+
         if (processRouteItemDto == null || processRouteItemDto.getId() == null) {
-            return R.fail("鍙傛暟閿欒锛孖D涓嶈兘涓虹┖");
+            return R.fail("鍒犻櫎澶辫触锛氬伐鑹鸿矾绾块」ID涓嶈兘涓虹┖");
         }
+        Long routeItemId = processRouteItemDto.getId();
 
         try {
-            // 鍏堝垹闄ゅ叧鑱旂殑宸ュ崟鏁版嵁
-            LambdaQueryWrapper<ProductWorkOrder> wrapper = new LambdaQueryWrapper<>();
-            wrapper.eq(ProductWorkOrder::getProductProcessRouteItemId, processRouteItemDto.getId());
-            productWorkOrderMapper.delete(wrapper);
+            // 鏌ヨ宸ュ崟
+            ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectOne(
+                    new LambdaQueryWrapper<ProductWorkOrder>()
+                            .eq(ProductWorkOrder::getProductProcessRouteItemId, routeItemId)
+                            .last("LIMIT 1")
+            );
+            if (productWorkOrder == null) {
+                return R.fail("鍒犻櫎澶辫触锛氭湭鎵惧埌鍏宠仈鐨勭敓浜у伐鍗�");
+            }
+            Long workOrderId = productWorkOrder.getId();
+            Long productOrderId = productWorkOrder.getProductOrderId();
+
+            // 鏌ヨ鐢熶骇涓昏〃
+            List<ProductionProductMain> productionProductMains = productionProductMainMapper.selectList(
+                    new LambdaQueryWrapper<ProductionProductMain>()
+                            .eq(ProductionProductMain::getWorkOrderId, workOrderId)
+            );
+            if (!productionProductMains.isEmpty()) {
+                // 鎵归噺鍒犻櫎瀛愯〃
+                for (ProductionProductMain main : productionProductMains) {
+                    Long mainId = main.getId();
+                    // 鍒犻櫎鎶曞叆
+                    productionProductInputMapper.delete(new LambdaQueryWrapper<ProductionProductInput>()
+                            .eq(ProductionProductInput::getProductMainId, mainId));
+                    // 鍒犻櫎浜у嚭
+                    productionProductOutputMapper.delete(new LambdaQueryWrapper<ProductionProductOutput>()
+                            .eq(ProductionProductOutput::getProductMainId, mainId));
+                    // 鍒犻櫎璐ㄦ
+                    qualityInspectMapper.delete(new LambdaQueryWrapper<QualityInspect>()
+                            .eq(QualityInspect::getProductMainId, mainId));
+                }
+            }
+
+            //  鍒犻櫎鎶ュ伐锛堢敓浜т富琛級
+            productionProductMainMapper.delete(new LambdaQueryWrapper<ProductionProductMain>()
+                    .eq(ProductionProductMain::getWorkOrderId, workOrderId));
+
+            // 鏌ヨ璁㈠崟 + 鍒犻櫎鏍哥畻
+            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));
 
             // 鍒犻櫎涓昏〃鏁版嵁
-            productProcessRouteItemService.removeById(processRouteItemDto.getId());
+            boolean removeFlag = productProcessRouteItemService.removeById(routeItemId);
+            if (!removeFlag) {
+                return R.fail("鍒犻櫎澶辫触锛氬伐鑹鸿矾绾块」涓昏〃鏁版嵁涓嶅瓨鍦�");
+            }
+
             return R.ok();
         } catch (Exception e) {
-            throw new RuntimeException("鍒犻櫎澶辫触锛�" + e.getMessage());
+            return R.fail("鍒犻櫎鐢熶骇宸ヨ壓璺嚎澶辫触锛�" + e.getMessage());
         }
     }
-
 }
diff --git a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
index 7453caf..583c7d9 100644
--- a/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/purchase/service/impl/PurchaseLedgerServiceImpl.java
@@ -236,7 +236,7 @@
             qualityInspect.setInspectType(0);
             qualityInspect.setSupplier(purchaseLedger.getSupplierName());
             qualityInspect.setPurchaseLedgerId(purchaseLedger.getId());
-            qualityInspect.setProductId(saleProduct.getProductId());
+            qualityInspect.setProductId(saleProduct.getId());
             qualityInspect.setProductName(saleProduct.getProductCategory());
             qualityInspect.setModel(saleProduct.getSpecificationModel());
             qualityInspect.setUnit(saleProduct.getUnit());
diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
index f29bedf..27111db 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -11,7 +11,12 @@
 import com.deepoove.poi.config.Configure;
 import com.ruoyi.common.exception.base.BaseException;
 import com.ruoyi.common.utils.HackLoopTableRenderPolicy;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.framework.security.LoginUser;
+import com.ruoyi.procurementrecord.dto.Details;
+import com.ruoyi.procurementrecord.dto.ProcurementAddDto;
+import com.ruoyi.procurementrecord.service.ProcurementRecordService;
 import com.ruoyi.quality.dto.QualityInspectDto;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.mapper.QualityInspectParamMapper;
@@ -23,6 +28,8 @@
 import com.ruoyi.quality.pojo.QualityUnqualified;
 import com.ruoyi.quality.service.IQualityInspectParamService;
 import com.ruoyi.quality.service.IQualityInspectService;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import com.ruoyi.staff.mapper.StaffJoinLeaveRecordMapper;
 import com.ruoyi.staff.mapper.StaffOnJobMapper;
 import com.ruoyi.staff.pojo.StaffJoinLeaveRecord;
@@ -37,6 +44,7 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.net.URLEncoder;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -53,6 +61,10 @@
     private QualityTestStandardMapper qualityTestStandardMapper;
 
     private QualityUnqualifiedMapper qualityUnqualifiedMapper;
+
+    private SalesLedgerProductMapper salesLedgerProductMapper;
+
+    private ProcurementRecordService procurementRecordService;
 
     @Override
     public int add(QualityInspectDto qualityInspectDto) {
@@ -91,6 +103,50 @@
             qualityUnqualified.setDefectivePhenomena(text+"杩欎簺鎸囨爣涓瓨鍦ㄤ笉鍚堟牸");//涓嶅悎鏍肩幇璞�
             qualityUnqualifiedMapper.insert(qualityUnqualified);
         }
+
+        LoginUser loginUser = SecurityUtils.getLoginUser();
+        if (qualityInspect.getInspectType() == 0) {
+            if ("鍚堟牸".equals(qualityInspect.getCheckResult())) {
+                ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
+                procurementRecordOutAdd.setType(1);
+                procurementRecordOutAdd.setTypeName("閲囪喘鍏ュ簱");
+                procurementRecordOutAdd.setNickName(loginUser.getNickName());
+                procurementRecordOutAdd.setPurchaseLedgerId(Math.toIntExact(qualityInspect.getPurchaseLedgerId()));
+                if (qualityInspect.getPurchaseLedgerId() == null) {
+                    throw new BaseException("璇烽�夋嫨閲囪喘鍗�");
+                }
+                SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectById(qualityInspect.getProductId());
+
+                ArrayList<Details> detailss = new ArrayList<>();
+                Details details = new Details();
+                details.setId(Math.toIntExact(qualityInspect.getProductId()));
+                details.setInboundQuantity(qualityInspect.getQuantity());
+                details.setWarnNum(salesLedgerProduct.getWarnNum());
+                details.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
+                details.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
+                detailss.add( details);
+                procurementRecordOutAdd.setDetails(detailss);
+                procurementRecordService.add(procurementRecordOutAdd);
+            }
+        }else if (qualityInspect.getInspectType() == 1) {
+
+        }else if (qualityInspect.getInspectType() == 2) {
+            //鏌ヨUnitPrice/TotalPrice
+            SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectSalesLedgerProductByMainId(qualityInspect.getProductMainId());
+            ProcurementAddDto procurementRecordOutAdd = new ProcurementAddDto();
+            procurementRecordOutAdd.setType(2);
+            procurementRecordOutAdd.setTypeName("鐢熶骇鍏ュ簱");
+            procurementRecordOutAdd.setNickName(loginUser.getNickName());
+            List<Details> details = new ArrayList<>();
+            Details details1 = new Details();
+            details1.setInboundQuantity(qualityInspect.getQuantity());
+            details1.setId(Math.toIntExact(salesLedgerProduct.getId()));
+            details1.setUnitPrice(salesLedgerProduct.getTaxInclusiveUnitPrice());
+            details1.setTotalPrice(salesLedgerProduct.getTaxInclusiveTotalPrice());
+            details.add(details1);
+            procurementRecordOutAdd.setDetails(details);
+            procurementRecordService.add(procurementRecordOutAdd);
+        }
         qualityInspect.setInspectState(1);//宸叉彁浜�
         return qualityInspectMapper.updateById(qualityInspect);
     }
diff --git a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
index 0ccce79..58e8d9c 100644
--- a/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
+++ b/src/main/java/com/ruoyi/sales/mapper/SalesLedgerProductMapper.java
@@ -14,4 +14,7 @@
  */
 public interface SalesLedgerProductMapper extends MyBaseMapper<SalesLedgerProduct> {
     List<SalesLedgerProduct> selectSalesLedgerProductList(@Param("salesLedgerProduct") SalesLedgerProduct salesLedgerProduct);
+
+    SalesLedgerProduct selectSalesLedgerProductByMainId(@Param("productMainId") Long productMainId);
+
 }
diff --git a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
index ec8d8d4..8982caf 100644
--- a/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
+++ b/src/main/resources/mapper/sales/SalesLedgerProductMapper.xml
@@ -22,4 +22,15 @@
             </if>
         </where>
     </select>
+    <select id="selectSalesLedgerProductByMainId" resultType="com.ruoyi.sales.pojo.SalesLedgerProduct">
+        select slp.*
+        from quality_inspect qi
+                 left join production_product_main ppm on qi.product_main_id = ppm.id
+                 left join product_work_order pwo on ppm.work_order_id = pwo.id
+                 left join product_order  po on pwo.product_order_id = po.id
+                 left join sales_ledger_product slp on po.product_model_id = slp.id
+        where qi.product_main_id = #{productMainId}
+
+
+    </select>
 </mapper>
\ No newline at end of file

--
Gitblit v1.9.3