package com.mindskip.xzs.controller.admin; import com.mindskip.xzs.base.BaseApiController; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.base.SystemCode; import com.mindskip.xzs.domain.Question; import com.mindskip.xzs.domain.TextContent; import com.mindskip.xzs.domain.enums.QuestionTypeEnum; import com.mindskip.xzs.domain.question.QuestionObject; import com.mindskip.xzs.service.QuestionService; import com.mindskip.xzs.service.TextContentService; import com.mindskip.xzs.utility.*; import com.mindskip.xzs.viewmodel.admin.question.QuestionEditRequestVM; import com.mindskip.xzs.viewmodel.admin.question.QuestionPageRequestVM; import com.mindskip.xzs.viewmodel.admin.question.QuestionResponseVM; import com.github.pagehelper.PageInfo; import lombok.AllArgsConstructor; import org.apache.commons.lang3.StringUtils; import org.springframework.web.bind.annotation.*; import javax.validation.Valid; /** * @version 2.2.0 * @description: 题目 * Copyright (C), 2020-2021, 武汉思维跳跃科技有限公司 * @date 2021 /9/7 9:45 */ @RestController("AdminQuestionController") @RequestMapping(value = "/api/admin/question") @AllArgsConstructor public class QuestionController extends BaseApiController { private final QuestionService questionService; private final TextContentService textContentService; /** * 题目分页 * * @param model the model * @return the rest response */ @RequestMapping(value = "/page", method = RequestMethod.POST) public RestResponse> pageList(@RequestBody QuestionPageRequestVM model) { PageInfo pageInfo = questionService.page(model); PageInfo page = PageInfoHelper.copyMap(pageInfo, q -> { QuestionResponseVM vm = modelMapper.map(q, QuestionResponseVM.class); vm.setCreateTime(DateTimeUtil.dateFormat(q.getCreateTime())); vm.setScore(ExamUtil.scoreToVM(q.getScore())); TextContent textContent = textContentService.selectById(q.getInfoTextContentId()); QuestionObject questionObject = JsonUtil.toJsonObject(textContent.getContent(), QuestionObject.class); String clearHtml = HtmlUtil.clear(questionObject.getTitleContent()); vm.setShortTitle(clearHtml); return vm; }); return RestResponse.ok(page); } /** * 题目编辑 * * @param model the model * @return the rest response */ @RequestMapping(value = "/edit", method = RequestMethod.POST) public RestResponse edit(@RequestBody @Valid QuestionEditRequestVM model) { RestResponse validQuestionEditRequestResult = validQuestionEditRequestVM(model); if (validQuestionEditRequestResult.getCode() != SystemCode.OK.getCode()) { return validQuestionEditRequestResult; } if (null == model.getId()) { questionService.insertFullQuestion(model, getCurrentUser().getId()); } else { questionService.updateFullQuestion(model); } return RestResponse.ok(); } /** * 题目查询 * * @param id the id * @return the rest response */ @RequestMapping(value = "/select/{id}", method = RequestMethod.POST) public RestResponse select(@PathVariable Integer id) { QuestionEditRequestVM newVM = questionService.getQuestionEditRequestVM(id); return RestResponse.ok(newVM); } /** * 题目删除 * * @param id the id * @return the rest response */ @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST) public RestResponse delete(@PathVariable Integer id) { Question question = questionService.selectById(id); question.setDeleted(true); questionService.updateByIdFilter(question); return RestResponse.ok(); } private RestResponse validQuestionEditRequestVM(QuestionEditRequestVM model) { int qType = model.getQuestionType().intValue(); boolean requireCorrect = qType == QuestionTypeEnum.SingleChoice.getCode() || qType == QuestionTypeEnum.TrueFalse.getCode(); if (requireCorrect) { if (StringUtils.isBlank(model.getCorrect())) { String errorMsg = ErrorUtil.parameterErrorFormat("correct", "不能为空"); return new RestResponse<>(SystemCode.ParameterValidError.getCode(), errorMsg); } } if (qType == QuestionTypeEnum.GapFilling.getCode()) { Integer fillSumScore = model.getItems().stream().mapToInt(d -> ExamUtil.scoreFromVM(d.getScore())).sum(); Integer questionScore = ExamUtil.scoreFromVM(model.getScore()); if (!fillSumScore.equals(questionScore)) { String errorMsg = ErrorUtil.parameterErrorFormat("score", "空分数和与题目总分不相等"); return new RestResponse<>(SystemCode.ParameterValidError.getCode(), errorMsg); } } return RestResponse.ok(); } }