From cdf5605fb5caa0da0f134893bac350785250ea8a Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期四, 27 八月 2026 11:21:19 +0800
Subject: [PATCH] feat(mes): 基础参数与工序绑定,报工填写绑定的参数字段

---
 yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java
index df706ac..f014f62 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/controller/admin/purchase/ErpPurchaseOrderController.java
@@ -13,9 +13,11 @@
 import cn.iocoder.yudao.module.erp.controller.admin.purchase.vo.order.ErpPurchaseOrderSaveReqVO;
 import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseOrderDO;
 import cn.iocoder.yudao.module.erp.dal.dataobject.purchase.ErpPurchaseOrderItemDO;
+import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus;
 import cn.iocoder.yudao.module.erp.enums.ErpPurchaseOrderSourceTypeEnum;
 import cn.iocoder.yudao.module.srm.api.supplier.SrmSupplierApi;
 import cn.iocoder.yudao.module.srm.api.supplier.dto.SrmSupplierRespDTO;
+import cn.iocoder.yudao.module.erp.service.purchase.ErpPurchaseInvoiceService;
 import cn.iocoder.yudao.module.erp.service.purchase.ErpPurchaseOrderService;
 import cn.iocoder.yudao.module.mdm.api.item.MdmItemApi;
 import cn.iocoder.yudao.module.mdm.api.item.dto.MdmItemRespDTO;
@@ -40,7 +42,9 @@
 import java.util.Map;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+import static cn.iocoder.yudao.module.erp.enums.ErrorCodeConstants.*;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMultiMap;
 import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
 import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@@ -53,6 +57,8 @@
 
     @Resource
     private ErpPurchaseOrderService purchaseOrderService;
+    @Resource
+    private ErpPurchaseInvoiceService purchaseInvoiceService;
     @Resource
     private SrmSupplierApi srmSupplierApi;
 
@@ -170,6 +176,23 @@
         return success(purchaseOrderService.confirmReceipt(id));
     }
 
+    @PostMapping("/reverse-approve")
+    @Operation(summary = "鍙嶅鎵癸紙鍗忓悓鍔炲叕宸插姙浠诲姟涓挙鍥炲凡瀹℃牳璁㈠崟锛岀洿鎺ラ噸鏂拌繘鍏ュ緟鍔炲鎵癸級")
+    @Parameter(name = "processInstanceId", description = "娴佺▼瀹炰緥缂栧彿", required = true)
+    @PreAuthorize("@ss.hasPermission('erp:purchase-order:update-status')")
+    public CommonResult<Boolean> reverseApprove(@RequestParam("processInstanceId") String processInstanceId) {
+        // 1. 鏍规嵁娴佺▼瀹炰緥缂栧彿鎵惧埌閲囪喘璁㈠崟
+        ErpPurchaseOrderDO purchaseOrder = purchaseOrderService.getPurchaseOrderByProcessInstanceId(processInstanceId);
+        if (purchaseOrder == null) {
+            throw exception(PURCHASE_ORDER_NOT_EXISTS);
+        }
+        // 2. 鍙嶅鏍革細宸插鏍� -> 鏈鏍革紙鍚叆搴�/閫�璐ф牎楠岋級
+        purchaseOrderService.updatePurchaseOrderStatus(purchaseOrder.getId(), ErpAuditStatus.PROCESS.getStatus());
+        // 3. 鑷姩閲嶆柊鎻愪氦瀹℃壒 -> 璁㈠崟鐩存帴鍥炲埌鍗忓悓鍔炲叕寰呭姙浠诲姟
+        purchaseOrderService.submitPurchaseOrder(purchaseOrder.getId(), "purchase_order_approve", getLoginUserId());
+        return success(true);
+    }
+
     private PageResult<ErpPurchaseOrderRespVO> buildPurchaseOrderVOPageResult(PageResult<ErpPurchaseOrderDO> pageResult) {
         if (CollUtil.isEmpty(pageResult.getList())) {
             return PageResult.empty(pageResult.getTotal());
@@ -191,6 +214,9 @@
         // 1.5 鍗曚綅淇℃伅
         Map<Long, MdmUnitMeasureRespDTO> unitMeasureMap = mdmUnitMeasureApi.getUnitMeasureMap(
                 convertSet(purchaseOrderItemList, ErpPurchaseOrderItemDO::getProductUnitId));
+        // 1.6 宸叉潵绁ㄩ噾棰濓細鎸夐噰璐鍗曠粺璁★紝鐢ㄤ簬璁$畻鍓╀綑鍙紑绁ㄩ噾棰�
+        Map<Long, BigDecimal> invoicePriceSumMap = purchaseInvoiceService
+                .getPurchaseInvoicePriceSumMapByOrderIds(convertSet(pageResult.getList(), ErpPurchaseOrderDO::getId));
         // 2. 寮�濮嬫嫾鎺�
         return BeanUtils.toBean(pageResult, ErpPurchaseOrderRespVO.class, purchaseOrder -> {
             purchaseOrder.setItems(BeanUtils.toBean(purchaseOrderItemMap.get(purchaseOrder.getId()), ErpPurchaseOrderRespVO.Item.class,
@@ -205,6 +231,9 @@
             MapUtils.findAndThen(userMap, Long.parseLong(purchaseOrder.getCreator()), user -> purchaseOrder.setCreatorName(user.getNickname()));
             purchaseOrder.setSourceTypeName(ErpPurchaseOrderSourceTypeEnum.WORK_ORDER.getType()
                     .equals(purchaseOrder.getSourceType()) ? "鐢熶骇宸ュ崟" : null);
+            // 鍓╀綑鍙紑绁ㄩ噾棰� = 璁㈠崟鎬婚噾棰� - 宸叉潵绁ㄩ噾棰�
+            purchaseOrder.setRemainInvoicePrice(purchaseOrder.getTotalPrice().subtract(
+                    invoicePriceSumMap.getOrDefault(purchaseOrder.getId(), BigDecimal.ZERO)));
         });
     }
 

--
Gitblit v1.9.3