From 622a5566fbf4592698706c26e3816a95f265dc17 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期二, 25 八月 2026 16:30:32 +0800
Subject: [PATCH] feat(mes): 设计项目分页返回待审核文件数 pendingAuditCount,文件审核完成后才可提交审批
---
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/vo/MesPdProjectRespVO.java | 3 +
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/project/MesPdProjectService.java | 10 +++++
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/project/MesPdProjectServiceImpl.java | 26 +++++++++++++
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pd/document/MesPdDocumentMapper.java | 10 +++++
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/document/MesPdDocumentService.java | 9 ++++
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/MesPdProjectController.java | 4 ++
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/document/MesPdDocumentServiceImpl.java | 6 +++
yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pd/documentaudit/MesPdDocumentAuditMapper.java | 17 ++++++++
8 files changed, 85 insertions(+), 0 deletions(-)
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/MesPdProjectController.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/MesPdProjectController.java
index 45c7cb9..2ca8e14 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/MesPdProjectController.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/MesPdProjectController.java
@@ -160,12 +160,16 @@
// 1.1 鎵归噺鑾峰彇鍏宠仈鏁版嵁锛堜富璁捐甯� + 瀹℃牳浜猴級
Map<Long, AdminUserRespDTO> userMap = adminUserApi.getUserMap(convertSetByFlatMap(list,
project -> Stream.of(project.getChiefDesigner(), project.getReviewer())));
+ // 1.2 鎵归噺鑾峰彇鍚勯」鐩緟瀹℃牳鏂囦欢鏁�
+ Map<Long, Integer> pendingAuditCountMap = projectService.getPendingAuditCountMap(
+ convertSet(list, MesPdProjectDO::getId));
// 2. 鎷兼帴 VO
return BeanUtils.toBean(list, MesPdProjectRespVO.class, vo -> {
MapUtils.findAndThen(userMap, vo.getChiefDesigner(),
user -> vo.setChiefDesignerNickname(user.getNickname()));
MapUtils.findAndThen(userMap, vo.getReviewer(),
user -> vo.setReviewerNickname(user.getNickname()));
+ vo.setPendingAuditCount(pendingAuditCountMap.getOrDefault(vo.getId(), 0));
});
}
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/vo/MesPdProjectRespVO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/vo/MesPdProjectRespVO.java
index 28a581f..3dd2303 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/vo/MesPdProjectRespVO.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/controller/admin/pd/project/vo/MesPdProjectRespVO.java
@@ -69,6 +69,9 @@
@Schema(description = "BPM 娴佺▼瀹炰緥缂栧彿")
private String processInstanceId;
+ @Schema(description = "寰呭鏍告枃浠舵暟", example = "3")
+ private Integer pendingAuditCount;
+
@Schema(description = "鍒涘缓鏃堕棿", requiredMode = Schema.RequiredMode.REQUIRED)
@ExcelProperty("鍒涘缓鏃堕棿")
private LocalDateTime createTime;
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pd/document/MesPdDocumentMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pd/document/MesPdDocumentMapper.java
index 2b3a04c..5c24220 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pd/document/MesPdDocumentMapper.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pd/document/MesPdDocumentMapper.java
@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.mes.dal.mysql.pd.document;
+import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -7,6 +8,8 @@
import cn.iocoder.yudao.module.mes.dal.dataobject.pd.document.MesPdDocumentDO;
import org.apache.ibatis.annotations.Mapper;
+import java.util.Collection;
+import java.util.Collections;
import java.util.List;
@Mapper
@@ -24,6 +27,13 @@
return selectList(MesPdDocumentDO::getProjectId, projectId);
}
+ default List<MesPdDocumentDO> selectListByProjectIds(Collection<Long> projectIds) {
+ if (CollUtil.isEmpty(projectIds)) {
+ return Collections.emptyList();
+ }
+ return selectList(MesPdDocumentDO::getProjectId, projectIds);
+ }
+
default int deleteByProjectId(Long projectId) {
return delete(MesPdDocumentDO::getProjectId, projectId);
}
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pd/documentaudit/MesPdDocumentAuditMapper.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pd/documentaudit/MesPdDocumentAuditMapper.java
index bb34e18..619fae5 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pd/documentaudit/MesPdDocumentAuditMapper.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/mysql/pd/documentaudit/MesPdDocumentAuditMapper.java
@@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.mes.dal.mysql.pd.documentaudit;
+import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
@@ -8,6 +9,7 @@
import org.apache.ibatis.annotations.Mapper;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
@Mapper
@@ -54,4 +56,19 @@
.eq(MesPdDocumentAuditDO::getAuditStatus, 0)) > 0;
}
+ /**
+ * 鎵归噺鏌ヨ鎸囧畾璧勬枡ID鍒楄〃涓墍鏈夊緟瀹℃牳鐨勮褰�
+ *
+ * @param documentIds 璧勬枡ID鍒楄〃
+ * @return 寰呭鏍歌褰曞垪琛�
+ */
+ default List<MesPdDocumentAuditDO> selectPendingAuditListByDocumentIds(Collection<Long> documentIds) {
+ if (CollUtil.isEmpty(documentIds)) {
+ return Collections.emptyList();
+ }
+ return selectList(new LambdaQueryWrapperX<MesPdDocumentAuditDO>()
+ .in(MesPdDocumentAuditDO::getDocumentId, documentIds)
+ .eq(MesPdDocumentAuditDO::getAuditStatus, 0));
+ }
+
}
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/document/MesPdDocumentService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/document/MesPdDocumentService.java
index 1f9c12b..f6bf09d 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/document/MesPdDocumentService.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/document/MesPdDocumentService.java
@@ -6,6 +6,7 @@
import cn.iocoder.yudao.module.mes.dal.dataobject.pd.document.MesPdDocumentDO;
import jakarta.validation.Valid;
+import java.util.Collection;
import java.util.List;
/**
@@ -62,6 +63,14 @@
List<MesPdDocumentDO> getDocumentListByProjectId(Long projectId);
/**
+ * 鎵归噺鑾峰緱鎸囧畾澶氫釜璁捐椤圭洰涓嬬殑璧勬枡鍒楄〃
+ *
+ * @param projectIds 璁捐椤圭洰ID闆嗗悎
+ * @return 璧勬枡鍒楄〃
+ */
+ List<MesPdDocumentDO> getDocumentListByProjectIds(Collection<Long> projectIds);
+
+ /**
* 鍒犻櫎鎸囧畾璁捐椤圭洰涓嬬殑鎵�鏈夎祫鏂�
*
* @param projectId 璁捐椤圭洰ID
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 18f02e4..2bb158f 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
@@ -18,6 +18,7 @@
import org.springframework.validation.annotation.Validated;
import java.time.LocalDateTime;
+import java.util.Collection;
import java.util.List;
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
@@ -109,6 +110,11 @@
}
@Override
+ public List<MesPdDocumentDO> getDocumentListByProjectIds(Collection<Long> projectIds) {
+ return documentMapper.selectListByProjectIds(projectIds);
+ }
+
+ @Override
public void deleteByProjectId(Long projectId) {
List<MesPdDocumentDO> documents = documentMapper.selectListByProjectId(projectId);
for (MesPdDocumentDO document : documents) {
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/project/MesPdProjectService.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/project/MesPdProjectService.java
index 54deaeb..af4c5c8 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/project/MesPdProjectService.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/project/MesPdProjectService.java
@@ -125,4 +125,14 @@
List<MesPdProjectDO> getProjectByProductCode(String productCode);
+ /**
+ * 鎵归噺缁熻鍚勮璁¢」鐩殑寰呭鏍告枃浠舵暟
+ * <p>
+ * 缁熻鍙e緞锛氳椤圭洰涓嬭祫鏂欏搴旂殑瀹℃牳璁板綍涓紝瀛樺湪 auditStatus=0锛堝緟瀹℃牳锛夌殑璁板綍鏁般��
+ *
+ * @param projectIds 璁捐椤圭洰ID闆嗗悎
+ * @return 椤圭洰ID -> 寰呭鏍告枃浠舵暟
+ */
+ Map<Long, Integer> getPendingAuditCountMap(Collection<Long> projectIds);
+
}
diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/project/MesPdProjectServiceImpl.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/project/MesPdProjectServiceImpl.java
index 6648c60..aa655a4 100644
--- a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/project/MesPdProjectServiceImpl.java
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/service/pd/project/MesPdProjectServiceImpl.java
@@ -343,6 +343,32 @@
return projectMapper.selectList(new QueryWrapper<MesPdProjectDO>().lambda().eq(MesPdProjectDO::getProductCode,productCode).eq(MesPdProjectDO::getStatus, MesPdProjectStatusEnum.ARCHIVE.getStatus()));
}
+ @Override
+ public Map<Long, Integer> getPendingAuditCountMap(Collection<Long> projectIds) {
+ if (CollUtil.isEmpty(projectIds)) {
+ return Collections.emptyMap();
+ }
+ // 1. 鎵归噺鏌ュ嚭杩欎簺椤圭洰涓嬬殑鎵�鏈夎祫鏂�
+ List<MesPdDocumentDO> documents = documentService.getDocumentListByProjectIds(projectIds);
+ if (CollUtil.isEmpty(documents)) {
+ return Collections.emptyMap();
+ }
+ // 2. 璧勬枡ID -> 椤圭洰ID
+ Map<Long, Long> documentProjectIdMap = convertMap(documents, MesPdDocumentDO::getId, MesPdDocumentDO::getProjectId);
+ // 3. 鎵归噺鏌ュ嚭鎵�鏈夊緟瀹℃牳璁板綍锛坅uditStatus=0锛�
+ List<MesPdDocumentAuditDO> pendingAudits =
+ documentAuditMapper.selectPendingAuditListByDocumentIds(documentProjectIdMap.keySet());
+ // 4. 鎸夐」鐩粺璁″緟瀹℃牳鏂囦欢鏁�
+ Map<Long, Integer> result = new HashMap<>();
+ for (MesPdDocumentAuditDO audit : pendingAudits) {
+ Long projectId = documentProjectIdMap.get(audit.getDocumentId());
+ if (projectId != null) {
+ result.merge(projectId, 1, Integer::sum);
+ }
+ }
+ return result;
+ }
+
private void validateProjectInitiate(MesPdProjectDO project) {
if (!MesPdProjectStatusEnum.INITIATE.getStatus().equals(project.getStatus())) {
throw exception(PD_PROJECT_NOT_INITIATE);
--
Gitblit v1.9.3