Browse Source

配置文件修改

master
luogw 2 months ago
parent
commit
646d029346
  1. 102
      src/main/java/com/project/task/domain/service/impl/CandidateSearchTaskDomainServiceImpl.java
  2. 86
      src/main/java/com/project/task/mapper/TaskMapper.java
  3. 3
      src/main/resources/application-prod.yml
  4. 9
      src/main/resources/application-test.yml

102
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<PageResult<TaskDTO>> candidateSearch(TaskParam param) throws Exception {
LambdaQueryWrapper<TaskEntity> 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<TaskEntity> entityPage = taskMapper.selectPage(PageConverter.toMpPage(param), queryWrapper);
IPage<TaskEntity> 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<TaskEntity> 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);
}
}

86
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<TaskEntity> {
/**
* 考生端分页查询任务JOIN evaluator_task_user 替代子查询
*/
@Select({
"<script>",
"SELECT t.*",
"FROM evaluator_task t",
"INNER JOIN evaluator_task_user tu ON t.id = tu.task_id AND tu.user_id = #{userId} AND tu.deleted = 0",
"<where>",
"<if test='param.name != null and param.name != \"\"'>",
" AND t.name LIKE CONCAT('%', #{param.name}, '%')",
"</if>",
"<if test='param.lineId != null'>",
" AND t.line_id = #{param.lineId}",
"</if>",
"<if test='param.subLineId != null'>",
" AND t.sub_line_id = #{param.subLineId}",
"</if>",
"<choose>",
"<when test=\"param.candidateTaskStatus == 'Pending_Exam'\">",
" AND t.start_time &gt; #{endOfToday}",
"</when>",
"<when test=\"param.candidateTaskStatus == 'End'\">",
" AND t.end_time &lt; #{beginOfToday}",
"</when>",
"<when test=\"param.candidateTaskStatus == 'Not_Exam'\">",
" AND t.start_time &lt;= #{endOfToday}",
" AND t.end_time &gt;= #{beginOfToday}",
" AND tu.status = 0",
"</when>",
"<when test=\"param.candidateTaskStatus == 'Has_Exam'\">",
" AND t.start_time &lt;= #{endOfToday}",
" AND t.end_time &gt;= #{beginOfToday}",
" AND tu.status IN (1, 2)",
"</when>",
"<when test=\"param.candidateTaskStatus == 'Scoring'\">",
" AND t.start_time &lt;= #{endOfToday}",
" AND t.end_time &gt;= #{beginOfToday}",
" AND tu.status = 3",
"</when>",
"<otherwise>",
"<if test='param.excludeEnd'>",
" AND t.end_time &gt;= #{beginOfToday}",
"</if>",
"</otherwise>",
"</choose>",
"</where>",
"<choose>",
"<when test='param.sortType == 1'>",
"ORDER BY t.end_time ASC",
"</when>",
"<when test='param.sortType == 2'>",
"ORDER BY t.end_time DESC",
"</when>",
"<when test='param.sortType == 3'>",
"ORDER BY t.start_time ASC",
"</when>",
"<when test='param.sortType == 4'>",
"ORDER BY t.start_time DESC",
"</when>",
"<otherwise>",
"ORDER BY (",
" SELECT CASE",
" WHEN tu2.status = 1 THEN 1",
" WHEN tu2.status = 0 AND t.start_time &lt;= NOW() AND t.end_time &gt;= NOW() THEN 2",
" WHEN tu2.status = 3 THEN 3",
" WHEN tu2.status = 0 AND t.start_time &gt; NOW() THEN 4",
" WHEN tu2.status = 2 THEN 5",
" WHEN t.end_time &lt; NOW() THEN 6",
" ELSE 99",
" END",
" FROM evaluator_task_user tu2",
" WHERE tu2.task_id = t.id AND tu2.user_id = #{userId} AND tu2.deleted = 0",
") ASC, t.create_time DESC",
"</otherwise>",
"</choose>",
"</script>"
})
IPage<TaskEntity> selectCandidatePage(Page<?> page, @Param("userId") String userId, @Param("param") TaskParam param, @Param("beginOfToday") Date beginOfToday, @Param("endOfToday") Date endOfToday);
/**
* 根据关联表单ID查询考试任务
*/

3
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

9
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"

Loading…
Cancel
Save