From 429866e3d0a2eee95916407b2e1dfa7de6f407ea Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期三, 26 八月 2026 17:18:47 +0800
Subject: [PATCH] feat(erp): 采购来票登记过滤已开完票订单
---
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