Selaa lähdekoodia

Merge branch 'dev' of http://192.168.1.245:11111/jinjilong/onlineEducation-fwd into dev

honorfire 7 kuukautta sitten
vanhempi
sitoutus
db891dd100
50 muutettua tiedostoa jossa 634 lisäystä ja 242 poistoa
  1. 2 8
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/CourseNotesController.java
  2. 2 1
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/MinioController.java
  3. 4 4
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/CourseNotes.java
  4. 75 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/CourseNotesVo.java
  5. 5 0
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/CourseNotesMapper.java
  6. 28 1
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/CourseNotesMapper.xml
  7. 5 13
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/CourseNotesAddParam.java
  8. 4 12
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/CourseNotesEditParam.java
  9. 6 2
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/CourseNotesPageParam.java
  10. 2 2
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/CourseNotesService.java
  11. 45 39
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/CourseNotesServiceImpl.java
  12. 24 18
      snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/util/MinioUtil.java
  13. 13 15
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/controller/admin/EducationController.java
  14. 11 13
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/controller/admin/ExamPaperAnswerController.java
  15. 11 13
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/controller/admin/ExamPaperController.java
  16. 17 28
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/controller/admin/QuestionController.java
  17. 11 16
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/controller/admin/TaskController.java
  18. 29 0
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/domain/CourseChapterPaper.java
  19. 11 1
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/domain/ExamPaper.java
  20. 58 0
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/domain/ExamPaperAnswer.java
  21. 1 0
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/domain/enums/ExamPaperTypeEnum.java
  22. 13 0
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/CourseChapterPaperMapper.java
  23. 2 1
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/ExamPaperAnswerMapper.java
  24. 1 1
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/ExamPaperMapper.java
  25. 2 1
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/QuestionMapper.java
  26. 3 1
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/SubjectMapper.java
  27. 3 1
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/TaskExamMapper.java
  28. 37 0
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/CourseChapterPaperMapper.xml
  29. 2 2
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/ExamPaperAnswerMapper.xml
  30. 3 2
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/ExamPaperMapper.xml
  31. 11 10
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/QuestionMapper.xml
  32. 7 7
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/SubjectMapper.xml
  33. 2 2
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/TaskExamMapper.xml
  34. 13 0
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/CourseChapterPaperService.java
  35. 2 1
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/ExamPaperAnswerService.java
  36. 1 1
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/ExamPaperService.java
  37. 2 1
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/QuestionService.java
  38. 2 1
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/SubjectService.java
  39. 2 1
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/TaskExamService.java
  40. 38 0
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/CourseChapterPaperServiceImpl.java
  41. 5 3
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/ExamPaperAnswerServiceImpl.java
  42. 4 3
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/ExamPaperServiceImpl.java
  43. 6 4
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/QuestionServiceImpl.java
  44. 6 4
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/SubjectServiceImpl.java
  45. 6 4
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/TaskExamServiceImpl.java
  46. 20 0
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/viewmodel/admin/education/SubjectPageRequestVM.java
  47. 20 0
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/viewmodel/admin/paper/ExamPaperAnswerPageRequestVM.java
  48. 19 0
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/viewmodel/admin/question/QuestionPageRequestVM.java
  49. 20 0
      snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/viewmodel/admin/task/TaskPageRequestVM.java
  50. 18 5
      snowy-server/snowy-gateway-app/pom.xml

+ 2 - 8
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/CourseNotesController.java

@@ -12,7 +12,6 @@
  */
 package vip.xiaonuo.disk.controller;
 
-import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
 import com.github.xiaoymin.knife4j.annotations.ApiSupport;
@@ -27,6 +26,7 @@ import vip.xiaonuo.common.annotation.CommonLog;
 import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.common.pojo.CommonValidList;
 import vip.xiaonuo.disk.domain.CourseNotes;
+import vip.xiaonuo.disk.domain.CourseNotesVo;
 import vip.xiaonuo.disk.param.CourseNotesAddParam;
 import vip.xiaonuo.disk.param.CourseNotesEditParam;
 import vip.xiaonuo.disk.param.CourseNotesIdParam;
@@ -60,9 +60,8 @@ public class CourseNotesController {
      */
     @ApiOperationSupport(order = 1)
     @ApiOperation("获取课程笔记表分页")
-    @SaCheckPermission("/disk/courseNotes/page")
     @GetMapping("/disk/courseNotes/page")
-    public CommonResult<Page<CourseNotes>> page(CourseNotesPageParam courseNotesPageParam) {
+    public CommonResult<Page<CourseNotesVo>> page(CourseNotesPageParam courseNotesPageParam) {
         return CommonResult.data(courseNotesService.page(courseNotesPageParam));
     }
 
@@ -75,7 +74,6 @@ public class CourseNotesController {
     @ApiOperationSupport(order = 2)
     @ApiOperation("添加课程笔记表")
     @CommonLog("添加课程笔记表")
-    @SaCheckPermission("/disk/courseNotes/add")
     @PostMapping("/disk/courseNotes/add")
     public CommonResult<String> add(@RequestBody @Valid CourseNotesAddParam courseNotesAddParam) {
         courseNotesService.add(courseNotesAddParam);
@@ -91,7 +89,6 @@ public class CourseNotesController {
     @ApiOperationSupport(order = 3)
     @ApiOperation("编辑课程笔记表")
     @CommonLog("编辑课程笔记表")
-    @SaCheckPermission("/disk/courseNotes/edit")
     @PostMapping("/disk/courseNotes/edit")
     public CommonResult<String> edit(@RequestBody @Valid CourseNotesEditParam courseNotesEditParam) {
         courseNotesService.edit(courseNotesEditParam);
@@ -107,7 +104,6 @@ public class CourseNotesController {
     @ApiOperationSupport(order = 4)
     @ApiOperation("删除课程笔记表")
     @CommonLog("删除课程笔记表")
-    @SaCheckPermission("/disk/courseNotes/delete")
     @PostMapping("/disk/courseNotes/delete")
     public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
                                                    CommonValidList<CourseNotesIdParam> courseNotesIdParamList) {
@@ -123,7 +119,6 @@ public class CourseNotesController {
      */
     @ApiOperationSupport(order = 5)
     @ApiOperation("获取课程笔记表详情")
-    @SaCheckPermission("/disk/courseNotes/detail")
     @GetMapping("/disk/courseNotes/detail")
     public CommonResult<CourseNotes> detail(@Valid CourseNotesIdParam courseNotesIdParam) {
         return CommonResult.data(courseNotesService.detail(courseNotesIdParam));
@@ -137,7 +132,6 @@ public class CourseNotesController {
      */
     @ApiOperationSupport(order = 5)
     @ApiOperation("获取课程笔记表详情")
-    @SaCheckPermission("/disk/courseNotes/getByChapterId")
     @GetMapping("/disk/courseNotes/getByChapterId")
     public CommonResult<CourseNotes> getByChapterId(@Valid CourseNotesAddParam courseNotesAddParam) {
         return CommonResult.data(courseNotesService.getByChapterId(courseNotesAddParam));

+ 2 - 1
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/controller/MinioController.java

@@ -13,6 +13,7 @@ import vip.xiaonuo.disk.util.MinioUtil;
 
 import java.io.IOException;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @author 吴浩炼
@@ -43,7 +44,7 @@ public class MinioController {
     }
 
     @PostMapping("/merge")
-    public ResponseEntity<Boolean> merge(@RequestParam String md5, @RequestParam Integer chunkTotal, @RequestParam String fileSuffix,@RequestParam String fileName, @RequestParam long fileSize) {
+    public ResponseEntity<Map<String,Object>> merge(@RequestParam String md5, @RequestParam Integer chunkTotal, @RequestParam String fileSuffix, @RequestParam String fileName, @RequestParam long fileSize) {
         return ResponseEntity.ok(minioUtil.merge(md5, chunkTotal, fileSuffix,fileSize,fileName));
     }
 

+ 4 - 4
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/CourseNotes.java

@@ -16,7 +16,7 @@ import com.baomidou.mybatisplus.annotation.*;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
-import java.math.BigDecimal;
+
 import java.util.Date;
 
 /**
@@ -43,9 +43,6 @@ public class CourseNotes {
     @ApiModelProperty(value = "章节主键ID", position = 3)
     private String chapterId;
 
-    /** 笔记本ID */
-    @ApiModelProperty(value = "笔记本ID", position = 4)
-    private String notebookId;
 
     /** 笔记内容 */
     @ApiModelProperty(value = "笔记内容", position = 5)
@@ -76,4 +73,7 @@ public class CourseNotes {
     @ApiModelProperty(value = "修改用户", position = 10)
     @TableField(fill = FieldFill.UPDATE)
     private String updateUser;
+
+    @ApiModelProperty(value = "课程id", position = 10)
+    private String courseId;
 }

+ 75 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/domain/CourseNotesVo.java

@@ -0,0 +1,75 @@
+package vip.xiaonuo.disk.domain;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.Date;
+
+@Getter
+@Setter
+public class CourseNotesVo {
+
+    /** 主键ID */
+    @TableId
+    @ApiModelProperty(value = "主键ID", position = 1)
+    private String noteId;
+
+    /** 用户ID */
+    @ApiModelProperty(value = "用户ID", position = 2)
+    private String userId;
+
+    @ApiModelProperty(value = "用户名", position = 2)
+    private String userName;
+
+    /** 章节主键ID */
+    @ApiModelProperty(value = "章节主键ID", position = 3)
+    private String chapterId;
+
+    @ApiModelProperty(value = "章节名称", position = 3)
+    private String chapterName;
+
+
+    /** 笔记内容 */
+    @ApiModelProperty(value = "笔记内容", position = 5)
+    private String noteContent;
+
+    /** 删除状态 */
+    @ApiModelProperty(value = "删除状态", position = 6)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 7)
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 8)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 9)
+    @TableField(fill = FieldFill.UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 10)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+
+    @ApiModelProperty(value = "课程id", position = 10)
+    private String courseId;
+
+    private String hourString;
+
+}

+ 5 - 0
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/CourseNotesMapper.java

@@ -13,7 +13,11 @@
 package vip.xiaonuo.disk.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
 import vip.xiaonuo.disk.domain.CourseNotes;
+import vip.xiaonuo.disk.domain.CourseNotesVo;
+import vip.xiaonuo.disk.param.CourseNotesPageParam;
 
 /**
  * 课程笔记表Mapper接口
@@ -22,4 +26,5 @@ import vip.xiaonuo.disk.domain.CourseNotes;
  * @date  2025/07/01 18:56
  **/
 public interface CourseNotesMapper extends BaseMapper<CourseNotes> {
+    Page<CourseNotesVo> page(@Param("page") Page<Object> objectPage, @Param("courseNotesPageParam") CourseNotesPageParam courseNotesPageParam);
 }

+ 28 - 1
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/mapper/mapping/CourseNotesMapper.xml

@@ -1,5 +1,32 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="vip.xiaonuo.disk.mapper.CourseNotesMapper">
-
+  <select id="page" resultType="vip.xiaonuo.disk.domain.CourseNotesVo">
+      SELECT
+          a.NOTE_ID noteId,
+          a.USER_ID userId,
+          a.CHAPTER_ID chapterId,
+          a.NOTE_CONTENT noteContent,
+          a.DELETE_FLAG deleteFlag,
+          a.CREATE_TIME createTime,
+          a.CREATE_USER createUser,
+          a.UPDATE_TIME updateTime,
+          a.UPDATE_USER updateUser,
+          a.COURSE_ID courseId,
+          b.name userName,
+          c.NAME chapterName
+      FROM
+          COURSE_NOTES a
+      LEFT JOIN SYS_USER b ON a.USER_ID = b.id
+      LEFT JOIN COURSE_CHAPTER c ON a.CHAPTER_ID = c.id
+     <where>
+         <if test="courseNotesPageParam.courseId != null and courseNotesPageParam.courseId != ''">
+           a.COURSE_ID = #{courseNotesPageParam.courseId}
+         </if>
+         <if test="courseNotesPageParam.chapterId != null and courseNotesPageParam.chapterId != ''">
+            and a.CHAPTER_ID = #{courseNotesPageParam.chapterId}
+         </if>
+     </where>
+    order by a.UPDATE_TIME desc
+  </select>
 </mapper>

+ 5 - 13
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/CourseNotesAddParam.java

@@ -16,11 +16,6 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
-import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
-
 /**
  * 课程笔记表添加参数
  *
@@ -31,20 +26,17 @@ import java.util.Date;
 @Setter
 public class CourseNotesAddParam {
 
-    /** 用户ID */
-    @ApiModelProperty(value = "用户ID", position = 2)
-    private String userId;
-
     /** 章节主键ID */
     @ApiModelProperty(value = "章节主键ID", position = 3)
     private String chapterId;
 
-    /** 笔记本ID */
-    @ApiModelProperty(value = "笔记本ID", position = 4)
-    private String notebookId;
-
     /** 笔记内容 */
     @ApiModelProperty(value = "笔记内容", position = 5)
     private String noteContent;
 
+    /** 课程主键id */
+    @ApiModelProperty(value = "课程主键id", position = 3)
+    private String courseId;
+
+
 }

+ 4 - 12
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/CourseNotesEditParam.java

@@ -17,9 +17,6 @@ import lombok.Getter;
 import lombok.Setter;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * 课程笔记表编辑参数
@@ -36,20 +33,15 @@ public class CourseNotesEditParam {
     @NotBlank(message = "noteId不能为空")
     private String noteId;
 
-    /** 用户ID */
-    @ApiModelProperty(value = "用户ID", position = 2)
-    private String userId;
-
-    /** 章节主键ID */
     @ApiModelProperty(value = "章节主键ID", position = 3)
     private String chapterId;
 
-    /** 笔记本ID */
-    @ApiModelProperty(value = "笔记本ID", position = 4)
-    private String notebookId;
-
     /** 笔记内容 */
     @ApiModelProperty(value = "笔记内容", position = 5)
     private String noteContent;
 
+    /** 课程主键id */
+    @ApiModelProperty(value = "课程主键id", position = 3)
+    private String courseId;
+
 }

+ 6 - 2
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/param/CourseNotesPageParam.java

@@ -15,8 +15,6 @@ package vip.xiaonuo.disk.param;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
-import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * 课程笔记表查询参数
@@ -48,4 +46,10 @@ public class CourseNotesPageParam {
     @ApiModelProperty(value = "关键词")
     private String searchKey;
 
+    /** 章节主键ID */
+    @ApiModelProperty(value = "章节主键ID", position = 3)
+    private String chapterId;
+
+    @ApiModelProperty(value = "课程id", position = 3)
+    private String courseId;
 }

+ 2 - 2
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/CourseNotesService.java

@@ -14,8 +14,8 @@ package vip.xiaonuo.disk.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
-import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.disk.domain.CourseNotes;
+import vip.xiaonuo.disk.domain.CourseNotesVo;
 import vip.xiaonuo.disk.param.CourseNotesAddParam;
 import vip.xiaonuo.disk.param.CourseNotesEditParam;
 import vip.xiaonuo.disk.param.CourseNotesIdParam;
@@ -37,7 +37,7 @@ public interface CourseNotesService extends IService<CourseNotes> {
      * @author 金吉龙
      * @date  2025/07/01 18:56
      */
-    Page<CourseNotes> page(CourseNotesPageParam courseNotesPageParam);
+    Page<CourseNotesVo> page(CourseNotesPageParam courseNotesPageParam);
 
     /**
      * 添加课程笔记表

+ 45 - 39
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/service/impl/CourseNotesServiceImpl.java

@@ -16,21 +16,17 @@ import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollStreamUtil;
 import cn.hutool.core.util.IdUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
-import vip.xiaonuo.common.enums.CommonSortOrderEnum;
 import vip.xiaonuo.common.exception.CommonException;
 import vip.xiaonuo.common.page.CommonPageRequest;
-import vip.xiaonuo.disk.domain.CourseInfo;
-import vip.xiaonuo.disk.domain.CourseNotebooks;
 import vip.xiaonuo.disk.domain.CourseNotes;
+import vip.xiaonuo.disk.domain.CourseNotesVo;
 import vip.xiaonuo.disk.mapper.CourseInfoMapper;
-import vip.xiaonuo.disk.mapper.CourseNotebooksMapper;
 import vip.xiaonuo.disk.mapper.CourseNotesMapper;
 import vip.xiaonuo.disk.param.CourseNotesAddParam;
 import vip.xiaonuo.disk.param.CourseNotesEditParam;
@@ -39,6 +35,12 @@ import vip.xiaonuo.disk.param.CourseNotesPageParam;
 import vip.xiaonuo.disk.service.CourseNotesService;
 
 import javax.annotation.Resource;
+import java.time.Duration;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.temporal.ChronoUnit;
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -57,51 +59,53 @@ public class CourseNotesServiceImpl extends ServiceImpl<CourseNotesMapper, Cours
     @Resource
     private CourseNotesMapper courseNotesMapper;
 
-    @Resource
-    private CourseNotebooksMapper courseNotebooksMapper;
 
 
     @Override
-    public Page<CourseNotes> page(CourseNotesPageParam courseNotesPageParam) {
-        QueryWrapper<CourseNotes> queryWrapper = new QueryWrapper<>();
-        if(ObjectUtil.isAllNotEmpty(courseNotesPageParam.getSortField(), courseNotesPageParam.getSortOrder())) {
-            CommonSortOrderEnum.validate(courseNotesPageParam.getSortOrder());
-            queryWrapper.orderBy(true, courseNotesPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
-                    StrUtil.toUnderlineCase(courseNotesPageParam.getSortField()));
-        } else {
-            queryWrapper.lambda().orderByAsc(CourseNotes::getNoteId);
-        }
-        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    public Page<CourseNotesVo> page(CourseNotesPageParam courseNotesPageParam) {
+        Page<CourseNotesVo> page=  courseNotesMapper.page(CommonPageRequest.defaultPage(),courseNotesPageParam);
+        page.getRecords().stream().forEach(item -> {
+            LocalDateTime currentTime = LocalDateTime.now();
+            LocalDate today = currentTime.toLocalDate();
+            LocalDateTime passTime = item.getUpdateTime().toInstant()
+                    .atZone(ZoneId.systemDefault())
+                    .toLocalDateTime();
+            LocalDate pastDate = passTime.toLocalDate();
+
+            if (passTime.toLocalDate().isEqual(today)) {
+                Duration duration=Duration.between(passTime, currentTime);
+                if (duration.toMinutes() < 60) {
+                    item.setHourString(duration.toMinutes() + "分钟前");
+                }else{
+                    item.setHourString(duration.toHours() + "小时前");
+                }
+            }else{
+                // 判断是否是昨天或两天前
+                if (pastDate.isEqual(today.minus(1, ChronoUnit.DAYS))) {
+                    item.setHourString("昨天");
+                } else if (pastDate.isEqual(today.minus(2, ChronoUnit.DAYS))) {
+                    item.setHourString("两天前");
+                } else if (pastDate.isEqual(today.minus(3, ChronoUnit.DAYS))) {
+                    item.setHourString("三天前");
+                } else {
+                    item.setHourString("更早");
+                }
+            }
+        });
+        return page;
     }
 
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void add(CourseNotesAddParam courseNotesAddParam) {
         CourseNotes courseNotes = BeanUtil.toBean(courseNotesAddParam, CourseNotes.class);
-        // 校验当前课程是否有笔记本
-        // 1.根据章节查询课程
-        CourseInfo courseInfo = courseInfoMapper.selectById(courseNotesAddParam.getChapterId());
-        if(ObjectUtil.isEmpty(courseInfo)) {
-            throw new CommonException("课程不存在,id值为:{}", courseNotesAddParam.getChapterId());
-        }
-        // 2.判断当前课程是否有笔记本
-        QueryWrapper<CourseNotebooks> queryWrapper = new QueryWrapper<>();
-        queryWrapper.lambda().eq(CourseNotebooks::getCourseId, courseInfo.getCourseId());
-        queryWrapper.lambda().eq(CourseNotebooks::getUserId, StpLoginUserUtil.getLoginUser().getId());
-        CourseNotebooks courseNotebooks = courseNotebooksMapper.selectOne(queryWrapper);
-        // 如果没有笔记本,则创建笔记本
-        if (courseNotebooks == null) {
-            CourseNotebooks newCourseNotebooks = new CourseNotebooks();
-            courseNotebooks.setUserId(StpLoginUserUtil.getLoginUser().getId()); // 用户id
-            String notebookId = IdUtil.fastSimpleUUID();
-            courseNotebooks.setNotebookId(notebookId); // 主键id
-            courseNotebooks.setCourseId(courseInfo.getCourseId()); // 课程id
-            courseNotebooksMapper.insert(newCourseNotebooks);
-            courseNotebooks.setNotebookId(notebookId);
-        }
         // 3.保存笔记信息
         courseNotes.setUserId(StpLoginUserUtil.getLoginUser().getId()); // 用户id
-        courseNotes.setNotebookId(courseNotebooks.getNotebookId()); // 笔记本id
+        courseNotes.setCreateTime(new Date());
+        courseNotes.setCreateUser(StpLoginUserUtil.getLoginUser().getId());
+        courseNotes.setUpdateTime(new Date());
+        courseNotes.setUpdateUser(StpLoginUserUtil.getLoginUser().getId());
+        courseNotes.setNoteId(IdUtil.getSnowflakeNextIdStr());
         this.save(courseNotes);
     }
 
@@ -110,6 +114,8 @@ public class CourseNotesServiceImpl extends ServiceImpl<CourseNotesMapper, Cours
     public void edit(CourseNotesEditParam courseNotesEditParam) {
         CourseNotes courseNotes = this.queryEntity(courseNotesEditParam.getNoteId());
         BeanUtil.copyProperties(courseNotesEditParam, courseNotes);
+        courseNotes.setUpdateTime(new Date());
+        courseNotes.setUpdateUser(StpLoginUserUtil.getLoginUser().getId());
         this.updateById(courseNotes);
     }
 

+ 24 - 18
snowy-plugin/snowy-plugin-disk/snowy-plugin-disk-func/src/main/java/vip/xiaonuo/disk/util/MinioUtil.java

@@ -11,6 +11,7 @@ import io.minio.errors.*;
 import io.minio.messages.DeleteError;
 import io.minio.messages.DeleteObject;
 import io.minio.messages.Item;
+import org.apache.commons.collections4.MapUtils;
 import org.apache.commons.io.IOUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
@@ -35,9 +36,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.security.InvalidKeyException;
 import java.security.NoSuchAlgorithmException;
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
+import java.util.*;
 import java.util.concurrent.ExecutorService;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
@@ -106,15 +105,11 @@ public class MinioUtil {
     public List<String> checkFilesExits(List<UploadFile> md5List) {
 
         ArrayList<String> noExitList = new ArrayList<>();
-
-
         md5List.forEach(item -> {
             try {
-
+                //根据文件名称查询userFileId
                 String fileSuffix=item.getFileSuffix().substring(1, item.getFileSuffix().length());
-
                 String fileUrl = UFOPUtils.getUploadFileUrl(item.getMd5(), fileSuffix);
-
                 logger.info("校验是否存在的文件名是: "+fileUrl);
                 minioClient.statObject(StatObjectArgs.builder().bucket(bucket).object(fileUrl).build());
             } catch (Exception e) {
@@ -249,7 +244,9 @@ public class MinioUtil {
      * @param fileSuffix
      * @return
      */
-    public Boolean merge(String md5, Integer chunkTotal, String fileSuffix,long fileSize,String fileName) {
+    public Map<String,Object> merge(String md5, Integer chunkTotal, String fileSuffix,long fileSize,String fileName) {
+        Map<String,Object> rs=new HashMap<>();
+
         fileSuffix=fileSuffix.substring(1, fileSuffix.length());
 
         String fileUrl = UFOPUtils.getUploadFileUrl(md5, fileSuffix);
@@ -262,7 +259,8 @@ public class MinioUtil {
 
         if (!missChunkIndexList.isEmpty()) { // 缺失上传分块
             logger.warn("缺失分块,缺失列表为:{},需要重新上传", missChunkIndexList);
-            return false;
+            rs.put("result", false);
+            return rs;
         }
 
         // 合并文件
@@ -284,19 +282,23 @@ public class MinioUtil {
         } catch (Exception e) {
             logger.warn("合并过程中报错:", e);
             logger.warn("合并失败...");
-            return false;
+            rs.put("result", false);
+            return rs;
         }
         logger.info("合并成功了...");
 
         String url = fileUrl;
         logger.info("插入的的url是:" + url);
-        Boolean insertResult = this.insertUrl(url, fileSize,md5,fileName);
+        Map<String,Object> map = this.insertUrl(url, fileSize,md5,fileName);
         Boolean deleteResult = this.deleteChunks(md5);
-        logger.info(insertResult.toString());
+        logger.info(map.toString());
         logger.info(deleteResult.toString());
-        if (insertResult && deleteResult) {
+        if (MapUtils.getBoolean(map, "rs") && deleteResult) {
             logger.info("插入成功了...");
-            return true;
+            String userFileId=MapUtils.getString(map, "userFileId");
+            rs.put("result", true);
+            rs.put("userFileId", userFileId);
+            return rs;
         } else {
             logger.error("插入失败...");
             UploadTask uploadTask = new UploadTask();
@@ -308,7 +310,8 @@ public class MinioUtil {
             uploadTask.setExtendName(fileSuffix);
             uploadTask.setUserId(StpLoginUserUtil.getLoginUser().getId());
             uploadTaskMapper.insert(uploadTask);
-            return false;
+            rs.put("result", false);
+            return rs;
         }
 
     }
@@ -320,7 +323,7 @@ public class MinioUtil {
      * @param url
      * @return
      */
-    public Boolean insertUrl(String url,long fileSize,String md5,String fileName) {
+    public Map<String,Object> insertUrl(String url,long fileSize,String md5,String fileName) {
         ResourceFile file = new ResourceFile(url,fileSize,3,md5, StpLoginUserUtil.getLoginUser().getId());
         resourceFileMapper.insert(file);
 
@@ -404,7 +407,10 @@ public class MinioUtil {
             }
         }
         resourceFileDealComp.parseMusicFile(qiwenFile.getExtendName(), 3, url, file.getFileId());
-        return true;
+        Map<String, Object> map = new HashMap();
+        map.put("userFileId", resourceUserFile.getUserFileId());
+        map.put("rs", true);
+        return map;
     }
 
 

+ 13 - 15
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/controller/admin/EducationController.java

@@ -1,8 +1,11 @@
 package vip.xiaonuo.exam.controller.admin;
 
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.exam.base.BaseApiController;
 import vip.xiaonuo.exam.base.RestResponse;
+import vip.xiaonuo.exam.domain.Question;
 import vip.xiaonuo.exam.domain.Subject;
 import vip.xiaonuo.exam.service.SubjectService;
 import vip.xiaonuo.exam.utility.PageInfoHelper;
@@ -28,20 +31,17 @@ public class EducationController extends BaseApiController {
     }
 
     @RequestMapping(value = "/subject/list", method = RequestMethod.POST)
-    public RestResponse<List<Subject>> list() {
-        List<Subject> subjects = subjectService.allSubject();
-        return RestResponse.ok(subjects);
+    public CommonResult<List<Subject>> list() {
+        return CommonResult.data(subjectService.allSubject());
     }
 
     @RequestMapping(value = "/subject/page", method = RequestMethod.POST)
-    public RestResponse<PageInfo<SubjectResponseVM>> pageList(@RequestBody SubjectPageRequestVM model) {
-        PageInfo<Subject> pageInfo = subjectService.page(model);
-        PageInfo<SubjectResponseVM> page = PageInfoHelper.copyMap(pageInfo, e -> modelMapper.map(e, SubjectResponseVM.class));
-        return RestResponse.ok(page);
+    public CommonResult<Page<Subject>> pageList(@RequestBody SubjectPageRequestVM model) {
+        return CommonResult.data(subjectService.page(model));
     }
 
     @RequestMapping(value = "/subject/edit", method = RequestMethod.POST)
-    public RestResponse edit(@RequestBody @Valid SubjectEditRequestVM model) {
+    public CommonResult edit(@RequestBody @Valid SubjectEditRequestVM model) {
         Subject subject = modelMapper.map(model, Subject.class);
         if (model.getId() == null) {
             subject.setDeleted(false);
@@ -49,21 +49,19 @@ public class EducationController extends BaseApiController {
         } else {
             subjectService.updateByIdFilter(subject);
         }
-        return RestResponse.ok();
+        return CommonResult.ok();
     }
 
     @RequestMapping(value = "/subject/select/{id}", method = RequestMethod.POST)
-    public RestResponse<SubjectEditRequestVM> select(@PathVariable Integer id) {
-        Subject subject = subjectService.selectById(id);
-        SubjectEditRequestVM vm = modelMapper.map(subject, SubjectEditRequestVM.class);
-        return RestResponse.ok(vm);
+    public CommonResult<Subject> select(@PathVariable Integer id) {
+        return CommonResult.data(subjectService.selectById(id));
     }
 
     @RequestMapping(value = "/subject/delete/{id}", method = RequestMethod.POST)
-    public RestResponse delete(@PathVariable Integer id) {
+    public CommonResult delete(@PathVariable Integer id) {
         Subject subject = subjectService.selectById(id);
         subject.setDeleted(true);
         subjectService.updateByIdFilter(subject);
-        return RestResponse.ok();
+        return CommonResult.ok();
     }
 }

+ 11 - 13
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/controller/admin/ExamPaperAnswerController.java

@@ -1,11 +1,13 @@
 package vip.xiaonuo.exam.controller.admin;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.PageInfo;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.exam.base.BaseApiController;
 import vip.xiaonuo.exam.base.RestResponse;
 import vip.xiaonuo.exam.domain.ExamPaperAnswer;
@@ -35,22 +37,18 @@ public class ExamPaperAnswerController extends BaseApiController {
 
 
     @RequestMapping(value = "/page", method = RequestMethod.POST)
-    public RestResponse<PageInfo<ExamPaperAnswerPageResponseVM>> pageJudgeList(@RequestBody ExamPaperAnswerPageRequestVM model) {
-        PageInfo<ExamPaperAnswer> pageInfo = examPaperAnswerService.adminPage(model);
-        PageInfo<ExamPaperAnswerPageResponseVM> page = PageInfoHelper.copyMap(pageInfo, e -> {
-            ExamPaperAnswerPageResponseVM vm = modelMapper.map(e, ExamPaperAnswerPageResponseVM.class);
+    public CommonResult<Page<ExamPaperAnswer>> pageJudgeList(@RequestBody ExamPaperAnswerPageRequestVM model) {
+        Page<ExamPaperAnswer> pageInfo = examPaperAnswerService.adminPage(model);
+        pageInfo.getRecords().forEach(vm -> {
             Subject subject = subjectService.selectById(vm.getSubjectId());
-            vm.setDoTime(ExamUtil.secondToVM(e.getDoTime()));
-            vm.setSystemScore(ExamUtil.scoreToVM(e.getSystemScore()));
-            vm.setUserScore(ExamUtil.scoreToVM(e.getUserScore()));
-            vm.setPaperScore(ExamUtil.scoreToVM(e.getPaperScore()));
+            vm.setDoTimeStr(ExamUtil.secondToVM(vm.getDoTime()));
+            vm.setSystemScoreStr(ExamUtil.scoreToVM(vm.getSystemScore()));
+            vm.setUserScoreStr(ExamUtil.scoreToVM(vm.getUserScore()));
+            vm.setPaperScoreStr(ExamUtil.scoreToVM(vm.getPaperScore()));
             vm.setSubjectName(subject.getName());
-            vm.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime()));
-         //   User user = userService.selectById(Integer.valueOf(e.getCreateUser()));
-          //  vm.setUserName(user.getUserName());
-            return vm;
+            vm.setCreateTimeStr(DateTimeUtil.dateFormat(vm.getCreateTime()));
         });
-        return RestResponse.ok(page);
+        return CommonResult.data(pageInfo);
     }
 
 

+ 11 - 13
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/controller/admin/ExamPaperController.java

@@ -36,36 +36,34 @@ public class ExamPaperController extends BaseApiController {
 
 
     @RequestMapping(value = "/taskExamPage", method = RequestMethod.POST)
-    public RestResponse<PageInfo<ExamResponseVM>> taskExamPageList(@RequestBody ExamPaperPageRequestVM model) {
-        PageInfo<ExamPaper> pageInfo = examPaperService.taskExamPage(model);
-        PageInfo<ExamResponseVM> page = PageInfoHelper.copyMap(pageInfo, e -> {
-            ExamResponseVM vm = modelMapper.map(e, ExamResponseVM.class);
-            vm.setCreateTime(DateTimeUtil.dateFormat(e.getCreateTime()));
-            return vm;
+    public CommonResult<Page<ExamPaper>> taskExamPageList(@RequestBody ExamPaperPageRequestVM model) {
+        Page<ExamPaper> pageInfo = examPaperService.taskExamPage(model);
+        pageInfo.getRecords().forEach(e -> {
+            e.setCreateTimeStr(DateTimeUtil.dateFormat(e.getCreateTime()));
         });
-        return RestResponse.ok(page);
+        return CommonResult.data(pageInfo);
     }
 
 
 
     @RequestMapping(value = "/edit", method = RequestMethod.POST)
-    public RestResponse<ExamPaperEditRequestVM> edit(@RequestBody @Valid ExamPaperEditRequestVM model) {
+    public CommonResult<ExamPaperEditRequestVM> edit(@RequestBody @Valid ExamPaperEditRequestVM model) {
         ExamPaper examPaper = examPaperService.savePaperFromVM(model, getCurrentUser());
         ExamPaperEditRequestVM newVM = examPaperService.examPaperToVM(examPaper.getId());
-        return RestResponse.ok(newVM);
+        return CommonResult.data(newVM);
     }
 
     @RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
-    public RestResponse<ExamPaperEditRequestVM> select(@PathVariable Integer id) {
+    public CommonResult<ExamPaperEditRequestVM> select(@PathVariable Integer id) {
         ExamPaperEditRequestVM vm = examPaperService.examPaperToVM(id);
-        return RestResponse.ok(vm);
+        return CommonResult.data(vm);
     }
 
     @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
-    public RestResponse delete(@PathVariable Integer id) {
+    public CommonResult delete(@PathVariable Integer id) {
         ExamPaper examPaper = examPaperService.selectById(id);
         examPaper.setDeleted(true);
         examPaperService.updateByIdFilter(examPaper);
-        return RestResponse.ok();
+        return CommonResult.ok();
     }
 }

+ 17 - 28
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/controller/admin/QuestionController.java

@@ -1,8 +1,11 @@
 package vip.xiaonuo.exam.controller.admin;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.exam.base.BaseApiController;
 import vip.xiaonuo.exam.base.RestResponse;
 import vip.xiaonuo.exam.base.SystemCode;
+import vip.xiaonuo.exam.domain.ExamPaper;
 import vip.xiaonuo.exam.domain.Question;
 import vip.xiaonuo.exam.domain.TextContent;
 import vip.xiaonuo.exam.domain.enums.QuestionTypeEnum;
@@ -35,59 +38,45 @@ public class QuestionController extends BaseApiController {
     }
 
     @RequestMapping(value = "/page", method = RequestMethod.POST)
-    public RestResponse<PageInfo<QuestionResponseVM>> pageList(@RequestBody QuestionPageRequestVM model) {
-        PageInfo<Question> pageInfo = questionService.page(model);
-        PageInfo<QuestionResponseVM> page = PageInfoHelper.copyMap(pageInfo, q -> {
-            QuestionResponseVM vm = modelMapper.map(q, QuestionResponseVM.class);
-            vm.setCreateTime(DateTimeUtil.dateFormat(q.getCreateTime()));
-            vm.setScore(ExamUtil.scoreToVM(q.getScore()));
-            TextContent textContent = textContentService.selectById(q.getInfoTextContentId());
-            QuestionObject questionObject = JsonUtil.toJsonObject(textContent.getContent(), QuestionObject.class);
-            String clearHtml = HtmlUtil.clear(questionObject.getTitleContent());
-            vm.setShortTitle(clearHtml);
-            return vm;
-        });
-        return RestResponse.ok(page);
+    public CommonResult<Page<Question>> pageList(@RequestBody QuestionPageRequestVM model) {
+        return CommonResult.data(questionService.page(model));
     }
 
     @RequestMapping(value = "/edit", method = RequestMethod.POST)
-    public RestResponse edit(@RequestBody @Valid QuestionEditRequestVM model) {
-        RestResponse validQuestionEditRequestResult = validQuestionEditRequestVM(model);
-        if (validQuestionEditRequestResult.getCode() != SystemCode.OK.getCode()) {
+    public CommonResult edit(@RequestBody @Valid QuestionEditRequestVM model) {
+        CommonResult validQuestionEditRequestResult = validQuestionEditRequestVM(model);
+        if (validQuestionEditRequestResult.getCode() != 200) {
             return validQuestionEditRequestResult;
         }
-
         if (null == model.getId()) {
             questionService.insertFullQuestion(model, getCurrentUser().getId());
         } else {
             questionService.updateFullQuestion(model);
         }
-
-        return RestResponse.ok();
+        return CommonResult.ok();
     }
 
     @RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
-    public RestResponse<QuestionEditRequestVM> select(@PathVariable Integer id) {
-        QuestionEditRequestVM newVM = questionService.getQuestionEditRequestVM(id);
-        return RestResponse.ok(newVM);
+    public CommonResult<QuestionEditRequestVM> select(@PathVariable Integer id) {
+        return CommonResult.data(questionService.getQuestionEditRequestVM(id));
     }
 
 
     @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
-    public RestResponse delete(@PathVariable Integer id) {
+    public CommonResult delete(@PathVariable Integer id) {
         Question question = questionService.selectById(id);
         question.setDeleted(true);
         questionService.updateByIdFilter(question);
-        return RestResponse.ok();
+        return CommonResult.ok();
     }
 
-    private RestResponse validQuestionEditRequestVM(QuestionEditRequestVM model) {
+    private CommonResult validQuestionEditRequestVM(QuestionEditRequestVM model) {
         int qType = model.getQuestionType().intValue();
         boolean requireCorrect = qType == QuestionTypeEnum.SingleChoice.getCode() || qType == QuestionTypeEnum.TrueFalse.getCode();
         if (requireCorrect) {
             if (StringUtils.isBlank(model.getCorrect())) {
                 String errorMsg = ErrorUtil.parameterErrorFormat("correct", "不能为空");
-                return new RestResponse<>(SystemCode.ParameterValidError.getCode(), errorMsg);
+                return new CommonResult(SystemCode.ParameterValidError.getCode(),errorMsg,null);
             }
         }
 
@@ -96,9 +85,9 @@ public class QuestionController extends BaseApiController {
             Integer questionScore = ExamUtil.scoreFromVM(model.getScore());
             if (!fillSumScore.equals(questionScore)) {
                 String errorMsg = ErrorUtil.parameterErrorFormat("score", "空分数和与题目总分不相等");
-                return new RestResponse<>(SystemCode.ParameterValidError.getCode(), errorMsg);
+                return new CommonResult(SystemCode.ParameterValidError.getCode(),errorMsg,null);
             }
         }
-        return RestResponse.ok();
+        return CommonResult.ok();
     }
 }

+ 11 - 16
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/controller/admin/TaskController.java

@@ -1,8 +1,11 @@
 package vip.xiaonuo.exam.controller.admin;
 
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import vip.xiaonuo.common.pojo.CommonResult;
 import vip.xiaonuo.exam.base.BaseApiController;
 import vip.xiaonuo.exam.base.RestResponse;
+import vip.xiaonuo.exam.domain.Question;
 import vip.xiaonuo.exam.domain.TaskExam;
 import vip.xiaonuo.exam.service.TaskExamService;
 import vip.xiaonuo.exam.utility.DateTimeUtil;
@@ -28,36 +31,28 @@ public class TaskController extends BaseApiController {
     }
 
     @RequestMapping(value = "/page", method = RequestMethod.POST)
-    public RestResponse<PageInfo<TaskPageResponseVM>> pageList(@RequestBody TaskPageRequestVM model) {
-        PageInfo<TaskExam> pageInfo = taskExamService.page(model);
-        PageInfo<TaskPageResponseVM> page = PageInfoHelper.copyMap(pageInfo, m -> {
-            TaskPageResponseVM vm = modelMapper.map(m, TaskPageResponseVM.class);
-            vm.setCreateTime(DateTimeUtil.dateFormat(m.getCreateTime()));
-            return vm;
-        });
-        return RestResponse.ok(page);
+    public CommonResult<Page<TaskExam>> pageList(@RequestBody TaskPageRequestVM model) {
+        return CommonResult.data(taskExamService.page(model));
     }
 
 
     @RequestMapping(value = "/edit", method = RequestMethod.POST)
-    public RestResponse edit(@RequestBody @Valid TaskRequestVM model) {
+    public CommonResult<TaskRequestVM> edit(@RequestBody @Valid TaskRequestVM model) {
         taskExamService.edit(model, getCurrentUser());
-        TaskRequestVM vm = taskExamService.taskExamToVM(model.getId());
-        return RestResponse.ok(vm);
+        return CommonResult.data(taskExamService.taskExamToVM(model.getId()));
     }
 
 
     @RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
-    public RestResponse<TaskRequestVM> select(@PathVariable Integer id) {
-        TaskRequestVM vm = taskExamService.taskExamToVM(id);
-        return RestResponse.ok(vm);
+    public CommonResult<TaskRequestVM> select(@PathVariable Integer id) {
+        return CommonResult.data(taskExamService.taskExamToVM(id));
     }
 
     @RequestMapping(value = "/delete/{id}", method = RequestMethod.POST)
-    public RestResponse delete(@PathVariable Integer id) {
+    public CommonResult delete(@PathVariable Integer id) {
         TaskExam taskExam = taskExamService.selectById(id);
         taskExam.setDeleted(true);
         taskExamService.updateByIdFilter(taskExam);
-        return RestResponse.ok();
+        return CommonResult.ok();
     }
 }

+ 29 - 0
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/domain/CourseChapterPaper.java

@@ -0,0 +1,29 @@
+package vip.xiaonuo.exam.domain;
+
+/**
+ * @PackageName:vip.xiaonuo.exam.domain
+ * @ClassName:CourseChapterPaper
+ * @Author ZSS
+ * @Date 2025-07-11 17:50
+ * @Note: 章节与试卷关系
+ **/
+public class CourseChapterPaper {
+    String chapterId;
+    String paperId;
+
+    public String getChapterId() {
+        return chapterId;
+    }
+
+    public void setChapterId(String chapterId) {
+        this.chapterId = chapterId;
+    }
+
+    public String getPaperId() {
+        return paperId;
+    }
+
+    public void setPaperId(String paperId) {
+        this.paperId = paperId;
+    }
+}

+ 11 - 1
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/domain/ExamPaper.java

@@ -20,7 +20,7 @@ public class ExamPaper implements Serializable {
     private Integer subjectId;
 
     /**
-     * 试卷类型( 1固定试卷 4.时段试卷 6.任务试卷)
+     * 试卷类型( 1.固定试卷 2.调查问卷 4.时段试卷 6.任务试卷 )
      */
     private Integer paperType;
 
@@ -63,6 +63,8 @@ public class ExamPaper implements Serializable {
 
     private Date createTime;
 
+    private String createTimeStr;
+
     private Boolean deleted;
 
     private Integer taskExamId;
@@ -186,4 +188,12 @@ public class ExamPaper implements Serializable {
     public void setTaskExamId(Integer taskExamId) {
         this.taskExamId = taskExamId;
     }
+
+    public String getCreateTimeStr() {
+        return createTimeStr;
+    }
+
+    public void setCreateTimeStr(String createTimeStr) {
+        this.createTimeStr = createTimeStr;
+    }
 }

+ 58 - 0
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/domain/ExamPaperAnswer.java

@@ -26,21 +26,27 @@ public class ExamPaperAnswer implements Serializable {
      */
     private Integer subjectId;
 
+    private String subjectName;
+
     /**
      * 系统判定得分
      */
     private Integer systemScore;
 
+    private String systemScoreStr;
+
     /**
      * 最终得分(千分制)
      */
     private Integer userScore;
 
+    private String userScoreStr;
     /**
      * 试卷总分
      */
     private Integer paperScore;
 
+    private String paperScoreStr;
     /**
      * 做对题目数量
      */
@@ -71,8 +77,12 @@ public class ExamPaperAnswer implements Serializable {
      */
     private Date createTime;
 
+    private String createTimeStr;
+
     private Integer taskExamId;
 
+    private String doTimeStr;
+
     public Integer getId() {
         return id;
     }
@@ -192,4 +202,52 @@ public class ExamPaperAnswer implements Serializable {
     public void setTaskExamId(Integer taskExamId) {
         this.taskExamId = taskExamId;
     }
+
+    public String getDoTimeStr() {
+        return doTimeStr;
+    }
+
+    public void setDoTimeStr(String doTimeStr) {
+        this.doTimeStr = doTimeStr;
+    }
+
+    public String getSystemScoreStr() {
+        return systemScoreStr;
+    }
+
+    public void setSystemScoreStr(String systemScoreStr) {
+        this.systemScoreStr = systemScoreStr;
+    }
+
+    public String getSubjectName() {
+        return subjectName;
+    }
+
+    public void setSubjectName(String subjectName) {
+        this.subjectName = subjectName;
+    }
+
+    public String getUserScoreStr() {
+        return userScoreStr;
+    }
+
+    public void setUserScoreStr(String userScoreStr) {
+        this.userScoreStr = userScoreStr;
+    }
+
+    public String getPaperScoreStr() {
+        return paperScoreStr;
+    }
+
+    public void setPaperScoreStr(String paperScoreStr) {
+        this.paperScoreStr = paperScoreStr;
+    }
+
+    public String getCreateTimeStr() {
+        return createTimeStr;
+    }
+
+    public void setCreateTimeStr(String createTimeStr) {
+        this.createTimeStr = createTimeStr;
+    }
 }

+ 1 - 0
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/domain/enums/ExamPaperTypeEnum.java

@@ -6,6 +6,7 @@ import java.util.Map;
 public enum ExamPaperTypeEnum {
 
     Fixed(1, "固定试卷"),
+    Survey(2, "调查问卷"),
     TimeLimit(4, "时段试卷"),
     Task(6, "任务试卷");
 

+ 13 - 0
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/CourseChapterPaperMapper.java

@@ -0,0 +1,13 @@
+package vip.xiaonuo.exam.mapper;
+
+import org.apache.ibatis.annotations.Mapper;
+import vip.xiaonuo.exam.domain.CourseChapterPaper;
+
+import java.util.List;
+
+@Mapper
+public interface CourseChapterPaperMapper extends BaseMapper<CourseChapterPaper>{
+    List<CourseChapterPaper> queryList(CourseChapterPaper cp);
+    int add(CourseChapterPaper cp);
+    int delete(CourseChapterPaper cp);
+}

+ 2 - 1
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/ExamPaperAnswerMapper.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.exam.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import vip.xiaonuo.exam.domain.ExamPaperAnswer;
 import vip.xiaonuo.exam.domain.other.KeyValue;
 import vip.xiaonuo.exam.viewmodel.admin.paper.ExamPaperAnswerPageRequestVM;
@@ -21,5 +22,5 @@ public interface ExamPaperAnswerMapper extends BaseMapper<ExamPaperAnswer> {
 
     ExamPaperAnswer getByPidUid(@Param("pid") Integer paperId, @Param("uid") String uid);
 
-    List<ExamPaperAnswer> adminPage(ExamPaperAnswerPageRequestVM requestVM);
+    Page<ExamPaperAnswer> adminPage(@Param("bo") ExamPaperAnswerPageRequestVM requestVM,@Param("page") Page<ExamPaperAnswer> page);
 }

+ 1 - 1
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/ExamPaperMapper.java

@@ -19,7 +19,7 @@ public interface ExamPaperMapper extends BaseMapper<ExamPaper> {
 
     Page<ExamPaper> page(@Param("bo")ExamPaperPageRequestVM bo, @Param("page") Page<ExamPaper> page);
 
-    List<ExamPaper> taskExamPage(ExamPaperPageRequestVM requestVM);
+    Page<ExamPaper> taskExamPage(@Param("bo")ExamPaperPageRequestVM requestVM, @Param("page") Page<ExamPaper> page);
 
     List<ExamPaper> studentPage(ExamPaperPageVM requestVM);
 

+ 2 - 1
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/QuestionMapper.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.exam.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import vip.xiaonuo.exam.domain.other.KeyValue;
 import vip.xiaonuo.exam.domain.Question;
 import vip.xiaonuo.exam.viewmodel.admin.question.QuestionPageRequestVM;
@@ -12,7 +13,7 @@ import java.util.List;
 @Mapper
 public interface QuestionMapper extends BaseMapper<Question> {
 
-    List<Question> page(QuestionPageRequestVM requestVM);
+    Page<Question> page(@Param("bo") QuestionPageRequestVM requestVM, @Param("page") Page page);
 
     List<Question> selectByIds(@Param("ids") List<Integer> ids);
 

+ 3 - 1
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/SubjectMapper.java

@@ -1,5 +1,7 @@
 package vip.xiaonuo.exam.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
 import vip.xiaonuo.exam.domain.Subject;
 import vip.xiaonuo.exam.viewmodel.admin.education.SubjectPageRequestVM;
 import org.apache.ibatis.annotations.Mapper;
@@ -13,5 +15,5 @@ public interface SubjectMapper  extends BaseMapper<Subject> {
 
     List<Subject> allSubject();
 
-    List<Subject> page(SubjectPageRequestVM requestVM);
+    Page<Subject> page(@Param("bo") SubjectPageRequestVM requestVM, @Param("page") Page<Subject> page);
 }

+ 3 - 1
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/TaskExamMapper.java

@@ -1,5 +1,7 @@
 package vip.xiaonuo.exam.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.ibatis.annotations.Param;
 import vip.xiaonuo.exam.domain.TaskExam;
 import vip.xiaonuo.exam.viewmodel.admin.task.TaskPageRequestVM;
 import org.apache.ibatis.annotations.Mapper;
@@ -9,7 +11,7 @@ import java.util.List;
 @Mapper
 public interface TaskExamMapper extends BaseMapper<TaskExam> {
 
-    List<TaskExam> page(TaskPageRequestVM requestVM);
+    Page<TaskExam> page(@Param("bo")TaskPageRequestVM requestVM,@Param("page") Page<TaskExam> page);
 
     List<TaskExam> getByGradeLevel(Integer gradeLevel);
 }

+ 37 - 0
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/CourseChapterPaperMapper.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="vip.xiaonuo.exam.mapper.CourseChapterPaperMapper">
+    <resultMap id="BaseResultMap" type="vip.xiaonuo.exam.domain.CourseChapterPaper">
+        <result column="CHAPTER_ID" jdbcType="VARCHAR" property="chapterId" />
+        <result column="PAPER_ID" jdbcType="VARCHAR" property="paperId" />
+    </resultMap>
+    <sql id="Base_Column_List">
+        CHAPTER_ID, PAPER_ID
+    </sql>
+    <select id="queryList" resultMap="BaseResultMap" parameterType="vip.xiaonuo.exam.domain.CourseChapterPaper">
+        select
+        <include refid="Base_Column_List" />
+        from COURSE_CHAPTER_PAPER
+        where 1=1
+        <if test="collectId != null">
+            and CHAPTER_ID = #{chapterId,jdbcType=VARCHAR}
+        </if>
+        <if test="paperId != null">
+            and PAPER_ID = #{paperId,jdbcType=VARCHAR}
+        </if>
+    </select>
+    <insert id="add" parameterType="vip.xiaonuo.exam.domain.CourseChapterPaper">
+        insert into COURSE_CHAPTER_PAPER (CHAPTER_ID, PAPER_ID)
+        values (#{chapterId,jdbcType=VARCHAR}, #{paperId,jdbcType=VARCHAR})
+    </insert>
+    <delete id="delete" parameterType="vip.xiaonuo.exam.domain.CourseChapterPaper">
+        delete from COURSE_CHAPTER_PAPER
+        where 1=1
+        <if test="chapterId != null">
+            and CHAPTER_ID = #{chapterId,jdbcType=VARCHAR}
+        </if>
+        <if test="paperId != null">
+            and PAPER_ID = #{paperId,jdbcType=VARCHAR}
+        </if>
+    </delete>
+</mapper>

+ 2 - 2
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/ExamPaperAnswerMapper.xml

@@ -257,8 +257,8 @@
     <include refid="Base_Column_List"/>
     FROM t_exam_paper_answer
     <where>
-      <if test="subjectId != null">
-        and subject_id = #{subjectId}
+      <if test="bo.subjectId != null">
+        and subject_id = #{bo.subjectId}
       </if>
     </where>
   </select>

+ 3 - 2
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/ExamPaperMapper.xml

@@ -259,9 +259,10 @@
     <where>
       and deleted=0
       and task_exam_id is null
-      and grade_level= #{level}
-      and paper_type=#{paperType}
+      and grade_level= #{bo.level}
+      and paper_type=#{bo.paperType}
     </where>
+    order by create_time desc
   </select>
 
   <select id="studentPage" resultMap="BaseResultMap" parameterType="vip.xiaonuo.exam.viewmodel.student.exam.ExamPaperPageVM">

+ 11 - 10
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/QuestionMapper.xml

@@ -184,22 +184,23 @@
     FROM t_question
     <where>
         and deleted=0
-      <if test="id != null ">
-        and id= #{id}
+      <if test="bo.id != null ">
+        and id= #{bo.id}
       </if>
-      <if test="level != null ">
-        and grade_level= #{level}
+      <if test="bo.level != null ">
+        and grade_level= #{bo.level}
       </if>
-      <if test="subjectId != null ">
-        and subject_id= #{subjectId}
+      <if test="bo.subjectId != null ">
+        and subject_id= #{bo.subjectId}
       </if>
-      <if test="questionType != null ">
-        and question_type= #{questionType}
+      <if test="bo.questionType != null ">
+        and question_type= #{bo.questionType}
       </if>
-      <if test="content != null">
-        and info_text_content_id in (SELECT id FROM t_text_content WHERE content like concat('%',#{content},'%') )
+      <if test="bo.content != null">
+        and info_text_content_id in (SELECT id FROM t_text_content WHERE content like concat('%',#{bo.content},'%') )
       </if>
     </where>
+    order by create_time desc
   </select>
 
 

+ 7 - 7
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/SubjectMapper.xml

@@ -13,7 +13,7 @@
     id, name, level, level_name, item_order, deleted
   </sql>
   <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
-    select 
+    select
     <include refid="Base_Column_List" />
     from t_subject
     where id = #{id,jdbcType=INTEGER}
@@ -23,10 +23,10 @@
     where id = #{id,jdbcType=INTEGER}
   </delete>
   <insert id="insert" parameterType="vip.xiaonuo.exam.domain.Subject" useGeneratedKeys="true" keyProperty="id">
-    insert into t_subject (id, name, level, 
+    insert into t_subject (id, name, level,
       level_name, item_order, deleted
       )
-    values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{level,jdbcType=INTEGER}, 
+    values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR}, #{level,jdbcType=INTEGER},
       #{levelName,jdbcType=VARCHAR}, #{itemOrder,jdbcType=INTEGER}, #{deleted,jdbcType=BIT}
       )
   </insert>
@@ -125,11 +125,11 @@
     FROM t_subject
     <where>
         and deleted=0
-      <if test="id != null ">
-        and id= #{id}
+      <if test="bo.id != null ">
+        and id= #{bo.id}
       </if>
-      <if test="level != null ">
-        and level= #{level}
+      <if test="bo.level != null ">
+        and level= #{bo.level}
       </if>
     </where>
   </select>

+ 2 - 2
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/mapper/mapping/TaskExamMapper.xml

@@ -140,8 +140,8 @@
     from t_task_exam
     <where>
         and deleted=0
-      <if test="gradeLevel != null">
-        and grade_level = #{gradeLevel}
+      <if test="bo.gradeLevel != null">
+        and grade_level = #{bo.gradeLevel}
       </if>
     </where>
   </select>

+ 13 - 0
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/CourseChapterPaperService.java

@@ -0,0 +1,13 @@
+package vip.xiaonuo.exam.service;
+
+import vip.xiaonuo.exam.domain.CourseChapterPaper;
+
+import java.util.List;
+
+public interface CourseChapterPaperService {
+    List<CourseChapterPaper> queryList(CourseChapterPaper cp);
+
+    int add(CourseChapterPaper cp);
+
+    int delete(CourseChapterPaper cp);
+}

+ 2 - 1
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/ExamPaperAnswerService.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.exam.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.PageInfo;
 import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
 import vip.xiaonuo.exam.domain.ExamPaperAnswer;
@@ -50,5 +51,5 @@ public interface ExamPaperAnswerService extends BaseService<ExamPaperAnswer> {
 
     List<Integer> selectMothCount();
 
-    PageInfo<ExamPaperAnswer> adminPage(ExamPaperAnswerPageRequestVM requestVM);
+    Page<ExamPaperAnswer> adminPage(ExamPaperAnswerPageRequestVM requestVM);
 }

+ 1 - 1
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/ExamPaperService.java

@@ -17,7 +17,7 @@ public interface ExamPaperService extends BaseService<ExamPaper> {
 
     Page<ExamPaper> page(ExamPaperPageRequestVM requestVM);
 
-    PageInfo<ExamPaper> taskExamPage(ExamPaperPageRequestVM requestVM);
+    Page<ExamPaper> taskExamPage(ExamPaperPageRequestVM requestVM);
 
     PageInfo<ExamPaper> studentPage(ExamPaperPageVM requestVM);
 

+ 2 - 1
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/QuestionService.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.exam.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import vip.xiaonuo.exam.domain.Question;
 import vip.xiaonuo.exam.viewmodel.admin.question.QuestionEditRequestVM;
 import vip.xiaonuo.exam.viewmodel.admin.question.QuestionPageRequestVM;
@@ -9,7 +10,7 @@ import java.util.List;
 
 public interface QuestionService extends BaseService<Question> {
 
-    PageInfo<Question> page(QuestionPageRequestVM requestVM);
+    Page<Question> page(QuestionPageRequestVM requestVM);
 
     Question insertFullQuestion(QuestionEditRequestVM model, String userId);
 

+ 2 - 1
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/SubjectService.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.exam.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import vip.xiaonuo.exam.domain.Subject;
 import vip.xiaonuo.exam.viewmodel.admin.education.SubjectPageRequestVM;
 import com.github.pagehelper.PageInfo;
@@ -14,5 +15,5 @@ public interface SubjectService extends BaseService<Subject> {
 
     Integer levelBySubjectId(Integer id);
 
-    PageInfo<Subject> page(SubjectPageRequestVM requestVM);
+    Page<Subject> page(SubjectPageRequestVM requestVM);
 }

+ 2 - 1
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/TaskExamService.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.exam.service;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.PageInfo;
 import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
 import vip.xiaonuo.exam.domain.TaskExam;
@@ -10,7 +11,7 @@ import java.util.List;
 
 public interface TaskExamService extends BaseService<TaskExam> {
 
-    PageInfo<TaskExam> page(TaskPageRequestVM requestVM);
+    Page<TaskExam> page(TaskPageRequestVM requestVM);
 
     void edit(TaskRequestVM model, SaBaseLoginUser user);
 

+ 38 - 0
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/CourseChapterPaperServiceImpl.java

@@ -0,0 +1,38 @@
+package vip.xiaonuo.exam.service.impl;
+
+import org.springframework.stereotype.Service;
+import vip.xiaonuo.exam.domain.CourseChapterPaper;
+import vip.xiaonuo.exam.mapper.CourseChapterPaperMapper;
+import vip.xiaonuo.exam.service.CourseChapterPaperService;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @PackageName:vip.xiaonuo.exam.service.impl
+ * @ClassName:CollectCoursePaperServiceImpl
+ * @Author ZSS
+ * @Date 2025-07-11 17:55
+ * @Note: 章节-试卷关联服务实现类
+ **/
+@Service
+public class CourseChapterPaperServiceImpl implements CourseChapterPaperService {
+
+    @Resource
+    private CourseChapterPaperMapper cpm;
+
+    @Override
+    public List<CourseChapterPaper> queryList(CourseChapterPaper cp) {
+        return cpm.queryList(cp);
+    }
+
+    @Override
+    public int add(CourseChapterPaper cp) {
+        return cpm.add(cp);
+    }
+
+    @Override
+    public int delete(CourseChapterPaper cp) {
+        return cpm.delete(cp);
+    }
+}

+ 5 - 3
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/ExamPaperAnswerServiceImpl.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.exam.service.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
 import vip.xiaonuo.exam.domain.*;
 import vip.xiaonuo.exam.domain.enums.ExamPaperAnswerStatusEnum;
@@ -272,8 +273,9 @@ public class ExamPaperAnswerServiceImpl extends BaseServiceImpl<ExamPaperAnswer>
 
 
     @Override
-    public PageInfo<ExamPaperAnswer> adminPage(ExamPaperAnswerPageRequestVM requestVM) {
-        return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
-                examPaperAnswerMapper.adminPage(requestVM));
+    public Page<ExamPaperAnswer> adminPage(ExamPaperAnswerPageRequestVM requestVM) {
+        Page<ExamPaperAnswer> page = new Page<ExamPaperAnswer>(requestVM.getCurrent(), requestVM.getSize());
+        page.setSearchCount(true); // 设置计算总记录数
+        return examPaperAnswerMapper.adminPage(requestVM,page);
     }
 }

+ 4 - 3
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/ExamPaperServiceImpl.java

@@ -70,9 +70,10 @@ public class ExamPaperServiceImpl extends BaseServiceImpl<ExamPaper> implements
     }
 
     @Override
-    public PageInfo<ExamPaper> taskExamPage(ExamPaperPageRequestVM requestVM) {
-        return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
-                examPaperMapper.taskExamPage(requestVM));
+    public Page<ExamPaper> taskExamPage(ExamPaperPageRequestVM requestVM) {
+        Page<ExamPaper> page = new Page<ExamPaper>(requestVM.getCurrent(), requestVM.getSize());
+        page.setSearchCount(true); // 设置计算总记录数
+        return examPaperMapper.taskExamPage(requestVM,page);
     }
 
     @Override

+ 6 - 4
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/QuestionServiceImpl.java

@@ -1,5 +1,7 @@
 package vip.xiaonuo.exam.service.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import vip.xiaonuo.exam.domain.ExamPaper;
 import vip.xiaonuo.exam.domain.other.KeyValue;
 import vip.xiaonuo.exam.domain.Question;
 import vip.xiaonuo.exam.domain.TextContent;
@@ -46,10 +48,10 @@ public class QuestionServiceImpl extends BaseServiceImpl<Question> implements Qu
     }
 
     @Override
-    public PageInfo<Question> page(QuestionPageRequestVM requestVM) {
-        return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
-                questionMapper.page(requestVM)
-        );
+    public Page<Question> page(QuestionPageRequestVM requestVM) {
+        Page<ExamPaper> page = new Page<ExamPaper>(requestVM.getCurrent(), requestVM.getSize());
+        page.setSearchCount(true); // 设置计算总记录数
+        return questionMapper.page(requestVM,page);
     }
 
 

+ 6 - 4
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/SubjectServiceImpl.java

@@ -1,5 +1,7 @@
 package vip.xiaonuo.exam.service.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import vip.xiaonuo.exam.domain.ExamPaper;
 import vip.xiaonuo.exam.domain.Subject;
 import vip.xiaonuo.exam.mapper.SubjectMapper;
 import vip.xiaonuo.exam.service.SubjectService;
@@ -48,10 +50,10 @@ public class SubjectServiceImpl extends BaseServiceImpl<Subject> implements Subj
     }
 
     @Override
-    public PageInfo<Subject> page(SubjectPageRequestVM requestVM) {
-        return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
-                subjectMapper.page(requestVM)
-        );
+    public Page<Subject> page(SubjectPageRequestVM requestVM) {
+        Page<Subject> page = new Page<Subject>(requestVM.getCurrent(), requestVM.getSize());
+        page.setSearchCount(true); // 设置计算总记录数
+        return subjectMapper.page(requestVM,page);
     }
 
 }

+ 6 - 4
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/service/impl/TaskExamServiceImpl.java

@@ -1,5 +1,6 @@
 package vip.xiaonuo.exam.service.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
 import org.modelmapper.ModelMapper;
@@ -8,6 +9,7 @@ import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import vip.xiaonuo.auth.core.pojo.SaBaseLoginUser;
 import vip.xiaonuo.exam.domain.ExamPaper;
+import vip.xiaonuo.exam.domain.Subject;
 import vip.xiaonuo.exam.domain.TaskExam;
 import vip.xiaonuo.exam.domain.TextContent;
 import vip.xiaonuo.exam.domain.task.TaskItemObject;
@@ -44,10 +46,10 @@ public class TaskExamServiceImpl extends BaseServiceImpl<TaskExam> implements Ta
     }
 
     @Override
-    public PageInfo<TaskExam> page(TaskPageRequestVM requestVM) {
-        return PageHelper.startPage(requestVM.getPageIndex(), requestVM.getPageSize(), "id desc").doSelectPageInfo(() ->
-                taskExamMapper.page(requestVM)
-        );
+    public Page<TaskExam> page(TaskPageRequestVM requestVM) {
+        Page<TaskExam> page = new Page<TaskExam>(requestVM.getCurrent(), requestVM.getSize());
+        page.setSearchCount(true); // 设置计算总记录数
+        return taskExamMapper.page(requestVM,page);
     }
 
     @Override

+ 20 - 0
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/viewmodel/admin/education/SubjectPageRequestVM.java

@@ -8,6 +8,10 @@ public class SubjectPageRequestVM extends BasePage {
     private Integer id;
     private Integer level;
 
+    private Integer current;
+
+    private Integer size;
+
     public Integer getId() {
         return id;
     }
@@ -23,4 +27,20 @@ public class SubjectPageRequestVM extends BasePage {
     public void setLevel(Integer level) {
         this.level = level;
     }
+
+    public Integer getCurrent() {
+        return current;
+    }
+
+    public void setCurrent(Integer current) {
+        this.current = current;
+    }
+
+    public Integer getSize() {
+        return size;
+    }
+
+    public void setSize(Integer size) {
+        this.size = size;
+    }
 }

+ 20 - 0
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/viewmodel/admin/paper/ExamPaperAnswerPageRequestVM.java

@@ -5,6 +5,10 @@ import vip.xiaonuo.exam.base.BasePage;
 public class ExamPaperAnswerPageRequestVM extends BasePage {
     private Integer subjectId;
 
+    private Integer current;
+
+    private Integer size;
+
     public Integer getSubjectId() {
         return subjectId;
     }
@@ -12,4 +16,20 @@ public class ExamPaperAnswerPageRequestVM extends BasePage {
     public void setSubjectId(Integer subjectId) {
         this.subjectId = subjectId;
     }
+
+    public Integer getCurrent() {
+        return current;
+    }
+
+    public void setCurrent(Integer current) {
+        this.current = current;
+    }
+
+    public Integer getSize() {
+        return size;
+    }
+
+    public void setSize(Integer size) {
+        this.size = size;
+    }
 }

+ 19 - 0
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/viewmodel/admin/question/QuestionPageRequestVM.java

@@ -12,6 +12,9 @@ public class QuestionPageRequestVM extends BasePage {
     private Integer questionType;
     private String content;
 
+    private Integer current;
+
+    private Integer size;
 
     public Integer getId() {
         return id;
@@ -52,4 +55,20 @@ public class QuestionPageRequestVM extends BasePage {
     public void setContent(String content) {
         this.content = content;
     }
+
+    public Integer getCurrent() {
+        return current;
+    }
+
+    public void setCurrent(Integer current) {
+        this.current = current;
+    }
+
+    public Integer getSize() {
+        return size;
+    }
+
+    public void setSize(Integer size) {
+        this.size = size;
+    }
 }

+ 20 - 0
snowy-plugin/snowy-plugin-exam/snowy-plugin-exam-func/src/main/java/vip/xiaonuo/exam/viewmodel/admin/task/TaskPageRequestVM.java

@@ -7,6 +7,10 @@ import vip.xiaonuo.exam.base.BasePage;
 public class TaskPageRequestVM extends BasePage {
     private Integer gradeLevel;
 
+    private Integer current;
+
+    private Integer size;
+
     public Integer getGradeLevel() {
         return gradeLevel;
     }
@@ -14,4 +18,20 @@ public class TaskPageRequestVM extends BasePage {
     public void setGradeLevel(Integer gradeLevel) {
         this.gradeLevel = gradeLevel;
     }
+
+    public Integer getCurrent() {
+        return current;
+    }
+
+    public void setCurrent(Integer current) {
+        this.current = current;
+    }
+
+    public Integer getSize() {
+        return size;
+    }
+
+    public void setSize(Integer size) {
+        this.size = size;
+    }
 }

+ 18 - 5
snowy-server/snowy-gateway-app/pom.xml

@@ -203,14 +203,27 @@
         </dependency>
         -->
         <!-- 达梦数据库 -->
+<!--        <dependency>-->
+<!--            <groupId>DmJdbcDriver18</groupId>-->
+<!--            <artifactId>DmJdbcDriver18</artifactId>-->
+<!--            <version>1.0.0</version>-->
+<!--            <scope>system</scope>-->
+<!--            <systemPath>${pom.basedir}/src/main/resources/lib/DmJdbcDriver18.jar</systemPath>-->
+<!--        </dependency>-->
+        <!-- 达梦数据库 -->
         <dependency>
-            <groupId>DmJdbcDriver18</groupId>
+            <groupId>com.dameng</groupId>
             <artifactId>DmJdbcDriver18</artifactId>
-            <version>1.0.0</version>
-            <scope>system</scope>
-            <systemPath>${pom.basedir}/src/main/resources/lib/DmJdbcDriver18.jar</systemPath>
         </dependency>
-
+        <dependency>
+            <groupId>com.dameng</groupId>
+            <artifactId>DmDialect-for-hibernate5.3</artifactId>
+        </dependency>
+        <dependency>
+            <!--注意:只有这个版本的hibernate兼容达梦数据库 -->
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-core</artifactId>
+        </dependency>
         <!-- druid -->
         <dependency>
             <groupId>com.alibaba</groupId>