From ffef3ed67816136e2986634657e26736c8a06545 Mon Sep 17 00:00:00 2001
From: liu <2021943741@qq.com>
Date: 星期二, 27 十月 2026 18:06:52 +0800
Subject: [PATCH] feat(research): 课题申报成员新增成员类型并调整统计口径

---
 yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberStatisticsRespVO.java |    4 ++++
 yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/service/application/ResearchApplicationServiceImpl.java                               |   10 ++++++++--
 yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberStatisticsReqVO.java  |    2 +-
 yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberRespVO.java           |    3 +++
 yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberSaveReqVO.java        |    4 ++++
 yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/dal/dataobject/application/ResearchApplicationMemberDO.java                           |    9 ++++++---
 6 files changed, 26 insertions(+), 6 deletions(-)

diff --git a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberRespVO.java b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberRespVO.java
index 445317b..6ecc659 100644
--- a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberRespVO.java
+++ b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberRespVO.java
@@ -16,6 +16,9 @@
     @Schema(description = "鎴愬憳濮撳悕", example = "鏉庡洓")
     private String name;
 
+    @Schema(description = "鎴愬憳绫诲瀷锛氭暀甯� / 瀛︾敓 / 鏍″浜哄憳", example = "鏁欏笀")
+    private String memberType;
+
     @Schema(description = "鑱旂郴鐢佃瘽", example = "13800138000")
     private String contactPhone;
 
diff --git a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberSaveReqVO.java b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberSaveReqVO.java
index dc45858..b1eee1d 100644
--- a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberSaveReqVO.java
+++ b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberSaveReqVO.java
@@ -18,6 +18,10 @@
     @Size(max = 64, message = "鎴愬憳濮撳悕闀垮害涓嶈兘瓒呰繃 64 涓瓧绗�")
     private String name;
 
+    @Schema(description = "鎴愬憳绫诲瀷锛氭暀甯� / 瀛︾敓 / 鏍″浜哄憳", example = "鏁欏笀")
+    @Size(max = 32, message = "鎴愬憳绫诲瀷闀垮害涓嶈兘瓒呰繃 32 涓瓧绗�")
+    private String memberType;
+
     @Schema(description = "鑱旂郴鐢佃瘽锛堥�夊~锛屽~鍐欐椂椤讳负 11 浣嶆墜鏈哄彿锛�", example = "13800138000")
     @Size(max = 20, message = "鑱旂郴鐢佃瘽闀垮害涓嶈兘瓒呰繃 20 涓瓧绗�")
     @Pattern(regexp = "^$|^1[3-9]\\d{9}$", message = "鎴愬憳鑱旂郴鐢佃瘽鏍煎紡涓嶆纭紝璇疯緭鍏ユ纭殑 11 浣嶆墜鏈哄彿")
diff --git a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberStatisticsReqVO.java b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberStatisticsReqVO.java
index 122fa22..f1d9392 100644
--- a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberStatisticsReqVO.java
+++ b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberStatisticsReqVO.java
@@ -8,7 +8,7 @@
 @Data
 public class ResearchApplicationMemberStatisticsReqVO {
 
-    @Schema(description = "鍏抽敭瀛楋細鎴愬憳濮撳悕 / 鑱旂郴鐢佃瘽 / 鎵�灞炲崟浣�", example = "寮犱笁")
+    @Schema(description = "鍏抽敭瀛楋細鎴愬憳濮撳悕 / 鎴愬憳绫诲瀷 / 鑱旂郴鐢佃瘽 / 鎵�灞為儴闂�", example = "寮犱笁")
     @Size(max = 64, message = "鍏抽敭瀛楅暱搴︿笉鑳借秴杩� 64 涓瓧绗�")
     private String keyword;
 
diff --git a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberStatisticsRespVO.java b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberStatisticsRespVO.java
index 0f2e73f..d8b9b6e 100644
--- a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberStatisticsRespVO.java
+++ b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/controller/admin/application/vo/member/ResearchApplicationMemberStatisticsRespVO.java
@@ -12,6 +12,10 @@
     @ExcelProperty("鎴愬憳濮撳悕")
     private String name;
 
+    @Schema(description = "鎴愬憳绫诲瀷锛堝涓互椤垮彿鍒嗛殧锛�", example = "鏁欏笀")
+    @ExcelProperty("鎴愬憳绫诲瀷")
+    private String memberTypes;
+
     @Schema(description = "鑱旂郴鐢佃瘽", example = "13800138000")
     @ExcelProperty("鑱旂郴鐢佃瘽")
     private String contactPhone;
diff --git a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/dal/dataobject/application/ResearchApplicationMemberDO.java b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/dal/dataobject/application/ResearchApplicationMemberDO.java
index b8564a2..cb5e1da 100644
--- a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/dal/dataobject/application/ResearchApplicationMemberDO.java
+++ b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/dal/dataobject/application/ResearchApplicationMemberDO.java
@@ -30,16 +30,19 @@
     /** 鎴愬憳濮撳悕 */
     private String name;
 
-    /** 鑱旂郴鐢佃瘽 */
+    /** 鎴愬憳绫诲瀷锛氭暀甯� / 瀛︾敓 / 鏍″浜哄憳 */
+    private String memberType;
+
+    /** 鑱旂郴鐢佃瘽锛堝巻鍙插瓧娈碉紝涓嶅啀褰曞叆锛� */
     private String contactPhone;
 
-    /** 鎵�灞炲崟浣� */
+    /** 鎵�灞為儴闂� */
     private String workUnit;
 
     /** 鑱岀О/鑱屽姟 */
     private String jobTitle;
 
-    /** 鎴愬憳瑙掕壊锛氫富鎸佷汉 / 鏍稿績鎴愬憳 / 鍙備笌浜� */
+    /** 鎴愬憳瑙掕壊锛氫富鎸佷汉 / 鏍稿績鎴愬憳 / 鍙備笌浜猴紙鍘嗗彶瀛楁锛屼笉鍐嶅綍鍏ワ級 */
     private String memberRole;
 
     /** 鎺掑簭鍙� */
diff --git a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/service/application/ResearchApplicationServiceImpl.java b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/service/application/ResearchApplicationServiceImpl.java
index 00b1de9..58c94a4 100644
--- a/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/service/application/ResearchApplicationServiceImpl.java
+++ b/yudao-module-research/src/main/java/cn/iocoder/yudao/module/research/service/application/ResearchApplicationServiceImpl.java
@@ -201,10 +201,11 @@
         Map<Long, ResearchApplicationDO> applicationMap = applications.stream()
                 .collect(Collectors.toMap(ResearchApplicationDO::getId, application -> application, (a, b) -> a));
 
-        // 2. 鎴愬憳瀛愯〃鑱氬悎锛氬鍚� + 鐢佃瘽 + 鍗曚綅 鐩稿悓瑙嗕负鍚屼竴鎴愬憳
+        // 2. 鎴愬憳瀛愯〃鑱氬悎锛氬鍚� + 鎵�灞為儴闂� 鐩稿悓瑙嗕负鍚屼竴鎴愬憳
         String keyword = StrUtil.trimToNull(reqVO.getKeyword());
         Map<String, ResearchApplicationMemberStatisticsRespVO> resultMap = new LinkedHashMap<>();
         Map<String, Set<String>> roleMap = new HashMap<>();
+        Map<String, Set<String>> typeMap = new HashMap<>();
         Map<String, Set<Long>> projectIdMap = new HashMap<>();
         Map<String, Set<String>> projectTitleMap = new HashMap<>();
         for (ResearchApplicationMemberDO member : memberMapper.selectList()) {
@@ -224,6 +225,9 @@
             if (StrUtil.isBlank(vo.getJobTitle()) && StrUtil.isNotBlank(member.getJobTitle())) {
                 vo.setJobTitle(StrUtil.trim(member.getJobTitle()));
             }
+            if (StrUtil.isNotBlank(member.getMemberType())) {
+                typeMap.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(StrUtil.trim(member.getMemberType()));
+            }
             if (StrUtil.isNotBlank(member.getMemberRole())) {
                 roleMap.computeIfAbsent(key, k -> new LinkedHashSet<>()).add(StrUtil.trim(member.getMemberRole()));
             }
@@ -238,6 +242,7 @@
         for (Map.Entry<String, ResearchApplicationMemberStatisticsRespVO> entry : resultMap.entrySet()) {
             String key = entry.getKey();
             ResearchApplicationMemberStatisticsRespVO vo = entry.getValue();
+            vo.setMemberTypes(String.join("銆�", typeMap.getOrDefault(key, Collections.emptySet())));
             vo.setMemberRoles(String.join("銆�", roleMap.getOrDefault(key, Collections.emptySet())));
             vo.setProjectCount(projectIdMap.getOrDefault(key, Collections.emptySet()).size());
             vo.setProjectTitles(String.join("锛�", projectTitleMap.getOrDefault(key, Collections.emptySet())));
@@ -266,6 +271,7 @@
             list.add(ResearchApplicationMemberDO.builder()
                     .applicationId(applicationId)
                     .name(StrUtil.trim(member.getName()))
+                    .memberType(StrUtil.trim(member.getMemberType()))
                     .contactPhone(StrUtil.trim(member.getContactPhone()))
                     .workUnit(StrUtil.trim(member.getWorkUnit()))
                     .jobTitle(StrUtil.trim(member.getJobTitle()))
@@ -281,7 +287,6 @@
 
     private String buildMemberKey(ResearchApplicationMemberDO member) {
         return StrUtil.join("|", StrUtil.nullToEmpty(member.getName()).trim(),
-                StrUtil.nullToEmpty(member.getContactPhone()).trim(),
                 StrUtil.nullToEmpty(member.getWorkUnit()).trim());
     }
 
@@ -290,6 +295,7 @@
             return true;
         }
         return StrUtil.containsIgnoreCase(member.getName(), keyword)
+                || StrUtil.containsIgnoreCase(member.getMemberType(), keyword)
                 || StrUtil.containsIgnoreCase(member.getContactPhone(), keyword)
                 || StrUtil.containsIgnoreCase(member.getWorkUnit(), keyword);
     }

--
Gitblit v1.9.3