Jelajahi Sumber

修改错题收藏接口

小么熊🐻 2 tahun lalu
induk
melakukan
fb7148c379
29 mengubah file dengan 576 tambahan dan 226 penghapusan
  1. 61 84
      jpcj-admin/src/main/java/com/miaxis/app/controller/h5/QuestionCollectionController.java
  2. 77 83
      jpcj-admin/src/main/java/com/miaxis/app/controller/h5/QuestionWrongController.java
  3. 1 1
      jpcj-common/src/main/java/com/miaxis/common/core/domain/Response.java
  4. 20 12
      jpcj-service/src/main/java/com/miaxis/question/domain/QuestionCollection.java
  5. 3 8
      jpcj-service/src/main/java/com/miaxis/question/domain/QuestionWrong.java
  6. 13 0
      jpcj-service/src/main/java/com/miaxis/question/dto/QuestionColYunDTO.java
  7. 2 6
      jpcj-service/src/main/java/com/miaxis/question/dto/QuestionCollectionDTO.java
  8. 2 5
      jpcj-service/src/main/java/com/miaxis/question/dto/QuestionCollectionDelDTO.java
  9. 1 4
      jpcj-service/src/main/java/com/miaxis/question/dto/QuestionCollectionListDTO.java
  10. 24 0
      jpcj-service/src/main/java/com/miaxis/question/dto/QuestionCollectionYunDTO.java
  11. 22 0
      jpcj-service/src/main/java/com/miaxis/question/dto/QuestionWgYunDTO.java
  12. 2 5
      jpcj-service/src/main/java/com/miaxis/question/dto/QuestionWrongDTO.java
  13. 2 5
      jpcj-service/src/main/java/com/miaxis/question/dto/QuestionWrongDelDTO.java
  14. 1 4
      jpcj-service/src/main/java/com/miaxis/question/dto/QuestionWrongListDTO.java
  15. 28 0
      jpcj-service/src/main/java/com/miaxis/question/dto/QuestionWrongYunDTO.java
  16. 5 1
      jpcj-service/src/main/java/com/miaxis/question/mapper/QuestionCollectionMapper.java
  17. 2 0
      jpcj-service/src/main/java/com/miaxis/question/mapper/QuestionInfoMapper.java
  18. 6 1
      jpcj-service/src/main/java/com/miaxis/question/mapper/QuestionWrongMapper.java
  19. 5 1
      jpcj-service/src/main/java/com/miaxis/question/service/IQuestionCollectionService.java
  20. 3 0
      jpcj-service/src/main/java/com/miaxis/question/service/IQuestionInfoService.java
  21. 8 1
      jpcj-service/src/main/java/com/miaxis/question/service/IQuestionWrongService.java
  22. 11 0
      jpcj-service/src/main/java/com/miaxis/question/service/impl/QuestionCollectionServiceImpl.java
  23. 136 1
      jpcj-service/src/main/java/com/miaxis/question/service/impl/QuestionInfoServiceImpl.java
  24. 11 0
      jpcj-service/src/main/java/com/miaxis/question/service/impl/QuestionWrongServiceImpl.java
  25. 38 0
      jpcj-service/src/main/java/com/miaxis/question/vo/QuestionColIdDateVo.java
  26. 39 0
      jpcj-service/src/main/java/com/miaxis/question/vo/QuestionWrongIdDateVo.java
  27. 28 2
      jpcj-service/src/main/resources/mapper/question/QuestionCollectionMapper.xml
  28. 3 0
      jpcj-service/src/main/resources/mapper/question/QuestionInfoMapper.xml
  29. 22 2
      jpcj-service/src/main/resources/mapper/question/QuestionWrongMapper.xml

+ 61 - 84
jpcj-admin/src/main/java/com/miaxis/app/controller/h5/QuestionCollectionController.java

@@ -10,15 +10,15 @@ import com.miaxis.common.enums.BusinessTypeEnum;
 import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.utils.SecurityUtils;
 import com.miaxis.question.domain.QuestionCollection;
-import com.miaxis.question.dto.QuestionCollectionDTO;
-import com.miaxis.question.dto.QuestionCollectionDelDTO;
-import com.miaxis.question.dto.QuestionCollectionListDTO;
+import com.miaxis.question.dto.*;
 import com.miaxis.question.service.IQuestionCollectionService;
+import com.miaxis.question.vo.QuestionColIdDateVo;
 import io.swagger.annotations.*;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
+import java.sql.Timestamp;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -37,49 +37,6 @@ public class QuestionCollectionController extends BaseController {
     @Autowired
     private IQuestionCollectionService questionCollectionService;
 
-    /**
-     * 查询collection列表
-     */
-
-    @GetMapping("/list")
-    @ApiOperation("查询collection列表")
-    @ApiImplicitParams({
-            @ApiImplicitParam(name = "pageNum", value = "当前页码", dataType = "int", paramType = "query", required = false),
-            @ApiImplicitParam(name = "pageSize", value = "每页数据量", dataType = "int", paramType = "query", required = false),
-    })
-    public ResponsePageInfo<QuestionCollection> list(@ModelAttribute QuestionCollectionListDTO dto) {
-        dto.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
-        startPage();
-        List<QuestionCollection> list = questionCollectionService.selectQuestionCollectionList(dto);
-        return toResponsePageInfo(list);
-    }
-
-    /**
-     * 导出collection列表
-     */
-//    @PreAuthorize("@ss.hasPermi('question:collection:export')")
-//    @Log(title = "collection", businessType = BusinessTypeEnum.EXPORT)
-//    @GetMapping("/export")
-//    @ApiOperation("导出collection列表Excel")
-//    public Response<String> export(@ModelAttribute QuestionCollection questionCollection){
-//        List<QuestionCollection> list = questionCollectionService.selectQuestionCollectionList(questionCollection);
-//        ExcelUtil<QuestionCollection> util = new ExcelUtil<QuestionCollection>(QuestionCollection.class);
-//        return util.exportExcel(list, "collection");
-//    }
-
-    /**
-     * 获取collection详细信息
-     */
-//    @PreAuthorize("@ss.hasPermi('question:collection:query')")
-    @GetMapping(value = "/{id}")
-    @ApiOperation("获取collection详细信息")
-    public Response<QuestionCollection> getInfo(
-            @ApiParam(name = "id", value = "collection参数", required = true)
-            @PathVariable("id") Long id
-    ) {
-        return Response.success(questionCollectionService.getById(id));
-    }
-
     /**
      * 新增collection
      */
@@ -93,7 +50,8 @@ public class QuestionCollectionController extends BaseController {
         List<QuestionCollection> list = questionCollectionService.selectQuestionCollectionList(dto);
         long count = list.stream().filter(o -> questionCollectionDTO.getQuestionId().equals(o.getQuestionId()) && questionCollectionDTO.getKm().equals(o.getKm())).count();
         if (count > 0) {
-            throw new CustomException("该题目已收藏过");
+            Response response = new Response(200,"该题目已收藏过");
+            return response;
         }
         QuestionCollection questionCollection = new QuestionCollection();
         BeanUtils.copyProperties(questionCollectionDTO, questionCollection);
@@ -102,65 +60,68 @@ public class QuestionCollectionController extends BaseController {
     }
 
     @PostMapping("collections")
-    @ApiOperation("批量新增collection")
-    public Response<Integer> collections(@RequestBody List<QuestionCollectionDTO> list) {
+    @ApiOperation("合并本机和云端收藏")
+    public Response<Integer> collections(@RequestBody QuestionCollectionYunDTO col) {
         //查询该用户已收藏的题目列表
         QuestionCollectionListDTO dto = new QuestionCollectionListDTO();
         dto.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
         List<QuestionCollection> dblist = questionCollectionService.selectQuestionCollectionList(dto);
-        List<String> questionIds = dblist.stream().map(o -> (o.getQuestionId()+","+o.getKm())).collect(Collectors.toList());
-
+        List<String> questionIdsStr = dblist.stream().map(o -> (o.getQuestionId()+","+o.getKm())).collect(Collectors.toList());
 
         List<QuestionCollection> qlist = new ArrayList<QuestionCollection>();
-        for (QuestionCollectionDTO questionCollectionDTO : list) {
-            if (questionIds.contains(questionCollectionDTO.getQuestionId()+","+questionCollectionDTO.getKm())) {
+        for (QuestionColYunDTO colDTO : col.getCols()) {
+            if (questionIdsStr.contains(colDTO.getId()+","+col.getKm())) {
                 continue;
             }
             QuestionCollection questionCollection = new QuestionCollection();
-            BeanUtils.copyProperties(questionCollectionDTO, questionCollection);
             questionCollection.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
+            questionCollection.setKm(col.getKm());
+            questionCollection.setQuestionId(colDTO.getId());
+            Timestamp crDate = new Timestamp(colDTO.getTimestamp());
+            questionCollection.setCreateTime(crDate);
             qlist.add(questionCollection);
         }
         if (qlist.isEmpty()) {
-            throw new CustomException("选中的题目已收藏!");
+            Response response = new Response(200,"选中的题目已收藏!");
+            return response;
         }
         return toResponse(questionCollectionService.saveBatch(qlist) ? 1 : 0);
     }
 
 
-    /**
-     * 修改collection
-     */
-//    @PreAuthorize("@ss.hasPermi('question:collection:edit')")
-    @Log(title = "collection", businessType = BusinessTypeEnum.UPDATE)
-    @PutMapping
-    @ApiOperation("修改collection")
-    public Response<Integer> edit(@RequestBody QuestionCollectionDTO questionCollectionDTO) {
-        QuestionCollection questionCollection = new QuestionCollection();
-        BeanUtils.copyProperties(questionCollectionDTO, questionCollection);
-        questionCollection.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
-        return toResponse(questionCollectionService.updateById(questionCollection) ? 1 : 0);
-    }
+    @PostMapping("bakCollections")
+    @ApiOperation("备份本机收藏到云端")
+    public Response bakCollections(@RequestBody QuestionCollectionYunDTO col) {
+        //首先删除云端数据
+        Long userId = SecurityUtils.getLoginUser().getStudent().getId();
+        QueryWrapper<QuestionCollection> queryWrapper = new QueryWrapper<QuestionCollection>();
+        queryWrapper.eq("user_id",userId);
+        queryWrapper.eq("km",col.getKm());
+        questionCollectionService.remove(queryWrapper);
 
-    /**
-     * 删除collection
-     */
-    @Log(title = "collection", businessType = BusinessTypeEnum.DELETE)
-    @DeleteMapping("/{ids}")
-    @ApiOperation("删除collection")
-    public Response<Integer> remove(
-            @ApiParam(name = "ids", value = "collectionids参数", required = true)
-            @PathVariable Long[] ids
-    ) {
-        return toResponse(questionCollectionService.removeByIds(Arrays.asList(ids)) ? 1 : 0);
+        //保存上传的收藏题
+        List<QuestionCollection> qlist = new ArrayList<QuestionCollection>();
+        for (QuestionColYunDTO colDTO : col.getCols()) {
+            QuestionCollection questionCollection = new QuestionCollection();
+            questionCollection.setUserId(userId);
+            questionCollection.setKm(col.getKm());
+            questionCollection.setQuestionId(colDTO.getId());
+            Timestamp crDate = new Timestamp(colDTO.getTimestamp());
+            questionCollection.setCreateTime(crDate);
+            qlist.add(questionCollection);
+        }
+        if (qlist.isEmpty()) {
+            Response response = new Response(200,"请先收藏题目。");
+            return response;
+        }
+        return toResponse(questionCollectionService.saveBatch(qlist) ? 1 : 0);
     }
 
 
-    @Log(title = "collectionQuestion", businessType = BusinessTypeEnum.DELETE)
     @DeleteMapping("/cancel/{questionId}")
     @ApiOperation("取消收藏")
     public Response<Integer> remove(
-            @ApiParam(name = "questionId", value = "题id", required = true)
+            @ApiParam(name = "questionId", value = "题id", required = true)
             @PathVariable String questionId
     ) {
         Long userId = SecurityUtils.getLoginUser().getStudent().getId();
@@ -169,10 +130,9 @@ public class QuestionCollectionController extends BaseController {
         queryWrapper.eq("question_id", questionId);
         questionCollectionService.remove(queryWrapper);
         return Response.success();
-
     }
 
-    @Log(title = "collectionQuestion", businessType = BusinessTypeEnum.DELETE)
+
     @DeleteMapping("/cancelAll")
     @ApiOperation("清空收藏")
     public  Response<Integer> removeAll(@RequestBody QuestionCollectionDelDTO questionCollectionDelDTO){
@@ -180,11 +140,28 @@ public class QuestionCollectionController extends BaseController {
         QueryWrapper<QuestionCollection> queryWrapper = new QueryWrapper<QuestionCollection>();
         queryWrapper.eq("user_id",userId);
         queryWrapper.eq("km",questionCollectionDelDTO.getKm());
-        queryWrapper.eq("car_type",questionCollectionDelDTO.getCarType());
         questionCollectionService.remove(queryWrapper);
         return Response.success();
     }
 
 
 
+    @GetMapping("/collectionByUser")
+    @ApiOperation("恢复云端收藏到本机(根据用户获取收藏题)")
+    public Response<List<QuestionColIdDateVo>> appCollectionByUser(@ModelAttribute QuestionCollectionListDTO dto){
+        dto.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
+        List<QuestionColIdDateVo> list = questionCollectionService.selectCollectionIdByUserId(dto);
+        return Response.success(list);
+    }
+
+    @GetMapping("/collectionCountByUser")
+    @ApiOperation("根据用户获取收藏题数")
+    public Response<Integer> collectionCountByUser(@ModelAttribute QuestionCollectionListDTO dto){
+        dto.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
+        Integer count = questionCollectionService.selectCollectionCountByUserId(dto);
+        return Response.success(count);
+    }
+
+
+
 }

+ 77 - 83
jpcj-admin/src/main/java/com/miaxis/app/controller/h5/QuestionWrongController.java

@@ -1,26 +1,21 @@
 package com.miaxis.app.controller.h5;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.miaxis.common.annotation.Log;
 import com.miaxis.common.constant.Constants;
 import com.miaxis.common.core.controller.BaseController;
 import com.miaxis.common.core.domain.Response;
-import com.miaxis.common.core.page.ResponsePageInfo;
-import com.miaxis.common.enums.BusinessTypeEnum;
-import com.miaxis.common.exception.CustomException;
 import com.miaxis.common.utils.SecurityUtils;
 import com.miaxis.question.domain.QuestionWrong;
-import com.miaxis.question.dto.QuestionWrongDTO;
-import com.miaxis.question.dto.QuestionWrongDelDTO;
-import com.miaxis.question.dto.QuestionWrongListDTO;
+import com.miaxis.question.dto.*;
 import com.miaxis.question.service.IQuestionWrongService;
+import com.miaxis.question.vo.QuestionWrongIdDateVo;
 import io.swagger.annotations.*;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.ArrayList;
-import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -37,132 +32,131 @@ public class QuestionWrongController extends BaseController {
     @Autowired
     private IQuestionWrongService questionWrongService;
 
-    /**
-     * 查询wrong列表
-     */
-    @GetMapping("/list")
-    @ApiOperation("查询wrong列表")
-        @ApiImplicitParams({
-            @ApiImplicitParam(name = "pageNum",value = "当前页码" ,dataType = "int", paramType = "query", required = false),
-            @ApiImplicitParam(name = "pageSize",value = "每页数据量" , dataType = "int", paramType = "query", required = false),
-    })
-    public ResponsePageInfo<QuestionWrong> list(@ModelAttribute QuestionWrongListDTO dto){
-        startPage();
-        dto.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
-        List<QuestionWrong> list = questionWrongService.selectQuestionWrongList(dto);
-        return toResponsePageInfo(list);
-    }
-
-
-
-    /**
-     * 获取wrong详细信息
-     */
-    @GetMapping(value = "/{id}")
-    @ApiOperation("获取wrong详细信息")
-    public Response<QuestionWrong> getInfo(
-            @ApiParam(name = "id", value = "wrong参数", required = true)
-            @PathVariable("id") Long id
-    ){
-        return Response.success(questionWrongService.getById(id));
-    }
 
     /**
      * 新增wrong
      */
-    @Log(title = "wrong", businessType = BusinessTypeEnum.INSERT)
     @PostMapping
     @ApiOperation("新增wrong")
-    public Response<Integer> add(@RequestBody QuestionWrongDTO questionWrongDTO){
+    public Response<Integer> add(@RequestBody QuestionWrongDTO questionWrongDTO) {
         //查询该用户已收藏的题目列表
         QuestionWrongListDTO dto = new QuestionWrongListDTO();
         dto.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
         List<QuestionWrong> list = questionWrongService.selectQuestionWrongList(dto);
-        long count = list.stream().filter(o -> questionWrongDTO.getQuestionId().equals(o.getQuestionId()) &&  questionWrongDTO.getKm().equals(o.getKm())).count();
+        long count = list.stream().filter(o -> questionWrongDTO.getQuestionId().equals(o.getQuestionId()) && questionWrongDTO.getKm().equals(o.getKm())).count();
         if (count > 0) {
-            throw new CustomException("该错已加入错题集");
+            //throw new CustomException("该错已加入错题集");
+            Response response = new Response(200, "该错已加入错题集");
+            return response;
         }
         QuestionWrong questionWrong = new QuestionWrong();
-        BeanUtils.copyProperties(questionWrongDTO,questionWrong);
+        BeanUtils.copyProperties(questionWrongDTO, questionWrong);
         questionWrong.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
         return toResponse(questionWrongService.save(questionWrong) ? 1 : 0);
     }
 
     @PostMapping("wrongs")
-    @ApiOperation("批量新增wrongs")
-    public Response<Integer> wrongs(@RequestBody List<QuestionWrongDTO> list){
+    @ApiOperation("合并本机和云端错题")
+    public Response<Integer> wrongs(@RequestBody QuestionWrongYunDTO wrong) {
         //查询该用户已收藏的题目列表
         QuestionWrongListDTO dto = new QuestionWrongListDTO();
         dto.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
         List<QuestionWrong> dblist = questionWrongService.selectQuestionWrongList(dto);
-        List<String> questionIds = dblist.stream().map(o -> o.getQuestionId()+","+o.getKm()).collect(Collectors.toList());
+        List<String> questionIdsStr = dblist.stream().map(o -> o.getQuestionId() + "," + o.getKm()).collect(Collectors.toList());
+
         List<QuestionWrong> qlist = new ArrayList<QuestionWrong>();
-        for (QuestionWrongDTO questionWrongDTO : list) {
-            if (questionIds.contains(questionWrongDTO.getQuestionId()+","+questionWrongDTO.getKm())) {
+        for (QuestionWgYunDTO wgYunDTO : wrong.getWrongs()) {
+            if (questionIdsStr.contains(wgYunDTO.getId() + "," + wrong.getKm())) {
                 continue;
             }
             QuestionWrong questionWrong = new QuestionWrong();
-            BeanUtils.copyProperties(questionWrongDTO, questionWrong);
             questionWrong.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
+            questionWrong.setKm(wrong.getKm());
+            questionWrong.setQuestionId(wgYunDTO.getId());
+            Date crDate = new Date(wgYunDTO.getTimestamp());
+            questionWrong.setCreateTime(crDate);
             qlist.add(questionWrong);
         }
-//        if (qlist.isEmpty()) {
-//            throw new CustomException("选中的错题都已收藏!");
-//        }
+        if (qlist.isEmpty()) {
+            Response response = new Response(200, "选中的错题都已添加!");
+            return response;
+        }
         return toResponse(questionWrongService.saveBatch(qlist) ? 1 : 0);
     }
 
-    /**
-     * 修改wrong
-     */
-    @Log(title = "wrong", businessType = BusinessTypeEnum.UPDATE)
-    @PutMapping
-    @ApiOperation("修改wrong")
-    public Response<Integer> edit(@RequestBody QuestionWrong questionWrong){
-        return toResponse(questionWrongService.updateById(questionWrong) ? 1 : 0);
-    }
 
-    /**
-     * 删除wrong
-     */
-    @Log(title = "wrong", businessType = BusinessTypeEnum.DELETE)
-	@DeleteMapping("/{ids}")
-    @ApiOperation("删除wrong")
-    public Response<Integer> remove(
-            @ApiParam(name = "ids", value = "wrongids参数", required = true)
-            @PathVariable Long[] ids
-    ){
-        return toResponse(questionWrongService.removeByIds(Arrays.asList(ids)) ? 1 : 0);
+    @PostMapping("bakWrongs")
+    @ApiOperation("备份本机错题到云端")
+    public Response bakWrongs(@RequestBody QuestionWrongYunDTO wrong) {
+        //首先删除云端数据
+        Long userId = SecurityUtils.getLoginUser().getStudent().getId();
+        QueryWrapper<QuestionWrong> queryWrapper = new QueryWrapper<QuestionWrong>();
+        queryWrapper.eq("user_id", userId);
+        queryWrapper.eq("km", wrong.getKm());
+        questionWrongService.remove(queryWrapper);
+
+        //保存上传的错题
+        List<QuestionWrong> qlist = new ArrayList<QuestionWrong>();
+        for (QuestionWgYunDTO wgYunDTO : wrong.getWrongs()) {
+            QuestionWrong questionWrong = new QuestionWrong();
+            questionWrong.setUserId(userId);
+            questionWrong.setKm(wrong.getKm());
+            questionWrong.setQuestionId(wgYunDTO.getId());
+            Date crDate = new Date(wgYunDTO.getTimestamp());
+            questionWrong.setCreateTime(crDate);
+            qlist.add(questionWrong);
+        }
+        if (qlist.isEmpty()) {
+            Response response = new Response(200, "该错已加入错题集(无须提示给用户)");
+            return response;
+        }
+        return toResponse(questionWrongService.saveBatch(qlist) ? 1 : 0);
     }
 
 
-    @Log(title = "wrongQuestion", businessType = BusinessTypeEnum.DELETE)
     @DeleteMapping("/cancel/{questionId}")
     @ApiOperation("删除错题")
     public Response<Integer> remove(
             @ApiParam(name = "questionId", value = "问题id", required = true)
-            @PathVariable String questionId
-    ){
+            @PathVariable Long questionId
+    ) {
         Long userId = SecurityUtils.getLoginUser().getStudent().getId();
-        QueryWrapper<QuestionWrong> queryWrapper= new QueryWrapper<QuestionWrong>();
-        queryWrapper.eq("user_id",userId);
-        queryWrapper.eq("question_id",questionId);
+        QueryWrapper<QuestionWrong> queryWrapper = new QueryWrapper<QuestionWrong>();
+        queryWrapper.eq("user_id", userId);
+        queryWrapper.eq("question_id", questionId);
         questionWrongService.remove(queryWrapper);
         return Response.success();
 
     }
 
-    @Log(title = "wrongQuestion", businessType = BusinessTypeEnum.DELETE)
     @DeleteMapping("/cancelAll")
     @ApiOperation("清空错题")
-    public  Response<Integer> removeAll(@RequestBody QuestionWrongDelDTO questionWrongDelDTO){
+    public Response<Integer> removeAll(@RequestBody QuestionWrongDelDTO questionWrongDelDTO) {
         Long userId = SecurityUtils.getLoginUser().getStudent().getId();
-        QueryWrapper<QuestionWrong> queryWrapper= new QueryWrapper<QuestionWrong>();
-        queryWrapper.eq("user_id",userId);
-        queryWrapper.eq("km",questionWrongDelDTO.getKm());
-        queryWrapper.eq("car_type",questionWrongDelDTO.getCarType());
+        QueryWrapper<QuestionWrong> queryWrapper = new QueryWrapper<QuestionWrong>();
+        queryWrapper.eq("user_id", userId);
+        queryWrapper.eq("km", questionWrongDelDTO.getKm());
         questionWrongService.remove(queryWrapper);
         return Response.success();
     }
 
+
+    @GetMapping("/wrongByUser")
+    @ApiOperation("恢复云端错题到本机(根据用户获取错题)")
+    public Response<List<QuestionWrongIdDateVo>> appWrongByUser(@ModelAttribute QuestionWrongListDTO dto) {
+        dto.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
+        List<QuestionWrongIdDateVo> list = questionWrongService.selectWrongIdByUserId(dto);
+        return Response.success(list);
+    }
+
+
+    @GetMapping("/wrongCountByUser")
+    @ApiOperation("根据用户获取错题数")
+    public Response<Integer> wrongCountByUser(@ModelAttribute QuestionWrongListDTO dto) {
+        dto.setUserId(SecurityUtils.getLoginUser().getStudent().getId());
+        Integer count = questionWrongService.selectWrongCountByUserId(dto);
+        return Response.success(count);
+    }
+
+
 }

+ 1 - 1
jpcj-common/src/main/java/com/miaxis/common/core/domain/Response.java

@@ -42,7 +42,7 @@ public class Response<T> {
         this.msg = responseEnum.getMessage();
     }
 
-    private Response(Integer code,String msg){
+    public Response(Integer code, String msg){
         this.code = code;
         this.msg = msg;
     }

+ 20 - 12
jpcj-service/src/main/java/com/miaxis/question/domain/QuestionCollection.java

@@ -1,13 +1,17 @@
 package com.miaxis.question.domain;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.miaxis.common.annotation.Excel;
 import com.miaxis.common.core.domain.BaseBusinessEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.sql.Timestamp;
+
 /**
  * collection对象 question_collection
  *
@@ -17,12 +21,12 @@ import lombok.Data;
 @Data
 @TableName("question_collection")
 @ApiModel(value = "QuestionCollection", description = "collection对象 question_collection")
-public class QuestionCollection extends BaseBusinessEntity {
+public class QuestionCollection  {
     private static final long serialVersionUID = 1L;
 
     /** 主键 */
-//    @TableId(value = "id")
-//    @ApiModelProperty(value = "主键")
+    @TableId(value = "id")
+    @ApiModelProperty(value = "主键")
     private Long id;
 
     /** 用户ID */
@@ -37,16 +41,20 @@ public class QuestionCollection extends BaseBusinessEntity {
     @ApiModelProperty(value = "题目ID")
     private Long questionId;
 
-
     /** 科目 */
     @Excel(name = "科目")
     @TableField("km")
-    @ApiModelProperty(value = "考试科目(科目一、科目二、科目三、科目四)")
-    private String km;
-
-    /** 车型 */
-    @Excel(name = "车型")
-    @TableField("car_type")
-    @ApiModelProperty(value = "车型(小车 、客车、货车、摩托车)")
-    private String carType;
+    @ApiModelProperty(value = "考试科目(1、2、3、4)")
+    private Integer km;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间"  ,hidden = true)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS")
+    private Timestamp createTime;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss.SSS" )
+    @ApiModelProperty(value = "更新时间" ,hidden = true)
+    private Timestamp updateTime;
+
 }

+ 3 - 8
jpcj-service/src/main/java/com/miaxis/question/domain/QuestionWrong.java

@@ -42,14 +42,9 @@ public class QuestionWrong extends BaseBusinessEntity {
     /** 科目 */
     @Excel(name = "科目")
     @TableField("km")
-    @ApiModelProperty(value = "考试科目(科目一、科目二、科目三、科目四)")
-    private String km;
-
-    /** 车型 */
-    @Excel(name = "车型")
-    @TableField("car_type")
-    @ApiModelProperty(value = "车型(小车 、客车、货车、摩托车)")
-    private String carType;
+    @ApiModelProperty(value = "考试科目(1、2、3、4)")
+    private Integer km;
+
 
 
 }

+ 13 - 0
jpcj-service/src/main/java/com/miaxis/question/dto/QuestionColYunDTO.java

@@ -0,0 +1,13 @@
+package com.miaxis.question.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class QuestionColYunDTO {
+
+    @ApiModelProperty(value = "题目ID", required = true, example = "1")
+    private Long id;
+    @ApiModelProperty(value = "时间戳(收藏时间)", required = true, example = "1680249607321")
+    private Long timestamp;
+}

+ 2 - 6
jpcj-service/src/main/java/com/miaxis/question/dto/QuestionCollectionDTO.java

@@ -22,12 +22,8 @@ public class QuestionCollectionDTO {
     private Long questionId;
 
     /** 科目 */
-    @ApiModelProperty(value = "考试科目(科目一、科目二、科目三、科目四)",required=true)
-    private String km;
-
-    /** 车型 */
-    @ApiModelProperty(value = "车型(小车 、客车、货车、摩托车)",required=true)
-    private String carType;
+    @ApiModelProperty(value = "考试科目(1、2、3、4)",required=true)
+    private Integer km;
 
 
     /** 题目类型 */

+ 2 - 5
jpcj-service/src/main/java/com/miaxis/question/dto/QuestionCollectionDelDTO.java

@@ -15,12 +15,9 @@ public class QuestionCollectionDelDTO {
 
 
     /** 科目 */
-    @ApiModelProperty(value = "考试科目(科目一、科目二、科目三、科目四)")
-    private String km;
+    @ApiModelProperty(value = "考试科目(1、2、3、4)")
+    private Integer km;
 
-    /** 车型 */
-    @ApiModelProperty(value = "车型(小车 、客车、货车、摩托车)")
-    private String carType;
 
 
 

+ 1 - 4
jpcj-service/src/main/java/com/miaxis/question/dto/QuestionCollectionListDTO.java

@@ -25,9 +25,6 @@ public class QuestionCollectionListDTO extends BaseBusinessEntity {
 
     /** 科目 */
     @ApiModelProperty(value = "考试科目(科目一、科目二、科目三、科目四)")
-    private String km;
+    private Integer km;
 
-    /** 车型 */
-    @ApiModelProperty(value = "车型(小车 、客车、货车、摩托车)")
-    private String carType;
 }

+ 24 - 0
jpcj-service/src/main/java/com/miaxis/question/dto/QuestionCollectionYunDTO.java

@@ -0,0 +1,24 @@
+package com.miaxis.question.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+
+@Data
+public class QuestionCollectionYunDTO {
+
+
+    @ApiModelProperty(value = "题目ID", required = true)
+    private List<QuestionColYunDTO> cols;
+
+    /**
+     * 科目
+     */
+    @ApiModelProperty(value = "考试科目(1、2、3、4)", required = true, example = "1")
+    private Integer km;
+
+
+
+}

+ 22 - 0
jpcj-service/src/main/java/com/miaxis/question/dto/QuestionWgYunDTO.java

@@ -0,0 +1,22 @@
+package com.miaxis.question.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * wrong对象 question_wrong
+ *
+ * @author miaxis
+ * @date 2021-08-19
+ */
+@Data
+public class QuestionWgYunDTO {
+
+
+    @ApiModelProperty(value = "题目ID", required = true, example = "1")
+    private Long id;
+    @ApiModelProperty(value = "时间戳(做错时间)", required = true, example = "1680249607000")
+    private Long timestamp;
+
+
+}

+ 2 - 5
jpcj-service/src/main/java/com/miaxis/question/dto/QuestionWrongDTO.java

@@ -23,11 +23,8 @@ public class QuestionWrongDTO {
     private Long questionId;
 
     /** 科目 */
-    @ApiModelProperty(value = "考试科目(科目一、科目二、科目三、科目四)",required=true)
-    private String km;
+    @ApiModelProperty(value = "考试科目(1、2、3、4)",required=true)
+    private Integer km;
 
-    /** 车型 */
-    @ApiModelProperty(value = "车型(小车 、客车、货车、摩托车)",required=true)
-    private String carType;
 
 }

+ 2 - 5
jpcj-service/src/main/java/com/miaxis/question/dto/QuestionWrongDelDTO.java

@@ -15,12 +15,9 @@ public class QuestionWrongDelDTO {
 
 
     /** 科目 */
-    @ApiModelProperty(value = "考试科目(科目一、科目二、科目三、科目四)")
-    private String km;
+    @ApiModelProperty(value = "考试科目(1、2、3、4)")
+    private Integer km;
 
-    /** 车型 */
-    @ApiModelProperty(value = "车型(小车 、客车、货车、摩托车)")
-    private String carType;
 
 
 

+ 1 - 4
jpcj-service/src/main/java/com/miaxis/question/dto/QuestionWrongListDTO.java

@@ -22,11 +22,8 @@ public class QuestionWrongListDTO extends BaseBusinessEntity {
 
     /** 科目 */
     @ApiModelProperty(value = "考试科目(科目一、科目二、科目三、科目四)")
-    private String km;
+    private Integer km;
 
-    /** 车型 */
-    @ApiModelProperty(value = "车型(小车 、客车、货车、摩托车)")
-    private String carType;
 
 
 

+ 28 - 0
jpcj-service/src/main/java/com/miaxis/question/dto/QuestionWrongYunDTO.java

@@ -0,0 +1,28 @@
+package com.miaxis.question.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * wrong对象 question_wrong
+ *
+ * @author miaxis
+ * @date 2021-08-19
+ */
+@Data
+public class QuestionWrongYunDTO {
+
+
+    @ApiModelProperty(value = "题目ID", required = true)
+    private List<QuestionWgYunDTO> wrongs;
+
+    /**
+     * 科目
+     */
+    @ApiModelProperty(value = "考试科目(1、2、3、4)", required = true, example = "1")
+    private Integer km;
+
+
+}

+ 5 - 1
jpcj-service/src/main/java/com/miaxis/question/mapper/QuestionCollectionMapper.java

@@ -4,6 +4,7 @@ package com.miaxis.question.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.miaxis.question.domain.QuestionCollection;
 import com.miaxis.question.dto.QuestionCollectionListDTO;
+import com.miaxis.question.vo.QuestionColIdDateVo;
 
 import java.util.List;
 
@@ -20,6 +21,9 @@ public interface QuestionCollectionMapper extends BaseMapper<QuestionCollection>
      * @param questionCollection collection
      * @return collection集合
      */
-    public List<QuestionCollection> selectQuestionCollectionList(QuestionCollectionListDTO questionCollection);
+    List<QuestionCollection> selectQuestionCollectionList(QuestionCollectionListDTO questionCollection);
 
+    List<QuestionColIdDateVo> selectCollectionIdByUserId(QuestionCollectionListDTO dto);
+
+    Integer selectCollectionCountByUserId(QuestionCollectionListDTO dto);
 }

+ 2 - 0
jpcj-service/src/main/java/com/miaxis/question/mapper/QuestionInfoMapper.java

@@ -63,4 +63,6 @@ public interface QuestionInfoMapper extends BaseMapper<QuestionInfo> {
     List<QuestionInfo> selectQuestionInfoListByYdtIds(Long[] ids);
 
     List<QuestionInfo> selectMiQuestionInfoList(QuestionInfoMiDTO questionInfoMiDTO);
+
+    List<QuestionInfo> selectTestK14QuestionInfoList(String sql);
 }

+ 6 - 1
jpcj-service/src/main/java/com/miaxis/question/mapper/QuestionWrongMapper.java

@@ -4,6 +4,7 @@ package com.miaxis.question.mapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.miaxis.question.domain.QuestionWrong;
 import com.miaxis.question.dto.QuestionWrongListDTO;
+import com.miaxis.question.vo.QuestionWrongIdDateVo;
 
 import java.util.List;
 
@@ -20,6 +21,10 @@ public interface QuestionWrongMapper extends BaseMapper<QuestionWrong> {
      * @param questionWrong wrong
      * @return wrong集合
      */
-    public List<QuestionWrong> selectQuestionWrongList(QuestionWrongListDTO questionWrong);
+    List<QuestionWrong> selectQuestionWrongList(QuestionWrongListDTO questionWrong);
+
+    List<QuestionWrongIdDateVo> selectWrongIdByUserId(QuestionWrongListDTO dto);
+
+    Integer selectWrongCountByUserId(QuestionWrongListDTO dto);
 
 }

+ 5 - 1
jpcj-service/src/main/java/com/miaxis/question/service/IQuestionCollectionService.java

@@ -4,6 +4,7 @@ package com.miaxis.question.service;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.miaxis.question.domain.QuestionCollection;
 import com.miaxis.question.dto.QuestionCollectionListDTO;
+import com.miaxis.question.vo.QuestionColIdDateVo;
 
 import java.util.List;
 
@@ -20,6 +21,9 @@ public interface IQuestionCollectionService extends IService<QuestionCollection>
      * @param questionCollection collection
      * @return collection集合
      */
-    public List<QuestionCollection> selectQuestionCollectionList(QuestionCollectionListDTO questionCollection);
+    List<QuestionCollection> selectQuestionCollectionList(QuestionCollectionListDTO questionCollection);
 
+    List<QuestionColIdDateVo> selectCollectionIdByUserId(QuestionCollectionListDTO dto);
+
+    Integer selectCollectionCountByUserId(QuestionCollectionListDTO dto);
 }

+ 3 - 0
jpcj-service/src/main/java/com/miaxis/question/service/IQuestionInfoService.java

@@ -46,6 +46,9 @@ public interface IQuestionInfoService extends IService<QuestionInfo>{
 
     List<QuestionInfo> selectTestK14QuestionInfoList(QuestionInfoTestDTO questionInfoTestDTO);
 
+    List<QuestionInfo> selectTestK14QuestionInfoList2(QuestionInfoTestDTO questionInfoTestDTO);
+
+
     List<QuestionInfo> selectMiQuestionInfoList(QuestionInfoMiDTO questionInfoMiDTO);
 }
 

+ 8 - 1
jpcj-service/src/main/java/com/miaxis/question/service/IQuestionWrongService.java

@@ -3,7 +3,9 @@ package com.miaxis.question.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.miaxis.question.domain.QuestionWrong;
+import com.miaxis.question.dto.QuestionCollectionListDTO;
 import com.miaxis.question.dto.QuestionWrongListDTO;
+import com.miaxis.question.vo.QuestionWrongIdDateVo;
 
 import java.util.List;
 
@@ -20,5 +22,10 @@ public interface IQuestionWrongService extends IService<QuestionWrong> {
      * @param questionWrong wrong
      * @return wrong集合
      */
-    public List<QuestionWrong> selectQuestionWrongList(QuestionWrongListDTO questionWrong);
+    List<QuestionWrong> selectQuestionWrongList(QuestionWrongListDTO questionWrong);
+
+    List<QuestionWrongIdDateVo> selectWrongIdByUserId(QuestionWrongListDTO dto);
+
+    Integer selectWrongCountByUserId(QuestionWrongListDTO dto);
+
 }

+ 11 - 0
jpcj-service/src/main/java/com/miaxis/question/service/impl/QuestionCollectionServiceImpl.java

@@ -6,6 +6,7 @@ import com.miaxis.question.domain.QuestionCollection;
 import com.miaxis.question.dto.QuestionCollectionListDTO;
 import com.miaxis.question.mapper.QuestionCollectionMapper;
 import com.miaxis.question.service.IQuestionCollectionService;
+import com.miaxis.question.vo.QuestionColIdDateVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -36,4 +37,14 @@ public class QuestionCollectionServiceImpl extends ServiceImpl<QuestionCollectio
 
     }
 
+    @Override
+    public List<QuestionColIdDateVo> selectCollectionIdByUserId(QuestionCollectionListDTO dto) {
+        return questionCollectionMapper.selectCollectionIdByUserId(dto);
+    }
+
+    @Override
+    public Integer selectCollectionCountByUserId(QuestionCollectionListDTO dto) {
+        return questionCollectionMapper.selectCollectionCountByUserId(dto);
+    }
+
 }

+ 136 - 1
jpcj-service/src/main/java/com/miaxis/question/service/impl/QuestionInfoServiceImpl.java

@@ -139,7 +139,7 @@ public class QuestionInfoServiceImpl extends ServiceImpl<QuestionInfoMapper, Que
     }
 
     @Override
-    public List<QuestionInfo> selectTestK14QuestionInfoList(QuestionInfoTestDTO qt) {
+    public List<QuestionInfo> selectTestK14QuestionInfoList2(QuestionInfoTestDTO qt) {
 
         int total = 100;
         if ("mtc".equals(qt.getGs())) { //如果是摩托车取题50
@@ -351,6 +351,141 @@ public class QuestionInfoServiceImpl extends ServiceImpl<QuestionInfoMapper, Que
         return allList;
     }
 
+    @Override
+    public List<QuestionInfo> selectTestK14QuestionInfoList(QuestionInfoTestDTO qt) {
+
+        if ("mtc".equals(qt.getGs())) {
+            qt.setLiceMoto("1");
+        } else if ("xc".equals(qt.getGs())) {
+            qt.setLiceCar("1");
+        } else if ("hc".equals(qt.getGs())) {
+            qt.setLiceTruck("1");
+        } else if ("kc".equals(qt.getGs())) {
+            qt.setLiceBus("1");
+        }
+        //全题库
+        List<QuestionInfo> allList = new ArrayList<QuestionInfo>();
+        TAppExamRule tAppExamRule = new TAppExamRule();
+        tAppExamRule.setKemu(qt.getSubject());
+        tAppExamRule.setGs(qt.getGs());
+        tAppExamRule.setAreacode(0);
+
+        List<TAppExamRule> list = appExamRuleService.selectTAppExamRuleList(tAppExamRule);
+        if (list.size() == 0) {
+            return allList;
+        }
+        int total = 0;
+        StringBuffer sql = new StringBuffer();
+        sql.append("SELECT * FROM (");
+
+        boolean shouldRetry = false;
+        do {
+            shouldRetry = false;
+            for (int i = 0; i < list.size(); i++) {
+                TAppExamRule er = list.get(i);
+                int easyJudge = er.getJudgeCount(); //判断
+                int easyChoice = er.getChoiceCount(); //选择
+                int easyMultiple = er.getMultipleChoiceCount(); //多选
+
+                System.out.println("i="+i);
+                System.out.println(qt.getLiceTruck()+"+"+qt.getSubject());
+                System.out.println("判断题:"+easyJudge);
+                System.out.println("选择题:"+easyChoice);
+                System.out.println("多选题:"+easyMultiple);
+
+                total = total + easyJudge + easyChoice + easyMultiple;
+
+                int difficult = er.getDifficultCount(); //难题数
+                int chapterId = er.getChapterId();
+
+                Random random = new Random();
+                int diffJudeg = 0; //判断题
+                int diffChoice = 0; //单选题
+                int diffMultiple = 0; //多选题
+
+                int randomNum = 0;
+                for (int j = 0; j < difficult; j++) {
+                    randomNum = random.nextInt(9);
+
+                    if(qt.getSubject()==1 || (qt.getSubject()==4 && diffMultiple==0)) {
+                        if (randomNum <= 2) {   //判断题
+                            diffJudeg++;
+                            easyJudge--;
+                        } else if (randomNum <= 5) {  //单选题
+                            diffChoice++;
+                            easyChoice--;
+                        } else if (randomNum <= 8) {    //多选题
+                            diffMultiple++;
+                            easyMultiple--;
+                        }
+                    } else if(qt.getSubject()==4){
+                        if (randomNum <= 4) {   //判断题
+                            diffJudeg++;
+                            easyJudge--;
+                        } else if (randomNum <= 9) {  //单选题
+                            diffChoice++;
+                            easyChoice--;
+                        }
+                    }
+
+
+                }
+
+                if(qt.getSubject()==1) {
+                    if (diffJudeg < 0 || easyJudge < 0 || diffChoice < 0 || easyChoice < 0) {
+                        shouldRetry = true;
+                        sql.setLength(0);  //清空还原
+                        sql.append("SELECT * FROM (");
+                        break;
+                    }
+                }
+                // 检查变量值是否小于0
+                if(qt.getSubject()==4) {
+                    if (diffJudeg < 0 || easyJudge < 0 || diffChoice < 0 || easyChoice < 0 || diffMultiple < 0 || easyMultiple < 0) {
+                        shouldRetry = true;
+                        sql.setLength(0);  //清空还原
+                        sql.append("SELECT * FROM (");
+                        break;
+                    }
+                }
+
+
+                if (i != 0) {
+                    sql.append(" union ");
+                }
+                //判断题
+                sql.append(" (SELECT * FROM question_info WHERE chapter_id = " + chapterId + " AND subject = " + qt.getSubject() + " AND question_type = '1' AND diff_degree in (1,2,3) ORDER BY RAND() LIMIT " + easyJudge + ") ");
+                sql.append(" union ");
+                sql.append(" (SELECT * FROM question_info WHERE chapter_id = " + chapterId + " AND subject = " + qt.getSubject() + " AND question_type = '1' AND diff_degree in (4,5) ORDER BY RAND() LIMIT " + diffJudeg + ") ");
+                sql.append(" union ");
+                //选择题
+                sql.append(" (SELECT * FROM question_info WHERE chapter_id = " + chapterId + " AND subject = " + qt.getSubject() + " AND question_type = '2' AND diff_degree in (1,2,3) ORDER BY RAND() LIMIT " + easyChoice + ") ");
+                sql.append(" union ");
+                sql.append(" (SELECT * FROM question_info WHERE chapter_id = " + chapterId + " AND subject = " + qt.getSubject() + " AND question_type = '2' AND diff_degree in (4,5) ORDER BY RAND() LIMIT " + diffChoice + ") ");
+                //多选题
+                if (qt.getSubject() == 4) {
+                    sql.append(" union ");
+                    sql.append(" (SELECT * FROM question_info WHERE chapter_id = " + chapterId + " AND subject = " + qt.getSubject() + " AND question_type = '3' AND diff_degree in (1,2,3) ORDER BY RAND() LIMIT " + easyMultiple + ") ");
+                    sql.append(" union ");
+                    sql.append(" (SELECT * FROM question_info WHERE chapter_id = " + chapterId + " AND subject = " + qt.getSubject() + " AND question_type = '3' AND diff_degree in (4,5) ORDER BY RAND() LIMIT " + diffMultiple + ") ");
+                }
+            }
+
+        } while (shouldRetry);
+
+        sql.append(" ) as db");
+        System.out.println(sql.toString());
+        allList = questionInfoMapper.selectTestK14QuestionInfoList(sql.toString());
+        if (allList.size() == total) {
+            return allList;
+        } else {
+            new CustomException("模拟考试取题出错,请重试。");
+            return null;
+        }
+
+    }
+
+
     @Override
     public List<QuestionInfo> selectMiQuestionInfoList(QuestionInfoMiDTO questionInfoMiDTO) {
         return questionInfoMapper.selectMiQuestionInfoList(questionInfoMiDTO);

+ 11 - 0
jpcj-service/src/main/java/com/miaxis/question/service/impl/QuestionWrongServiceImpl.java

@@ -5,6 +5,7 @@ import com.miaxis.question.domain.QuestionWrong;
 import com.miaxis.question.dto.QuestionWrongListDTO;
 import com.miaxis.question.mapper.QuestionWrongMapper;
 import com.miaxis.question.service.IQuestionWrongService;
+import com.miaxis.question.vo.QuestionWrongIdDateVo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -32,4 +33,14 @@ public class QuestionWrongServiceImpl extends ServiceImpl<QuestionWrongMapper, Q
     public List<QuestionWrong> selectQuestionWrongList(QuestionWrongListDTO questionWrong){
         return questionWrongMapper.selectQuestionWrongList(questionWrong);
     }
+
+    @Override
+    public List<QuestionWrongIdDateVo> selectWrongIdByUserId(QuestionWrongListDTO dto) {
+        return questionWrongMapper.selectWrongIdByUserId(dto);
+    }
+
+    @Override
+    public Integer selectWrongCountByUserId(QuestionWrongListDTO dto) {
+        return questionWrongMapper.selectWrongCountByUserId(dto);
+    }
 }

+ 38 - 0
jpcj-service/src/main/java/com/miaxis/question/vo/QuestionColIdDateVo.java

@@ -0,0 +1,38 @@
+package com.miaxis.question.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.sql.Timestamp;
+
+@ApiModel(value = "QuestionColIdDateVo", description = "收藏题返回ID与时间")
+public class QuestionColIdDateVo {
+
+
+
+    @ApiModelProperty(value = "分类题(包含科一到科四)")
+    private Long id;
+
+    private transient Timestamp createTime;
+
+    @ApiModelProperty(value = "时间戳(收藏时间)",name = "timestamp")
+    public long getTimestamp() {
+        if (createTime != null) {
+            return createTime.getTime();// 将日期类型转换为长整型时间戳
+        }
+        return 0;
+    }
+
+
+    public void setCreateTime(Timestamp createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+}

+ 39 - 0
jpcj-service/src/main/java/com/miaxis/question/vo/QuestionWrongIdDateVo.java

@@ -0,0 +1,39 @@
+package com.miaxis.question.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+
+import java.sql.Timestamp;
+
+@ApiModel(value = "QuestionWrongIdDateVo", description = "错题返回ID与时间")
+public class QuestionWrongIdDateVo {
+
+
+
+    @ApiModelProperty(value = "分类题(包含科一到科四)")
+    private Long id;
+
+    private transient Timestamp createTime;
+
+    @ApiModelProperty(value = "时间戳(做错时间)",name = "timestamp")
+    public long getTimestamp() {
+        if (createTime != null) {
+            return createTime.getTime();// 将日期类型转换为长整型时间戳
+        }
+        return 0;
+    }
+
+
+    public void setCreateTime(Timestamp createTime) {
+        this.createTime = createTime;
+    }
+
+    public Long getId() {
+        return id;
+    }
+
+    public void setId(Long id) {
+        this.id = id;
+    }
+
+}

+ 28 - 2
jpcj-service/src/main/resources/mapper/question/QuestionCollectionMapper.xml

@@ -20,10 +20,36 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectQuestionCollectionVo"/>
         <where>
             <if test="userId != null and userId !='' "> and user_id = #{userId}</if>
-            <if test="questionId != null and questionId !=''  "> and question_id = #{questionId}</if>
             <if test="km != null and km !='' "> and km = #{km}</if>
-            <if test="carType != null and carType !='' "> and car_type = #{carType}</if>
         </where>
+        order by create_time asc
     </select>
 
+
+
+
+    <select id="selectCollectionIdByUserId" resultType="com.miaxis.question.vo.QuestionColIdDateVo">
+
+        select q1.id,q2.create_time from question_info q1 join question_collection q2 on q1.id = q2.question_id
+        <where>
+            <if test="userId != null and userId !='' "> and q2.user_id = #{userId}</if>
+            <if test="km != null and km!='' "> and q2.km = #{km}</if>
+        </where>
+        order by q2.create_time asc
+
+    </select>
+
+
+
+    <select id="selectCollectionCountByUserId" resultType="java.lang.Integer">
+
+        select count(1) from question_info q1 join question_collection q2 on q1.id = q2.question_id
+        <where>
+            <if test="userId != null and userId !='' "> and q2.user_id = #{userId}</if>
+            <if test="km != null and km!='' "> and q2.km = #{km}</if>
+        </where>
+
+    </select>
+
+
 </mapper>

+ 3 - 0
jpcj-service/src/main/resources/mapper/question/QuestionInfoMapper.xml

@@ -453,6 +453,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 
     </select>
 
+    <select id="selectTestK14QuestionInfoList" resultType="com.miaxis.question.domain.QuestionInfo">
+        ${sql}
+    </select>
 
 
 

+ 22 - 2
jpcj-service/src/main/resources/mapper/question/QuestionWrongMapper.xml

@@ -20,10 +20,30 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <include refid="selectQuestionWrongVo"/>
         <where>
             <if test="userId != null and userId !='' "> and user_id = #{userId}</if>
-            <if test="questionId != null and questionId != '' "> and question_id = #{questionId}</if>
             <if test="km != null and km!='' "> and km = #{km}</if>
-            <if test="carType != null and carType !='' "> and car_type = #{carType}</if>
         </where>
     </select>
 
+
+
+    <select id="selectWrongIdByUserId" resultType="com.miaxis.question.vo.QuestionWrongIdDateVo">
+
+        select q1.id,q2.create_time from question_info q1 join question_wrong q2 on q1.id = q2.question_id
+        <where>
+            <if test="userId != null and userId !='' "> and q2.user_id = #{userId}</if>
+            <if test="km != null and km!='' "> and q2.km = #{km}</if>
+        </where>
+        order by q2.create_time
+    </select>
+
+    <select id="selectWrongCountByUserId" resultType="int">
+
+        select count(1) from question_info q1 join question_wrong q2 on q1.id = q2.question_id
+        <where>
+            <if test="userId != null and userId !='' "> and q2.user_id = #{userId}</if>
+            <if test="km != null and km!='' "> and q2.km = #{km}</if>
+        </where>
+
+    </select>
+
 </mapper>