package com.ycl.jxkg.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson2.JSONArray;
|
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.ycl.jxkg.context.WebContext;
|
import com.ycl.jxkg.domain.exam.PaperQuestion;
|
import com.ycl.jxkg.domain.exam.PaperQuestionDTO;
|
import com.ycl.jxkg.domain.form.ExamPaperForm;
|
import com.ycl.jxkg.domain.vo.admin.exam.ExamResponseVO;
|
import com.ycl.jxkg.enums.ExamPaperTypeEnum;
|
import com.ycl.jxkg.domain.other.KeyValue;
|
import com.ycl.jxkg.enums.VisibilityEnum;
|
import com.ycl.jxkg.mapper.ExamPaperMapper;
|
import com.ycl.jxkg.mapper.QuestionMapper;
|
import com.ycl.jxkg.service.ExamPaperService;
|
import com.ycl.jxkg.service.QuestionService;
|
import com.ycl.jxkg.service.SubjectService;
|
import com.ycl.jxkg.service.TextContentService;
|
import com.ycl.jxkg.utils.DateTimeUtil;
|
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperEditRequestVO;
|
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperPageRequestVO;
|
import com.ycl.jxkg.domain.vo.admin.exam.ExamPaperTitleItemVO;
|
import com.ycl.jxkg.domain.vo.student.dashboard.PaperFilter;
|
import com.ycl.jxkg.domain.vo.student.dashboard.PaperInfo;
|
import com.ycl.jxkg.domain.vo.student.exam.ExamPaperPageVO;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import com.ycl.jxkg.domain.entity.ExamPaper;
|
import com.ycl.jxkg.utils.PageInfoHelper;
|
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 ExamPaperServiceImpl extends ServiceImpl<ExamPaperMapper, ExamPaper> implements ExamPaperService {
|
|
private final ExamPaperMapper examPaperMapper;
|
private final QuestionMapper questionMapper;
|
private final TextContentService textContentService;
|
private final QuestionService questionService;
|
private final SubjectService subjectService;
|
private final WebContext webContext;
|
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public void addPaper(ExamPaperForm form) {
|
ExamPaper examPaper = ExamPaperForm.getEntityByForm(form,null);
|
examPaper.setContent(JSON.toJSONString(form.getQuestionList()));
|
baseMapper.insert(examPaper);
|
//TODO:随序试卷生成题目
|
// if(ExamPaperTypeEnum.RandomOrder.getCode().equals(form.getPaperType())){
|
// List<PaperQuestionDTO> questionList = form.getQuestionList();
|
// List<PaperQuestion> list = questionMapper.selectQuestion();
|
// }
|
}
|
|
@Override
|
public void updateExamPaper(ExamPaperForm form) {
|
ExamPaper entity = ExamPaperForm.getEntityByForm(form,null);
|
baseMapper.updateById(entity);
|
}
|
|
@Override
|
public PageInfo<ExamResponseVO> page(ExamPaperPageRequestVO requestVM) {
|
PageInfo<ExamPaper> page = PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
|
examPaperMapper.page(requestVM));
|
PageInfo<ExamResponseVO> pageVO = PageInfoHelper.copyMap(page, e -> {
|
ExamResponseVO vo = new ExamResponseVO();
|
BeanUtils.copyProperties(e, vo);
|
vo.setVisibility(VisibilityEnum.valueOf(vo.getVisibility()).getCode() + "");
|
vo.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime()));
|
vo.setQuestionList(JSONArray.parseArray(e.getContent(),PaperQuestionDTO.class));
|
return vo;
|
});
|
return pageVO;
|
}
|
|
|
// @Override
|
// public PageInfo<ExamPaper> taskExamPage(ExamPaperPageRequestVO requestVM) {
|
// return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
|
// examPaperMapper.taskExamPage(requestVM));
|
// }
|
|
@Override
|
public PageInfo<ExamPaper> studentPage(ExamPaperPageVO requestVM) {
|
return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
|
examPaperMapper.studentPage(requestVM));
|
}
|
|
|
// @Override
|
// @Transactional
|
// public ExamPaper savePaperFromVM(ExamPaperEditRequestVO examPaperEditRequestVO, User user) {
|
// ActionEnum actionEnum = (examPaperEditRequestVO.getId() == null) ? ActionEnum.ADD : ActionEnum.UPDATE;
|
// Date now = new Date();
|
// List<ExamPaperTitleItemVO> titleItemsVM = examPaperEditRequestVO.getTitleItems();
|
// List<ExamPaperTitleItemObject> frameTextContentList = frameTextContentFromVM(titleItemsVM);
|
// String frameTextContentStr = JsonUtil.toJsonStr(frameTextContentList);
|
//
|
// ExamPaper examPaper = new ExamPaper();
|
// BeanUtils.copyProperties(examPaperEditRequestVO, examPaper);
|
// if (actionEnum == ActionEnum.ADD) {
|
// TextContent frameTextContent = new TextContent();
|
// frameTextContent.setContent(frameTextContentStr);
|
// frameTextContent.setCreateTime(now);
|
// textContentService.save(frameTextContent);
|
// examPaper.setCreateTime(now);
|
// examPaper.setCreateUser(user.getId());
|
// examPaperFromVM(examPaperEditRequestVO, examPaper, titleItemsVM);
|
// examPaperMapper.insert(examPaper);
|
// } else {
|
// examPaper = examPaperMapper.selectById(examPaperEditRequestVO.getId());
|
// //TODO:
|
// TextContent frameTextContent = textContentService.getById(examPaper.getFrameTextContentId());
|
// frameTextContent.setContent(frameTextContentStr);
|
// textContentService.updateById(frameTextContent);
|
// examPaperFromVM(examPaperEditRequestVO, examPaper, titleItemsVM);
|
// examPaperMapper.updateById(examPaper);
|
// }
|
// return examPaper;
|
// }
|
|
@Override
|
public ExamPaperEditRequestVO examPaperToVM(Integer id) {
|
ExamPaper examPaper = examPaperMapper.selectById(id);
|
ExamPaperEditRequestVO vo = new ExamPaperEditRequestVO();
|
BeanUtils.copyProperties(examPaper, vo);
|
//TODO:
|
// TextContent frameTextContent = textContentService.getById(examPaper.getFrameTextContentId());
|
// List<ExamPaperTitleItemObject> examPaperTitleItemObjects = JsonUtil.toJsonListObject(frameTextContent.getContent(), ExamPaperTitleItemObject.class);
|
// List<Integer> questionIds = examPaperTitleItemObjects.stream()
|
// .flatMap(t -> t.getQuestionItems().stream()
|
// .map(q -> q.getId()))
|
// .collect(Collectors.toList());
|
// List<Question> questions = questionMapper.selectByIds(questionIds);
|
// List<ExamPaperTitleItemVO> examPaperTitleItemVOS = examPaperTitleItemObjects.stream().map(t -> {
|
// ExamPaperTitleItemVO tTitleVM = new ExamPaperTitleItemVO();
|
// BeanUtils.copyProperties(t, tTitleVM);
|
// List<QuestionEditRequestVO> questionItemsVM = t.getQuestionItems().stream().map(i -> {
|
// Question question = questions.stream().filter(q -> q.getId().equals(i.getId())).findFirst().get();
|
// QuestionEditRequestVO questionEditRequestVO = questionService.getQuestionEditRequestVM(question);
|
// questionEditRequestVO.setItemOrder(i.getItemOrder());
|
// return questionEditRequestVO;
|
// }).collect(Collectors.toList());
|
// tTitleVM.setQuestionItems(questionItemsVM);
|
// return tTitleVM;
|
// }).collect(Collectors.toList());
|
// vo.setTitleItems(examPaperTitleItemVOS);
|
// vo.setScore(ExamUtil.scoreToVM(examPaper.getScore()));
|
// if (ExamPaperTypeEnum.Random == ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) {
|
// List<String> limitDateTime = Arrays.asList(DateTimeUtil.dateFormat(examPaper.getLimitStartTime()), DateTimeUtil.dateFormat(examPaper.getLimitEndTime()));
|
// vo.setLimitDateTime(limitDateTime);
|
// }
|
return vo;
|
}
|
|
@Override
|
public List<PaperInfo> indexPaper(PaperFilter paperFilter) {
|
return examPaperMapper.indexPaper(paperFilter);
|
}
|
|
|
@Override
|
public Integer selectAllCount() {
|
return examPaperMapper.selectAllCount();
|
}
|
|
@Override
|
public List<Integer> selectMothCount() {
|
Date startTime = DateTimeUtil.getMonthStartDay();
|
Date endTime = DateTimeUtil.getMonthEndDay();
|
List<KeyValue> mouthCount = examPaperMapper.selectCountByDate(startTime, endTime);
|
List<String> mothStartToNowFormat = DateTimeUtil.MothStartToNowFormat();
|
return mothStartToNowFormat.stream().map(md -> {
|
KeyValue keyValue = mouthCount.stream().filter(kv -> kv.getName().equals(md)).findAny().orElse(null);
|
return null == keyValue ? 0 : keyValue.getValue();
|
}).collect(Collectors.toList());
|
}
|
|
|
|
private void examPaperFromVM(ExamPaperEditRequestVO examPaperEditRequestVO, ExamPaper examPaper, List<ExamPaperTitleItemVO> titleItemsVM) {
|
//TODO:
|
// Integer gradeLevel = subjectService.levelBySubjectId(examPaperEditRequestVO.getSubjectId());
|
// Integer questionCount = titleItemsVM.stream()
|
// .mapToInt(t -> t.getQuestionItems().size()).sum();
|
// Integer score = titleItemsVM.stream().
|
// flatMapToInt(t -> t.getQuestionItems().stream()
|
// .mapToInt(q -> ExamUtil.scoreFromVM(q.getScore()))
|
// ).sum();
|
// examPaper.setQuestionCount(questionCount);
|
// examPaper.setScore(score);
|
// examPaper.setGradeLevel(gradeLevel);
|
// List<String> dateTimes = examPaperEditRequestVO.getLimitDateTime();
|
// if (ExamPaperTypeEnum.Random == ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) {
|
// examPaper.setLimitStartTime(DateTimeUtil.parse(dateTimes.get(0), DateTimeUtil.STANDER_FORMAT));
|
// examPaper.setLimitEndTime(DateTimeUtil.parse(dateTimes.get(1), DateTimeUtil.STANDER_FORMAT));
|
// }
|
}
|
|
// private List<ExamPaperTitleItemObject> frameTextContentFromVM(List<ExamPaperTitleItemVO> titleItems) {
|
// AtomicInteger index = new AtomicInteger(1);
|
// return titleItems.stream().map(t -> {
|
// ExamPaperTitleItemObject titleItem = new ExamPaperTitleItemObject();
|
// BeanUtils.copyProperties(t, titleItem);
|
// List<ExamPaperQuestionItemObject> questionItems = t.getQuestionItems().stream()
|
// .map(q -> {
|
// ExamPaperQuestionItemObject examPaperQuestionItemObject = new ExamPaperQuestionItemObject();
|
// BeanUtils.copyProperties(q, examPaperQuestionItemObject);
|
// examPaperQuestionItemObject.setItemOrder(index.getAndIncrement());
|
// return examPaperQuestionItemObject;
|
// })
|
// .collect(Collectors.toList());
|
// titleItem.setQuestionItems(questionItems);
|
// return titleItem;
|
// }).collect(Collectors.toList());
|
// }
|
|
@Override
|
public List<ExamPaper> myExamPaper(Integer paperType) {
|
Integer userId = webContext.getCurrentUser().getId();
|
List<ExamPaper> list = new LambdaQueryChainWrapper<>(baseMapper)
|
.select(ExamPaper::getId, ExamPaper::getName, ExamPaper::getVisibility)
|
.eq(ExamPaper::getCreateUser, userId)
|
.eq(Objects.nonNull(paperType), ExamPaper::getPaperType, paperType)
|
.or()
|
.eq(ExamPaper::getVisibility, VisibilityEnum.Public.getName())
|
.eq(Objects.nonNull(paperType), ExamPaper::getPaperType, paperType)
|
.list();
|
list.stream().forEach(item -> {
|
if (VisibilityEnum.Public.getName().equals(item.getVisibility())) {
|
item.setName(item.getName() + " (公开)");
|
}
|
});
|
return list;
|
}
|
}
|