From ffb7c59cadfb8a043a41849fd6d093f7967ea4cb Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期四, 06 八月 2026 10:24:59 +0800
Subject: [PATCH] feat(quality): 增加不合格品拒收处理功能

---
 src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java |   44 ++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 44 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
index b3d93b8..d696912 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -7,9 +7,16 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
 import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.utils.OrderUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.procurementrecord.utils.StockUtils;
+import com.ruoyi.purchase.mapper.PurchaseLedgerMapper;
+import com.ruoyi.purchase.mapper.PurchaseReturnOrderProductsMapper;
+import com.ruoyi.purchase.mapper.PurchaseReturnOrdersMapper;
+import com.ruoyi.purchase.pojo.PurchaseLedger;
+import com.ruoyi.purchase.pojo.PurchaseReturnOrderProducts;
+import com.ruoyi.purchase.pojo.PurchaseReturnOrders;
 import com.ruoyi.production.mapper.ProductionOperationTaskMapper;
 import com.ruoyi.production.mapper.ProductionOrderMapper;
 import com.ruoyi.production.mapper.ProductionOrderRoutingMapper;
@@ -30,10 +37,12 @@
 import com.ruoyi.stock.service.StockUninventoryService;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 import jakarta.servlet.http.HttpServletResponse;
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.time.LocalDateTime;
 import java.time.format.DateTimeFormatter;
 import java.util.Arrays;
 import java.util.HashMap;
@@ -54,6 +63,9 @@
     private final ProductionOperationTaskMapper productionOperationTaskMapper;
     private final StockUninventoryService stockUninventoryService;
     private final StockInRecordService stockInRecordService;
+    private final PurchaseReturnOrdersMapper purchaseReturnOrdersMapper;
+    private final PurchaseReturnOrderProductsMapper purchaseReturnOrderProductsMapper;
+    private final PurchaseLedgerMapper purchaseLedgerMapper;
 
     @Override
     public IPage<QualityUnqualified> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified) {
@@ -68,6 +80,7 @@
     }
 
     @Override
+    @Transactional(rollbackFor = Exception.class)
     public int deal(QualityUnqualified qualityUnqualified) {
         QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId());
         QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId());
@@ -106,6 +119,9 @@
                 case "璁╂鏀捐":
                     stockUtils.addStock(modelId, unqualified.getQuantity(),
                             StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
+                    break;
+                case "鎷掓敹":
+                    createRejectPurchaseReturn(qualityInspect, qualityUnqualified);
                     break;
                 default:
                     break;
@@ -226,6 +242,34 @@
         return value == null ? BigDecimal.ZERO : value;
     }
 
+    private void createRejectPurchaseReturn(QualityInspect qualityInspect, QualityUnqualified qualityUnqualified) {
+        if (qualityInspect == null) {
+            throw new ServiceException("鎵嬪姩鏂板鐨勪笉鍚堟牸璁板綍涓嶆敮鎸佹嫆鏀跺鐞嗭紝璇烽�夋嫨鎶ュ簾鎴栬姝ユ斁琛�");
+        }
+        Long supplierId = null;
+        Long purchaseLedgerId = qualityInspect.getPurchaseLedgerId();
+        if (purchaseLedgerId != null) {
+            PurchaseLedger purchaseLedger = purchaseLedgerMapper.selectById(purchaseLedgerId);
+            if (purchaseLedger != null) {
+                supplierId = purchaseLedger.getSupplierId();
+            }
+        }
+        PurchaseReturnOrders returnOrder = new PurchaseReturnOrders();
+        returnOrder.setReturnType(1);
+        returnOrder.setSupplierId(supplierId);
+        returnOrder.setPurchaseLedgerId(purchaseLedgerId);
+        returnOrder.setPreparedAt(LocalDate.now());
+        returnOrder.setReturnUserName(qualityUnqualified.getDealName());
+        returnOrder.setRemark("鍘熸枡妫�楠屼笉鍚堟牸-鎷掓敹");
+        returnOrder.setNo(OrderUtils.countTodayByCreateTime(purchaseReturnOrdersMapper, "CGTL", "no", LocalDateTime.now()));
+        purchaseReturnOrdersMapper.insert(returnOrder);
+        PurchaseReturnOrderProducts product = new PurchaseReturnOrderProducts();
+        product.setPurchaseReturnOrderId(returnOrder.getId());
+        product.setReturnQuantity(qualityUnqualified.getQuantity());
+        product.setStockInRecordId(0L);
+        purchaseReturnOrderProductsMapper.insert(product);
+    }
+
     private String resolveProductionBatchNo(Long productionProductMainId,
                                             Long qualityInspectId,
                                             Long productModelId) {

--
Gitblit v1.9.3