From 1b36df13ad8b6cb7859c9f90bfb9cd84587d3728 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期三, 21 一月 2026 13:19:20 +0800
Subject: [PATCH] 不合格处理

---
 src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java     |    1 
 src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java    |   10 +++
 src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java |  101 +++++++++++++++++++++++++++++++++
 src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java                    |    3 
 src/main/java/com/ruoyi/quality/service/IQualityUnqualifiedService.java         |    3 +
 src/main/resources/mapper/production/ProductionProductMainMapper.xml            |    7 ++
 src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java      |    8 ++
 7 files changed, 132 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java b/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
index c9d1268..2bdefa3 100644
--- a/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
+++ b/src/main/java/com/ruoyi/production/mapper/ProductionProductMainMapper.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.production.dto.ProductionProductMainDto;
+import com.ruoyi.production.pojo.ProductOrder;
 import com.ruoyi.production.pojo.ProductionProductMain;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -19,4 +20,11 @@
      * 鏍规嵁宸ュ崟ID鎵归噺鍒犻櫎鐢熶骇涓昏〃鏁版嵁
      */
     int deleteByWorkOrderIds(@Param("workOrderIds") List<Long> workOrderIds);
+
+    /**
+     * 鏍规嵁鎶ュ伐id鏌ヨ鐢熶骇璁㈠崟
+     * @param productMainId
+     * @return
+     */
+    ProductOrder getOrderByMainId(@Param("productMainId") Long productMainId);
 }
diff --git a/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java b/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java
index 7a42873..1cce084 100644
--- a/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java
+++ b/src/main/java/com/ruoyi/quality/controller/QualityUnqualifiedController.java
@@ -86,5 +86,15 @@
         qualityUnqualifiedService.qualityUnqualifiedExport(response, qualityUnqualified);
     }
 
+    /**
+     * 涓嶅悎鏍肩鐞嗗鐞�
+     * @param qualityUnqualified
+     * @return
+     */
+    @PostMapping("/deal")
+    public AjaxResult deal(@RequestBody QualityUnqualified qualityUnqualified) {
+        return AjaxResult.success(qualityUnqualifiedService.deal(qualityUnqualified));
+    }
+
 
 }
diff --git a/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java b/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java
index 5636c2f..eaebece 100644
--- a/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java
+++ b/src/main/java/com/ruoyi/quality/pojo/QualityUnqualified.java
@@ -133,5 +133,6 @@
     @TableField(fill = FieldFill.INSERT)
     private Long tenantId;
 
-
+    @ApiModelProperty("鍏宠仈妫�娴媔d")
+    private Long inspectId;
 }
diff --git a/src/main/java/com/ruoyi/quality/service/IQualityUnqualifiedService.java b/src/main/java/com/ruoyi/quality/service/IQualityUnqualifiedService.java
index 3aed832..7cd7f79 100644
--- a/src/main/java/com/ruoyi/quality/service/IQualityUnqualifiedService.java
+++ b/src/main/java/com/ruoyi/quality/service/IQualityUnqualifiedService.java
@@ -14,4 +14,7 @@
     IPage<QualityUnqualified> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified);
 
     void qualityUnqualifiedExport(HttpServletResponse response, QualityUnqualified qualityUnqualified);
+
+    int deal(QualityUnqualified qualityUnqualified);
+
 }
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 48b055b..9f29267 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityInspectServiceImpl.java
@@ -96,6 +96,7 @@
             List<QualityInspectParam> inspectParams = qualityInspectParamService.list(Wrappers.<QualityInspectParam>lambdaQuery().eq(QualityInspectParam::getInspectId, inspect.getId()));
             String text = inspectParams.stream().map(QualityInspectParam::getParameterItem).collect(Collectors.joining(","));
             qualityUnqualified.setDefectivePhenomena(text+"杩欎簺鎸囨爣涓瓨鍦ㄤ笉鍚堟牸");//涓嶅悎鏍肩幇璞�
+            qualityUnqualified.setInspectId(qualityInspect.getId());
             qualityUnqualifiedMapper.insert(qualityUnqualified);
         }
 
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 a080dd3..fe3b8e0 100644
--- a/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
+++ b/src/main/java/com/ruoyi/quality/service/impl/QualityUnqualifiedServiceImpl.java
@@ -1,10 +1,20 @@
 package com.ruoyi.quality.service.impl;
 
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+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.utils.bean.BeanUtils;
 import com.ruoyi.common.utils.poi.ExcelUtil;
+import com.ruoyi.production.mapper.ProductProcessRouteItemMapper;
+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.service.ProductOrderService;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
 import com.ruoyi.quality.mapper.QualityUnqualifiedMapper;
 import com.ruoyi.quality.pojo.QualityInspect;
@@ -16,6 +26,9 @@
 import org.springframework.stereotype.Service;
 
 import javax.servlet.http.HttpServletResponse;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.List;
 
 @AllArgsConstructor
@@ -23,6 +36,13 @@
 public class QualityUnqualifiedServiceImpl extends ServiceImpl<QualityUnqualifiedMapper, QualityUnqualified>  implements IQualityUnqualifiedService {
 
     private QualityUnqualifiedMapper qualityUnqualifiedMapper;
+    private IQualityInspectService qualityInspectService;
+    private ProductOrderService productOrderService;
+    private ProductionProductMainMapper productionProductMainMapper;
+    private ProductProcessRouteMapper productProcessRouteMapper;
+    private ProductProcessRouteItemMapper productProcessRouteItemMapper;
+    private ProductWorkOrderMapper productWorkOrderMapper;
+
 
     @Override
     public IPage<QualityUnqualified> qualityUnqualifiedListPage(Page page, QualityUnqualified qualityUnqualified) {
@@ -35,4 +55,85 @@
         ExcelUtil<QualityUnqualified> util = new ExcelUtil<QualityUnqualified>(QualityUnqualified.class);
         util.exportExcel(response, qualityUnqualifieds, "涓嶅悎鏍肩鐞嗗鍑�");
     }
+
+    @Override
+    public int deal(QualityUnqualified qualityUnqualified) {
+        QualityUnqualified unqualified = qualityUnqualifiedMapper.selectById(qualityUnqualified.getId());
+        QualityInspect qualityInspect = qualityInspectService.getById(unqualified.getInspectId());
+        switch (qualityUnqualified.getDealResult()) {
+            case "杩斾慨":
+            case "杩斿伐":
+                //鍒ゆ柇璐ㄦ琛ㄦ槸鍚︽湁鐩稿叧鐨勬姤宸d,濡傛灉鏈夋姤宸d,閭d箞杩斿伐闇�瑕侀噸鏂板垱寤虹敓浜ц鍗曢噸鏂扮敓浜�
+                if (ObjectUtils.isNotNull(qualityInspect.getProductMainId())){
+                    //杩斿伐闇�瑕侀噸鏂板垱寤虹敓浜ц鍗曢噸鏂扮敓浜�
+                    ProductOrder productOrder = productionProductMainMapper.getOrderByMainId(qualityInspect.getProductMainId());
+                    ProductOrder order = new ProductOrder();
+                    BeanUtils.copyProperties(productOrder, order);
+                    order.setId(null);
+                    order.setQuantity(unqualified.getQuantity());
+                    order.setCompleteQuantity(BigDecimal.ZERO);
+                    order.setStartTime(null);
+                    order.setEndTime(null);
+                    productOrderService.save(order);
+                    //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎涓昏〃
+                    ProductProcessRoute productProcessRoute = productProcessRouteMapper.selectList(Wrappers.<ProductProcessRoute>lambdaQuery().eq(ProductProcessRoute::getProductOrderId,productOrder.getId()).orderByDesc(ProductProcessRoute::getId)).get(0);
+                    ProductProcessRoute newProcessRoute = new ProductProcessRoute();
+                    BeanUtils.copyProperties(productProcessRoute, newProcessRoute);
+                    newProcessRoute.setId(null);
+                    newProcessRoute.setProductOrderId(order.getId());
+                    productProcessRouteMapper.insert(newProcessRoute);
+                    //鏂板鐢熶骇璁㈠崟涓嬬殑宸ヨ壓璺嚎瀛愯〃
+                    List<ProductProcessRouteItem> processRouteItems = productProcessRouteItemMapper.selectList(new QueryWrapper<ProductProcessRouteItem>().lambda().eq(ProductProcessRouteItem::getProductRouteId, productProcessRoute.getId()));
+                    // 鐢熸垚褰撳墠鏃ユ湡鐨勫墠缂�锛氬勾鏈堟棩
+                    String datePrefix = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+                    for (ProductProcessRouteItem processRouteItem : processRouteItems) {
+                        ProductProcessRouteItem productProcessRouteItem = new ProductProcessRouteItem();
+                        BeanUtils.copyProperties(processRouteItem, productProcessRouteItem);
+                        productProcessRouteItem.setId(null);
+                        productProcessRouteItem.setProductRouteId(newProcessRoute.getId());
+                        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);
+                            int sequenceNumber = 1; // 榛樿搴忓彿
+                            if (lastWorkOrder != null && lastWorkOrder.getWorkOrderNo() != null) {
+                                String lastNo = lastWorkOrder.getWorkOrderNo().toString();
+                                if (lastNo.startsWith(datePrefix)) {
+                                    String seqStr = lastNo.substring(datePrefix.length());
+                                    try {
+                                        sequenceNumber = Integer.parseInt(seqStr) + 1;
+                                    } catch (NumberFormatException e) {
+                                        sequenceNumber = 1;
+                                    }
+                                }
+                            }
+                            // 鐢熸垚瀹屾暣鐨勫伐鍗曞彿
+                            String workOrderNoStr = String.format("%s%03d", datePrefix, sequenceNumber);
+                            ProductWorkOrder productWorkOrder = new ProductWorkOrder();
+                            productWorkOrder.setProductProcessRouteItemId(productProcessRouteItem.getId());
+                            productWorkOrder.setProductOrderId(order.getId());
+                            productWorkOrder.setPlanQuantity(order.getQuantity());
+                            productWorkOrder.setWorkOrderNo(workOrderNoStr);
+                            productWorkOrder.setStatus(1);
+                            productWorkOrderMapper.insert(productWorkOrder);
+                        }
+                    }
+                }
+                break;
+            case "鎶ュ簾":
+                break;
+            case "璁╂鏀捐":
+                //璋冪敤鎻愪氦鍚堟牸鐨勬帴鍙�
+                qualityInspect.setCheckResult("鍚堟牸");
+                qualityInspectService.submit(qualityInspect);
+                break;
+            default:
+                break;
+        }
+        return qualityUnqualifiedMapper.updateById(qualityUnqualified);
+    }
 }
diff --git a/src/main/resources/mapper/production/ProductionProductMainMapper.xml b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
index 1d98782..11cd348 100644
--- a/src/main/resources/mapper/production/ProductionProductMainMapper.xml
+++ b/src/main/resources/mapper/production/ProductionProductMainMapper.xml
@@ -48,6 +48,13 @@
         order by ppm.id
 
     </select>
+    <select id="getOrderByMainId" resultType="com.ruoyi.production.pojo.ProductOrder">
+        select po.*
+        from product_order po
+        left join  product_work_order pwo on po.id = pwo.product_order_id
+        left join production_product_main pm on work_order_id=pwo.id
+        where pm.id=#{productMainId}
+    </select>
 
     <delete id="deleteByWorkOrderIds" parameterType="java.util.List">
         DELETE FROM production_product_main

--
Gitblit v1.9.3