From 17a63200983a8e154a1eb3549d1caffa050372c1 Mon Sep 17 00:00:00 2001
From: liding <756868258@qq.com>
Date: 星期一, 30 三月 2026 17:14:45 +0800
Subject: [PATCH] feat:1.生产订单领用 2.报工领用(关联订单领用) 3.报工删除(关联报工领用) 4.不合格处理(返工生成返工附件并下载)

---
 src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java |  109 +++++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 94 insertions(+), 15 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 68c819c..a3c199d 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -7,8 +7,9 @@
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.ruoyi.common.enums.StockQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockUnQualifiedRecordTypeEnum;
+import com.deepoove.poi.XWPFTemplate;
+import com.ruoyi.common.enums.StockInQualifiedRecordTypeEnum;
+import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
 import com.ruoyi.common.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.procurementrecord.utils.StockUtils;
@@ -16,7 +17,10 @@
 import com.ruoyi.production.mapper.ProductProcessRouteMapper;
 import com.ruoyi.production.mapper.ProductWorkOrderMapper;
 import com.ruoyi.production.mapper.ProductionProductMainMapper;
-import com.ruoyi.production.pojo.*;
+import com.ruoyi.production.pojo.ProductOrder;
+import com.ruoyi.production.pojo.ProductProcessRoute;
+import com.ruoyi.production.pojo.ProductProcessRouteItem;
+import com.ruoyi.production.pojo.ProductWorkOrder;
 import com.ruoyi.production.service.ProductOrderService;
 import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
 import com.ruoyi.quality.pojo.QualityInspect;
@@ -28,10 +32,14 @@
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 @AllArgsConstructor
 @Service
@@ -63,10 +71,9 @@
     public int deal(QualityUnqualified qualityUnqualified) {
         QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId());
         QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId());
-        if (ObjectUtils.isNotNull(qualityInspect) && qualityInspect.getInspectType()!=0) {
+        if (ObjectUtils.isNotNull(qualityInspect) && qualityInspect.getInspectType() != 0) {
             switch (qualityUnqualified.getDealResult()) {
                 case "杩斾慨":
-                case "杩斿伐":
                     //鍒ゆ柇璐ㄦ琛ㄦ槸鍚︽湁鐩稿叧鐨勬姤宸d,濡傛灉鏈夋姤宸d,閭d箞杩斿伐闇�瑕侀噸鏂板垱寤虹敓浜ц鍗曢噸鏂扮敓浜�
                     if (ObjectUtils.isNotNull(qualityInspect.getProductMainId())) {
                         //杩斿伐闇�瑕侀噸鏂板垱寤虹敓浜ц鍗曢噸鏂扮敓浜�
@@ -98,11 +105,7 @@
                             int insert = productProcessRouteItemMapper.insert(productProcessRouteItem);
                             if (insert > 0) {
                                 // 鏌ヨ浠婃棩宸插瓨鍦ㄧ殑鏈�澶у伐鍗曞彿
-                                QueryWrapper<ProductWorkOrder> queryWrapper = new QueryWrapper<>();
-                                queryWrapper.likeRight("work_order_no", datePrefix)
-                                        .orderByDesc("work_order_no")
-                                        .last("LIMIT 1");
-                                ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectOne(queryWrapper);
+                                ProductWorkOrder lastWorkOrder = productWorkOrderMapper.selectMax(datePrefix);
                                 int sequenceNumber = 1; // 榛樿搴忓彿
                                 if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
                                     String lastNo = lastWorkOrder.getWorkOrderNo().toString();
@@ -116,7 +119,7 @@
                                     }
                                 }
                                 // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
-                                String workOrderNoStr ="FG" +String.format("%s%03d", datePrefix, sequenceNumber);
+                                String workOrderNoStr = "FG" + String.format("%s%03d", datePrefix, sequenceNumber);
                                 ProductWorkOrder productWorkOrder = new ProductWorkOrder();
                                 productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
                                 productWorkOrder.setProductOrderId(order.getId());
@@ -130,19 +133,95 @@
                     break;
                 case "鎶ュ簾":
                     //璋冪敤涓嶅悎鏍煎簱瀛樻帴鍙� 鍏ヤ笉鍚堟牸搴�
-                    stockUtils.addUnStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId());
+                    stockUtils.addUnStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId());
                     break;
                 case "璁╂鏀捐":
                     //璋冪敤鎻愪氦鍚堟牸鐨勬帴鍙�
-                    stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
-                    qualityInspect.setCheckResult("鍚堟牸");
-                    qualityInspectService.submit(qualityInspect);
+                    stockUtils.addStock(qualityInspect.getProductModelId(), unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
+                    break;
+                case "杩斿伐":
+                default:
+                    break;
+            }
+        } else {
+            //鏌ヨ瀵瑰簲鐨勮鏍煎瀷鍙穒d
+            Long modelId = qualityUnqualifiedMapper.getModelId(qualityUnqualified.getProductName(), qualityUnqualified.getModel());
+            switch (qualityUnqualified.getDealResult()) {
+                case "鎶ュ簾":
+                    //璋冪敤涓嶅悎鏍煎簱瀛樻帴鍙� 鍏ヤ笉鍚堟牸搴�
+                    stockUtils.addUnStock(modelId, unqualified.getQuantity(), StockInUnQualifiedRecordTypeEnum.DEFECTIVE_SCRAP.getCode(), unqualified.getId());
+                    break;
+                case "璁╂鏀捐":
+                    //璋冪敤鎻愪氦鍚堟牸鐨勬帴鍙�
+                    stockUtils.addStock(modelId, unqualified.getQuantity(), StockInQualifiedRecordTypeEnum.DEFECTIVE_PASS.getCode(), unqualified.getId());
                     break;
                 default:
                     break;
             }
+
         }
         qualityUnqualified.setInspectState(1);//宸插鐞�
         return qualityUnqualifiedMapper.updateById(qualityUnqualified);
     }
+
+    @Override
+    public QualityUnqualified getUnqualified(Integer id) {
+        return qualityUnqualifiedMapper.getUnqualified(id);
+    }
+
+    @Override
+    public void downloadReturnRecord(Long id, HttpServletResponse response) {
+        XWPFTemplate template = null;
+        InputStream inputStream = null;
+        OutputStream out = null;
+        try {
+            // 1. 鏌ヨ鏁版嵁
+            QualityUnqualified info = qualityUnqualifiedMapper.selectById(id);
+            Map<String, Object> data = new HashMap<>();
+            data.put("productName", info.getProductName());
+            data.put("model", info.getModel());
+
+            // 鍔犺浇妯℃澘
+            inputStream = getClass().getResourceAsStream("/static/return-record.docx");
+            if (inputStream == null) {
+                throw new RuntimeException("妯℃澘鏂囦欢涓嶅瓨鍦紝璇锋鏌ヨ矾寰勶細/static/return-record.docx");
+            }
+
+            // 娓叉煋妯℃澘
+            template = XWPFTemplate.compile(inputStream).render(data);
+
+            // 璁剧疆鍝嶅簲澶�
+            response.setContentType("application/vnd.openxmlformats-officedocument.wordprocessingml.document");
+            response.setHeader("Content-Disposition", "attachment; filename=rework_record_" + id + ".docx");
+            response.setContentLengthLong(-1);
+
+            out = response.getOutputStream();
+            template.write(out);
+            out.flush();
+        } catch (Exception e) {
+            throw new RuntimeException("涓嬭浇澶辫触", e);
+        } finally {
+            if (template != null) {
+                try {
+                    template.close();
+                } catch (Exception e) {
+                    log.error("鍏抽棴妯℃澘澶辫触", e);
+                }
+            }
+            if (inputStream != null) {
+                try {
+                    inputStream.close();
+                } catch (Exception e) {
+                    log.error("鍏抽棴杈撳叆娴佸け璐�", e);
+                }
+            }
+            if (out != null) {
+                try {
+                    out.close();
+                } catch (Exception e) {
+                    log.error("鍏抽棴杈撳嚭娴佸け璐�", e);
+                }
+            }
+        }
+    }
 }

--
Gitblit v1.9.3