package com.mindskip.xzs.controller.admin; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.mindskip.xzs.base.BaseApiController; import com.mindskip.xzs.base.RestResponse; import com.mindskip.xzs.domain.*; import com.mindskip.xzs.domain.vo.AnswerVO; import com.mindskip.xzs.domain.vo.ExamTemplatesUserCountVO; import com.mindskip.xzs.domain.vo.TeamplatesUserExcelVO; import com.mindskip.xzs.domain.vo.UserCountExcelVO; import com.mindskip.xzs.repository.ExamPaperAnswerMapper; import com.mindskip.xzs.repository.ExamTemplatesMapper; import com.mindskip.xzs.repository.ExamTemplatesUserMapper; import com.mindskip.xzs.service.ExamPaperAnswerService; import com.mindskip.xzs.service.ExamTemplatesUserCountService; import com.mindskip.xzs.service.UserService; import com.mindskip.xzs.utility.convert.UserCountExcelClassConvert; import com.mindskip.xzs.utility.excel.ExcelSheet; import com.mindskip.xzs.utility.excel.ExcelUtils; import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperPageRequestVM; import lombok.SneakyThrows; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; @RestController("AdminExamTemplatesUserCountController") @RequestMapping(value = "/api/admin/exam/count") public class ExamTemplatesUserCountController extends BaseApiController { private final ExamTemplatesUserCountService examTemplatesUserCountService; private final ExamTemplatesMapper examTemplatesMapper; private final UserService userService; private final ExamPaperAnswerService examPaperAnswerService; private final ExamPaperAnswerMapper examPaperAnswerMapper; private final ExamTemplatesUserMapper examTemplatesUserMapper; public ExamTemplatesUserCountController(ExamTemplatesUserCountService examTemplatesUserCountService, ExamTemplatesMapper examTemplatesMapper, UserService userService, ExamPaperAnswerService examPaperAnswerService, ExamPaperAnswerMapper examTemplatesUserCountMapper, ExamTemplatesUserMapper examTemplatesUserMapper) { this.examTemplatesUserCountService = examTemplatesUserCountService; this.examTemplatesMapper = examTemplatesMapper; this.userService = userService; this.examPaperAnswerService = examPaperAnswerService; this.examPaperAnswerMapper = examTemplatesUserCountMapper; this.examTemplatesUserMapper = examTemplatesUserMapper; } @RequestMapping(value = "/list", method = RequestMethod.POST) public RestResponse> select(@RequestBody ExamPaperPageRequestVM model) throws Exception { if (model.getTemplatesName() != null && !"".equals(model.getTemplatesName())) { ExamTemplates examTemplates = examTemplatesMapper.getByName(model.getTemplatesName()); model.setTemplatesId(examTemplates != null ? examTemplates.getId() : 0); } if (model.getUserName() != null && !"".equals(model.getUserName())) { User user = userService.getUserByRealName(model.getUserName()); model.setUserId(user != null ? user.getId() : 0); } PageInfo info = examTemplatesUserCountService.list(model); info.setList(info.getList().stream().map(e -> { ExamTemplates byId = examTemplatesMapper.getById(e.getId()); if (Objects.nonNull(byId)) { e.setName(byId.getName()); } User userById = userService.getUserById(e.getUserId()); if (Objects.nonNull(userById)) { e.setUserName(userById.getRealName()); } return e; }).collect(Collectors.toList())); return RestResponse.ok(info); } @RequestMapping(value = "/sourceList", method = RequestMethod.POST) public RestResponse> selectSource(@RequestBody ExamTemplatesUserCountVO examTemplatesUserCountVO) throws Exception { List pageInfo = examTemplatesUserCountService.getByUserIdAndTemplatesId(examTemplatesUserCountVO); PageInfo idDesc = PageHelper.startPage(examTemplatesUserCountVO.getPageIndex(), examTemplatesUserCountVO.getPageSize(), "id desc").doSelectPageInfo(() -> examPaperAnswerService.getByExamPaperIdAndUserId(pageInfo)); return RestResponse.ok(idDesc); } @RequestMapping(value = "/exportTemplatesSheet/{id}", method = RequestMethod.GET) public void exportTemplatesSheet(@PathVariable("id") Integer id, HttpServletResponse response, HttpServletRequest request){ ExamPaperPageRequestVM vm = new ExamPaperPageRequestVM(); vm.setTemplatesId(id); List list = examTemplatesUserCountService.userCountList(vm) .stream().map(e -> { e.setName(examTemplatesMapper.getById(e.getId()).getName()); e.setUserName(userService.getUserById(e.getUserId()).getRealName()); return e; }).collect(Collectors.toList()); String[] sheetHead1 = {"名称","用户名","数量"}; String[] sheetHead2 = {"总分数","得分","时间(秒)"}; List userCountExcelVOS = UserCountExcelClassConvert.INSTANCE.ExamTemplatesUserCountVOListToUserCountExcelVOList(list); List byTemplates = examTemplatesUserCountService.getByTemplates(id); List answerList = examPaperAnswerService.getByExamPaperIdAndUserId(byTemplates); List answerVOS = UserCountExcelClassConvert.INSTANCE.ExamPaperAnswerListToAnswerVOList(answerList); List listEntities = ExcelUtils.listEntitiesToStringArray(userCountExcelVOS); List strings = ExcelUtils.answerToString(answerVOS); ExcelSheet excelSheet = new ExcelSheet("次数统计",sheetHead1,listEntities); ExcelSheet excelSheet1 = new ExcelSheet("详细分数",sheetHead2,strings); List excelSheets = new ArrayList<>(); excelSheets.add(excelSheet); excelSheets.add(excelSheet1); ExcelUtils.exportManySheetExcel("1",excelSheets,response,request); } @RequestMapping(value = "/exportTemplatesId/{id}", method = RequestMethod.GET) @SneakyThrows public void exportTemplatesId(@PathVariable("id") Integer id, HttpServletResponse response, HttpServletRequest request) { List list = examTemplatesUserCountService.getByExamTemplates(id); ExcelUtils.export(response,"个人练习",list,UserCountExcelVO.class); } @RequestMapping(value = "/exportRandownTemplatesId/{id}", method = RequestMethod.GET) @SneakyThrows public void exportRandownTemplatesId(@PathVariable("id") Integer id, HttpServletResponse response, HttpServletRequest request) { // 查出试卷模板 ExamTemplates byId = examTemplatesMapper.getById(id); // 查出该模板的参考人数据 List byId1 = examTemplatesUserMapper.getById(id); // 查出这张试卷的参考记录 List byTemplates = examTemplatesUserCountService.getByTemplates(id); // 获取每个人的试卷ID List list = byTemplates.stream().map(ExamTemplatesUserCount::getExamPaperId).collect(Collectors.toList()); // 获取参考用户ID List userIds = byId1.stream().map(e->Integer.parseInt(e.getUserId())).collect(Collectors.toList()); // 答卷 List result = new ArrayList<>(); // 获取考试答卷 if(list.size()!=0){ result = examPaperAnswerMapper.getResult(list); } //用户 List users = userService.selectByIds(userIds); List list1 = new ArrayList<>(); for (User user : users) { TeamplatesUserExcelVO vo = new TeamplatesUserExcelVO(); vo.setName(byId.getName()); vo.setUserName(user.getRealName()); Boolean str = false; for (ExamPaperAnswer answer: result) { if(user.getId().equals(answer.getCreateUser())){ str = true; vo.setUserScore(answer.getUserScore() == 0 ? "0" : String.valueOf(answer.getUserScore() / 10)); vo.setPaperScore(answer.getPaperScore() == 0 ? "0" : String.valueOf(answer.getPaperScore() / 10)); vo.setDoTime(answer.getDoTime().toString()); list1.add(vo); continue; } } if(!str){ list1.add(vo); } str = false; } ExcelUtils.export(response,"个人练习",list1, TeamplatesUserExcelVO.class); } @RequestMapping(value = "/timeOne", method = RequestMethod.GET) @SneakyThrows public void time( HttpServletResponse response, HttpServletRequest request) { List list = examPaperAnswerMapper.getByTimeOne(); ExcelUtils.export(response,"个人练习",list,TeamplatesUserExcelVO.class); } }