Browse Source

考生端考试任务查询

master
luoweijian 1 month ago
parent
commit
ef7134e915
  1. 3
      src/main/java/com/project/task/application/TaskApplicationService.java
  2. 8
      src/main/java/com/project/task/application/impl/TaskApplicationServiceImpl.java
  3. 25
      src/main/java/com/project/task/controller/CandidateTaskController.java
  4. 9
      src/main/java/com/project/task/domain/dto/TaskDTO.java
  5. 13
      src/main/java/com/project/task/domain/enums/CandidateExamResultEnum.java
  6. 17
      src/main/java/com/project/task/domain/enums/CandidateTaskSortEnum.java
  7. 17
      src/main/java/com/project/task/domain/enums/CandidateTaskStatusEnum.java
  8. 5
      src/main/java/com/project/task/domain/param/TaskParam.java
  9. 11
      src/main/java/com/project/task/domain/service/CandidateSearchTaskDomainService.java
  10. 142
      src/main/java/com/project/task/domain/service/impl/CandidateSearchTaskDomainServiceImpl.java
  11. 6
      src/main/java/com/project/task/domain/service/impl/NotifyTaskDomainServiceImpl.java

3
src/main/java/com/project/task/application/TaskApplicationService.java

@ -17,4 +17,7 @@ public interface TaskApplicationService {
Result<TaskDTO> getDetail(Long id) throws Exception;
List<TaskDTO> selectBatchIds(List<Long> taskIdList);
Result<PageResult<TaskDTO>> candidateSearch(TaskParam param) throws Exception;
}

8
src/main/java/com/project/task/application/impl/TaskApplicationServiceImpl.java

@ -5,6 +5,7 @@ import com.project.base.domain.result.Result;
import com.project.task.application.TaskApplicationService;
import com.project.task.domain.dto.TaskDTO;
import com.project.task.domain.param.TaskParam;
import com.project.task.domain.service.CandidateSearchTaskDomainService;
import com.project.task.domain.service.DeleteTaskDomainService;
import com.project.task.domain.service.SaveOrUpdateTaskDomainService;
import com.project.task.domain.service.SearchTaskDomainService;
@ -25,11 +26,18 @@ public class TaskApplicationServiceImpl implements TaskApplicationService {
@Autowired
private SearchTaskDomainService searchTaskDomainService;
@Autowired
private CandidateSearchTaskDomainService candidateSearchTaskDomainService;
@Override
public Result<TaskDTO> saveOrUpdate(TaskDTO dto) throws Exception {
return saveOrUpdateTaskDomainService.saveOrUpdate(dto);
}
@Override
public Result<PageResult<TaskDTO>> candidateSearch(TaskParam param) throws Exception {
return candidateSearchTaskDomainService.candidateSearch(param);
}
@Override
public Result<String> batchDelete(String ids) throws Exception {

25
src/main/java/com/project/task/controller/CandidateTaskController.java

@ -0,0 +1,25 @@
package com.project.task.controller;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result;
import com.project.task.application.TaskApplicationService;
import com.project.task.domain.dto.TaskDTO;
import com.project.task.domain.param.TaskParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
@RequestMapping("/api/task")
public class CandidateTaskController {
@Autowired
private TaskApplicationService taskApplicationService;
@GetMapping("/candidateSearch")
public Result<PageResult<TaskDTO>> candidateSearch(TaskParam param) throws Exception {
return taskApplicationService.candidateSearch(param);
}
}

9
src/main/java/com/project/task/domain/dto/TaskDTO.java

@ -38,4 +38,13 @@ public class TaskDTO extends BaseDTO {
private String statusText;
private String candidateTaskStatus;
private String candidateTaskStatusText;
private String examResult;
private String examResultText;
}

13
src/main/java/com/project/task/domain/enums/CandidateExamResultEnum.java

@ -0,0 +1,13 @@
package com.project.task.domain.enums;
import com.project.base.domain.enums.HasValueEnum;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Getter
public enum CandidateExamResultEnum implements HasValueEnum<String> {
Pass("已通过") ,
Fail("未通过");
private final String value;
}

17
src/main/java/com/project/task/domain/enums/CandidateTaskSortEnum.java

@ -0,0 +1,17 @@
package com.project.task.domain.enums;
import com.project.base.domain.enums.HasValueEnum;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@Getter
@RequiredArgsConstructor
public enum CandidateTaskSortEnum implements HasValueEnum<Integer> {
End_Time_Near(1, "截止时间从近到远"),
End_Time_Far(2, "截止时间从远到近"),
Start_Time_Near(3, "开考时间从近到远"),
Start_Time_Far(4, "开考时间从远到近");
private final Integer value;
private final String desc;
}

17
src/main/java/com/project/task/domain/enums/CandidateTaskStatusEnum.java

@ -0,0 +1,17 @@
package com.project.task.domain.enums;
import com.project.base.domain.enums.HasValueEnum;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Getter
public enum CandidateTaskStatusEnum implements HasValueEnum<String> {
All("全部") ,
Pending_Exam("待开考") ,
Not_Exam("未考试") ,
Has_Exam("已考试") ,
End("已截止")
;
private final String value;
}

5
src/main/java/com/project/task/domain/param/TaskParam.java

@ -10,4 +10,9 @@ public class TaskParam extends BaseParam {
private Long lineId;
private Long subLineId;
private String candidateTaskStatus;
private Integer sortType;
}

11
src/main/java/com/project/task/domain/service/CandidateSearchTaskDomainService.java

@ -0,0 +1,11 @@
package com.project.task.domain.service;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result;
import com.project.task.domain.dto.TaskDTO;
import com.project.task.domain.param.TaskParam;
public interface CandidateSearchTaskDomainService {
Result<PageResult<TaskDTO>> candidateSearch(TaskParam param) throws Exception;
}

142
src/main/java/com/project/task/domain/service/impl/CandidateSearchTaskDomainServiceImpl.java

@ -0,0 +1,142 @@
package com.project.task.domain.service.impl;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateUtil;
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;
import com.project.base.domain.result.Result;
import com.project.base.domain.utils.PageConverter;
import com.project.ding.utils.SecurityUtils;
import com.project.task.domain.dto.TaskDTO;
import com.project.task.domain.entity.TaskEntity;
import com.project.task.domain.entity.TaskUserEntity;
import com.project.task.domain.enums.CandidateExamResultEnum;
import com.project.task.domain.enums.CandidateTaskStatusEnum;
import com.project.task.domain.enums.TaskStatusEnum;
import com.project.task.domain.enums.TaskUserStatusEnum;
import com.project.task.domain.param.TaskParam;
import com.project.task.domain.service.CandidateSearchTaskDomainService;
import com.project.task.mapper.TaskMapper;
import com.project.task.mapper.TaskUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Objects;
@Service
public class CandidateSearchTaskDomainServiceImpl implements CandidateSearchTaskDomainService {
@Autowired
private TaskMapper taskMapper;
@Autowired
private TaskUserMapper taskUserMapper;
@Override
public Result<PageResult<TaskDTO>> candidateSearch(TaskParam param) throws Exception {
LambdaQueryWrapper<TaskEntity> queryWrapper = new LambdaQueryWrapper<>();
if (StrUtil.isNotBlank(param.getName())) {
queryWrapper.like(TaskEntity::getName , param.getName());
}
if (Objects.nonNull(param.getLineId())) {
queryWrapper.eq(TaskEntity::getLineId , param.getLineId());
}
if (Objects.nonNull(param.getSubLineId())) {
queryWrapper.eq(TaskEntity::getSubLineId , param.getSubLineId());
}
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 (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", 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)",
SecurityUtils.getUserId() , CollUtil.join(List.of(TaskUserStatusEnum.Fail.getValue() , TaskUserStatusEnum.Pass.getValue())
, ",")));
}
// 排序
if (Objects.nonNull(param.getSortType())) {
switch (param.getSortType()) {
case 1: // 截止时间从近到远 (ASC)
queryWrapper.orderByAsc(TaskEntity::getEndTime);
break;
case 2: // 截止时间从远到近 (DESC)
queryWrapper.orderByDesc(TaskEntity::getEndTime);
break;
case 3: // 开考时间从近到远 (ASC)
queryWrapper.orderByAsc(TaskEntity::getStartTime);
break;
case 4: // 开考时间从远到近 (DESC)
queryWrapper.orderByDesc(TaskEntity::getStartTime);
break;
default:
queryWrapper.orderByDesc(TaskEntity::getStartTime); // 默认排序
}
} else {
// 默认按开始时间倒序
queryWrapper.orderByDesc(TaskEntity::getStartTime);
}
IPage<TaskEntity> entityPage = taskMapper.selectPage(PageConverter.toMpPage(param), queryWrapper);
return Result.page(entityPage.convert(this::buildDTO));
}
private TaskDTO buildDTO(TaskEntity entity) {
TaskDTO dto = entity.toDTO(TaskDTO::new);
Date endOfToday = DateUtil.endOfDay(new Date());
Date beginOfToday = DateUtil.beginOfDay(new Date());
TaskUserEntity taskUserEntity = taskUserMapper.selectOne(new LambdaQueryWrapper<TaskUserEntity>()
.eq(TaskUserEntity::getTaskId, entity.getId())
.eq(TaskUserEntity::getUserId, SecurityUtils.getUserId()));
if (endOfToday.before(entity.getStartTime())) {
dto.setCandidateTaskStatus(CandidateTaskStatusEnum.Pending_Exam.name());
dto.setCandidateTaskStatusText(CandidateTaskStatusEnum.Pending_Exam.getValue());
} else if (beginOfToday.after(entity.getEndTime())) {
dto.setCandidateTaskStatus(CandidateTaskStatusEnum.End.name());
dto.setCandidateTaskStatusText(CandidateTaskStatusEnum.End.getValue());
} else {
if (TaskUserStatusEnum.Not_Start.getValue().equals(taskUserEntity.getStatus())) {
dto.setCandidateTaskStatus(CandidateTaskStatusEnum.Not_Exam.name());
dto.setCandidateTaskStatusText(CandidateTaskStatusEnum.Not_Exam.getValue());
}
if (TaskUserStatusEnum.Pass.getValue().equals(taskUserEntity.getStatus()) ||
TaskUserStatusEnum.Fail.getValue().equals(taskUserEntity.getStatus())) {
dto.setCandidateTaskStatus(CandidateTaskStatusEnum.Has_Exam.name());
dto.setCandidateTaskStatusText(CandidateTaskStatusEnum.Has_Exam.getValue());
}
}
if (TaskUserStatusEnum.Pass.getValue().equals(taskUserEntity.getStatus())) {
dto.setExamResult(CandidateExamResultEnum.Pass.name());
dto.setExamResultText(CandidateExamResultEnum.Pass.getValue());
}
if (TaskUserStatusEnum.Fail.getValue().equals(taskUserEntity.getStatus())) {
dto.setExamResult(CandidateExamResultEnum.Fail.name());
dto.setExamResultText(CandidateExamResultEnum.Fail.getValue());
}
return dto;
}
}

6
src/main/java/com/project/task/domain/service/impl/NotifyTaskDomainServiceImpl.java

@ -61,10 +61,10 @@ public class NotifyTaskDomainServiceImpl implements NotifyTaskDomainService {
}
@Override
public void notifyDeadlineTasks(Date today) {
Date startOfDay = DateUtil.beginOfDay(DateUtil.offsetDay(today , -6));
Date endOfDay = DateUtil.endOfDay(DateUtil.offsetDay(today , -6));
Date startOfDay = DateUtil.beginOfDay(DateUtil.offsetDay(today , 6));
Date endOfDay = DateUtil.endOfDay(DateUtil.offsetDay(today , 6));
List<TaskDTO> startTasks = taskMapper.selectList(new LambdaQueryWrapper<TaskEntity>()
.between(TaskEntity::getStartTime, startOfDay, endOfDay))
.between(TaskEntity::getEndTime, startOfDay, endOfDay))
.stream().map(entity -> entity.toDTO(TaskDTO::new)).toList();
for (TaskDTO task : startTasks) {
// 获取该任务下所有未通过考生

Loading…
Cancel
Save