package com.qxgmat.controller.admin; import com.github.pagehelper.Page; import com.nuliji.tools.*; import com.nuliji.tools.exception.ParameterException; import com.qxgmat.data.constants.enums.module.QuestionModule; import com.qxgmat.data.constants.enums.status.AnswerStatus; import com.qxgmat.data.constants.enums.status.DirectionStatus; import com.qxgmat.data.constants.enums.user.AskTarget; import com.qxgmat.data.constants.enums.user.MoneyRange; import com.qxgmat.data.dao.entity.*; import com.qxgmat.data.relation.entity.QuestionNoRelation; import com.qxgmat.dto.admin.extend.*; import com.qxgmat.dto.admin.request.*; import com.qxgmat.dto.admin.response.QuestionDetailDto; import com.qxgmat.dto.admin.response.UserAskQuestionDetailDto; import com.qxgmat.dto.admin.response.UserAskQuestionListDto; import com.qxgmat.help.ShiroHelp; import com.qxgmat.service.UserQuestionService; import com.qxgmat.service.extend.MessageExtendService; import com.qxgmat.service.inline.*; import com.qxgmat.service.ManagerService; import com.qxgmat.service.UsersService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; 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.Collection; import java.util.Date; import java.util.List; @RestController("AdminQuestionController") @RequestMapping("/admin/question") @Api(tags = "题目接口", description = "题目相关", produces = MediaType.APPLICATION_JSON_VALUE) public class QuestionController { private static final Logger logger = LoggerFactory.getLogger(QuestionController.class); @Autowired private ShiroHelp shiroHelp; @Autowired private ManagerLogService managerLogService; @Autowired private ExercisePaperService exercisePaperService; @Autowired private QuestionNoService questionNoService; @Autowired private QuestionService questionService; @Autowired private UserAskQuestionService userAskQuestionService; @Autowired private ManagerService managerService; @Autowired private UsersService usersService; @Autowired private UserQuestionService userQuestionService; @Autowired private UserReportService userReportService; @Autowired private MessageExtendService messageExtendService; @RequestMapping(value = "/add", method = RequestMethod.POST) @ApiOperation(value = "添加题目", httpMethod = "POST") public Response add(@RequestBody @Validated QuestionDto dto, HttpServletRequest request) { Question entity = Transform.dtoToEntity(dto); entity.setQuestionModule(QuestionModule.BASE.key); entity = questionService.add(entity); // 更新编号绑定 questionNoService.bindQuestion(dto.getQuestionNoIds(), entity.getId()); // 更新编号关联 questionNoService.relationQuestion(dto.getRelationQuestion()); managerLogService.log(request); return ResponseHelp.success(entity); } @RequestMapping(value = "/edit", method = RequestMethod.PUT) @ApiOperation(value = "修改题目", httpMethod = "PUT") public Response edit(@RequestBody @Validated QuestionDto dto, HttpServletRequest request) { logger.info("dto: {}, {}, {}", dto, dto.getAnswer(), dto.getContent()); Question entity = Transform.dtoToEntity(dto); logger.info("entity: {}", entity); entity = questionService.edit(entity); // 更新编号绑定 questionNoService.bindQuestion(dto.getQuestionNoIds(), entity.getId()); // 更新编号关联 questionNoService.relationQuestion(dto.getRelationQuestion()); managerLogService.log(request); return ResponseHelp.success(true); } @RequestMapping(value = "/detail", method = RequestMethod.GET) @ApiOperation(value = "获取题目", httpMethod = "GET") public Response detail(int id, HttpServletRequest request) { Question entity = questionService.get(id); QuestionDetailDto dto = Transform.convert(entity, QuestionDetailDto.class); List questionNoList = questionNoService.listByQuestion(entity.getId()); Integer[] ids = new Integer[questionNoList.size()]; for (int index = 0; index < questionNoList.size(); index++) { ids[index] = questionNoList.get(index).getId(); } dto.setQuestionNoIds(ids); // List questionNoList = questionNoService.listByQuestion(entity.getId()); // List questionNos = Transform.convert(questionNoList, QuestionNoExtendDto.class); // dto.setQuestionNos(questionNos); return ResponseHelp.success(dto); } @RequestMapping(value = "/add/no", method = RequestMethod.POST) @ApiOperation(value = "添加编号", httpMethod = "POST") public Response addNo(@RequestBody @Validated QuestionNoDto dto, HttpServletRequest request) { QuestionNo entity = Transform.dtoToEntity(dto); entity = questionNoService.add(entity); managerLogService.log(request); return ResponseHelp.success(entity); } @RequestMapping(value = "/delete/no", method = RequestMethod.DELETE) @ApiOperation(value = "删除题目编号", httpMethod = "DELETE") public Response delete(int id, HttpServletRequest request) { questionNoService.delete(id); managerLogService.log(request); return ResponseHelp.success(true); } @RequestMapping(value = "/list/no", method = RequestMethod.POST) @ApiOperation(value = "题目编号列表:通过id/编号", httpMethod = "POST") public Response> listNo(@RequestBody @Validated QuestionNoSearchDto dto, HttpServletRequest request) { List questionNos; if (dto.getIds() != null && dto.getIds().length > 0){ questionNos = questionNoService.listWithRelationByIds(dto.getIds()); }else if(dto.getNos() != null && dto.getNos().length > 0){ questionNos = questionNoService.listWithRelationByNos(dto.getNos(), dto.getModule()); }else{ throw new ParameterException("需要id或编号"); } List questionNoExtendDtos = Transform.convert(questionNos, QuestionNoExtendDto.class); return ResponseHelp.success(questionNoExtendDtos); } @RequestMapping(value = "/search/stem", method = RequestMethod.POST) @ApiOperation(value = "搜索题目编号列表:题干搜索", httpMethod = "POST") public Response> searchStem(@RequestBody @Validated QuestionNoSearchDto dto, HttpServletRequest request) { PageResult p = questionNoService.searchStem(dto.getPage(), dto.getSize(), dto.getContent()); List pr = Transform.convert(p, QuestionNoExtendDto.class); return ResponseHelp.success(pr, dto.getPage(), dto.getSize(), p.getTotal()); } @RequestMapping(value = "/search/no", method = RequestMethod.POST) @ApiOperation(value = "搜索题目编号列表:题目编号搜索", httpMethod = "POST") public Response> searchNo(@RequestBody @Validated QuestionNoSearchDto dto, HttpServletRequest request) { PageResult p = questionNoService.searchNo(dto.getPage(), dto.getSize(), dto.getKeyword(), dto.getModule(), dto.getIds() !=null ? dto.getIds().length == 0? null:dto.getIds() : dto.getIds()); List pr = Transform.convert(p, QuestionNoExtendDto.class); return ResponseHelp.success(pr, dto.getPage(), dto.getSize(), p.getTotal()); } @RequestMapping(value = "/ask/edit", method = RequestMethod.PUT) @ApiOperation(value = "修改提问信息", httpMethod = "PUT") public Response editAsk(@RequestBody @Validated UserAskQuestionDto dto, HttpServletRequest request) { UserAskQuestion entity = Transform.dtoToEntity(dto); UserAskQuestion in = userAskQuestionService.get(entity.getId()); // 调整回答 if(in.getAnswerStatus() == 0 && (dto.getAnswer() != null || (dto.getIgnoreStatus() !=null && dto.getIgnoreStatus() > 0))){ entity.setAnswerTime(new Date()); if (dto.getIgnoreStatus() != null && dto.getIgnoreStatus() > 0){ entity.setAnswerStatus(AnswerStatus.IGNORE.index); }else{ entity.setAnswerStatus(AnswerStatus.ANSWER.index); } Manager manager = shiroHelp.getLoginManager(); entity.setManagerId(manager.getId()); User user = usersService.get(in.getUserId()); messageExtendService.sendAskQuestion(user, entity); } entity = userAskQuestionService.edit(entity); if (dto.getOther() !=null && dto.getOther().length > 0){ // 更新回答排序 userAskQuestionService.updateOrder(dto.getOther()); } managerLogService.log(request); return ResponseHelp.success(true); } @RequestMapping(value = "/ask/detail", method = RequestMethod.GET) @ApiOperation(value = "提问详情", httpMethod = "GET") public Response detailAsk(@RequestParam int id, HttpServletRequest request) { UserAskQuestion entity = userAskQuestionService.get(id); UserAskQuestionDetailDto dto = Transform.convert(entity, UserAskQuestionDetailDto.class); if (entity.getManagerId() != null && entity.getManagerId() > 0){ Manager manager = managerService.get(entity.getManagerId()); if (manager != null) dto.setManager(Transform.convert(manager, ManagerExtendDto.class)); } User user = usersService.get(entity.getUserId()); dto.setUser(Transform.convert(user, UserExtendDto.class)); Question question = questionService.get(entity.getQuestionId()); dto.setQuestion(Transform.convert(question, QuestionExtendDto.class)); QuestionNo questionNo = questionNoService.get(entity.getQuestionNoId()); dto.setQuestionNo(Transform.convert(questionNo, QuestionNoExtendDto.class)); // 所有回答 List userAskList = userAskQuestionService.listByQuestion(entity.getQuestionId(), true); dto.setOthers(Transform.convert(userAskList, UserAskQuestionExtendDto.class)); return ResponseHelp.success(dto); } @RequestMapping(value = "/ask/list", method = RequestMethod.GET) @ApiOperation(value = "提问列表", httpMethod = "GET") public Response> listAsk( @RequestParam(required = false, defaultValue = "1") int page, @RequestParam(required = false, defaultValue = "100") int size, @RequestParam(required = false) String askModule, @RequestParam(required = false) String questionType, @RequestParam(required = false) String questionModule, @RequestParam(required = false) Number userId, @RequestParam(required = false) Number questionNoId, @RequestParam(required = false) String target, @RequestParam(required = false) Integer answerStatus, @RequestParam(required = false) Integer showStatus, @RequestParam(required = false) Integer moneyRang, @RequestParam(required = false) Boolean hasRecord, @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 = userAskQuestionService.listAdmin(page, size, askModule, questionType, questionModule, userId, questionNoId, AskTarget.ValueOf(target), AnswerStatus.ValueOf(answerStatus), showStatus, MoneyRange.ValueOf(moneyRang), hasRecord, Tools.baseTime(startTime), Tools.baseTime(endTime), order, DirectionStatus.ValueOf(direction)); List pr = Transform.convert(p, UserAskQuestionListDto.class); // 绑定题目 Collection questionIds = Transform.getIds(p, UserAskQuestion.class, "questionId"); List questionList = questionService.select(questionIds); Transform.combine(pr, questionList, UserAskQuestionListDto.class, "questionId", "question", Question.class, "id", QuestionExtendDto.class); // 绑定题目编号 Collection questionNoIds = Transform.getIds(p, UserAskQuestion.class, "questionNoId"); List questionNoList = questionNoService.select(questionNoIds); Transform.combine(pr, questionNoList, UserAskQuestionListDto.class, "questionNoId", "questionNo", QuestionNo.class, "id", QuestionNoExtendDto.class); // 绑定用户 Collection userIds = Transform.getIds(p, UserAskQuestion.class, "userId"); List userList = usersService.select(userIds); Transform.combine(pr, userList, UserAskQuestionListDto.class, "userId", "user", User.class, "id", UserExtendDto.class); // 绑定管理员 Collection managerIds = Transform.getIds(p, UserAskQuestion.class, "managerId"); List managerList = managerService.select(managerIds); Transform.combine(pr, managerList, UserAskQuestionListDto.class, "managerId", "manager", Manager.class, "id", ManagerExtendDto.class); return ResponseHelp.success(pr, page, size, p.getTotal()); } }