package com.qxgmat.controller.admin; import com.alibaba.fastjson.JSONObject; import com.github.pagehelper.Page; import com.nuliji.tools.PageMessage; import com.nuliji.tools.Response; import com.nuliji.tools.ResponseHelp; import com.nuliji.tools.Transform; import com.nuliji.tools.exception.ParameterException; import com.qxgmat.data.constants.enums.SettingKey; import com.qxgmat.data.constants.enums.status.DirectionStatus; import com.qxgmat.data.dao.entity.*; import com.qxgmat.data.relation.entity.QuestionNoRelation; import com.qxgmat.dto.admin.extend.ExercisePaperExtendDto; import com.qxgmat.dto.admin.request.ExerciseStructDto; import com.qxgmat.dto.admin.response.ExercisePaperListDto; import com.qxgmat.dto.admin.response.ExerciseQuestionListDto; import com.qxgmat.service.inline.ExercisePaperService; import com.qxgmat.service.extend.ExerciseService; import com.qxgmat.service.inline.*; import com.qxgmat.task.AsyncTask; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.MediaType; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; @RestController("AdminExerciseController") @RequestMapping("/admin/exercise") @Api(tags = "练习接口", description = "练习相关", produces = MediaType.APPLICATION_JSON_VALUE) public class ExerciseController { @Autowired private ManagerLogService managerLogService; @Autowired private ExerciseStructService exerciseStructService; @Autowired private ExercisePaperService exercisePaperService; @Autowired private ExerciseService exerciseService; @Autowired private QuestionNoService questionNoService; @Autowired private QuestionService questionService; @Autowired private SettingService settingService; @Autowired private AsyncTask asyncTask; @RequestMapping(value = "/struct/add", method = RequestMethod.POST) @ApiOperation(value = "添加练习层级", httpMethod = "POST") public Response add(@RequestBody @Validated ExerciseStructDto dto, HttpServletRequest request) { ExerciseStruct entity = Transform.dtoToEntity(dto); entity = exerciseStructService.add(entity); managerLogService.log(request); return ResponseHelp.success(entity); } @RequestMapping(value = "/struct/edit", method = RequestMethod.PUT) @ApiOperation(value = "编辑练习层级", httpMethod = "PUT") public Response edit(@RequestBody @Validated ExerciseStructDto dto, HttpServletRequest request) { ExerciseStruct entity = Transform.dtoToEntity(dto); entity = exerciseStructService.edit(entity); managerLogService.log(request); return ResponseHelp.success(true); } @RequestMapping(value = "/struct/delete", method = RequestMethod.DELETE) @ApiOperation(value = "删除练习层级", httpMethod = "DELETE") public Response delete(@RequestParam int id, HttpServletRequest request) { managerLogService.log(request); return ResponseHelp.success(exerciseStructService.delete(id)); } @RequestMapping(value = "/struct/all", method = RequestMethod.GET) @ApiOperation(value = "所有练习层级", httpMethod = "GET") public Response> all(HttpSession session) { List p = exerciseStructService.all(); return ResponseHelp.success(p); } @RequestMapping(value = "/paper/list", method = RequestMethod.GET) @ApiOperation(value = "练习册列表", httpMethod = "GET") public Response> listPaper( @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "100") int size, @RequestParam(required = false, defaultValue = "") String keyword, @RequestParam(required = false) Integer[] ids, @RequestParam(required = false, defaultValue = "id") String order, @RequestParam(required = false, defaultValue = "desc") String direction, HttpSession session) { Page p; if (ids != null && ids.length > 0){ p = exercisePaperService.select(ids); }else{ p = exercisePaperService.select(page, size, keyword); } List pr = Transform.convert(p, ExercisePaperListDto.class); return ResponseHelp.success(pr, page, size, p.getTotal()); } @RequestMapping(value = "/question/list", method = RequestMethod.GET) @ApiOperation(value = "练习册试题列表", httpMethod = "GET") public Response> listQuestion( @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "100") int size, @RequestParam(required = false) String questionType, @RequestParam(required = false) Integer structId, @RequestParam(required = false) Integer questionNoId, @RequestParam(required = false) Integer paperId, @RequestParam(required = false) String place, @RequestParam(required = false) String difficult, @RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime, @RequestParam(required = false, defaultValue = "id") String order, @RequestParam(required = false, defaultValue = "desc") String direction, HttpSession session) { Page p = exerciseService.listAdmin(page, size, questionType, structId, questionNoId, paperId, place, difficult, startTime, endTime, order, DirectionStatus.ValueOf(direction)); List pr = Transform.convert(p, ExerciseQuestionListDto.class); // 绑定练习册 if (paperId != null && paperId > 0){ ExercisePaper paper = exercisePaperService.get(paperId); if (paper != null){ ExercisePaperExtendDto paperDto = Transform.convert(paper, ExercisePaperExtendDto.class); List questionNoIds = Arrays.stream(paper.getQuestionNoIds()).collect(Collectors.toList()); for(ExerciseQuestionListDto dto : pr){ dto.setPaper(paperDto); // 绑定题目序号 int index = questionNoIds.indexOf(dto.getId()); if (index >= 0){ dto.setNo(index + 1); } } } } return ResponseHelp.success(pr, page, size, p.getTotal()); } @RequestMapping(value = "/paper/auto", method = RequestMethod.POST) @ApiOperation(value = "自动组卷", httpMethod = "POST") public Response autoPaper(HttpServletRequest request) { // 判断当前组卷状态 Setting setting = settingService.getByKey(SettingKey.EXERCISE_PAPER_STATUS); JSONObject status = setting.getValue(); if (status != null && status.getInteger("progress") != null && status.getInteger("progress")<100){ throw new ParameterException("组卷进行中,请稍后再试"); } asyncTask.autoExercisePaper(); return ResponseHelp.success(true); } @RequestMapping(value = "/paper/auto", method = RequestMethod.GET) @ApiOperation(value = "自动组卷状态", httpMethod = "GET") public Response autoPaperStatus(HttpServletRequest request) { // 判断当前组卷状态 Setting setting = settingService.getByKey(SettingKey.EXERCISE_PAPER_STATUS); JSONObject status = setting.getValue(); return ResponseHelp.success(status); } }