From 2b8f88856e90e530ddbfce88aea107a0ec894d5d Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 29 七月 2026 13:51:19 +0800
Subject: [PATCH] refactor(storage): 优化附件关联逻辑并增加评标功能
---
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java | 6 -
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/document/MesPdDocumentServiceImpl.java | 6 -
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmBidAwardServiceImpl.java | 5 +
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java | 6 -
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmBidEvaluationController.java | 24 +++++
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseRequestServiceImpl.java | 6 -
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmBidAwardService.java | 5 +
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmBidAwardController.java | 7 +
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/vo/SrmBidEvaluationRespVO.java | 3
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/util/storage/StorageFileUtil.java | 7 -
yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationServiceImpl.java | 6 -
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java | 6 -
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmLeaveApplicationServiceImpl.java | 7 -
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/storage/StorageAttachmentApiImpl.java | 16 ++++
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java | 6 -
yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java | 6 -
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmResignationApplicationServiceImpl.java | 6 -
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmTenderBidServiceImpl.java | 8 +
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceExceptionServiceImpl.java | 6 -
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmTenderBidController.java | 25 ++++++
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/vo/SrmSupplierQuoteRespVO.java | 12 +++
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/storage/StorageAttachmentApi.java | 12 +++
22 files changed, 127 insertions(+), 64 deletions(-)
diff --git a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationServiceImpl.java b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationServiceImpl.java
index c7bab33..123f0c4 100644
--- a/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationServiceImpl.java
+++ b/yudao-module-crm/src/main/java/cn/iocoder/yudao/module/crm/service/quotation/CrmSaleQuotationServiceImpl.java
@@ -128,11 +128,7 @@
saleQuotationMapper.updateById(updateObj);
// 2.2 鏇存柊鎶ヤ环鏄庣粏
updateQuotationProductList(updateReqVO.getId(), quotationProducts);
- if (updateReqVO.getBlobIds() != null) {
- storageAttachmentApi.deleteAttachmentsByRecord("crm_sale_quotation", updateReqVO.getId());
- storageAttachmentApi.bindAttachments("file", "crm_sale_quotation",
- updateReqVO.getId(), updateReqVO.getBlobIds());
- }
+ storageAttachmentApi.updateAttachments("file", "crm_sale_quotation", updateReqVO.getId(), updateReqVO.getBlobIds());
}
@Override
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
index 61b2c53..6de468b 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinancePaymentServiceImpl.java
@@ -125,11 +125,7 @@
// 2.2 鏇存柊浠樻鍗曢」
updateFinancePaymentItemList(updateReqVO.getId(), paymentItems);
// 2.3 鏇存柊闄勪欢
- if (updateReqVO.getBlobIds() != null) {
- storageAttachmentApi.deleteAttachmentsByRecord("erp_finance_payment", updateReqVO.getId());
- storageAttachmentApi.bindAttachments("file", "erp_finance_payment",
- updateReqVO.getId(), updateReqVO.getBlobIds());
- }
+ storageAttachmentApi.updateAttachments("file", "erp_finance_payment", updateReqVO.getId(), updateReqVO.getBlobIds());
}
private void calculateTotalPrice(ErpFinancePaymentDO payment, List<ErpFinancePaymentItemDO> paymentItems) {
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java
index 9ed875a..6dfc853 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/finance/ErpFinanceReceiptServiceImpl.java
@@ -125,11 +125,7 @@
// 2.2 鏇存柊鏀舵鍗曢」
updateFinanceReceiptItemList(updateReqVO.getId(), receiptItems);
// 2.3 鏇存柊闄勪欢
- if (updateReqVO.getBlobIds() != null) {
- storageAttachmentApi.deleteAttachmentsByRecord("erp_finance_receipt", updateReqVO.getId());
- storageAttachmentApi.bindAttachments("file", "erp_finance_receipt",
- updateReqVO.getId(), updateReqVO.getBlobIds());
- }
+ storageAttachmentApi.updateAttachments("file", "erp_finance_receipt", updateReqVO.getId(), updateReqVO.getBlobIds());
}
private void calculateTotalPrice(ErpFinanceReceiptDO receipt, List<ErpFinanceReceiptItemDO> receiptItems) {
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java
index cb939a8..cd140a7 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/purchase/ErpPurchaseOrderServiceImpl.java
@@ -147,11 +147,7 @@
// 2.2 鏇存柊璁㈠崟椤�
updatePurchaseOrderItemList(updateReqVO.getId(), purchaseOrderItems);
// 2.3 鏇存柊闄勪欢
- if (updateReqVO.getBlobIds() != null) {
- storageAttachmentApi.deleteAttachmentsByRecord("erp_purchase_order", updateReqVO.getId());
- storageAttachmentApi.bindAttachments("file", "erp_purchase_order",
- updateReqVO.getId(), updateReqVO.getBlobIds());
- }
+ storageAttachmentApi.updateAttachments("file", "erp_purchase_order", updateReqVO.getId(), updateReqVO.getBlobIds());
}
private void calculateTotalPrice(ErpPurchaseOrderDO purchaseOrder, List<ErpPurchaseOrderItemDO> purchaseOrderItems) {
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 50e8bb6..540aadc 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
@@ -146,11 +146,7 @@
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());
- }
+ storageAttachmentApi.updateAttachments("file", "erp_purchase_request", updateReqVO.getId(), updateReqVO.getBlobIds());
}
private void calculateTotalPrice(ErpPurchaseRequestDO purchaseRequest, List<ErpPurchaseRequestItemDO> requestItems) {
diff --git a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java
index 42ab39c..4df83f5 100644
--- a/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java
+++ b/yudao-module-erp/src/main/java/cn/iocoder/yudao/module/erp/service/sale/ErpSaleOrderServiceImpl.java
@@ -141,11 +141,7 @@
// 2.2 鏇存柊璁㈠崟椤�
updateSaleOrderItemList(updateReqVO.getId(), saleOrderItems);
// 2.3 鏇存柊闄勪欢
- if (updateReqVO.getBlobIds() != null) {
- storageAttachmentApi.deleteAttachmentsByRecord("erp_sale_order", updateReqVO.getId());
- storageAttachmentApi.bindAttachments("file", "erp_sale_order",
- updateReqVO.getId(), updateReqVO.getBlobIds());
- }
+ storageAttachmentApi.updateAttachments("file", "erp_sale_order", updateReqVO.getId(), updateReqVO.getBlobIds());
}
private void calculateTotalPrice(ErpSaleOrderDO saleOrder, List<ErpSaleOrderItemDO> saleOrderItems) {
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmLeaveApplicationServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmLeaveApplicationServiceImpl.java
index bda7f3a..b90db16 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmLeaveApplicationServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmLeaveApplicationServiceImpl.java
@@ -121,12 +121,7 @@
// 鏇存柊
HrmLeaveApplicationDO updateObj = BeanUtils.toBean(updateReqVO, HrmLeaveApplicationDO.class);
leaveApplicationMapper.updateById(updateObj);
- // 閲嶆柊缁戝畾闄勪欢
- if (updateReqVO.getBlobIds() != null) {
- storageAttachmentApi.deleteAttachmentsByRecord("hrm_leave_application", updateReqVO.getId());
- storageAttachmentApi.bindAttachments("file", "hrm_leave_application",
- updateReqVO.getId(), updateReqVO.getBlobIds());
- }
+ storageAttachmentApi.updateAttachments("file", "hrm_leave_application", updateReqVO.getId(), updateReqVO.getBlobIds());
}
@Override
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmResignationApplicationServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmResignationApplicationServiceImpl.java
index ebdd424..63fe622 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmResignationApplicationServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmResignationApplicationServiceImpl.java
@@ -127,11 +127,7 @@
}
HrmResignationApplicationDO updateObj = BeanUtils.toBean(updateReqVO, HrmResignationApplicationDO.class);
resignationApplicationMapper.updateById(updateObj);
- if (updateReqVO.getBlobIds() != null) {
- storageAttachmentApi.deleteAttachmentsByRecord("hrm_resignation_application", updateReqVO.getId());
- storageAttachmentApi.bindAttachments("file", "hrm_resignation_application",
- updateReqVO.getId(), updateReqVO.getBlobIds());
- }
+ storageAttachmentApi.updateAttachments("file", "hrm_resignation_application", updateReqVO.getId(), updateReqVO.getBlobIds());
}
@Override
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java
index be91a86..71d74fe 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/approval/HrmTransferApplicationServiceImpl.java
@@ -134,11 +134,7 @@
}
HrmTransferApplicationDO updateObj = BeanUtils.toBean(updateReqVO, HrmTransferApplicationDO.class);
transferApplicationMapper.updateById(updateObj);
- if (updateReqVO.getBlobIds() != null) {
- storageAttachmentApi.deleteAttachmentsByRecord("hrm_transfer_application", updateReqVO.getId());
- storageAttachmentApi.bindAttachments("file", "hrm_transfer_application",
- updateReqVO.getId(), updateReqVO.getBlobIds());
- }
+ storageAttachmentApi.updateAttachments("file", "hrm_transfer_application", updateReqVO.getId(), updateReqVO.getBlobIds());
}
@Override
diff --git a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceExceptionServiceImpl.java b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceExceptionServiceImpl.java
index 0196b9b..61be7ce 100644
--- a/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceExceptionServiceImpl.java
+++ b/yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/attendance/HrmAttendanceExceptionServiceImpl.java
@@ -64,11 +64,7 @@
validateAttendanceExceptionExists(updateReqVO.getId());
HrmAttendanceExceptionDO updateObj = BeanUtils.toBean(updateReqVO, HrmAttendanceExceptionDO.class);
attendanceExceptionMapper.updateById(updateObj);
- if (updateReqVO.getBlobIds() != null) {
- storageAttachmentApi.deleteAttachmentsByRecord("hrm_attendance_exception", updateReqVO.getId());
- storageAttachmentApi.bindAttachments("file", "hrm_attendance_exception",
- updateReqVO.getId(), updateReqVO.getBlobIds());
- }
+ storageAttachmentApi.updateAttachments("file", "hrm_attendance_exception", updateReqVO.getId(), updateReqVO.getBlobIds());
}
@Override
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/document/MesPdDocumentServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/document/MesPdDocumentServiceImpl.java
index d1d8172..072e5f1 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/document/MesPdDocumentServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/document/MesPdDocumentServiceImpl.java
@@ -55,11 +55,7 @@
// 鏇存柊
MesPdDocumentDO updateObj = BeanUtils.toBean(updateReqVO, MesPdDocumentDO.class);
documentMapper.updateById(updateObj);
- if (updateReqVO.getBlobIds() != null) {
- storageAttachmentApi.deleteAttachmentsByRecord("mes_pd_document", updateReqVO.getId());
- storageAttachmentApi.bindAttachments("file", "mes_pd_document",
- updateReqVO.getId(), updateReqVO.getBlobIds());
- }
+ storageAttachmentApi.updateAttachments("file", "mes_pd_document", updateReqVO.getId(), updateReqVO.getBlobIds());
}
@Override
diff --git a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmBidAwardController.java b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmBidAwardController.java
index 57822ec..9457f46 100644
--- a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmBidAwardController.java
+++ b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmBidAwardController.java
@@ -38,6 +38,13 @@
return success(BeanUtils.toBean(bidAwardService.getAward(id), SrmBidAwardRespVO.class));
}
+ @GetMapping("/get-by-project")
+ @Operation(summary = "鏍规嵁鎷涙爣椤圭洰ID鑾峰彇瀹氭爣璇︽儏")
+ @PreAuthorize("@ss.hasPermission('srm:bid-award:query')")
+ public CommonResult<SrmBidAwardRespVO> getAwardByProject(@RequestParam("tenderProjectId") Long tenderProjectId) {
+ return success(BeanUtils.toBean(bidAwardService.getAwardByProjectId(tenderProjectId), SrmBidAwardRespVO.class));
+ }
+
@PutMapping("/approve")
@Operation(summary = "瀹℃壒瀹氭爣")
@Parameter(name = "id", description = "瀹氭爣ID", required = true)
diff --git a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmBidEvaluationController.java b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmBidEvaluationController.java
index 5f6dbba..68e69a5 100644
--- a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmBidEvaluationController.java
+++ b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmBidEvaluationController.java
@@ -1,8 +1,11 @@
package cn.iocoder.yudao.module.srm.controller.admin.tender;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.srm.controller.admin.tender.vo.*;
+import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierDO;
+import cn.iocoder.yudao.module.srm.service.supplier.SrmSupplierService;
import cn.iocoder.yudao.module.srm.service.tender.SrmBidEvaluationService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
@@ -13,6 +16,8 @@
import org.springframework.web.bind.annotation.*;
import java.util.List;
+import java.util.Map;
+import java.util.Set;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -25,6 +30,9 @@
@Resource
private SrmBidEvaluationService bidEvaluationService;
+ @Resource
+ private SrmSupplierService supplierService;
+
@PostMapping("/create")
@Operation(summary = "鍒涘缓璇勬爣璁板綍")
@PreAuthorize("@ss.hasPermission('srm:bid-evaluation:create')")
@@ -36,7 +44,21 @@
@Operation(summary = "鎸夋嫑鏍囬」鐩幏鍙栬瘎鏍囧垪琛�")
@PreAuthorize("@ss.hasPermission('srm:bid-evaluation:query')")
public CommonResult<List<SrmBidEvaluationRespVO>> getEvaluationList(@RequestParam("tenderProjectId") Long tenderProjectId) {
- return success(BeanUtils.toBean(bidEvaluationService.getEvaluationList(tenderProjectId), SrmBidEvaluationRespVO.class));
+ List<SrmBidEvaluationRespVO> list = BeanUtils.toBean(bidEvaluationService.getEvaluationList(tenderProjectId), SrmBidEvaluationRespVO.class);
+ enrichEvaluationSupplierNames(list);
+ return success(list);
+ }
+
+ private void enrichEvaluationSupplierNames(List<SrmBidEvaluationRespVO> list) {
+ if (list == null || list.isEmpty()) return;
+ Set<Long> supplierIds = CollectionUtils.convertSet(list, SrmBidEvaluationRespVO::getSupplierId);
+ Map<Long, SrmSupplierDO> supplierMap = supplierService.getSupplierMap(supplierIds);
+ list.forEach(vo -> {
+ SrmSupplierDO supplier = supplierMap.get(vo.getSupplierId());
+ if (supplier != null) {
+ vo.setSupplierName(supplier.getName());
+ }
+ });
}
@PutMapping("/calculate-ranking")
diff --git a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmTenderBidController.java b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmTenderBidController.java
index 24bdd75..cab0f50 100644
--- a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmTenderBidController.java
+++ b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/SrmTenderBidController.java
@@ -5,6 +5,8 @@
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.module.srm.controller.admin.tender.vo.*;
import cn.iocoder.yudao.module.srm.dal.dataobject.SrmSupplierDO;
+import cn.iocoder.yudao.module.srm.dal.dataobject.SrmTenderMaterialDO;
+import cn.iocoder.yudao.module.srm.dal.mysql.SrmTenderMaterialMapper;
import cn.iocoder.yudao.module.srm.service.supplier.SrmSupplierService;
import cn.iocoder.yudao.module.srm.service.tender.SrmTenderBidService;
import io.swagger.v3.oas.annotations.Operation;
@@ -33,6 +35,9 @@
@Resource
private SrmSupplierService supplierService;
+
+ @Resource
+ private SrmTenderMaterialMapper tenderMaterialMapper;
// ========== 鎶曟爣绠$悊 ==========
@@ -91,7 +96,25 @@
@Operation(summary = "鎸夋姇鏍囪幏鍙栨姤浠峰垪琛�")
@PreAuthorize("@ss.hasPermission('srm:supplier-quote:query')")
public CommonResult<List<SrmSupplierQuoteRespVO>> getQuoteListByBid(@RequestParam("bidId") Long bidId) {
- return success(BeanUtils.toBean(tenderBidService.getQuoteList(bidId), SrmSupplierQuoteRespVO.class));
+ List<SrmSupplierQuoteRespVO> list = BeanUtils.toBean(tenderBidService.getQuoteList(bidId), SrmSupplierQuoteRespVO.class);
+ enrichQuoteMaterialInfo(list);
+ return success(list);
+ }
+
+ private void enrichQuoteMaterialInfo(List<SrmSupplierQuoteRespVO> list) {
+ if (list == null || list.isEmpty()) return;
+ Set<Long> materialIds = CollectionUtils.convertSet(list, SrmSupplierQuoteRespVO::getTenderMaterialId);
+ Map<Long, SrmTenderMaterialDO> materialMap = tenderMaterialMapper.selectBatchIds(materialIds).stream()
+ .collect(java.util.stream.Collectors.toMap(SrmTenderMaterialDO::getId, m -> m));
+ list.forEach(vo -> {
+ SrmTenderMaterialDO material = materialMap.get(vo.getTenderMaterialId());
+ if (material != null) {
+ vo.setTenderMaterialCode(material.getProductCode());
+ vo.setTenderMaterialName(material.getProductName());
+ vo.setTenderMaterialSpec(material.getProductSpec());
+ vo.setTenderMaterialUnit(material.getUnit());
+ }
+ });
}
// ========== 鍏宠仈鏁版嵁濉厖 ==========
diff --git a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/vo/SrmBidEvaluationRespVO.java b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/vo/SrmBidEvaluationRespVO.java
index d48fd4a..63e932f 100644
--- a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/vo/SrmBidEvaluationRespVO.java
+++ b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/vo/SrmBidEvaluationRespVO.java
@@ -19,6 +19,9 @@
@Schema(description = "渚涘簲鍟咺D", example = "1")
private Long supplierId;
+ @Schema(description = "渚涘簲鍟嗗悕绉�", example = "鍗庝负鎶�鏈�")
+ private String supplierName;
+
@Schema(description = "鎶曟爣ID", example = "1")
private Long bidId;
diff --git a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/vo/SrmSupplierQuoteRespVO.java b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/vo/SrmSupplierQuoteRespVO.java
index e3b8a5b..b4b81ed 100644
--- a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/vo/SrmSupplierQuoteRespVO.java
+++ b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/controller/admin/tender/vo/SrmSupplierQuoteRespVO.java
@@ -25,6 +25,18 @@
@Schema(description = "鎷涙爣鐗╂枡ID", example = "1")
private Long tenderMaterialId;
+ @Schema(description = "鐗╂枡缂栫爜")
+ private String tenderMaterialCode;
+
+ @Schema(description = "鐗╂枡鍚嶇О")
+ private String tenderMaterialName;
+
+ @Schema(description = "鐗╂枡瑙勬牸")
+ private String tenderMaterialSpec;
+
+ @Schema(description = "鐗╂枡鍗曚綅")
+ private String tenderMaterialUnit;
+
@Schema(description = "鎶ヤ环浠锋牸", example = "5000")
private BigDecimal quotePrice;
diff --git a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmBidAwardService.java b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmBidAwardService.java
index bec384d..e11e855 100644
--- a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmBidAwardService.java
+++ b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmBidAwardService.java
@@ -20,6 +20,11 @@
SrmBidAwardDO getAward(Long id);
/**
+ * 鏍规嵁鎷涙爣椤圭洰ID鑾峰彇瀹氭爣璁板綍
+ */
+ SrmBidAwardDO getAwardByProjectId(Long tenderProjectId);
+
+ /**
* 瀹℃壒瀹氭爣
*/
void approveAward(Long id);
diff --git a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmBidAwardServiceImpl.java b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmBidAwardServiceImpl.java
index 4ad94a9..c27da39 100644
--- a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmBidAwardServiceImpl.java
+++ b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmBidAwardServiceImpl.java
@@ -84,6 +84,11 @@
}
@Override
+ public SrmBidAwardDO getAwardByProjectId(Long tenderProjectId) {
+ return bidAwardMapper.selectByTenderProjectId(tenderProjectId);
+ }
+
+ @Override
@Transactional(rollbackFor = Exception.class)
public void approveAward(Long id) {
SrmBidAwardDO award = validateAwardExists(id);
diff --git a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmTenderBidServiceImpl.java b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmTenderBidServiceImpl.java
index 77b1270..6931e61 100644
--- a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmTenderBidServiceImpl.java
+++ b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmTenderBidServiceImpl.java
@@ -88,12 +88,15 @@
@Override
public Long createQuote(SrmSupplierQuoteSaveReqVO createReqVO) {
// 鏍¢獙鎶曟爣鐘舵�侊紙鎾ゆ爣鍚庝笉鍏佽鎶ヤ环锛�
- validateBidNotWithdrawn(createReqVO.getBidId());
+ SrmTenderBidDO bid = validateBidNotWithdrawn(createReqVO.getBidId());
// 鏍¢獙鍚屼竴鎶曟爣涓嬬墿鏂欎笉鍙噸澶嶆姤浠�
if (supplierQuoteMapper.existsByBidAndMaterial(createReqVO.getBidId(), createReqVO.getTenderMaterialId())) {
throw ServiceExceptionUtil.exception(ErrorCodeConstants.QUOTE_MATERIAL_DUPLICATE);
}
SrmSupplierQuoteDO quote = BeanUtils.toBean(createReqVO, SrmSupplierQuoteDO.class);
+ // 浠庢姇鏍囪褰曚腑鑾峰彇鎷涙爣椤圭洰ID鍜屼緵搴斿晢ID锛岄伩鍏嶅墠绔仐婕忓鑷存暟鎹簱绾︽潫澶辫触
+ quote.setTenderProjectId(bid.getTenderProjectId());
+ quote.setSupplierId(bid.getSupplierId());
supplierQuoteMapper.insert(quote);
return quote.getId();
}
@@ -128,11 +131,12 @@
return bid;
}
- private void validateBidNotWithdrawn(Long bidId) {
+ private SrmTenderBidDO validateBidNotWithdrawn(Long bidId) {
SrmTenderBidDO bid = validateBidExists(bidId);
if (BidStatusEnum.WITHDRAWN.getCode().equals(bid.getBidStatus())) {
throw ServiceExceptionUtil.exception(ErrorCodeConstants.BID_WITHDRAWN_CANNOT_QUOTE);
}
+ return bid;
}
private void validateTenderStatus(Long tenderProjectId) {
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/storage/StorageAttachmentApi.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/storage/StorageAttachmentApi.java
index 3d26f6e..fcd07e6 100644
--- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/storage/StorageAttachmentApi.java
+++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/storage/StorageAttachmentApi.java
@@ -8,6 +8,18 @@
void bindAttachments(String application, String recordType, Long recordId, List<Long> blobIds);
+ /**
+ * 澧為噺鏇存柊闄勪欢鍏宠仈锛�
+ * - 鏌ヨ鐜版湁闄勪欢锛屽姣旀柊鏃� blobId锛屽彧鍒犻櫎澶氫綑銆佸彧缁戝畾鏂板
+ * - 濡傛灉鏂版棫涓�鑷达紝涓嶅仛浠讳綍鎿嶄綔
+ *
+ * @param application 搴旂敤鐢ㄩ��
+ * @param recordType 涓氬姟璁板綍绫诲瀷
+ * @param recordId 涓氬姟璁板綍 ID
+ * @param newBlobIds 鏂扮殑 blobId 鍒楄〃锛堜负 null 鏃惰烦杩囷紝涓嶅仛浠讳綍鎿嶄綔锛�
+ */
+ void updateAttachments(String application, String recordType, Long recordId, List<Long> newBlobIds);
+
List<StorageBlobRespDTO> listAttachments(String recordType, Long recordId);
void deleteAttachments(List<Long> attachmentIds);
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/storage/StorageAttachmentApiImpl.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/storage/StorageAttachmentApiImpl.java
index 914c89d..919a93a 100644
--- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/storage/StorageAttachmentApiImpl.java
+++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/api/storage/StorageAttachmentApiImpl.java
@@ -38,8 +38,24 @@
}
@Override
+ public void updateAttachments(String application, String recordType, Long recordId, List<Long> newBlobIds) {
+ if (newBlobIds == null) {
+ return;
+ }
+ if (newBlobIds.isEmpty()) {
+ // 娓呯┖鎵�鏈夐檮浠�
+ systemStorageAttachmentService.deleteAttachmentsByApplicationAndRecordTypeAndRecordId(
+ application != null ? application : "file", recordType, recordId);
+ return;
+ }
+ // 鍏ㄩ噺鏇挎崲锛歜indAttachments 鍐呴儴鍏堝垹鍚庢彃锛岀洿鎺ヤ紶鍏ュ叏閮ㄦ柊 blobId 鍗冲彲
+ bindAttachments(application, recordType, recordId, newBlobIds);
+ }
+
+ @Override
public List<StorageBlobRespDTO> listAttachments(String recordType, Long recordId) {
SystemStorageAttachmentListReqVO reqVO = new SystemStorageAttachmentListReqVO();
+ reqVO.setApplication("file");
reqVO.setRecordType(recordType);
reqVO.setRecordId(recordId);
List<SystemStorageBlobRespVO> list = systemStorageAttachmentService.listAttachments(reqVO);
diff --git a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/util/storage/StorageFileUtil.java b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/util/storage/StorageFileUtil.java
index abc79c1..c5ac949 100644
--- a/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/util/storage/StorageFileUtil.java
+++ b/yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/util/storage/StorageFileUtil.java
@@ -104,21 +104,20 @@
throw new IllegalArgumentException("鍏宠仈璁板綍id涓嶈兘涓虹┖");
}
- // 鍒犻櫎鏃ч檮浠朵俊鎭�
+ // 鍙垹闄ゆ棫鐨勯檮浠跺叧鑱旇褰曪紝淇濈暀 blob 璁板綍锛堟枃浠舵湰韬笉鍒犻櫎锛�
if (application == null || application.trim().isEmpty()) {
for (SystemStorageAttachmentSaveReqVO.BlobItem item : blobItems) {
String itemApp = item.getApplication();
if (itemApp == null || itemApp.trim().isEmpty()) {
throw new IllegalArgumentException("鏂囦欢鐢ㄩ�斾笉鑳戒负绌�");
}
- deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordId(itemApp, recordType.getType(), recordId);
+ storageAttachmentMapper.deleteByApplicationAndRecordTypeAndRecordId(itemApp, recordType.getType(), recordId);
}
} else {
- deleteStorageAttachmentsByApplicationAndRecordTypeAndRecordId(application, recordType.getType(), recordId);
+ storageAttachmentMapper.deleteByApplicationAndRecordTypeAndRecordId(application, recordType.getType(), recordId);
}
if (CollUtil.isEmpty(blobItems)) {
- deleteStorageAttachmentsByRecordTypeAndRecordId(recordType.getType(), recordId);
return;
}
--
Gitblit v1.9.3