diff --git a/src/main/java/com/project/task/domain/service/impl/CandidateSearchTaskDomainServiceImpl.java b/src/main/java/com/project/task/domain/service/impl/CandidateSearchTaskDomainServiceImpl.java index 98e51c1..e52d01e 100644 --- a/src/main/java/com/project/task/domain/service/impl/CandidateSearchTaskDomainServiceImpl.java +++ b/src/main/java/com/project/task/domain/service/impl/CandidateSearchTaskDomainServiceImpl.java @@ -233,14 +233,19 @@ public class CandidateSearchTaskDomainServiceImpl implements CandidateSearchTask private void defaultSort(LambdaQueryWrapper queryWrapper) { String userId = SecurityUtils.getUserId(); - String sortSql = "ORDER BY CASE " + - "WHEN end_time < NOW() THEN 6 " + - "WHEN start_time > NOW() THEN 4 " + - "WHEN (SELECT status FROM evaluator_task_user WHERE task_id = evaluator_task.id AND user_id = '" + userId + "' AND deleted = 0) = 1 THEN 1 " + - "WHEN (SELECT status FROM evaluator_task_user WHERE task_id = evaluator_task.id AND user_id = '" + userId + "' AND deleted = 0) = 0 THEN 2 " + - "WHEN (SELECT status FROM evaluator_task_user WHERE task_id = evaluator_task.id AND user_id = '" + userId + "' AND deleted = 0) = 3 THEN 3 " + - "WHEN (SELECT status FROM evaluator_task_user WHERE task_id = evaluator_task.id AND user_id = '" + userId + "' AND deleted = 0) = 2 THEN 5 " + - "ELSE 99 END ASC, create_time DESC"; + // 单次子查询,内部组合状态+时间判断,避免重复扫描 + String sortSql = "ORDER BY (" + + "SELECT CASE " + + "WHEN tu.status = 1 THEN 1 " + // 已考未通过 + "WHEN tu.status = 0 AND evaluator_task.start_time <= NOW() AND evaluator_task.end_time >= NOW() THEN 2 " + // 未考 + "WHEN tu.status = 3 THEN 3 " + // 评分中 + "WHEN tu.status = 0 AND evaluator_task.start_time > NOW() THEN 4 " + // 未开考 + "WHEN tu.status = 2 THEN 5 " + // 已考已过 + "WHEN evaluator_task.end_time < NOW() THEN 6 " + // 已截止 + "ELSE 99 END " + + "FROM evaluator_task_user tu " + + "WHERE tu.task_id = evaluator_task.id AND tu.user_id = '" + userId + "' AND tu.deleted = 0" + + ") ASC, create_time DESC"; queryWrapper.last(sortSql); } }