From 7c060a33ae9399a86db97ad18da965e7a848dfc3 Mon Sep 17 00:00:00 2001
From: chenhj <1263187585@qq.com>
Date: 星期三, 25 三月 2026 17:24:10 +0800
Subject: [PATCH] feat(production): 添加生产订单完成功能

---
 src/main/resources/mapper/production/ProductWorkOrderMapper.xml              |    1 +
 src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java |   23 +++++++++++++++++++----
 src/main/resources/mapper/production/ProductOrderMapper.xml                  |    1 +
 src/main/java/com/ruoyi/production/controller/ProductOrderController.java    |    5 +++++
 src/main/java/com/ruoyi/production/service/ProductOrderService.java          |    3 ++-
 src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java              |    1 +
 src/main/java/com/ruoyi/production/pojo/ProductOrder.java                    |    1 +
 7 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
index eef5b98..d513b6c 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
@@ -72,4 +72,9 @@
     public R delete(@PathVariable("ids") Long[] ids) {
         return R.ok(productOrderService.delete(ids));
     }
+
+    @PatchMapping("/{id}")
+    public R finishOrder(@PathVariable Long id) {
+        return R.ok(productOrderService.finishOrder(id));
+    }
 }
diff --git a/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
index 2ab2b2a..3bfb3e9 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
@@ -33,6 +33,7 @@
     //鐢熶骇璁㈠崟鍙�
     @ApiModelProperty(value = "鐢熶骇璁㈠崟鍙�")
     private String productOrderNpsNo;
+    private Boolean productOrderIsEnd;
 
     @ApiModelProperty(value = "瀹屾垚杩涘害")
     private BigDecimal completionStatus;
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
index 36a3846..7367483 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductOrder.java
@@ -116,4 +116,5 @@
     @ApiModelProperty(value = "鎵瑰彿")
     private String batchNo;
 
+    private Boolean isEnd;
 }
diff --git a/src/main/java/com/ruoyi/production/service/ProductOrderService.java b/src/main/java/com/ruoyi/production/service/ProductOrderService.java
index 5a714a6..44edb22 100644
--- a/src/main/java/com/ruoyi/production/service/ProductOrderService.java
+++ b/src/main/java/com/ruoyi/production/service/ProductOrderService.java
@@ -3,7 +3,6 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
-import com.ruoyi.production.dto.ProductBomDto;
 import com.ruoyi.production.dto.ProductOrderDto;
 import com.ruoyi.production.dto.ProductStructureDto;
 import com.ruoyi.production.pojo.ProcessRoute;
@@ -25,4 +24,6 @@
     Boolean addProductOrder(ProductOrder productOrder);
 
     Boolean delete(Long[] id);
+
+    int finishOrder(Long orderId);
 }
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
index 8a1099c..c7ea9f2 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductOrderServiceImpl.java
@@ -1,5 +1,6 @@
 package com.ruoyi.production.service.impl;
 
+import cn.hutool.core.util.BooleanUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -7,8 +8,6 @@
 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.StockOutQualifiedRecordTypeEnum;
-import com.ruoyi.common.enums.StockInUnQualifiedRecordTypeEnum;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.dto.ProductOrderDto;
 import com.ruoyi.production.dto.ProductStructureDto;
@@ -16,7 +15,6 @@
 import com.ruoyi.production.pojo.*;
 import com.ruoyi.production.service.ProductOrderService;
 import com.ruoyi.quality.mapper.QualityInspectMapper;
-import com.ruoyi.quality.pojo.QualityInspect;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -67,7 +65,17 @@
 
     @Override
     public IPage<ProductOrderDto> pageProductOrder(Page page, ProductOrderDto productOrder) {
-        return productOrderMapper.pageProductOrder(page, productOrder);
+        IPage<ProductOrderDto> productOrderDtoIPage = productOrderMapper.pageProductOrder(page, productOrder);
+        List<ProductOrderDto> productOrderDtos = productOrderDtoIPage.getRecords();
+        for (int i = 0; i < productOrderDtos.size(); i++) {
+            ProductOrderDto productOrderDto = productOrderDtos.get(i);
+            if (BooleanUtil.isTrue(productOrderDto.getIsEnd())) {
+                // 濡傛灉鐢熶骇璁㈠崟琚粨鏉燂紝鍒欏皢瀹屾垚杩涘害璁剧疆涓�100%
+                productOrderDto.setCompletionStatus(BigDecimal.valueOf(100));
+            }
+        }
+
+        return productOrderDtoIPage;
     }
 
     @Override
@@ -201,4 +209,11 @@
     }
 
 
+    @Override
+    public int finishOrder(Long orderId) {
+        ProductOrder productOrder = new ProductOrder();
+        productOrder.setId(orderId);
+        productOrder.setIsEnd(true);
+        return productOrderMapper.updateById(productOrder);
+    }
 }
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 5052055..f781da3 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -14,6 +14,7 @@
         <result property="updateTime" column="update_time"/>
         <result property="expectedSchedule" column="expected_schedule"/>
         <result property="manufacturingTeam" column="manufacturing_team"/>
+        <result property="isEnd" column="is_end"/>
     </resultMap>
     <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto">
         select po.*,
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index fe03f1e..ed47f64 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -28,6 +28,7 @@
         pm.uid_no,
         p.product_name AS productName,
         po.nps_no AS productOrderNpsNo,
+        po.is_end as productOrderIsEnd,
         ROUND(pwo.complete_quantity / pwo.plan_quantity * 100, 2) AS completionStatus,
         CASE
         WHEN pwo.work_order_no LIKE 'FG%' THEN '杩斿伐杩斾慨'

--
Gitblit v1.9.3