From f61043f70c126c4b464a4ebc7dd635fcf7b679df Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期五, 24 七月 2026 17:25:33 +0800
Subject: [PATCH] feat(erp): 为ERP模块添加附件功能支持
---
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 52 insertions(+), 8 deletions(-)
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java
index 1811e98..50e8bb6 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java
@@ -25,6 +25,7 @@
import cn.iocoder.yudao.module.erp.enums.ErpAuditStatus;
import cn.iocoder.yudao.module.erp.enums.ErpPurchaseRequestStatusEnum;
import cn.iocoder.yudao.module.system.api.dept.DeptApi;
+import cn.iocoder.yudao.module.system.api.storage.StorageAttachmentApi;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import jakarta.annotation.Resource;
@@ -81,6 +82,8 @@
private AdminUserApi adminUserApi;
@Resource
private DeptApi deptApi;
+ @Resource
+ private StorageAttachmentApi storageAttachmentApi;
@Override
@Transactional(rollbackFor = Exception.class)
@@ -111,7 +114,11 @@
calculateTotalPrice(purchaseRequest, requestItems);
purchaseRequestMapper.insert(purchaseRequest);
- // 6. 鎻掑叆鐢宠鏄庣粏
+ // 6. 缁戝畾闄勪欢
+ storageAttachmentApi.bindAttachments("file", "erp_purchase_request",
+ purchaseRequest.getId(), createReqVO.getBlobIds());
+
+ // 7. 鎻掑叆鐢宠鏄庣粏
requestItems.forEach(o -> o.setRequestId(purchaseRequest.getId()));
purchaseRequestItemMapper.insertBatch(requestItems);
@@ -137,6 +144,13 @@
// 5. 鏇存柊鐢宠鏄庣粏
updatePurchaseRequestItemList(updateReqVO.getId(), requestItems);
+
+ // 6. 鏇存柊闄勪欢
+ if (updateReqVO.getBlobIds() != null) {
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_purchase_request", updateReqVO.getId());
+ storageAttachmentApi.bindAttachments("file", "erp_purchase_request",
+ updateReqVO.getId(), updateReqVO.getBlobIds());
+ }
}
private void calculateTotalPrice(ErpPurchaseRequestDO purchaseRequest, List<ErpPurchaseRequestItemDO> requestItems) {
@@ -195,6 +209,7 @@
});
purchaseRequests.forEach(purchaseRequest -> {
+ storageAttachmentApi.deleteAttachmentsByRecord("erp_purchase_request", purchaseRequest.getId());
purchaseRequestMapper.deleteById(purchaseRequest.getId());
purchaseRequestItemMapper.deleteByRequestId(purchaseRequest.getId());
});
@@ -309,6 +324,19 @@
purchaseRequestMapper.updateById(new ErpPurchaseRequestDO()
.setId(id).setStatus(newStatus));
}
+
+ // 3. 瀹℃壒閫氳繃涓旀湁渚涘簲鍟嗭紝鑷姩鐢熸垚閲囪喘璁㈠崟
+ if (ErpPurchaseRequestStatusEnum.APPROVE.getStatus().equals(newStatus)
+ && purchaseRequest.getSupplierId() != null
+ && purchaseRequest.getOrderId() == null) {
+ try {
+ Long orderId = doGeneratePurchaseOrder(purchaseRequest);
+ log.info("[updatePurchaseRequestAuditStatus] 閲囪喘鐢宠({}) 鑷姩鐢熸垚閲囪喘璁㈠崟({})", id, orderId);
+ } catch (Exception e) {
+ log.error("[updatePurchaseRequestAuditStatus] 閲囪喘鐢宠({}) 鑷姩鐢熸垚閲囪喘璁㈠崟澶辫触", id, e);
+ // 涓嶆姏鍑哄紓甯革紝閬垮厤褰卞搷鐘舵�佹洿鏂�
+ }
+ }
}
@Override
@@ -326,23 +354,37 @@
// 3. 鏍¢獙渚涘簲鍟�
supplierService.validateSupplier(supplierId);
- // 4. 鑾峰彇鐢宠鏄庣粏
+ // 4. 璁剧疆渚涘簲鍟嗗苟鐢熸垚璁㈠崟
+ purchaseRequest.setSupplierId(supplierId);
+ return doGeneratePurchaseOrder(purchaseRequest);
+ }
+
+ /**
+ * 鎵ц鐢熸垚閲囪喘璁㈠崟
+ *
+ * @param purchaseRequest 閲囪喘鐢宠锛堥渶鍖呭惈 supplierId锛�
+ * @return 閲囪喘璁㈠崟 ID
+ */
+ private Long doGeneratePurchaseOrder(ErpPurchaseRequestDO purchaseRequest) {
+ Long id = purchaseRequest.getId();
+
+ // 1. 鑾峰彇鐢宠鏄庣粏
List<ErpPurchaseRequestItemDO> requestItems = purchaseRequestItemMapper.selectListByRequestId(id);
if (CollUtil.isEmpty(requestItems)) {
throw exception(PURCHASE_REQUEST_NOT_EXISTS);
}
- // 5. 鐢熸垚閲囪喘璁㈠崟鍙�
+ // 2. 鐢熸垚閲囪喘璁㈠崟鍙�
String orderNo = noRedisDAO.generate(ErpNoRedisDAO.PURCHASE_ORDER_NO_PREFIX);
if (purchaseOrderMapper.selectByNo(orderNo) != null) {
throw exception(PURCHASE_ORDER_NO_EXISTS);
}
- // 6. 鍒涘缓閲囪喘璁㈠崟
+ // 3. 鍒涘缓閲囪喘璁㈠崟
ErpPurchaseOrderDO purchaseOrder = new ErpPurchaseOrderDO();
purchaseOrder.setNo(orderNo);
purchaseOrder.setStatus(ErpAuditStatus.APPROVE.getStatus()); // 閲囪喘璁㈠崟鐩存帴涓哄凡瀹℃牳鐘舵��
- purchaseOrder.setSupplierId(supplierId);
+ purchaseOrder.setSupplierId(purchaseRequest.getSupplierId());
purchaseOrder.setOrderTime(purchaseRequest.getRequestTime());
purchaseOrder.setTotalCount(purchaseRequest.getTotalCount());
purchaseOrder.setTotalPrice(purchaseRequest.getTotalPrice());
@@ -350,15 +392,17 @@
purchaseOrder.setTotalTaxPrice(purchaseRequest.getTotalTaxPrice());
purchaseOrder.setDiscountPercent(purchaseRequest.getDiscountPercent());
purchaseOrder.setDiscountPrice(purchaseRequest.getDiscountPrice());
+ purchaseOrder.setDepositPrice(purchaseRequest.getDepositPrice() != null ? purchaseRequest.getDepositPrice() : BigDecimal.ZERO);
purchaseOrder.setRemark(purchaseRequest.getRemark());
purchaseOrder.setInCount(BigDecimal.ZERO);
purchaseOrder.setInStatus(0);
purchaseOrderMapper.insert(purchaseOrder);
- // 7. 鍒涘缓閲囪喘璁㈠崟鏄庣粏
+ // 4. 鍒涘缓閲囪喘璁㈠崟鏄庣粏
List<ErpPurchaseOrderItemDO> orderItems = convertList(requestItems, item -> {
ErpPurchaseOrderItemDO orderItem = new ErpPurchaseOrderItemDO();
orderItem.setOrderId(purchaseOrder.getId());
+ orderItem.setRequestItemId(item.getId()); // 鍏宠仈閲囪喘鐢宠鏄庣粏
orderItem.setProductId(item.getProductId());
orderItem.setProductUnitId(item.getProductUnitId());
orderItem.setProductPrice(item.getProductPrice());
@@ -368,12 +412,12 @@
orderItem.setTaxPrice(item.getTaxPrice());
orderItem.setRemark(item.getRemark());
orderItem.setInCount(BigDecimal.ZERO);
- orderItem.setQcCheckFlag(false); // 榛樿涓嶉渶瑕佽川妫�
+ orderItem.setQcCheckFlag(item.getQcCheckFlag() != null ? item.getQcCheckFlag() : false);
return orderItem;
});
purchaseOrderItemMapper.insertBatch(orderItems);
- // 8. 鏇存柊閲囪喘鐢宠鐨勮鍗曚俊鎭�
+ // 5. 鏇存柊閲囪喘鐢宠鐨勮鍗曚俊鎭�
purchaseRequestMapper.updateById(new ErpPurchaseRequestDO()
.setId(id)
.setOrderId(purchaseOrder.getId())
--
Gitblit v1.9.3