大赛管理功能

This commit is contained in:
tiger_zhou 2024-02-28 10:05:04 +08:00
parent 636f049bfe
commit 6c1bb1d77f
6 changed files with 115 additions and 11 deletions

View File

@ -10,6 +10,7 @@ import club.joylink.rtss.vo.race.RacePaper.RacePaperDetailVO;
import club.joylink.rtss.vo.race.RacePaper.RacePaperModuleVO;
import club.joylink.rtss.vo.race.RacePaper.RacePaperVO;
import club.joylink.rtss.vo.race.RacePaperQueryVO;
import club.joylink.rtss.vo.race.RaceTask.RacePaperModuleTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
@ -77,7 +78,7 @@ public class RacePaperController {
}
@GetMapping("/{paperId}/module/{moduleId}/task")
public void paperModuleTask(@PathVariable("paperId") Long id, @PathVariable("moduleId") Integer moduleId) {
public RacePaperModuleTask paperModuleTask(@PathVariable("paperId") Long id, @PathVariable("moduleId") Integer moduleId) {
return this.racePaperService.paperModuleTask(id, moduleId);
}
}

View File

@ -4,6 +4,7 @@ import club.joylink.rtss.dao.MyBatisBaseDao;
import club.joylink.rtss.entity.racetr.RacetrTask;
import club.joylink.rtss.entity.racetr.RacetrTaskExample;
import club.joylink.rtss.vo.race.RaceTaskDetailDTO;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;
@ -27,4 +28,6 @@ public interface RacetrTaskDAO extends MyBatisBaseDao<RacetrTask, Long, RacetrTa
+ " and A.id = #{id}"
+ "</script>")
RaceTaskDetailDTO details(@Param("id") Long id);
List<RaceTaskDetailDTO> recursiveFindTask(@Param("taskIds") List<Long> taskIds);
}

View File

@ -15,14 +15,21 @@ import club.joylink.rtss.vo.race.RacePaper.RacePaperVO;
import club.joylink.rtss.vo.race.RacePaperPageVO;
import club.joylink.rtss.vo.race.RacePaperQueryVO;
import club.joylink.rtss.vo.race.RaceSeasonOuterClass.RaceSeason.Group;
import club.joylink.rtss.vo.race.RaceTask.RacePaperModuleTask;
import club.joylink.rtss.vo.race.RaceTask.RacePaperModuleTask.PaperModuleGroup;
import club.joylink.rtss.vo.race.RaceTask.RaceTaskChildVO;
import club.joylink.rtss.vo.race.RaceTaskDetailDTO;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.google.common.collect.Lists;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -35,6 +42,8 @@ public class RacePaperService {
@Autowired
private RacetrPaperDAO paperDAO;
@Autowired
private RaceTaskService taskService;
private RacetrPaper findId(Long id) {
RacetrPaper rp = this.paperDAO.selectByPrimaryKey(id);
@ -52,7 +61,6 @@ public class RacePaperService {
rp.setUpdateTime(now);
rp.setCreatorId(user.getId());
rp.setUpdaterId(user.getId());
// rp.setSupportCopy(createVO.getSupportCopy());
this.paperDAO.insertSelective(rp);
}
@ -63,7 +71,6 @@ public class RacePaperService {
rp.setSeasonId(updateVO.getSeasonId());
rp.setUpdateTime(LocalDateTime.now());
rp.setUpdaterId(user.getId());
// rp.setSupportCopy(updateVO.getSupportCopy());
this.paperDAO.updateByPrimaryKey(rp);
}
@ -90,7 +97,6 @@ public class RacePaperService {
builder.setModifyInfo(modifyInfoVO);
builder.setSeasonId(rp.getSeasonId());
builder.setSeasonName(Objects.isNull(rp.getSeasonName()) ? "" : rp.getSeasonName());
// builder.setSupportCopy(!Objects.isNull(rp.getSupportCopy()) && rp.getSupportCopy());
builder.setGroup(Group.Unknown);
if (Objects.nonNull(rp.getGroup())) {
builder.setGroup(Group.valueOf(rp.getGroup()));
@ -162,11 +168,9 @@ public class RacePaperService {
public void copy(Long id, AccountVO user) {
RacetrPaper paper = this.findId(id);
// BusinessExceptionAssertEnum.OPERATION_NOT_SUPPORTED.assertTrue(paper.getSupportCopy(), "此试卷不支持拷贝");
LocalDateTime now = LocalDateTime.now();
paper.setId(null);
paper.setName(String.format("%s_copy", paper.getName()));
// paper.setSupportCopy(!Objects.isNull(paper.getSupportCopy()) && paper.getSupportCopy());
paper.setCreatorId(user.getId());
paper.setUpdaterId(user.getId());
paper.setCreateTime(now);
@ -174,15 +178,89 @@ public class RacePaperService {
this.paperDAO.insert(paper);
}
public void paperModuleTask(Long paperId, Integer moduleId) {
public RacePaperModuleTask paperModuleTask(Long paperId, Integer moduleId) {
BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.assertTrue(Objects.nonNull(moduleId), "请选择对应的模型");
RacePaperDetailVO detailVO = this.detail(paperId);
RacePaperModuleVO moduleVO = detailVO.getModuleVo();
BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.assertTrue(CollectionUtils.isEmpty(moduleVO.getModulesList()), "此试卷没有模块数据");
BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.assertTrue(!CollectionUtils.isEmpty(moduleVO.getModulesList()), "此试卷没有模块数据");
PaperModule pm = moduleVO.getModulesList().stream().filter(d -> d.getCustomModuleId() == moduleId).findFirst().orElse(null);
BusinessExceptionAssertEnum.ARGUMENT_ILLEGAL.assertTrue(Objects.nonNull(pm), "没有找到对应的模块");
for (RacePaperModuleVO.Group moduleGroup : pm.getGroupList()) {
List<Long> allGroupTaskIds = this.collectAllTaskIds(pm.getGroupList());
Map<Long, List<RaceTaskDetailDTO>> taskMapList = this.taskService.recursiveFindTask(allGroupTaskIds);
RacePaperModuleTask.Builder modultTask = RacePaperModuleTask.newBuilder();
modultTask.setCustomModuleId(pm.getCustomModuleId());
List<PaperModuleGroup> convertGroupList = this.convert(pm.getGroupList(), taskMapList);
modultTask.addAllModuleGroup(convertGroupList);
return modultTask.build();
}
private List<PaperModuleGroup> convert(List<RacePaperModuleVO.Group> groupList, Map<Long, List<RaceTaskDetailDTO>> allTaskMapList) {
List<PaperModuleGroup> groups = new ArrayList<>();
for (RacePaperModuleVO.Group group : groupList) {
PaperModuleGroup.Builder groupBuilder = PaperModuleGroup.newBuilder();
groupBuilder.setGroupName(group.getName());
for (Long taskId : group.getTaskIdsList()) {
RaceTaskChildVO taskVO = this.findTask(taskId, allTaskMapList);
groupBuilder.addTreeData(taskVO);
}
if (!CollectionUtils.isEmpty(group.getGroupList())) {
List<PaperModuleGroup> childGroup = this.convert(group.getGroupList(), allTaskMapList);
groupBuilder.addAllModuleGroup(childGroup);
}
groups.add(groupBuilder.build());
}
return groups;
}
private RaceTaskChildVO findTask(Long taskId, Map<Long, List<RaceTaskDetailDTO>> allTaskMapList) {
List<RaceTaskDetailDTO> dtoList = allTaskMapList.get(RaceTaskService.TASK_ROOT_ID);
RaceTaskDetailDTO taskDto = dtoList.stream().filter(d -> Objects.equals(d.getId(), taskId)).findFirst().orElse(null);
BusinessExceptionAssertEnum.DATA_NOT_EXIST.assertTrue(Objects.nonNull(taskDto), String.format("对应的任务没有找到[%s]", taskDto));
RaceTaskChildVO.Builder vo = this.convertVO(taskDto);
this.childTask(vo, allTaskMapList);
return vo.build();
}
private void childTask(RaceTaskChildVO.Builder vob, Map<Long, List<RaceTaskDetailDTO>> allTaskMapList) {
List<RaceTaskDetailDTO> childDto = allTaskMapList.get(vob.getId());
if (!CollectionUtils.isEmpty(childDto)) {
for (RaceTaskDetailDTO ch : childDto) {
RaceTaskChildVO.Builder chvo = this.convertVO(ch);
vob.addChildren(chvo);
this.childTask(chvo, allTaskMapList);
}
}
}
private RaceTaskChildVO.Builder convertVO(RaceTaskDetailDTO dto) {
RaceTaskChildVO.Builder cb = RaceTaskChildVO.newBuilder();
cb.setId(dto.getId());
cb.setName(dto.getName());
cb.setDesc(dto.getDesc());
cb.setContent(dto.getContent());
cb.setStandards(dto.getStandards());
return cb;
}
private List<Long> collectAllTaskIds(List<RacePaperModuleVO.Group> groupList) {
List<Long> allTaskIds = Lists.newArrayList();
for (RacePaperModuleVO.Group group : groupList) {
this.collectTaskIds(group, allTaskIds);
}
return allTaskIds.stream().distinct().collect(Collectors.toList());
}
private void collectTaskIds(RacePaperModuleVO.Group group, List<Long> collectorList) {
collectorList.addAll(group.getTaskIdsList());
if (!CollectionUtils.isEmpty(group.getGroupList())) {
for (RacePaperModuleVO.Group group1 : group.getGroupList()) {
this.collectTaskIds(group1, collectorList);
}
}
}
}

View File

@ -36,7 +36,7 @@ public class RaceTaskService {
@Autowired
private RacetrTaskDAO raceTaskDAO;
private final static Long TASK_ROOT_ID = 0L;
protected final static Long TASK_ROOT_ID = 0L;
private RacetrTask findById(Long id) {
RacetrTask task = this.raceTaskDAO.selectByPrimaryKey(id);
@ -179,4 +179,10 @@ public class RaceTaskService {
}
}
}
public Map<Long, List<RaceTaskDetailDTO>> recursiveFindTask(List<Long> taskIds) {
List<RaceTaskDetailDTO> taskDtoList = this.raceTaskDAO.recursiveFindTask(taskIds);
Map<Long, List<RaceTaskDetailDTO>> dtoMapList = taskDtoList.stream().collect(Collectors.groupingBy(RaceTaskDetailDTO::getParentId));
return dtoMapList;
}
}

View File

@ -322,4 +322,14 @@
update_time = #{updateTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=BIGINT}
</update>
<select id="recursiveFindTask" parameterType="arraylist" resultType="club.joylink.rtss.vo.race.RaceTaskDetailDTO">
WITH RECURSIVE task as
(select id,name,`desc`,content,standards,scene_id,score_rule_id, 0 as parent_id from racetr_task where id in
<foreach collection="taskIds" item="d" separator="," open="(" close=")">
#{d}
</foreach>
UNION all
select A.id,A.name,A.desc,A.content,A.standards,A.score_rule_id,A.score_rule_id,A.parent_id from racetr_task A, task B where A.parent_id = B.id)
select * from task
</select>
</mapper>

View File

@ -8,6 +8,7 @@ import club.joylink.rtss.vo.race.RacePaper.RacePaperCreateVO;
import club.joylink.rtss.vo.race.RacePaper.RacePaperVO;
import club.joylink.rtss.vo.race.RacePaperQueryVO;
import club.joylink.rtss.vo.race.RaceSeasonOuterClass.RaceSeason.Group;
import club.joylink.rtss.vo.race.RaceTask.RacePaperModuleTask;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@ -43,4 +44,9 @@ public class PaperServiceTest {
}
@Test
public void paperModuleTaskTest() {
RacePaperModuleTask moduleTask = this.paperService.paperModuleTask(13L, 2);
System.out.println(JsonUtils.writeValueAsString(moduleTask));
}
}