Skip to content

Commit cd027cb

Browse files
authored
Merge pull request #96 from Boyuan-IT-Club/Red_Moon
支持根据部门查询简历
2 parents cc57794 + d225960 commit cd027cb

File tree

5 files changed

+50
-21
lines changed

5 files changed

+50
-21
lines changed

src/main/java/club/boyuan/official/controller/ResumeController.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -806,12 +806,13 @@ public void exportResumeToPdf(
806806

807807
/**
808808
* 条件查询简历列表
809-
* 支持按姓名、专业、招募周期、状态等多条件组合查询
809+
* 支持按姓名、专业、期望部门、招募周期、状态等多条件组合查询
810810
*/
811811
@GetMapping("/search")
812812
public ResponseEntity<ResponseMessage<?>> queryResumes(
813813
@RequestParam(required = false) String name,
814814
@RequestParam(required = false) String major,
815+
@RequestParam(required = false) String expectedDepartment,
815816
@RequestParam(required = false) Integer cycleId,
816817
@RequestParam(required = false) String status,
817818
@RequestParam(required = false, defaultValue = "0") Integer page,
@@ -832,12 +833,12 @@ public ResponseEntity<ResponseMessage<?>> queryResumes(
832833

833834
// 如果page和size参数都为默认值,则使用原来的查询方法(保持向后兼容)
834835
if (page == 0 && size == 10) {
835-
List<ResumeDTO> result = resumeService.queryResumes(name, major, cycleId, status);
836+
List<ResumeDTO> result = resumeService.queryResumes(name, major, expectedDepartment, cycleId, status);
836837
logger.info("管理员{}执行条件查询简历,结果数量: {}", username, result.size());
837838
return ResponseEntity.ok(ResponseMessage.success(result));
838839
} else {
839840
// 使用分页查询
840-
PageResultDTO<ResumeDTO> result = resumeService.queryResumesWithPagination(name, major, cycleId, status, page, size);
841+
PageResultDTO<ResumeDTO> result = resumeService.queryResumesWithPagination(name, major, expectedDepartment, cycleId, status, page, size);
841842
logger.info("管理员{}执行分页条件查询简历,结果数量: {},总记录数: {}", username, result.getContent().size(), result.getTotalElements());
842843
return ResponseEntity.ok(ResponseMessage.success(result));
843844
}

src/main/java/club/boyuan/official/mapper/ResumeMapper.java

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,31 +70,41 @@ public interface ResumeMapper {
7070
* 多条件查询简历列表
7171
* @param name 姓名(可选)
7272
* @param major 专业(可选)
73+
* @param expectedDepartment 期望部门(可选)
7374
* @param cycleId 年份ID(可选)
7475
* @param status 简历状态(可选),支持多个状态,用逗号分隔,如"2,3,4,5"
7576
* @return 简历列表
7677
*/
77-
List<Resume> queryResumes(@Param("name") String name, @Param("major") String major, @Param("cycleId") Integer cycleId, @Param("status") String status);
78+
List<Resume> queryResumes(@Param("name") String name, @Param("major") String major,
79+
@Param("expectedDepartment") String expectedDepartment,
80+
@Param("cycleId") Integer cycleId, @Param("status") String status);
7881

7982
/**
8083
* 多条件查询简历列表(分页)
8184
* @param name 姓名(可选)
8285
* @param major 专业(可选)
86+
* @param expectedDepartment 期望部门(可选)
8387
* @param cycleId 年份ID(可选)
8488
* @param status 简历状态(可选),支持多个状态,用逗号分隔,如"2,3,4,5"
8589
* @param offset 偏移量
8690
* @param limit 限制数量
8791
* @return 简历列表
8892
*/
89-
List<Resume> queryResumesWithPagination(@Param("name") String name, @Param("major") String major, @Param("cycleId") Integer cycleId, @Param("status") String status, @Param("offset") int offset, @Param("limit") int limit);
93+
List<Resume> queryResumesWithPagination(@Param("name") String name, @Param("major") String major,
94+
@Param("expectedDepartment") String expectedDepartment,
95+
@Param("cycleId") Integer cycleId, @Param("status") String status,
96+
@Param("offset") int offset, @Param("limit") int limit);
9097

9198
/**
9299
* 统计多条件查询简历数量
93100
* @param name 姓名(可选)
94101
* @param major 专业(可选)
102+
* @param expectedDepartment 期望部门(可选)
95103
* @param cycleId 年份ID(可选)
96104
* @param status 简历状态(可选),支持多个状态,用逗号分隔,如"2,3,4,5"
97105
* @return 简历数量
98106
*/
99-
int countResumes(@Param("name") String name, @Param("major") String major, @Param("cycleId") Integer cycleId, @Param("status") String status);
107+
int countResumes(@Param("name") String name, @Param("major") String major,
108+
@Param("expectedDepartment") String expectedDepartment,
109+
@Param("cycleId") Integer cycleId, @Param("status") String status);
100110
}

src/main/java/club/boyuan/official/service/IResumeService.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,23 +102,25 @@ public interface IResumeService {
102102
* 条件查询简历列表
103103
* @param name 姓名(可选)
104104
* @param major 专业(可选)
105+
* @param expectedDepartment 期望部门(可选)
105106
* @param cycleId 年份ID(可选)
106107
* @param status 简历状态(可选),支持多个状态,用逗号分隔,如"2,3,4,5"
107108
* @return 简历DTO列表
108109
*/
109-
List<ResumeDTO> queryResumes(String name, String major, Integer cycleId, String status);
110+
List<ResumeDTO> queryResumes(String name, String major, String expectedDepartment, Integer cycleId, String status);
110111

111112
/**
112113
* 条件查询简历列表(分页)
113114
* @param name 姓名(可选)
114115
* @param major 专业(可选)
116+
* @param expectedDepartment 期望部门(可选)
115117
* @param cycleId 年份ID(可选)
116118
* @param status 简历状态(可选),支持多个状态,用逗号分隔,如"2,3,4,5"
117119
* @param page 页码(从0开始)
118120
* @param size 每页大小
119121
* @return 分页结果DTO
120122
*/
121-
PageResultDTO<ResumeDTO> queryResumesWithPagination(String name, String major, Integer cycleId, String status, int page, int size);
123+
PageResultDTO<ResumeDTO> queryResumesWithPagination(String name, String major, String expectedDepartment, Integer cycleId, String status, int page, int size);
122124

123125
/**
124126
* 根据cycleId获取所有简历

src/main/java/club/boyuan/official/service/impl/ResumeServiceImpl.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -242,13 +242,14 @@ public List<ResumeFieldValueDTO> getFieldValuesWithDefinitionsByResumeId(Integer
242242
throw new BusinessException(BusinessExceptionEnum.DATABASE_QUERY_FAILED);
243243
}
244244
}
245-
245+
246246
@Override
247-
public List<ResumeDTO> queryResumes(String name, String major, Integer cycleId, String status) {
248-
logger.info("条件查询简历:name={}, major={}, cycleId={}, status={}", name, major, cycleId, status);
247+
public List<ResumeDTO> queryResumes(String name, String major, String expectedDepartment, Integer cycleId, String status) {
248+
logger.info("条件查询简历:name={}, major={}, expectedDepartment={}, cycleId={}, status={}", name, major, expectedDepartment, cycleId, status);
249249
// 构建缓存键
250250
String cacheKey = QUERY_RESUME_CACHE_PREFIX + "name:" + (name != null ? name : "")
251-
+ ":major:" + (major != null ? major : "")
251+
+ ":major:" + (major != null ? major : "")
252+
+ ":expectedDepartment:" + (expectedDepartment != null ? expectedDepartment : "")
252253
+ ":cycleId:" + (cycleId != null ? cycleId : "")
253254
+ ":status:" + (status != null ? status : "");
254255

@@ -261,7 +262,7 @@ public List<ResumeDTO> queryResumes(String name, String major, Integer cycleId,
261262
}
262263

263264
// 缓存未命中,从数据库查询
264-
List<Resume> resumes = resumeMapper.queryResumes(name, major, cycleId, status);
265+
List<Resume> resumes = resumeMapper.queryResumes(name, major, expectedDepartment, cycleId, status);
265266
List<ResumeDTO> result = new ArrayList<>();
266267
for (Resume resume : resumes) {
267268
ResumeDTO dto = new ResumeDTO();
@@ -288,10 +289,10 @@ public List<ResumeDTO> queryResumes(String name, String major, Integer cycleId,
288289
throw new BusinessException(BusinessExceptionEnum.RESUME_QUERY_FAILED);
289290
}
290291
}
291-
292+
292293
@Override
293-
public PageResultDTO<ResumeDTO> queryResumesWithPagination(String name, String major, Integer cycleId, String status, int page, int size) {
294-
logger.info("分页条件查询简历:name={}, major={}, cycleId={}, status={}, page={}, size={}", name, major, cycleId, status, page, size);
294+
public PageResultDTO<ResumeDTO> queryResumesWithPagination(String name, String major, String expectedDepartment, Integer cycleId, String status, int page, int size) {
295+
logger.info("分页条件查询简历:name={}, major={}, expectedDepartment={}, cycleId={}, status={}, page={}, size={}", name, major, expectedDepartment, cycleId, status, page, size);
295296

296297
try {
297298
// 参数校验
@@ -303,10 +304,10 @@ public PageResultDTO<ResumeDTO> queryResumesWithPagination(String name, String m
303304
int offset = page * size;
304305

305306
// 查询总数
306-
int totalElements = resumeMapper.countResumes(name, major, cycleId, status);
307+
int totalElements = resumeMapper.countResumes(name, major, expectedDepartment, cycleId, status);
307308

308309
// 查询数据
309-
List<Resume> resumes = resumeMapper.queryResumesWithPagination(name, major, cycleId, status, offset, size);
310+
List<Resume> resumes = resumeMapper.queryResumesWithPagination(name, major, expectedDepartment, cycleId, status, offset, size);
310311

311312
// 转换为DTO
312313
List<ResumeDTO> result = new ArrayList<>();

src/main/resources/mapper/ResumeMapper.xml

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,20 @@
3434

3535
<!-- 多条件查询简历列表 -->
3636
<select id="queryResumes" resultMap="ResumeMap">
37-
SELECT r.* FROM resume r
37+
SELECT DISTINCT r.* FROM resume r
3838
LEFT JOIN user u ON r.user_id = u.user_id
39+
LEFT JOIN resume_field_value rfv_ed ON r.resume_id = rfv_ed.resume_id
40+
LEFT JOIN resume_field_definition rfd_ed ON rfv_ed.field_id = rfd_ed.field_id AND rfd_ed.field_key = 'expected_departments'
3941
<where>
4042
<if test="name != null and name != ''">
4143
AND u.name LIKE CONCAT('%', #{name}, '%')
4244
</if>
4345
<if test="major != null and major != ''">
4446
AND u.major LIKE CONCAT('%', #{major}, '%')
4547
</if>
48+
<if test="expectedDepartment != null and expectedDepartment != ''">
49+
AND rfv_ed.field_value LIKE CONCAT('%', #{expectedDepartment}, '%')
50+
</if>
4651
<if test="cycleId != null">
4752
AND r.cycle_id = #{cycleId}
4853
</if>
@@ -65,15 +70,20 @@
6570

6671
<!-- 多条件查询简历列表(分页) -->
6772
<select id="queryResumesWithPagination" resultMap="ResumeMap">
68-
SELECT r.* FROM resume r
73+
SELECT DISTINCT r.* FROM resume r
6974
LEFT JOIN user u ON r.user_id = u.user_id
75+
LEFT JOIN resume_field_value rfv_ed ON r.resume_id = rfv_ed.resume_id
76+
LEFT JOIN resume_field_definition rfd_ed ON rfv_ed.field_id = rfd_ed.field_id AND rfd_ed.field_key = 'expected_departments'
7077
<where>
7178
<if test="name != null and name != ''">
7279
AND u.name LIKE CONCAT('%', #{name}, '%')
7380
</if>
7481
<if test="major != null and major != ''">
7582
AND u.major LIKE CONCAT('%', #{major}, '%')
7683
</if>
84+
<if test="expectedDepartment != null and expectedDepartment != ''">
85+
AND rfv_ed.field_value LIKE CONCAT('%', #{expectedDepartment}, '%')
86+
</if>
7787
<if test="cycleId != null">
7888
AND r.cycle_id = #{cycleId}
7989
</if>
@@ -97,15 +107,20 @@
97107

98108
<!-- 统计多条件查询简历数量 -->
99109
<select id="countResumes" resultType="int">
100-
SELECT COUNT(*) FROM resume r
110+
SELECT COUNT(DISTINCT r.resume_id) FROM resume r
101111
LEFT JOIN user u ON r.user_id = u.user_id
112+
LEFT JOIN resume_field_value rfv_ed ON r.resume_id = rfv_ed.resume_id
113+
LEFT JOIN resume_field_definition rfd_ed ON rfv_ed.field_id = rfd_ed.field_id AND rfd_ed.field_key = 'expected_departments'
102114
<where>
103115
<if test="name != null and name != ''">
104116
AND u.name LIKE CONCAT('%', #{name}, '%')
105117
</if>
106118
<if test="major != null and major != ''">
107119
AND u.major LIKE CONCAT('%', #{major}, '%')
108120
</if>
121+
<if test="expectedDepartment != null and expectedDepartment != ''">
122+
AND rfv_ed.field_value LIKE CONCAT('%', #{expectedDepartment}, '%')
123+
</if>
109124
<if test="cycleId != null">
110125
AND r.cycle_id = #{cycleId}
111126
</if>

0 commit comments

Comments
 (0)