From 3ca1cefd9bed863131ee3f684ff127bd7ac877aa Mon Sep 17 00:00:00 2001
From: 云 <2163098428@qq.com>
Date: 星期三, 05 八月 2026 11:35:16 +0800
Subject: [PATCH] feat(ai): 优化AI知识文档处理功能
---
yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmTenderProjectServiceImpl.java | 91 +++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 87 insertions(+), 4 deletions(-)
diff --git a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmTenderProjectServiceImpl.java b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmTenderProjectServiceImpl.java
index 7de0819..5d1b679 100644
--- a/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmTenderProjectServiceImpl.java
+++ b/yudao-module-srm/src/main/java/cn/iocoder/yudao/module/srm/service/tender/SrmTenderProjectServiceImpl.java
@@ -4,17 +4,21 @@
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.module.srm.controller.admin.tender.vo.SrmTenderMaterialSaveReqVO;
import cn.iocoder.yudao.module.srm.controller.admin.tender.vo.SrmTenderProjectPageReqVO;
+import cn.iocoder.yudao.module.srm.controller.admin.tender.vo.SrmTenderProjectPartialUpdateReqVO;
import cn.iocoder.yudao.module.srm.controller.admin.tender.vo.SrmTenderProjectSaveReqVO;
import cn.iocoder.yudao.module.srm.dal.dataobject.SrmBidAwardDO;
import cn.iocoder.yudao.module.srm.dal.dataobject.SrmTenderMaterialDO;
import cn.iocoder.yudao.module.srm.dal.dataobject.SrmTenderProjectDO;
import cn.iocoder.yudao.module.srm.dal.mysql.SrmBidAwardMapper;
+import cn.iocoder.yudao.module.srm.dal.mysql.SrmTenderBidMapper;
import cn.iocoder.yudao.module.srm.dal.mysql.SrmTenderMaterialMapper;
import cn.iocoder.yudao.module.srm.dal.mysql.SrmTenderProjectMapper;
import cn.iocoder.yudao.module.srm.enums.AwardStatusEnum;
import cn.iocoder.yudao.module.srm.enums.ErrorCodeConstants;
import cn.iocoder.yudao.module.srm.enums.TenderStatusEnum;
import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil;
+import com.mzt.logapi.context.LogRecordContext;
+import com.mzt.logapi.starter.annotation.LogRecord;
import jakarta.annotation.Resource;
import org.springframework.stereotype.Service;
import org.springframework.validation.annotation.Validated;
@@ -23,6 +27,8 @@
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
+
+import static cn.iocoder.yudao.module.srm.enums.LogRecordConstants.*;
@Service
@Validated
@@ -34,6 +40,8 @@
private SrmTenderMaterialMapper tenderMaterialMapper;
@Resource
private SrmBidAwardMapper bidAwardMapper;
+ @Resource
+ private SrmTenderBidMapper tenderBidMapper;
@Override
public Long createTenderProject(SrmTenderProjectSaveReqVO createReqVO) {
@@ -44,13 +52,42 @@
}
@Override
+ @LogRecord(type = LOG_TENDER_TYPE, subType = LOG_TENDER_UPDATE_SUB_TYPE,
+ bizNo = "{{#updateReqVO.id}}", success = LOG_TENDER_UPDATE_SUCCESS)
public void updateTenderProject(SrmTenderProjectSaveReqVO updateReqVO) {
SrmTenderProjectDO project = validateTenderExists(updateReqVO.getId());
- if (!TenderStatusEnum.DRAFT.getCode().equals(project.getTenderStatus())) {
- throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_STATUS_NOT_DRAFT);
+ Integer status = project.getTenderStatus();
+
+ // 鑽夌鐘舵�侊細鍏ㄥ瓧娈靛彲缂栬緫
+ if (TenderStatusEnum.canEditFullProject(status)) {
+ SrmTenderProjectDO updateObj = BeanUtils.toBean(updateReqVO, SrmTenderProjectDO.class);
+ updateObj.setTenderStatus(status); // 鐘舵�佷笉鍏佽鍓嶇浼犲叆瑕嗙洊
+ tenderProjectMapper.updateById(updateObj);
+ LogRecordContext.putVariable("tenderName", project.getTenderName());
+ LogRecordContext.putVariable("oldTenderDesc", project.getTenderDesc());
+ LogRecordContext.putVariable("newTenderDesc", updateReqVO.getTenderDesc());
+ LogRecordContext.putVariable("oldQualification", project.getQualificationRequirements());
+ LogRecordContext.putVariable("newQualification", updateReqVO.getQualificationRequirements());
+ return;
}
- SrmTenderProjectDO updateObj = BeanUtils.toBean(updateReqVO, SrmTenderProjectDO.class);
- tenderProjectMapper.updateById(updateObj);
+
+ // 鍙戝竷涓�/鎶曟爣涓細浠呭厑璁镐慨鏀规嫑鏍囪鏄庡拰璧勮川瑕佹眰
+ if (TenderStatusEnum.canEditPartialProject(status)) {
+ SrmTenderProjectDO updateObj = new SrmTenderProjectDO();
+ updateObj.setId(updateReqVO.getId());
+ updateObj.setTenderDesc(updateReqVO.getTenderDesc());
+ updateObj.setQualificationRequirements(updateReqVO.getQualificationRequirements());
+ tenderProjectMapper.updateById(updateObj);
+ LogRecordContext.putVariable("tenderName", project.getTenderName());
+ LogRecordContext.putVariable("oldTenderDesc", project.getTenderDesc());
+ LogRecordContext.putVariable("newTenderDesc", updateReqVO.getTenderDesc());
+ LogRecordContext.putVariable("oldQualification", project.getQualificationRequirements());
+ LogRecordContext.putVariable("newQualification", updateReqVO.getQualificationRequirements());
+ return;
+ }
+
+ // 鍏朵粬鐘舵�侊細涓嶅厑璁哥紪杈�
+ throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_PROJECT_LOCKED);
}
@Override
@@ -58,6 +95,10 @@
SrmTenderProjectDO project = validateTenderExists(id);
if (!TenderStatusEnum.DRAFT.getCode().equals(project.getTenderStatus())) {
throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_STATUS_NOT_DRAFT);
+ }
+ // 妫�鏌ユ槸鍚﹀凡鏈夋姇鏍囨暟鎹�
+ if (tenderBidMapper.countByTenderProjectId(id) > 0) {
+ throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_HAS_BIDS_CANNOT_DELETE);
}
tenderMaterialMapper.deleteByTenderProjectId(id);
tenderProjectMapper.deleteById(id);
@@ -117,6 +158,10 @@
if (TenderStatusEnum.CLOSED.getCode().equals(project.getTenderStatus())) {
throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_STATUS_ALREADY_CLOSED);
}
+ // 鑽夌鐘舵�佷笉鍏佽鐩存帴鍏抽棴
+ if (TenderStatusEnum.DRAFT.getCode().equals(project.getTenderStatus())) {
+ throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_PROJECT_LOCKED);
+ }
project.setTenderStatus(TenderStatusEnum.CLOSED.getCode());
tenderProjectMapper.updateById(project);
}
@@ -141,22 +186,60 @@
tenderProjectMapper.updateById(project);
}
+ @Override
+ @LogRecord(type = LOG_TENDER_TYPE, subType = LOG_TENDER_UPDATE_SUB_TYPE,
+ bizNo = "{{#updateReqVO.id}}", success = LOG_TENDER_UPDATE_SUCCESS)
+ public void updateTenderProjectPartial(SrmTenderProjectPartialUpdateReqVO updateReqVO) {
+ SrmTenderProjectDO project = validateTenderExists(updateReqVO.getId());
+ if (!TenderStatusEnum.canEditPartialProject(project.getTenderStatus())) {
+ throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_PROJECT_LOCKED);
+ }
+ SrmTenderProjectDO updateObj = new SrmTenderProjectDO();
+ updateObj.setId(updateReqVO.getId());
+ updateObj.setTenderDesc(updateReqVO.getTenderDesc());
+ updateObj.setQualificationRequirements(updateReqVO.getQualificationRequirements());
+ tenderProjectMapper.updateById(updateObj);
+ LogRecordContext.putVariable("tenderName", project.getTenderName());
+ LogRecordContext.putVariable("oldTenderDesc", project.getTenderDesc());
+ LogRecordContext.putVariable("newTenderDesc", updateReqVO.getTenderDesc());
+ LogRecordContext.putVariable("oldQualification", project.getQualificationRequirements());
+ LogRecordContext.putVariable("newQualification", updateReqVO.getQualificationRequirements());
+ }
+
// ========== 鐗╂枡瀛愯〃 ==========
@Override
public void createMaterial(SrmTenderMaterialSaveReqVO createReqVO) {
+ SrmTenderProjectDO project = validateTenderExists(createReqVO.getTenderProjectId());
+ if (!TenderStatusEnum.canEditMaterial(project.getTenderStatus())) {
+ throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_MATERIAL_LOCKED);
+ }
SrmTenderMaterialDO material = BeanUtils.toBean(createReqVO, SrmTenderMaterialDO.class);
tenderMaterialMapper.insert(material);
}
@Override
public void updateMaterial(SrmTenderMaterialSaveReqVO updateReqVO) {
+ SrmTenderMaterialDO existing = tenderMaterialMapper.selectById(updateReqVO.getId());
+ if (existing != null) {
+ SrmTenderProjectDO project = tenderProjectMapper.selectById(existing.getTenderProjectId());
+ if (project != null && !TenderStatusEnum.canEditMaterial(project.getTenderStatus())) {
+ throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_MATERIAL_LOCKED);
+ }
+ }
SrmTenderMaterialDO updateObj = BeanUtils.toBean(updateReqVO, SrmTenderMaterialDO.class);
tenderMaterialMapper.updateById(updateObj);
}
@Override
public void deleteMaterial(Long id) {
+ SrmTenderMaterialDO material = tenderMaterialMapper.selectById(id);
+ if (material != null) {
+ SrmTenderProjectDO project = tenderProjectMapper.selectById(material.getTenderProjectId());
+ if (project != null && !TenderStatusEnum.canEditMaterial(project.getTenderStatus())) {
+ throw ServiceExceptionUtil.exception(ErrorCodeConstants.TENDER_MATERIAL_LOCKED);
+ }
+ }
tenderMaterialMapper.deleteById(id);
}
--
Gitblit v1.9.3