123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772 |
- package com.qxgmat.controller.api;
- import com.alibaba.fastjson.JSONObject;
- import com.github.pagehelper.Page;
- import com.nuliji.tools.*;
- import com.nuliji.tools.exception.ParameterException;
- import com.nuliji.tools.exception.SystemException;
- import com.qxgmat.data.constants.enums.QuestionType;
- import com.qxgmat.data.constants.enums.SettingKey;
- import com.qxgmat.data.constants.enums.module.FeedbackModule;
- import com.qxgmat.data.constants.enums.module.PaperModule;
- import com.qxgmat.data.constants.enums.module.PaperOrigin;
- import com.qxgmat.data.constants.enums.module.QuestionModule;
- import com.qxgmat.data.constants.enums.status.DirectionStatus;
- import com.qxgmat.data.dao.entity.*;
- import com.qxgmat.data.inline.UserQuestionStat;
- import com.qxgmat.data.relation.entity.*;
- import com.qxgmat.dto.extend.*;
- import com.qxgmat.dto.request.*;
- import com.qxgmat.dto.request.UserNoteDto;
- import com.qxgmat.dto.response.*;
- import com.qxgmat.help.ShiroHelp;
- import com.qxgmat.service.*;
- import com.qxgmat.service.extend.QuestionFlowService;
- import com.qxgmat.service.inline.*;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.http.MediaType;
- import org.springframework.validation.annotation.Validated;
- import org.springframework.web.bind.annotation.*;
- import org.springframework.web.multipart.MultipartFile;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpSession;
- import javax.validation.Validator;
- import java.io.File;
- import java.io.IOException;
- import java.text.DateFormat;
- import java.text.ParseException;
- import java.util.*;
- import java.util.stream.Collectors;
- @RestController
- @RequestMapping("/api/my")
- @Api(tags = "用户接口", description = "获取与操作当前用户信息", produces = MediaType.APPLICATION_JSON_VALUE)
- public class MyController {
- @Value("${upload.local_path}")
- private String localPath;
- @Value("${upload.web_url}")
- private String webUrl;
- @Autowired
- private Validator validator;
- @Autowired
- private ShiroHelp shiroHelp;
- @Autowired
- private SettingService settingService;
- @Autowired
- private ExerciseStructService exerciseStructService;
- @Autowired
- private ClassCourseService classCourseService;
- @Autowired
- private ClassCourseNoService classCourseNoService;
- @Autowired
- private QuestionService questionService;
- @Autowired
- private QuestionNoService questionNoService;
- @Autowired
- private SentenceQuestionService sentenceQuestionService;
- @Autowired
- private TextbookQuestionService textbookQuestionService;
- @Autowired
- private UsersService usersService;
- @Autowired
- private UserMessageService userMessageService;
- @Autowired
- private UserCourseRecordService userCourseRecordService;
- @Autowired
- private UserSentenceRecordService userSentenceRecordService;
- @Autowired
- private UserServiceService userServiceService;
- @Autowired
- private UserCollectQuestionService userCollectQuestionService;
- @Autowired
- private UserNoteQuestionService userNoteQuestionService;
- @Autowired
- private UserAskQuestionService userAskQuestionService;
- @Autowired
- private UserFeedbackErrorService userFeedbackErrorService;
- @Autowired
- private UserQuestionService userQuestionService;
- @Autowired
- private UserReportService userReportService;
- @Autowired
- private UserPaperService userPaperService;
- @Autowired
- private UserPaperQuestionService userPaperQuestionService;
- @Autowired
- private QuestionFlowService questionFlowService;
- @RequestMapping(value = "/email", method = RequestMethod.POST)
- @ApiOperation(value = "绑定邮箱", httpMethod = "POST")
- public Response<Boolean> email(@RequestBody @Validated UserEmailDto dto, HttpSession session, HttpServletRequest request) {
- User user = (User) shiroHelp.getLoginUser();
- usersService.edit(User.builder()
- .id(user.getId())
- .email(dto.getEmail())
- .build());
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/info", method = RequestMethod.POST)
- @ApiOperation(value = "修改用户信息", httpMethod = "POST")
- public Response<Boolean> info(@RequestBody @Validated UserInfoDto dto){
- User user = (User) shiroHelp.getLoginUser();
- usersService.edit(User.builder()
- .id(user.getId())
- .nickname(dto.getNickname())
- .avatar(dto.getAvatar())
- .build());
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/real", produces = MediaType.IMAGE_JPEG_VALUE, method = RequestMethod.POST)
- @ApiOperation(value = "实名认证", notes = "保存用户实名信息", httpMethod = "POST")
- public Response<UserRealDto> real(@RequestParam("file") MultipartFile multipartFile) {
- if (multipartFile.isEmpty()) {
- throw new ParameterException("上传文件为空");
- }
- String contentType = multipartFile.getContentType();
- if (!contentType.contains("")) {
- throw new ParameterException("文件类型错误");
- }
- User user = (User) shiroHelp.getLoginUser();
- UserRealDto dto = new UserRealDto();
-
- String file = UUID.randomUUID().toString();
- try {
- File dest = new File(localPath + File.separator+file);
- multipartFile.transferTo(dest);
- dto.setPhoto(webUrl+file);
- usersService.edit(User.builder()
- .id(user.getId())
- .realAddress(dto.getAddress())
- .realName(dto.getName())
- .realIdentity(dto.getIdentity())
- .realPhoto(dto.getPhoto())
- .build());
- return ResponseHelp.success(dto);
- } catch (IOException e) {
- e.printStackTrace();
- return ResponseHelp.exception(new SystemException("图片上传失败"));
- }
- }
- @RequestMapping(value = "/message", method = RequestMethod.GET)
- @ApiOperation(value = "用户站内信", notes = "用户消息列表", httpMethod = "GET")
- public Response<PageMessage<UserMessage>> message(
- @RequestParam(required = false, defaultValue = "1") int page,
- @RequestParam(required = false, defaultValue = "100") int size,
- @RequestParam(required = false) String type,
- @RequestParam(required = false) Integer read
- ) {
- User user = (User) shiroHelp.getLoginUser();
- Page<UserMessage> p = userMessageService.select(page, size, user.getId(), type, read);
- return ResponseHelp.success(p, page, size, p.getTotal());
- }
- @RequestMapping(value = "/message/read", method = RequestMethod.PUT)
- @ApiOperation(value = "读取消息", notes = "读取用户消息/全部", httpMethod = "PUT")
- public Response<Boolean> readMessage(@RequestBody @Validated MessageReadDto dto) {
- User user = (User) shiroHelp.getLoginUser();
- if (dto.getAll()){
- userMessageService.clearAll(user.getId());
- }else{
- userMessageService.clear(user.getId(), dto.getId());
- }
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/prepare", method = RequestMethod.PUT)
- @ApiOperation(value = "修改备考信息", notes = "修改用户备考信息", httpMethod = "PUT")
- public Response<Boolean> editPrepare(@RequestBody @Validated UserPrepareDto dto) {
- User entity = Transform.dtoToEntity(dto);
- User user = (User) shiroHelp.getLoginUser();
- entity.setId(user.getId());
- usersService.edit(entity);
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/prepare", method = RequestMethod.GET)
- @ApiOperation(value = "获取备考信息", notes = "获取备考信息及分布", httpMethod = "GET")
- public Response<UserPrepareDetailDto> getPrepare() {
- User user = (User) shiroHelp.getLoginUser();
- User entity = usersService.get(user.getId());
- UserPrepareDetailDto dto = Transform.convert(entity, UserPrepareDetailDto.class);
- Setting setting = settingService.getByKey(SettingKey.PREPARE_INFO);
- JSONObject value = setting.getValue();
- return ResponseHelp.success(dto);
- }
- @RequestMapping(value = "/study", method = RequestMethod.GET)
- @ApiOperation(value = "获取学习记录", notes = "获取选择那天的做题信息", httpMethod = "GET")
- public Response<UserStudyDayDto> studyTime(
- @RequestParam(required = false) String date
- ) {
- User user = (User) shiroHelp.getLoginUser();
- Date day;
- try {
- day = DateFormat.getDateInstance().parse(date);
- } catch (ParseException e) {
- throw new ParameterException("日期格式错误");
- }
- Date endDay = Tools.addDate(day, 1);
- String startTime = day.toString();
- String endTime = endDay.toString();
- UserStudyDayDto dto = new UserStudyDayDto();
- List<ExerciseStruct> p = exerciseStructService.main();
- Map<String, String> m = new HashMap<>();
- for (ExerciseStruct struct : p){
- if (struct.getExtend() == null || struct.getExtend().isEmpty()) continue;
- m.put(struct.getExtend(), struct.getTitleZh() + (struct.getTitleEn().isEmpty() ? "":" "+struct.getTitleEn()));
- }
-
- Integer total = usersService.count();
-
- Integer exerciseTime = 0;
- Integer exerciseQuestion = 0;
- List<UserExerciseExtendDto> exerciseList = new ArrayList<>();
- List<UserStudyStatRelation> typeList = userReportService.statGroupExerciseType(user.getId(), startTime, endTime);
- for(UserStudyStatRelation type:typeList){
- exerciseTime += type.getUserTime();
- exerciseQuestion += type.getUserNumber();
- exerciseList.add(new UserExerciseExtendDto(m.get(type.getModule()), type.getUserNumber(), type.getUserTime(), type.getUserCorrect()));
- }
-
- UserRankStatRelation exerciseRank = userReportService.rankExerciseByTime(user.getId(), startTime, endTime);
- exerciseRank.setTotal(total);
- dto.setExerciseTime(exerciseTime);
- dto.setExerciseQuestion(exerciseQuestion);
- dto.setExerciseList(exerciseList);
- dto.setExerciseExceed(exerciseRank);
-
- Integer examinationTime = 0;
- Integer examinationPaper = 0;
- List<UserReport> userReportList = userReportService.getByModule(user.getId(), PaperModule.EXAMINATION, startTime, endTime);
- Collection paperIds = Transform.getIds(userReportList, UserReport.class, "paperId");
- List<UserPaper> userPaperList = userPaperService.select(paperIds);
- Map userPaper = Transform.getMap(userPaperList, UserPaper.class, "id");
- List<UserPaperBaseExtendDto> examinationPaperList = new ArrayList<>(userReportList.size());
- for(UserReport report: userReportList){
- examinationTime += report.getUserTime();
- examinationPaper += 1;
- UserPaperBaseExtendDto d = Transform.convert(userPaper.get(report.getPaperId()), UserPaperBaseExtendDto.class);
- d.setReport(Transform.convert(report, UserReportExtendDto.class));
- examinationPaperList.add(d);
- }
-
- UserRankStatRelation examinationRank = userReportService.rankExaminationByTime(user.getId(), startTime, endTime);
- examinationRank.setTotal(total);
- dto.setExaminationTime(examinationTime);
- dto.setExaminationPaper(examinationPaper);
- dto.setExaminationList(examinationPaperList);
- dto.setExaminationExceed(examinationRank);
-
- Integer classTime = 0;
- Integer classCourse = 0;
- List<UserCourseRecord> userCourseRecordList = userCourseRecordService.getByTime(user.getId(), startTime, endTime);
- Collection courseIds = Transform.getIds(userCourseRecordList, UserCourseRecord.class, "courseId");
- Collection courseNoIds = Transform.getIds(userCourseRecordList, UserCourseRecord.class, "noId");
- List<ClassCourse> classCourseList = classCourseService.select(courseIds);
- Map classCourseMap = Transform.getMap(classCourseList, ClassCourse.class, "id", "title");
- List<ClassCourseNo> classCourseNoList = classCourseNoService.select(courseNoIds);
- Map classCourseNoMap = Transform.getMap(classCourseNoList, ClassCourseNo.class, "id", "content");
- List<UserCourseResultExtendDto> courseResultList = new ArrayList<>(userCourseRecordList.size());
- for(UserCourseRecord record:userCourseRecordList){
- classTime += record.getUserTime();
- classCourse += 1;
- UserCourseResultExtendDto d = Transform.convert(record, UserCourseResultExtendDto.class);
- d.setTitle((String)classCourseMap.get(record.getCourseId()));
- d.setContent((String)classCourseNoMap.get(record.getCourseNoId()));
- courseResultList.add(d);
- }
-
- UserRankStatRelation classRank = userCourseRecordService.rankByTime(user.getId(), startTime, endTime);
- classRank.setTotal(total);
- dto.setClassTime(classTime);
- dto.setClassCourse(classCourse);
- dto.setClassList(courseResultList);
- dto.setClassExceed(classRank);
- return ResponseHelp.success(dto);
- }
- @RequestMapping(value = "/study/total", method = RequestMethod.GET)
- @ApiOperation(value = "获取总学习记录", notes = "获取总学习记录", httpMethod = "GET")
- public Response<UserStudyDetailDto> studyTotalTime() {
- User user = (User) shiroHelp.getLoginUser();
- UserStudyDetailDto dto = new UserStudyDetailDto();
- dto.setCreateTime(user.getCreateTime());
- dto.setDays((int)((user.getCreateTime().getTime() - new Date().getTime()) / (1000*3600*24)));
- Integer totalTime = 0;
- Map<String, Integer> categoryMap = new HashMap<>();
-
- List<UserStudyStatRelation> moduleList = userReportService.statGroupModule(user.getId());
- for(UserStudyStatRelation module:moduleList){
-
- if (module.getModule().equals(PaperModule.EXERCISE.key)){
- continue;
- }
- Integer time = module.getUserTime();
- String key = module.getModule();
- totalTime += time;
-
- if (module.getModule().equals(PaperOrigin.COLLECT.key)
- || module.getModule().equals(PaperOrigin.ERROR.key)){
- key = "freedom";
- time += categoryMap.getOrDefault(key, 0);
- }else if (module.getModule().equals(PaperOrigin.PREVIEW.key)){
- key = PaperOrigin.EXERCISE.key;
- }
- categoryMap.put(key, time);
- }
-
- List<UserStudyStatRelation> exerciseList = userReportService.statGroupExerciseType(user.getId(), null, null);
- for(UserStudyStatRelation type:exerciseList){
- totalTime += type.getUserTime();
- categoryMap.put(type.getModule(), type.getUserTime());
- }
-
- List<UserStudyStatRelation> previewList = userReportService.statGroupExerciseType(user.getId(), null, null);
- for(UserStudyStatRelation type:previewList){
- totalTime += type.getUserTime();
- categoryMap.put(type.getModule(), type.getUserTime());
- }
-
- List<UserCourseStatRelation> recordList = userCourseRecordService.statGroupType(user.getId(), null, null);
- for (UserCourseStatRelation record : recordList){
- totalTime += record.getUserTime();
-
- Integer time = categoryMap.getOrDefault(record.getModule(), 0);
- categoryMap.put(record.getModule(), time);
- }
-
- UserSentenceStatRelation sentenceStatRelation = userSentenceRecordService.stat(user.getId(), null, null);
- if (sentenceStatRelation != null){
- Integer sentenceTime = categoryMap.getOrDefault(PaperModule.SENTENCE.key, 0);
- categoryMap.put(PaperModule.SENTENCE.key, sentenceTime + sentenceStatRelation.getUserTime());
- }
- List<ExerciseStruct> p = exerciseStructService.main();
- Map<String, String> m = new HashMap<>();
- for (ExerciseStruct struct : p){
- if (struct.getExtend() == null || struct.getExtend().isEmpty()) continue;
- m.put(struct.getExtend(), struct.getTitleZh() + (struct.getTitleEn().isEmpty() ? "":" "+struct.getTitleEn()));
- }
-
- List<UserStudyExtendDto> categorys = new ArrayList<>();
- if (categoryMap.containsKey(PaperModule.SENTENCE.key)) categorys.add(new UserStudyExtendDto(m.get(PaperModule.SENTENCE.key), categoryMap.get(PaperModule.SENTENCE.key)));
- if (categoryMap.containsKey(QuestionType.SC.key)) categorys.add(new UserStudyExtendDto(m.get(QuestionType.SC.key), categoryMap.get(QuestionType.SC.key)));
- if (categoryMap.containsKey(QuestionType.RC.key)) categorys.add(new UserStudyExtendDto(m.get(QuestionType.RC.key), categoryMap.get(QuestionType.RC.key)));
- if (categoryMap.containsKey(QuestionType.CR.key)) categorys.add(new UserStudyExtendDto(m.get(QuestionType.CR.key), categoryMap.get(QuestionType.CR.key)));
- if (categoryMap.containsKey(QuestionType.PS.key)) categorys.add(new UserStudyExtendDto(m.get(QuestionType.PS.key), categoryMap.get(QuestionType.PS.key)));
- if (categoryMap.containsKey(QuestionType.DS.key)) categorys.add(new UserStudyExtendDto(m.get(QuestionType.DS.key), categoryMap.get(QuestionType.DS.key)));
- if (categoryMap.containsKey(QuestionType.IR.key)) categorys.add(new UserStudyExtendDto(m.get(QuestionType.IR.key), categoryMap.get(QuestionType.IR.key)));
- if (categoryMap.containsKey(QuestionType.AWA.key)) categorys.add(new UserStudyExtendDto(m.get(QuestionType.AWA.key), categoryMap.get(QuestionType.AWA.key)));
- if (categoryMap.containsKey(PaperModule.EXAMINATION.key)) categorys.add(new UserStudyExtendDto("模考", categoryMap.get(PaperModule.EXAMINATION.key)));
- if (categoryMap.containsKey("freedom")) categorys.add(new UserStudyExtendDto("自由组卷", categoryMap.get("freedom")));
- dto.setTime(totalTime);
- dto.setCategorys(categorys);
- return ResponseHelp.success(dto);
- }
- @RequestMapping(value = "/data", method = RequestMethod.GET)
- @ApiOperation(value = "获取做题数据", notes = "获取做题数据", httpMethod = "GET")
- public Response<UserStudyDayDto> questionData(
- @RequestParam(required = false) String startTime,
- @RequestParam(required = false) String endTime
- ) {
- User user = (User) shiroHelp.getLoginUser();
- UserStudyDayDto dto = new UserStudyDayDto();
-
- return ResponseHelp.success(dto);
- }
- @RequestMapping(value = "/collect/add", method = RequestMethod.PUT)
- @ApiOperation(value = "添加收藏", notes = "添加收藏", httpMethod = "PUT")
- public Response<Boolean> addCollect(@RequestBody @Validated UserCollectDto dto) {
- UserCollectQuestion entity = Transform.dtoToEntity(dto);
- User user = (User) shiroHelp.getLoginUser();
- switch (QuestionModule.ValueOf(dto.getQuestionModule())){
- case BASE:
- entity.setQuestionModule(QuestionModule.BASE.key);
- QuestionNo questionNo = questionNoService.get(dto.getQuestionNoId());
- entity.setQuestionId(questionNo.getQuestionId());
- entity.setQuestionNoId(questionNo.getId());
- break;
- case SENTENCE:
- entity.setQuestionModule(QuestionModule.SENTENCE.key);
- SentenceQuestion sentenceQuestion = sentenceQuestionService.get(dto.getQuestionNoId());
- entity.setQuestionId(sentenceQuestion.getQuestionId());
- entity.setQuestionNoId(sentenceQuestion.getId());
- break;
- case TEXTBOOK:
- entity.setQuestionModule(QuestionModule.SENTENCE.key);
- TextbookQuestion textbookQuestion = textbookQuestionService.get(dto.getQuestionNoId());
- entity.setQuestionId(textbookQuestion.getQuestionId());
- entity.setQuestionNoId(textbookQuestion.getId());
- break;
- }
- entity.setUserId(user.getId());
- userCollectQuestionService.addQuestion(entity);
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/collect/delete", method = RequestMethod.DELETE)
- @ApiOperation(value = "移除收藏", notes = "移除收藏", httpMethod = "DELETE")
- public Response<Boolean> deleteCollect(String questionModule, Integer questionNoId) {
- User user = (User) shiroHelp.getLoginUser();
- Boolean result = userCollectQuestionService.deleteQuestion(user.getId(), QuestionModule.ValueOf(questionModule), questionNoId);
- return ResponseHelp.success(result);
- }
- @RequestMapping(value = "/collect/bind", method = RequestMethod.POST)
- @ApiOperation(value = "收藏组卷", notes = "收藏组卷", httpMethod = "POST")
- public Response<Boolean> bindCollect(@RequestBody @Validated UserCustomBindDto dto) {
- User user = (User) shiroHelp.getLoginUser();
- questionFlowService.makePaper(
- user.getId(),
- QuestionModule.ValueOf(dto.getQuestionModule()),
- PaperOrigin.COLLECT,
- Arrays.stream(dto.getQuestionNoIds()).collect(Collectors.toList()),
- dto.getFilterTimes()
- );
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/collect/question", method = RequestMethod.GET)
- @ApiOperation(value = "获取收藏题目列表", notes = "获取收藏题目列表", httpMethod = "GET")
- public Response<PageMessage<UserCollectQuestionDto>> listCollect(
- @RequestParam(required = false, defaultValue = "1") int page,
- @RequestParam(required = false, defaultValue = "100") int size,
- @RequestParam(required = true) String module,
- @RequestParam(required = false) String type,
- @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) {
- User user = (User) shiroHelp.getLoginUser();
- QuestionModule questionModule = QuestionModule.ValueOf(module);
- PageResult<UserCollectQuestionRelation> p = userCollectQuestionService.listQuestion(page, size, user.getId(), questionModule, QuestionType.ValueOf(type), startTime, endTime, order, DirectionStatus.ValueOf(direction));
- List<UserCollectQuestionDto> pr = Transform.convert(p, UserCollectQuestionDto.class);
-
- Collection questionIds = Transform.getIds(pr, UserCollectQuestionDto.class, "questionId");
- List<Question> questionList = questionService.select(questionIds);
- Transform.combine(pr, questionList, UserCollectQuestionDto.class, "questionId", "question", Question.class, "id", QuestionExtendDto.class);
- Collection questionNoIds = Transform.getIds(pr, UserCollectQuestionDto.class, "questionNoId");
- switch(questionModule){
- case BASE:
- List<QuestionNo> questionNoList = questionNoService.select(questionNoIds);
- Transform.combine(pr, questionNoList, UserCollectQuestionDto.class, "questionNoId", "questionNo", QuestionNo.class, "id", QuestionNoExtendDto.class);
- break;
- case SENTENCE:
- List<SentenceQuestion> sentenceQuestionList = sentenceQuestionService.select(questionNoIds);
- Transform.combine(pr, sentenceQuestionList, UserCollectQuestionDto.class, "questionNoId", "questionNo", SentenceQuestion.class, "id", QuestionNoExtendDto.class);
- break;
- case TEXTBOOK:
- List<TextbookQuestion> textbookQuestionList = textbookQuestionService.select(questionNoIds);
- Transform.combine(pr, textbookQuestionList, UserCollectQuestionDto.class, "questionNoId", "questionNo", TextbookQuestion.class, "id", QuestionNoExtendDto.class);
- break;
- }
-
- Map<Object, UserQuestionStat> stats = userQuestionService.statQuestionMap(questionIds);
- Transform.combine(pr, stats, UserCollectQuestionDto.class, "questionId", "stat");
- return ResponseHelp.success(pr, page, size, p.getTotal());
- }
- @RequestMapping(value = "/error/list", method = RequestMethod.GET)
- @ApiOperation(value = "获取错题列表", notes = "获取错题列表", httpMethod = "GET")
- public Response<PageMessage<UserQuestionErrorListDto>> listError(
- @RequestParam(required = false, defaultValue = "1") int page,
- @RequestParam(required = false, defaultValue = "100") int size,
- @RequestParam(required = true) String module,
- @RequestParam(required = false) Number category
- ) {
- User user = (User) shiroHelp.getLoginUser();
- QuestionModule questionModule = QuestionModule.ValueOf(module);
- PageResult<UserQuestion> p = userQuestionService.listError(page, size, user.getId());
- List<UserQuestionErrorListDto> pr = Transform.convert(p, UserQuestionErrorListDto.class);
-
- Collection questionIds = Transform.getIds(pr, UserQuestionErrorListDto.class, "questionId");
- List<Question> questionList = questionService.select(questionIds);
- Transform.combine(pr, questionList, UserQuestionErrorListDto.class, "questionId", "question", Question.class, "id", QuestionExtendDto.class);
- Collection questionNoIds = Transform.getIds(pr, UserQuestionErrorListDto.class, "questionNoId");
- switch(questionModule){
- case BASE:
- List<QuestionNo> questionNoList = questionNoService.select(questionNoIds);
- Transform.combine(pr, questionNoList, UserQuestionErrorListDto.class, "questionNoId", "questionNo", QuestionNo.class, "id", QuestionNoExtendDto.class);
- break;
- case SENTENCE:
- List<SentenceQuestion> sentenceQuestionList = sentenceQuestionService.select(questionNoIds);
- Transform.combine(pr, sentenceQuestionList, UserQuestionErrorListDto.class, "questionNoId", "questionNo", SentenceQuestion.class, "id", QuestionNoExtendDto.class);
- break;
- case TEXTBOOK:
- List<TextbookQuestion> textbookQuestionList = textbookQuestionService.select(questionNoIds);
- Transform.combine(pr, textbookQuestionList, UserQuestionErrorListDto.class, "questionNoId", "questionNo", TextbookQuestion.class, "id", QuestionNoExtendDto.class);
- break;
- }
- return ResponseHelp.success(pr, page, size, p.getTotal());
- }
- @RequestMapping(value = "/error/bind", method = RequestMethod.POST)
- @ApiOperation(value = "错题组卷", notes = "错题组卷", httpMethod = "POST")
- public Response<Boolean> bindError(@RequestBody @Validated UserCustomBindDto dto) {
- User user = (User) shiroHelp.getLoginUser();
- questionFlowService.makePaper(
- user.getId(),
- QuestionModule.ValueOf(dto.getQuestionModule()),
- PaperOrigin.ERROR,
- Arrays.stream(dto.getQuestionNoIds()).collect(Collectors.toList()),
- dto.getFilterTimes()
- );
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/error/clear", method = RequestMethod.POST)
- @ApiOperation(value = "错题移除", notes = "错题移除", httpMethod = "POST")
- public Response<Boolean> clearError(@RequestBody @Validated UserQuestionIdsDto dto) {
- User user = (User) shiroHelp.getLoginUser();
- List<UserQuestion> questionList = userQuestionService.select(dto.getQuestionNoIds());
- userPaperQuestionService.addRemoveError(questionList);
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/error/remove", method = RequestMethod.POST)
- @ApiOperation(value = "移除正确题", notes = "移除正确题", httpMethod = "POST")
- public Response<Boolean> removeError(@RequestBody @Validated ErrorReportDto dto) {
- User user = (User) shiroHelp.getLoginUser();
- UserReport report = userReportService.get(dto.getUserReportId());
- if (report.getIsFinish() == 0){
- throw new ParameterException("试卷未完成");
- }
- List<UserQuestion> questionList = userQuestionService.listByReport(user.getId(), dto.getUserReportId());
- userPaperQuestionService.addRemoveError(questionList);
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/note/question", method = RequestMethod.PUT)
- @ApiOperation(value = "更新笔记", notes = "更新笔记", httpMethod = "PUT")
- public Response<Boolean> updateNoteQuestion(@RequestBody @Validated UserNoteDto dto) {
- UserNoteQuestion entity = Transform.dtoToEntity(dto);
- User user = (User) shiroHelp.getLoginUser();
- entity.setUserId(user.getId());
- switch (QuestionModule.ValueOf(dto.getQuestionModule())){
- case BASE:
- entity.setQuestionModule(QuestionModule.BASE.key);
- QuestionNo questionNo = questionNoService.get(dto.getQuestionNoId());
- entity.setQuestionId(questionNo.getQuestionId());
- entity.setQuestionNoId(questionNo.getId());
- break;
- case SENTENCE:
- entity.setQuestionModule(QuestionModule.SENTENCE.key);
- SentenceQuestion sentenceQuestion = sentenceQuestionService.get(dto.getQuestionNoId());
- entity.setQuestionId(sentenceQuestion.getQuestionId());
- entity.setQuestionNoId(sentenceQuestion.getId());
- break;
- case TEXTBOOK:
- entity.setQuestionModule(QuestionModule.SENTENCE.key);
- TextbookQuestion textbookQuestion = textbookQuestionService.get(dto.getQuestionNoId());
- entity.setQuestionId(textbookQuestion.getQuestionId());
- entity.setQuestionNoId(textbookQuestion.getId());
- break;
- }
- userNoteQuestionService.update(entity);
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/note/question/list", method = RequestMethod.GET)
- @ApiOperation(value = "获取题目笔记列表", notes = "获取笔记列表", httpMethod = "GET")
- public Response<PageMessage<UserNoteQuestionDto>> listNoteQuestion(
- @RequestParam(required = false, defaultValue = "1") int page,
- @RequestParam(required = false, defaultValue = "100") int size,
- @RequestParam(required = true) String module,
- @RequestParam(required = false) String type,
- @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) {
- User user = (User) shiroHelp.getLoginUser();
- QuestionModule questionModule = QuestionModule.ValueOf(module);
- PageResult<UserNoteQuestionRelation> p = userNoteQuestionService.list(page, size, user.getId(), questionModule, QuestionType.ValueOf(type), startTime, endTime, order, DirectionStatus.ValueOf(direction));
- List<UserNoteQuestionDto> pr = Transform.convert(p, UserNoteQuestionDto.class);
-
- Collection questionIds = Transform.getIds(pr, UserNoteQuestionDto.class, "questionId");
- List<Question> questionList = questionService.select(questionIds);
- Transform.combine(pr, questionList, UserNoteQuestionDto.class, "questionId", "question", Question.class, "id", QuestionExtendDto.class);
- Collection questionNoIds = Transform.getIds(pr, UserQuestionErrorListDto.class, "questionNoId");
- switch(questionModule){
- case BASE:
- List<QuestionNo> questionNoList = questionNoService.select(questionNoIds);
- Transform.combine(pr, questionNoList, UserQuestionErrorListDto.class, "questionNoId", "questionNo", QuestionNo.class, "id", QuestionNoExtendDto.class);
- break;
- case SENTENCE:
- List<SentenceQuestion> sentenceQuestionList = sentenceQuestionService.select(questionNoIds);
- Transform.combine(pr, sentenceQuestionList, UserQuestionErrorListDto.class, "questionNoId", "questionNo", SentenceQuestion.class, "id", QuestionNoExtendDto.class);
- break;
- case TEXTBOOK:
- List<TextbookQuestion> textbookQuestionList = textbookQuestionService.select(questionNoIds);
- Transform.combine(pr, textbookQuestionList, UserQuestionErrorListDto.class, "questionNoId", "questionNo", TextbookQuestion.class, "id", QuestionNoExtendDto.class);
- break;
- }
- return ResponseHelp.success(pr, page, size, p.getTotal());
- }
- @RequestMapping(value = "/report/list", method = RequestMethod.GET)
- @ApiOperation(value = "获取报告列表", notes = "获取报告列表", httpMethod = "GET")
- public Response<PageMessage<UserPaperDto>> reportList(
- @RequestParam(required = false, defaultValue = "1") int page,
- @RequestParam(required = false, defaultValue = "100") int size,
- @RequestParam(required = true) String origin,
- @RequestParam(required = false) Integer structId,
- @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) {
- User user = (User) shiroHelp.getLoginUser();
- PaperOrigin paperOrigin = PaperOrigin.ValueOf(origin);
- PageResult<UserPaper> p = userPaperService.list(page, size, user.getId(), paperOrigin, structId, startTime, endTime, order, DirectionStatus.ValueOf(direction));
- List<UserPaperDto> pr = Transform.convert(p, UserPaperDto.class);
- Collection paperIds = Transform.getIds(p, UserPaper.class, "id");
-
- Map<Object, Collection<UserReport>> reportByPaper = userReportService.mapByPaper(paperIds);
- Transform.combine(pr, reportByPaper, UserPaperDto.class, "id", "reports", UserReportExtendDto.class);
-
- return ResponseHelp.success(pr, page, size, p.getTotal());
- }
- @RequestMapping(value = "/ask/question", method = RequestMethod.POST)
- @ApiOperation(value = "添加提问", notes = "添加提问", httpMethod = "POST")
- public Response<Boolean> addAskQuestion(@RequestBody @Validated UserAskDto dto) {
- UserAskQuestion entity = Transform.dtoToEntity(dto);
- User user = (User) shiroHelp.getLoginUser();
- entity.setUserId(user.getId());
- switch (QuestionModule.ValueOf(dto.getQuestionModule())){
- case BASE:
- entity.setQuestionModule(QuestionModule.BASE.key);
- QuestionNo questionNo = questionNoService.get(dto.getQuestionNoId());
- entity.setQuestionId(questionNo.getQuestionId());
- entity.setQuestionNoId(questionNo.getId());
- break;
- case SENTENCE:
- entity.setQuestionModule(QuestionModule.SENTENCE.key);
- SentenceQuestion sentenceQuestion = sentenceQuestionService.get(dto.getQuestionNoId());
- entity.setQuestionId(sentenceQuestion.getQuestionId());
- entity.setQuestionNoId(sentenceQuestion.getId());
- break;
- case TEXTBOOK:
- entity.setQuestionModule(QuestionModule.SENTENCE.key);
- TextbookQuestion textbookQuestion = textbookQuestionService.get(dto.getQuestionNoId());
- entity.setQuestionId(textbookQuestion.getQuestionId());
- entity.setQuestionNoId(textbookQuestion.getId());
- break;
- }
- userAskQuestionService.add(entity);
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/feedback/error/question", method = RequestMethod.POST)
- @ApiOperation(value = "添加题目勘误", notes = "添加勘误", httpMethod = "POST")
- public Response<Boolean> addFeedbackErrorQuestion(@RequestBody @Validated UserFeedbackErrorDto dto) {
- UserFeedbackError entity = Transform.dtoToEntity(dto);
- User user = (User) shiroHelp.getLoginUser();
- entity.setUserId(user.getId());
- entity.setModule(FeedbackModule.QUESTION.key);
- entity.setStatus(0);
- userFeedbackErrorService.add(entity);
- return ResponseHelp.success(true);
- }
- @RequestMapping(value = "/feedback/error/data", method = RequestMethod.POST)
- @ApiOperation(value = "添加资料勘误", notes = "添加勘误", httpMethod = "POST")
- public Response<Boolean> addFeedbackError(@RequestBody @Validated UserFeedbackErrorDto dto) {
- UserFeedbackError entity = Transform.dtoToEntity(dto);
- User user = (User) shiroHelp.getLoginUser();
- entity.setUserId(user.getId());
- entity.setModule(FeedbackModule.DATA.key);
- entity.setStatus(0);
- userFeedbackErrorService.add(entity);
- return ResponseHelp.success(true);
- }
- }
|