From 646d029346524640d7fdf2f3fe9fb3cf38e5443e Mon Sep 17 00:00:00 2001 From: luogw <3132758203@qq.com> Date: Fri, 10 Jul 2026 14:25:14 +0800 Subject: [PATCH] =?UTF-8?q?=E9=85=8D=E7=BD=AE=E6=96=87=E4=BB=B6=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CandidateSearchTaskDomainServiceImpl.java | 102 +----------------- .../com/project/task/mapper/TaskMapper.java | 86 ++++++++++++++- src/main/resources/application-prod.yml | 3 + src/main/resources/application-test.yml | 9 +- 4 files changed, 97 insertions(+), 103 deletions(-) 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 4044b42..afff499 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 @@ -1,11 +1,8 @@ package com.project.task.domain.service.impl; -import cn.hutool.core.collection.CollUtil; import cn.hutool.core.date.DateUtil; -import cn.hutool.core.util.BooleanUtil; import cn.hutool.core.util.EnumUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.project.base.domain.result.PageResult; @@ -34,9 +31,7 @@ import com.project.task.mapper.TaskUserMapper; import io.vavr.control.Try; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.text.NumberFormat; import java.util.Date; -import java.util.List; import java.util.Objects; @Service @@ -63,85 +58,12 @@ public class CandidateSearchTaskDomainServiceImpl implements CandidateSearchTask @Override public Result> candidateSearch(TaskParam param) throws Exception { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - - queryWrapper.exists(String.format( - "SELECT 1 FROM evaluator_task_user tu WHERE tu.task_id = evaluator_task.id AND tu.user_id = '%s' and tu.deleted = 0 ", - SecurityUtils.getUserId() - )); - String name = param.getName(); - if (name != null && StrUtil.isNotBlank(name.trim())) { - queryWrapper.like(TaskEntity::getName , name.trim()); - } - if (Objects.nonNull(param.getLineId())) { - queryWrapper.eq(TaskEntity::getLineId , param.getLineId()); - } - if (Objects.nonNull(param.getSubLineId())) { - queryWrapper.eq(TaskEntity::getSubLineId , param.getSubLineId()); - } + String userId = SecurityUtils.getUserId(); Date endOfToday = DateUtil.endOfDay(new Date()); Date beginOfToday = DateUtil.beginOfDay(new Date()); - // 待开考:开始时间大于当前 - if (StrUtil.equals(param.getCandidateTaskStatus() , CandidateTaskStatusEnum.Pending_Exam.name())) { - queryWrapper.gt(TaskEntity::getStartTime , endOfToday); - } - // 已截止:结束时间小于当前 - if (StrUtil.equals(param.getCandidateTaskStatus() , CandidateTaskStatusEnum.End.name())) { - queryWrapper.lt(TaskEntity::getEndTime , beginOfToday); - } - if (BooleanUtil.isTrue(param.getExcludeEnd())) { - // 强制要求:结束时间必须 >= 今天 00:00:00 - // 这样,截止时间是今天的任务会被【保留】,只有昨天及以前截止的任务会被【排除】 - queryWrapper.ge(TaskEntity::getEndTime, beginOfToday); - } - // 未考试:在有效期内,且用户状态为未参加考试 - if (StrUtil.equals(param.getCandidateTaskStatus() , CandidateTaskStatusEnum.Not_Exam.name())) { - queryWrapper.le(TaskEntity::getStartTime, endOfToday); - queryWrapper.ge(TaskEntity::getEndTime, beginOfToday); - queryWrapper.inSql(TaskEntity::getId, - String.format("SELECT task_id FROM evaluator_task_user WHERE user_id = '%s' AND status = %s and deleted = 0 ", SecurityUtils.getUserId() , TaskUserStatusEnum.Not_Start.getValue())); - } - // 已考试:在有效期内,用户状态为已通过或未通过(不含评分中) - if (StrUtil.equals(param.getCandidateTaskStatus() , CandidateTaskStatusEnum.Has_Exam.name())) { - queryWrapper.le(TaskEntity::getStartTime, endOfToday); - queryWrapper.ge(TaskEntity::getEndTime, beginOfToday); - queryWrapper.inSql(TaskEntity::getId, - String.format("SELECT task_id FROM evaluator_task_user WHERE user_id = '%s' AND status in (%s) and deleted = 0 ", - SecurityUtils.getUserId() , CollUtil.join(List.of(TaskUserStatusEnum.Fail.getValue() , TaskUserStatusEnum.Pass.getValue()) - , ","))); - } - // 评分中:在有效期内,用户状态为评分中 - if (StrUtil.equals(param.getCandidateTaskStatus() , CandidateTaskStatusEnum.Scoring.name())) { - queryWrapper.le(TaskEntity::getStartTime, endOfToday); - queryWrapper.ge(TaskEntity::getEndTime, beginOfToday); - queryWrapper.inSql(TaskEntity::getId, - String.format("SELECT task_id FROM evaluator_task_user WHERE user_id = '%s' AND status = %s and deleted = 0 ", - SecurityUtils.getUserId() , TaskUserStatusEnum.Scoring.getValue())); - } - // 排序 - if (Objects.nonNull(param.getSortType())) { - switch (param.getSortType()) { - case 1: // 截止时间从近到远 - queryWrapper.orderByAsc(TaskEntity::getEndTime); - break; - case 2: // 截止时间从远到近 - queryWrapper.orderByDesc(TaskEntity::getEndTime); - break; - case 3: // 开考时间从近到远 - queryWrapper.orderByAsc(TaskEntity::getStartTime); - break; - case 4: // 开考时间从远到近 - queryWrapper.orderByDesc(TaskEntity::getStartTime); - break; - default: // 默认排序(兜底) - defaultSort(queryWrapper); - } - } else { - defaultSort(queryWrapper); - } - - IPage entityPage = taskMapper.selectPage(PageConverter.toMpPage(param), queryWrapper); + IPage entityPage = taskMapper.selectCandidatePage( + PageConverter.toMpPage(param), userId, param, beginOfToday, endOfToday); return Result.page(entityPage.convert(this::buildDTO)); } @@ -231,22 +153,4 @@ public class CandidateSearchTaskDomainServiceImpl implements CandidateSearchTask } return dto; } - - private void defaultSort(LambdaQueryWrapper queryWrapper) { - String userId = SecurityUtils.getUserId(); - // 单次子查询,内部组合状态+时间判断,避免重复扫描 - 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); - } } diff --git a/src/main/java/com/project/task/mapper/TaskMapper.java b/src/main/java/com/project/task/mapper/TaskMapper.java index 3b56edf..cd74586 100644 --- a/src/main/java/com/project/task/mapper/TaskMapper.java +++ b/src/main/java/com/project/task/mapper/TaskMapper.java @@ -1,18 +1,102 @@ package com.project.task.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.project.task.domain.dto.TaskDTO; import com.project.task.domain.entity.TaskEntity; +import com.project.task.domain.param.TaskParam; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; -import org.springframework.data.repository.query.Param; +import java.util.Date; import java.util.List; import java.util.Set; @Mapper public interface TaskMapper extends BaseMapper { + /** + * 考生端分页查询任务(JOIN evaluator_task_user 替代子查询) + */ + @Select({ + "" + }) + IPage selectCandidatePage(Page page, @Param("userId") String userId, @Param("param") TaskParam param, @Param("beginOfToday") Date beginOfToday, @Param("endOfToday") Date endOfToday); + /** * 根据关联表单ID,查询考试任务 */ diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml index 4be8ce5..762eea2 100644 --- a/src/main/resources/application-prod.yml +++ b/src/main/resources/application-prod.yml @@ -65,6 +65,9 @@ analysis: host: http://127.0.0.1 port: 8888 url: /word/parse +dataExtract: + url: http://127.0.0.1:8002/ai-check/api/documents-parse + callback-url: http://127.0.0.1:7088/api/interaction/dataExtractCallback ding: appKey: dinghgexcbos9dorl3kb appSecret: bSNX1ZOUTk2A4FGwQ1U6fyHlFssh9IZtFO6FuKx8A97PE1VZL9lBTJapwzDGCS7v diff --git a/src/main/resources/application-test.yml b/src/main/resources/application-test.yml index f6634a8..80f280d 100644 --- a/src/main/resources/application-test.yml +++ b/src/main/resources/application-test.yml @@ -62,9 +62,12 @@ milvus: host: 127.0.0.1 port: 19530 analysis: - host: http://127.0.0.1 + host: http://8.129.84.155 port: 8888 url: /word/parse +dataExtract: + url: http://127.0.0.1:8002/ai-check/api/documents-parse + callback-url: http://127.0.0.1:7088/api/interaction/dataExtractCallback ding: # appKey: dinghgexcbos9dorl3kb # appSecret: bSNX1ZOUTk2A4FGwQ1U6fyHlFssh9IZtFO6FuKx8A97PE1VZL9lBTJapwzDGCS7v @@ -81,9 +84,9 @@ ding: noticeUrlPrefix: https://107pm707566hq.vicp.fun/ai-evaluator algo: clusterUrl: /semantic-cluster - baseUrl: http://172.16.204.50/cluster + baseUrl: http://127.0.0.1:8003 generateQuestionUrl: /v1/generate/questions_from_cluster - apiUrl: http://172.16.204.50:8000/ + apiUrl: http://127.0.0.1:8000/ jwt: secret: "my-very-fixed-and-secure-secret-key-1234567890"