package com.ycl.jxkg.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.jxkg.domain.entity.ExamPaper; import com.ycl.jxkg.domain.entity.TaskExam; import com.ycl.jxkg.domain.entity.TextContent; import com.ycl.jxkg.domain.entity.User; import com.ycl.jxkg.domain.task.TaskItemObject; import com.ycl.jxkg.mapper.ExamPaperMapper; import com.ycl.jxkg.mapper.TaskExamMapper; import com.ycl.jxkg.service.TaskExamService; import com.ycl.jxkg.service.TextContentService; import com.ycl.jxkg.service.enums.ActionEnum; import com.ycl.jxkg.utils.DateTimeUtil; import com.ycl.jxkg.utils.JsonUtil; import com.ycl.jxkg.domain.vo.admin.exam.ExamResponseVO; import com.ycl.jxkg.domain.vo.admin.task.TaskPageRequestVO; import com.ycl.jxkg.domain.vo.admin.task.TaskRequestVO; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import lombok.RequiredArgsConstructor; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.Date; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @Service @RequiredArgsConstructor public class TaskExamServiceImpl extends ServiceImpl implements TaskExamService { private final TaskExamMapper taskExamMapper; private final TextContentService textContentService; private final ExamPaperMapper examPaperMapper; @Override public PageInfo page(TaskPageRequestVO requestVM) { return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() -> taskExamMapper.page(requestVM) ); } @Override @Transactional public void edit(TaskRequestVO model, User user) { ActionEnum actionEnum = (model.getId() == null) ? ActionEnum.ADD : ActionEnum.UPDATE; TaskExam taskExam = new TaskExam(); if (actionEnum == ActionEnum.ADD) { BeanUtils.copyProperties(model, taskExam); Date now = new Date(); taskExam.setCreateUser(user.getId()); taskExam.setCreateUserName(user.getUserName()); taskExam.setCreateTime(now); //保存任务结构 TextContent textContent = textContentService.jsonConvertInsert(model.getPaperItems(), now, p -> { TaskItemObject taskItemObject = new TaskItemObject(); taskItemObject.setExamPaperId(p.getId()); taskItemObject.setExamPaperName(p.getName()); return taskItemObject; }); textContentService.save(textContent); taskExam.setFrameTextContentId(textContent.getId()); taskExamMapper.insert(taskExam); } else { TaskExam old = taskExamMapper.selectById(model.getId()); if (Objects.isNull(old)) { throw new RuntimeException("数据不存在"); } BeanUtils.copyProperties(taskExam, old); TextContent textContent = textContentService.getById(taskExam.getFrameTextContentId()); //清空试卷任务的试卷Id,后面会统一设置 List paperIds = JsonUtil.toJsonListObject(textContent.getContent(), TaskItemObject.class) .stream() .map(d -> d.getExamPaperId()) .collect(Collectors.toList()); examPaperMapper.clearTaskPaper(paperIds); //更新任务结构 textContentService.jsonConvertUpdate(textContent, model.getPaperItems(), p -> { TaskItemObject taskItemObject = new TaskItemObject(); taskItemObject.setExamPaperId(p.getId()); taskItemObject.setExamPaperName(p.getName()); return taskItemObject; }); textContentService.updateById(textContent); taskExamMapper.updateById(old); } //更新试卷的taskId List paperIds = model.getPaperItems().stream().map(d -> d.getId()).collect(Collectors.toList()); examPaperMapper.updateTaskPaper(taskExam.getId(), paperIds); model.setId(taskExam.getId()); } @Override public TaskRequestVO taskExamToVM(Integer id) { TaskExam taskExam = taskExamMapper.selectById(id); TaskRequestVO vo = new TaskRequestVO(); BeanUtils.copyProperties(taskExam, vo); TextContent textContent = textContentService.getById(taskExam.getFrameTextContentId()); List examResponseVOS = JsonUtil.toJsonListObject(textContent.getContent(), TaskItemObject.class).stream().map(tk -> { ExamPaper examPaper = examPaperMapper.selectById(tk.getExamPaperId()); ExamResponseVO examResponseVO = new ExamResponseVO(); BeanUtils.copyProperties(examPaper, examResponseVO); examResponseVO.setCreateTime(DateTimeUtil.dateFormat(examPaper.getCreateTime())); return examResponseVO; }).collect(Collectors.toList()); vo.setPaperItems(examResponseVOS); return vo; } @Override public List getByGradeLevel(Integer gradeLevel) { return taskExamMapper.getByGradeLevel(gradeLevel); } }