package com.ycl.jxkg.service.impl;
|
|
import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import com.ycl.jxkg.domain.entity.Question;
|
import com.ycl.jxkg.enums.QuestionTypeEnum;
|
import com.ycl.jxkg.enums.general.StatusEnum;
|
import com.ycl.jxkg.domain.other.KeyValue;
|
import com.ycl.jxkg.domain.question.QuestionItemObject;
|
import com.ycl.jxkg.domain.question.QuestionObject;
|
import com.ycl.jxkg.domain.vo.admin.question.QuestionEditItemVO;
|
import com.ycl.jxkg.domain.vo.admin.question.QuestionEditRequestVO;
|
import com.ycl.jxkg.domain.vo.admin.question.QuestionPageRequestVO;
|
import com.ycl.jxkg.domain.vo.admin.question.QuestionResponseVO;
|
import com.ycl.jxkg.mapper.QuestionMapper;
|
import com.ycl.jxkg.service.QuestionService;
|
import com.ycl.jxkg.utils.DateTimeUtil;
|
import com.ycl.jxkg.utils.ExamUtil;
|
import com.ycl.jxkg.utils.HtmlUtil;
|
import com.ycl.jxkg.utils.JsonUtil;
|
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.stream.Collectors;
|
|
@Service
|
@RequiredArgsConstructor
|
public class QuestionServiceImpl extends ServiceImpl<QuestionMapper, Question> implements QuestionService {
|
|
private final QuestionMapper questionMapper;
|
|
|
@Override
|
public PageInfo<QuestionResponseVO> page(QuestionPageRequestVO requestVM) {
|
return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "create_time desc").doSelectPageInfo(() ->
|
questionMapper.page(requestVM)
|
);
|
}
|
|
|
@Override
|
@Transactional
|
public Question insertFullQuestion(QuestionEditRequestVO model, Integer userId) {
|
Date now = new Date();
|
|
//题干、解析、选项等 插入
|
String questionObject = setQuestionInfoFromVM(model);
|
|
Question question = new Question();
|
question.setSubjectId(model.getSubjectId());
|
question.setCreateTime(now);
|
question.setQuestionType(model.getQuestionType());
|
question.setStatus(StatusEnum.ENABLE);
|
question.setCorrectFromVM(model.getCorrect(), model.getCorrectArray());
|
question.setDifficult(model.getDifficult());
|
question.setContent(questionObject);
|
question.setCreateUser(userId);
|
question.setTitle(HtmlUtil.clear(model.getTitle()));
|
question.setAudioFile(model.getAudioFile());
|
question.setOriginalFile(model.getOriginalFile());
|
questionMapper.insert(question);
|
return question;
|
}
|
|
@Override
|
@Transactional
|
public Question updateFullQuestion(QuestionEditRequestVO model) {
|
Question question = questionMapper.selectById(model.getId());
|
question.setSubjectId(model.getSubjectId());
|
question.setDifficult(model.getDifficult());
|
question.setCorrectFromVM(model.getCorrect(), model.getCorrectArray());
|
//题干、解析、选项等 更新
|
String questionObject = setQuestionInfoFromVM(model);
|
question.setContent(questionObject);
|
question.setTitle(HtmlUtil.clear(model.getTitle()));
|
question.setAudioFile(model.getAudioFile());
|
question.setOriginalFile(model.getOriginalFile());
|
questionMapper.updateById(question);
|
return question;
|
}
|
|
@Override
|
public QuestionEditRequestVO getQuestionEditRequestVM(Integer questionId) {
|
//题目映射
|
Question question = questionMapper.selectById(questionId);
|
return getQuestionEditRequestVM(question);
|
}
|
|
@Override
|
public QuestionEditRequestVO getQuestionEditRequestVM(Question question) {
|
//题目映射
|
QuestionObject questionObject = JsonUtil.toJsonObject(question.getContent(), QuestionObject.class);
|
QuestionEditRequestVO questionEditRequestVO = new QuestionEditRequestVO();
|
BeanUtils.copyProperties(question, questionEditRequestVO);
|
questionEditRequestVO.setTitle(questionObject.getTitleContent());
|
|
//答案
|
QuestionTypeEnum questionTypeEnum = QuestionTypeEnum.fromCode(question.getQuestionType());
|
switch (questionTypeEnum) {
|
case SingleChoice:
|
case TrueFalse:
|
case Audio:
|
questionEditRequestVO.setCorrect(question.getCorrect());
|
break;
|
case MultipleChoice:
|
questionEditRequestVO.setCorrectArray(ExamUtil.contentToArray(question.getCorrect()));
|
break;
|
case GapFilling:
|
List<String> correctContent = questionObject.getQuestionItemObjects().stream().map(d -> d.getContent()).collect(Collectors.toList());
|
questionEditRequestVO.setCorrectArray(correctContent);
|
break;
|
case ShortAnswer:
|
case Calculate:
|
case Analysis:
|
questionEditRequestVO.setCorrect(questionObject.getCorrect());
|
break;
|
default:
|
break;
|
}
|
questionEditRequestVO.setAnalyze(questionObject.getAnalyze());
|
|
|
//题目项映射
|
List<QuestionEditItemVO> editItems = questionObject.getQuestionItemObjects().stream().map(o -> {
|
QuestionEditItemVO questionEditItemVO = new QuestionEditItemVO();
|
BeanUtils.copyProperties(o, questionEditItemVO);
|
return questionEditItemVO;
|
}).collect(Collectors.toList());
|
questionEditRequestVO.setItems(editItems);
|
return questionEditRequestVO;
|
}
|
|
public String setQuestionInfoFromVM(QuestionEditRequestVO model) {
|
List<QuestionItemObject> itemObjects = model.getItems().stream().map(i ->
|
{
|
QuestionItemObject item = new QuestionItemObject();
|
item.setPrefix(i.getPrefix());
|
item.setContent(i.getContent());
|
item.setItemUuid(i.getItemUuid());
|
return item;
|
}
|
).collect(Collectors.toList());
|
QuestionObject questionObject = new QuestionObject();
|
questionObject.setQuestionItemObjects(itemObjects);
|
questionObject.setAnalyze(model.getAnalyze());
|
questionObject.setTitleContent(model.getTitle());
|
questionObject.setCorrect(model.getCorrect());
|
return JsonUtil.toJsonStr(questionObject);
|
}
|
|
@Override
|
public Integer selectAllCount() {
|
return questionMapper.selectAllCount();
|
}
|
|
@Override
|
public List<Integer> selectMothCount() {
|
Date startTime = DateTimeUtil.getMonthStartDay();
|
Date endTime = DateTimeUtil.getMonthEndDay();
|
List<String> mothStartToNowFormat = DateTimeUtil.MothStartToNowFormat();
|
List<KeyValue> mouthCount = questionMapper.selectCountByDate(startTime, endTime);
|
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());
|
}
|
|
@Override
|
public Boolean updateStatus(QuestionResponseVO question) {
|
return new LambdaUpdateChainWrapper<>(questionMapper)
|
.set(Question::getStatus, question.getStatus())
|
.eq(Question::getId, question.getId())
|
.update();
|
}
|
|
}
|