From 97f84227acd789843541382a9625fe81d279c443 Mon Sep 17 00:00:00 2001
From: yaowanxin <3588231647@qq.com>
Date: 星期五, 16 一月 2026 10:42:40 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/jtwy' into jtwy

---
 src/main/resources/mapper/production/ProductWorkOrderMapper.xml          |    5 +-
 src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java            |   26 ++++++++----
 src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java          |    6 +++
 src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java |   68 ++++++++++++++++++++++------------
 4 files changed, 70 insertions(+), 35 deletions(-)

diff --git a/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
index 2191029..f4ebe75 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductWorkOrderDto.java
@@ -1,9 +1,12 @@
 package com.ruoyi.production.dto;
 
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import com.ruoyi.production.pojo.ProductWorkOrder;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
 
 @EqualsAndHashCode(callSuper = true)
 @Data
@@ -29,4 +32,7 @@
     //鐢熶骇璁㈠崟鍙�
     @ApiModelProperty(value = "鐢熶骇璁㈠崟鍙�")
     private String productOrderNpsNo;
+
+    @ApiModelProperty(value = "瀹屾垚杩涘害")
+    private BigDecimal completionStatus;
 }
diff --git a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
index 20801ea..4efc694 100644
--- a/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
+++ b/src/main/java/com/ruoyi/production/pojo/ProductWorkOrder.java
@@ -2,6 +2,7 @@
 
 import com.baomidou.mybatisplus.annotation.*;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import org.springframework.format.annotation.DateTimeFormat;
@@ -64,9 +65,9 @@
     private String workOrderNo;
 
     /**
-     * 鐘舵��  1 寰呯‘璁�  2 寰呯敓浜� 3鐢熶骇涓� 4宸茬敓浜�
+     * 鐘舵��  1 寰呯‘璁�  2 寰呯敓浜� 3鐢熶骇涓� 4宸插畬鎴�
      */
-    @ApiModelProperty(value = "鐘舵��  1 寰呯‘璁�  2 寰呯敓浜� 3鐢熶骇涓� 4宸茬敓浜�")
+    @ApiModelProperty(value = "鐘舵��  1 寰呯‘璁�  2 寰呯敓浜� 3鐢熶骇涓� 4宸插畬鎴�")
     private Integer status;
 
     /**
@@ -80,38 +81,45 @@
      * 璁″垝寮�濮嬫椂闂�
      */
     @ApiModelProperty(value = "璁″垝寮�濮嬫椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate planStartTime;
 
     /**
      * 璁″垝缁撴潫鏃堕棿
      */
     @ApiModelProperty(value = "璁″垝缁撴潫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate planEndTime;
 
     /**
      * 瀹為檯寮�濮嬫椂闂�
      */
     @ApiModelProperty(value = "瀹為檯寮�濮嬫椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate actualStartTime;
 
     /**
      * 瀹為檯缁撴潫鏃堕棿
      */
     @ApiModelProperty(value = "瀹為檯缁撴潫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
     private LocalDate actualEndTime;
 
     /**
-     * 鏄惁鎶ュ伐
+     * 闇�姹傞噺
      */
-    @ApiModelProperty(value = "鏄惁鎶ュ伐")
-    private boolean reportWork;
-
+    @ApiModelProperty(value = "闇�姹傛暟閲�")
+    private BigDecimal planQuantity;
 
     /**
-     * 瀹為檯鏁伴噺
+     * 瀹屾垚鏁伴噺
      */
-    @ApiModelProperty(value = "鏁伴噺")
-    private BigDecimal planQuantity;
+    @ApiModelProperty(value = "瀹屾垚鏁伴噺")
+    private BigDecimal completeQuantity;
 
 
 }
diff --git a/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
index b8fab54..a34f809 100644
--- a/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
+++ b/src/main/java/com/ruoyi/sales/controller/ShipmentApprovalController.java
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.exception.ServiceException;
 import com.ruoyi.common.utils.poi.ExcelUtil;
 import com.ruoyi.framework.web.controller.BaseController;
 import com.ruoyi.framework.web.domain.AjaxResult;
@@ -60,41 +61,60 @@
     @ApiOperation("鍙戣揣瀹℃壒,鏇存柊鍙戣揣瀹℃壒鐘舵��")
     @Transactional(rollbackFor = Exception.class)
     public AjaxResult update(@RequestBody ShipmentApproval req) {
+
+        //  鏌ヨ鍙戣揣瀹℃壒
         ShipmentApproval shipmentApproval = shipmentApprovalMapper.selectById(req.getId());
         if (shipmentApproval == null) {
             return AjaxResult.error("鍙戣揣瀹℃壒涓嶅瓨鍦�");
         }
 
+        //  鏇存柊鍙戣揣瀹℃壒鐘舵��
         shipmentApproval.setApproveStatus(req.getApproveStatus());
         boolean update = shipmentApprovalService.updateById(shipmentApproval);
-        if(update){
-            SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(shipmentApproval.getSalesLedgerProductId());
-            salesLedgerProduct.setApproveStatus(req.getApproveStatus());
-            salesLedgerProductService.updateById(salesLedgerProduct);
-
-            if(req.getApproveStatus()==3){
-                ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(new LambdaQueryWrapper<ProcurementRecordStorage>()
-                        .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId()));
-                if(procurementRecordStorage==null){
-                    return AjaxResult.error("閲囪喘璁板綍涓嶅瓨鍦�");
-                }
-                //鍙戣揣瀹℃壒閫氳繃锛岀敓浜ц璁㈠崟鍑哄簱璁板綍
-                ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd();
-                procurementRecordOutAdd.setId(procurementRecordStorage.getId());
-                procurementRecordOutAdd.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId()));
-                procurementRecordOutAdd.setType(2);
-                procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId()));
-                procurementRecordOutAdd.setQuantity(String.valueOf(salesLedgerProduct.getQuantity()));
-                //鑾峰彇褰撳墠鏃堕棿
-                LocalDate now = LocalDate.now();
-                procurementRecordOutAdd.setTime(now.toString());
-                procurementRecordOutService.stockout(procurementRecordOutAdd);
-            }
+        if (!update) {
+            //  浜嬪姟鍥炴粴
+            throw new ServiceException("鍙戣揣瀹℃壒鏇存柊澶辫触");
         }
-        return update ? AjaxResult.success() : AjaxResult.error();
+        //  鏌ヨ鍏宠仈鐨勯攢鍞彴璐︿骇鍝�
+        SalesLedgerProduct salesLedgerProduct = salesLedgerProductService.getById(shipmentApproval.getSalesLedgerProductId());
+        if (salesLedgerProduct == null) {
+            //  鎶涘紓甯镐簨鍔″洖婊�
+            throw new ServiceException("閿�鍞彴璐︿笉瀛樺湪锛屽鎵瑰洖婊�");
+        }
+
+        //  鍚屾鏇存柊閿�鍞彴璐︿骇鍝佺殑瀹℃壒鐘舵��
+        salesLedgerProduct.setApproveStatus(req.getApproveStatus());
+        salesLedgerProductService.updateById(salesLedgerProduct);
+
+        //  瀹℃壒閫氳繃
+        if (req.getApproveStatus() == 3) {
+            // 鏌ヨ閲囪喘鍏ュ簱璁板綍
+            LambdaQueryWrapper<ProcurementRecordStorage> lambdaQueryWrapper = new LambdaQueryWrapper<ProcurementRecordStorage>()
+                    .eq(ProcurementRecordStorage::getSalesLedgerProductId, req.getSalesLedgerProductId());
+            ProcurementRecordStorage procurementRecordStorage = procurementRecordStorageService.getOne(lambdaQueryWrapper);
+
+            if (procurementRecordStorage == null) {
+                // 淇濊瘉鍓嶉潰鐨勪慨鏀瑰叏閮ㄥ洖婊�
+                throw new ServiceException("閲囪喘璁板綍涓嶅瓨鍦紝瀹℃壒鍥炴粴");
+            }
+
+            //  鐢熸垚鍑哄簱璁板綍
+            ProcurementRecordOutAdd procurementRecordOutAdd = new ProcurementRecordOutAdd();
+            procurementRecordOutAdd.setId(procurementRecordStorage.getId());
+            procurementRecordOutAdd.setSalesLedgerProductId(Math.toIntExact(salesLedgerProduct.getId()));
+            procurementRecordOutAdd.setType(2);
+            procurementRecordOutAdd.setUserId(Math.toIntExact(getUserId()));
+            procurementRecordOutAdd.setQuantity(salesLedgerProduct.getQuantity().toPlainString());
+            procurementRecordOutAdd.setTime(LocalDate.now().toString());
+
+            procurementRecordOutService.stockout(procurementRecordOutAdd);
+        }
+
+        return AjaxResult.success();
     }
 
 
+
     /**
      * 瀵煎嚭鍙戣揣淇℃伅绠$悊
      */
diff --git a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
index ac0348a..309e1c6 100644
--- a/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductWorkOrderMapper.xml
@@ -25,9 +25,10 @@
         pm.model,
         pm.unit,
         p.product_name AS productName,
-        po.nps_no AS productOrderNpsNo
+        po.nps_no AS productOrderNpsNo,
+        ROUND(pwo.complete_quantity / pwo.plan_quantity * 100, 2) AS completionStatus
         FROM
-        `product_work_order` pwo
+        product_work_order pwo
         LEFT JOIN product_process_route_item ppri ON ppri.id = pwo.product_process_route_item_id
         LEFT JOIN product_order po ON po.id = pwo.product_order_id
         LEFT JOIN product_process pp ON pp.id = ppri.process_id

--
Gitblit v1.9.3