From 9d72545e1ebb81d80d11b6a6e683e5581cc322fc Mon Sep 17 00:00:00 2001
From: fuliqi <fuliqi@qq.com>
Date: 星期一, 03 六月 2024 14:56:31 +0800
Subject: [PATCH] 试卷类、枚举

---
 src/main/java/com/ycl/jxkg/domain/entity/ExamPaperAnswer.java             |    1 
 src/main/java/com/ycl/jxkg/domain/enums/DeductTypeEnum.java               |   51 +++
 src/main/java/com/ycl/jxkg/controller/admin/ExamTemplateController.java   |   82 +++++
 src/main/resources/mapper/ExamTemplateMapper.xml                          |   91 ++++++
 src/main/java/com/ycl/jxkg/service/impl/ExamTemplateServiceImpl.java      |  123 ++++++++
 src/main/java/com/ycl/jxkg/domain/entity/ExamTemplate.java                |   92 ++++++
 src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java   |    4 
 src/main/java/com/ycl/jxkg/domain/query/ExamTemplateQuery.java            |   17 +
 src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java                   |    8 
 src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamTemplateVO.java       |   86 ++++++
 src/main/java/com/ycl/jxkg/domain/enums/VisibilityEnum.java               |   47 +++
 src/main/java/com/ycl/jxkg/mapper/ExamTemplateMapper.java                 |   32 ++
 src/main/java/com/ycl/jxkg/controller/wx/student/DashboardController.java |    2 
 src/main/java/com/ycl/jxkg/controller/student/DashboardController.java    |    2 
 src/main/java/com/ycl/jxkg/service/ExamTemplateService.java               |   66 ++++
 src/main/java/com/ycl/jxkg/domain/entity/UserEventLog.java                |    2 
 src/main/java/com/ycl/jxkg/domain/form/ExamTemplateForm.java              |  112 ++++++++
 src/main/java/com/ycl/jxkg/domain/enums/ExamPaperTypeEnum.java            |    4 
 src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java |    2 
 src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java         |    4 
 20 files changed, 816 insertions(+), 12 deletions(-)

diff --git a/src/main/java/com/ycl/jxkg/controller/admin/ExamTemplateController.java b/src/main/java/com/ycl/jxkg/controller/admin/ExamTemplateController.java
new file mode 100644
index 0000000..4ea99c1
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/controller/admin/ExamTemplateController.java
@@ -0,0 +1,82 @@
+package com.ycl.jxkg.controller.admin;
+
+import com.ycl.jxkg.base.Result;
+import com.ycl.jxkg.domain.form.ExamTemplateForm;
+import com.ycl.jxkg.domain.query.ExamTemplateQuery;
+import com.ycl.jxkg.group.Add;
+import com.ycl.jxkg.group.Update;
+import com.ycl.jxkg.service.ExamTemplateService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 闅忔満璇曞嵎妯℃澘 鍓嶇鎺у埗鍣�
+ *
+ * @author 寮�鍙戜汉鍛樺悕瀛�
+ * @since 2024-06-03
+ */
+@Validated
+@RequiredArgsConstructor
+@Api(value = "闅忔満璇曞嵎妯℃澘", tags = "闅忔満璇曞嵎妯℃澘绠$悊")
+@RestController
+@RequestMapping("/exam-template")
+public class ExamTemplateController {
+
+    private final ExamTemplateService examTemplateService;
+
+    @PostMapping
+    @ApiOperation(value = "娣诲姞", notes = "娣诲姞")
+    @PreAuthorize("hasAuthority('examTemplate:add')")
+    public Result add(@RequestBody @Validated(Add.class) ExamTemplateForm form) {
+        return examTemplateService.add(form);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "淇敼", notes = "淇敼")
+    @PreAuthorize("hasAuthority('examTemplate:edit')")
+    public Result update(@RequestBody @Validated(Update.class) ExamTemplateForm form) {
+        return examTemplateService.update(form);
+    }
+
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "ID鍒犻櫎", notes = "ID鍒犻櫎")
+    @PreAuthorize("hasAuthority('examTemplate:del')")
+    public Result removeById(@PathVariable("id") String id) {
+        return examTemplateService.removeById(id);
+    }
+
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "鎵归噺鍒犻櫎", notes = "鎵归噺鍒犻櫎")
+    @PreAuthorize("hasAuthority('examTemplate:del:batch')")
+    public Result remove(@RequestBody @NotEmpty(message = "璇烽�夋嫨鏁版嵁") List<String> ids) {
+        return examTemplateService.remove(ids);
+    }
+
+    @GetMapping("/page")
+    @ApiOperation(value = "鍒嗛〉", notes = "鍒嗛〉")
+    @PreAuthorize("hasAuthority('examTemplate:page')")
+    public Result page(ExamTemplateQuery query) {
+        return examTemplateService.page(query);
+    }
+
+    @GetMapping("/{id}")
+    @ApiOperation(value = "璇︽儏", notes = "璇︽儏")
+    @PreAuthorize("hasAuthority('examTemplate:detail')")
+    public Result detail(@PathVariable("id") Integer id) {
+        return examTemplateService.detail(id);
+    }
+
+    @GetMapping("/list")
+    @PreAuthorize("hasAuthority('examTemplate:list')")
+    @ApiOperation(value = "鍒楄〃", notes = "鍒楄〃")
+    public Result list() {
+        return examTemplateService.all();
+    }
+}
diff --git a/src/main/java/com/ycl/jxkg/controller/student/DashboardController.java b/src/main/java/com/ycl/jxkg/controller/student/DashboardController.java
index b6981e0..dbc7927 100644
--- a/src/main/java/com/ycl/jxkg/controller/student/DashboardController.java
+++ b/src/main/java/com/ycl/jxkg/controller/student/DashboardController.java
@@ -49,7 +49,7 @@
         PaperFilter timeLimitPaperFilter = new PaperFilter();
         timeLimitPaperFilter.setDateTime(new Date());
         timeLimitPaperFilter.setGradeLevel(user.getUserLevel());
-        timeLimitPaperFilter.setExamPaperType(ExamPaperTypeEnum.TimeLimit.getCode());
+        timeLimitPaperFilter.setExamPaperType(ExamPaperTypeEnum.Random.getCode());
 
         List<PaperInfo> limitPaper = examPaperService.indexPaper(timeLimitPaperFilter);
         List<PaperInfoVO> paperInfoVOS = limitPaper.stream().map(d -> {
diff --git a/src/main/java/com/ycl/jxkg/controller/wx/student/DashboardController.java b/src/main/java/com/ycl/jxkg/controller/wx/student/DashboardController.java
index 011e4e8..baf0ed9 100644
--- a/src/main/java/com/ycl/jxkg/controller/wx/student/DashboardController.java
+++ b/src/main/java/com/ycl/jxkg/controller/wx/student/DashboardController.java
@@ -52,7 +52,7 @@
         PaperFilter timeLimitPaperFilter = new PaperFilter();
         timeLimitPaperFilter.setDateTime(new Date());
         timeLimitPaperFilter.setGradeLevel(user.getUserLevel());
-        timeLimitPaperFilter.setExamPaperType(ExamPaperTypeEnum.TimeLimit.getCode());
+        timeLimitPaperFilter.setExamPaperType(ExamPaperTypeEnum.Random.getCode());
 
         List<PaperInfo> limitPaper = examPaperService.indexPaper(timeLimitPaperFilter);
         List<PaperInfoVO> paperInfoVOS = limitPaper.stream().map(d -> {
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java
index e0c889d..29a0b03 100644
--- a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java
+++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaper.java
@@ -51,6 +51,12 @@
     private Integer questionCount;
 
     /**
+     * 棰樼洰鍒嗘暟
+     */
+    @TableField("question_score")
+    private Integer questionScore;
+
+    /**
      * 寤鸿鏃堕暱(鍒嗛挓)
      */
     @TableField("suggest_time")
@@ -86,10 +92,12 @@
     /**
      * 鍙鎬э紝鍏紑/绉佹湁
      * */
+    @TableField("visibility")
     private String visibility;
 
     /**
      * 鎵e垎绫诲瀷
      * */
+    @TableField("deduct_type")
     private String deductType;
 }
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperAnswer.java b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperAnswer.java
index 463fab9..8d0dbcf 100644
--- a/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperAnswer.java
+++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamPaperAnswer.java
@@ -13,7 +13,6 @@
 @TableName("t_exam_paper_answer")
 public class ExamPaperAnswer extends AbsEntity {
 
-
     @TableField("exam_paper_id")
     private Integer examPaperId;
 
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/ExamTemplate.java b/src/main/java/com/ycl/jxkg/domain/entity/ExamTemplate.java
new file mode 100644
index 0000000..932af87
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/entity/ExamTemplate.java
@@ -0,0 +1,92 @@
+package com.ycl.jxkg.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ycl.jxkg.domain.base.AbsEntity;
+import lombok.Data;
+
+import java.util.Date;
+/**
+ * 闅忔満璇曞嵎妯℃澘琛�
+ * */
+@Data
+@TableName("t_exam_template")
+public class ExamTemplate extends AbsEntity {
+    /**
+     * 妯℃澘鍚�
+     * */
+    @TableField("name")
+    private String name;
+
+    /**
+     * 瀛︾
+     * */
+    @TableField("subject_id")
+    private Integer subjectId;
+
+    /**
+     * 寤鸿鑰冭瘯鏃堕暱
+     * */
+    @TableField("suggest_time")
+    private Integer suggestTime;
+
+    /**
+     * 鍗曢�夐鏁伴噺
+     * */
+    @TableField("single_choice")
+    private Integer singleChoice;
+
+    /**
+     * 澶氶�夐鏁伴噺
+     * */
+    @TableField("multiple_choice")
+    private Integer multipleChoice;
+
+    /**
+     * 濉┖棰樻暟閲�
+     * */
+    @TableField("gap_filling")
+    private Integer gapFilling;
+
+    /**
+     * 鍒ゆ柇棰樻暟閲�
+     * */
+    @TableField("true_false")
+    private Integer trueFalse;
+
+    /**
+     * 绠�绛旈鏁伴噺
+     * */
+    @TableField("short_answer")
+    private Integer shortAnswer;
+
+    /**
+     * 璁$畻棰樻暟閲�
+     * */
+    @TableField("calculation")
+    private Integer calculation;
+
+    /**
+     * 鎬诲垎
+     * */
+    @TableField("score")
+    private Integer score;
+
+    /**
+     * 澶氶�夋墸鍒嗙被鍨�
+     * */
+    @TableField("deduct_type")
+    private String deductType;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     * */
+    @TableField("create_time")
+    private Date createTime;
+
+    /**
+     * 鍒涘缓浜�
+     * */
+    @TableField("create_user")
+    private Integer createUser;
+}
diff --git a/src/main/java/com/ycl/jxkg/domain/entity/UserEventLog.java b/src/main/java/com/ycl/jxkg/domain/entity/UserEventLog.java
index 6e3999f..7d09bb3 100644
--- a/src/main/java/com/ycl/jxkg/domain/entity/UserEventLog.java
+++ b/src/main/java/com/ycl/jxkg/domain/entity/UserEventLog.java
@@ -1,10 +1,8 @@
 package com.ycl.jxkg.domain.entity;
 
 import com.baomidou.mybatisplus.annotation.*;
-import com.ycl.jxkg.domain.base.AbsEntity;
 import lombok.Data;
 
-import java.io.Serializable;
 import java.util.Date;
 
 @Data
diff --git a/src/main/java/com/ycl/jxkg/domain/enums/DeductTypeEnum.java b/src/main/java/com/ycl/jxkg/domain/enums/DeductTypeEnum.java
new file mode 100644
index 0000000..31f7d09
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/enums/DeductTypeEnum.java
@@ -0,0 +1,51 @@
+package com.ycl.jxkg.domain.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum DeductTypeEnum {
+
+    AllCorrect(1, "绛旈敊涓嶅緱鍒�"),
+    PartCorrect(2, "婕忛�夊緱鍥哄畾鍒嗗�硷紝鍖呭惈閿欒閫夐」涓嶅緱鍒�"),
+    EachCorrect(3, "姣忓涓�棰樺緱鐩稿簲鍒嗗�硷紝鍖呭惈閿欒閫夐」涓嶅緱鍒�");
+
+    int code;
+    String name;
+
+    DeductTypeEnum(int code, String name) {
+        this.code = code;
+        this.name = name;
+    }
+
+
+    private static final Map<Integer, DeductTypeEnum> keyMap = new HashMap<>();
+
+    static {
+        for (DeductTypeEnum item : DeductTypeEnum.values()) {
+            keyMap.put(item.getCode(), item);
+        }
+    }
+
+    public static DeductTypeEnum fromCode(Integer code) {
+        return keyMap.get(code);
+    }
+
+
+    public int getCode() {
+        return code;
+    }
+
+    public void setCode(int code) {
+        this.code = code;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+}
+
diff --git a/src/main/java/com/ycl/jxkg/domain/enums/ExamPaperTypeEnum.java b/src/main/java/com/ycl/jxkg/domain/enums/ExamPaperTypeEnum.java
index 440d452..a1b51a5 100644
--- a/src/main/java/com/ycl/jxkg/domain/enums/ExamPaperTypeEnum.java
+++ b/src/main/java/com/ycl/jxkg/domain/enums/ExamPaperTypeEnum.java
@@ -6,8 +6,8 @@
 public enum ExamPaperTypeEnum {
 
     Fixed(1, "鍥哄畾璇曞嵎"),
-    TimeLimit(4, "鏃舵璇曞嵎"),
-    Task(6, "浠诲姟璇曞嵎");
+    Random(2, "闅忔満璇曞嵎"),
+    RandomOrder(3, "闅忓簭璇曞嵎");
 
     private final Integer code;
     private final String name;
diff --git a/src/main/java/com/ycl/jxkg/domain/enums/VisibilityEnum.java b/src/main/java/com/ycl/jxkg/domain/enums/VisibilityEnum.java
new file mode 100644
index 0000000..5606948
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/enums/VisibilityEnum.java
@@ -0,0 +1,47 @@
+package com.ycl.jxkg.domain.enums;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public enum VisibilityEnum {
+    Private("绉佹湁", "鍙湁鑰佸笀鑷繁鑳界湅"),
+    Public("鍏紑", "鎵�鏈変汉鑳界湅");
+
+    String name;
+    String description;
+
+    VisibilityEnum(String name, String description) {
+        this.name = name;
+        this.description = description;
+    }
+
+    public String getDescription() {
+        return description;
+    }
+
+    public void setDescription(String description) {
+        this.description = description;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+
+    private static final Map<String, VisibilityEnum> keyMap = new HashMap<>();
+
+    static {
+        for (VisibilityEnum item : VisibilityEnum.values()) {
+            keyMap.put(item.getName(), item);
+        }
+    }
+
+    public static VisibilityEnum fromCode(String name) {
+        return keyMap.get(name);
+    }
+
+}
diff --git a/src/main/java/com/ycl/jxkg/domain/form/ExamTemplateForm.java b/src/main/java/com/ycl/jxkg/domain/form/ExamTemplateForm.java
new file mode 100644
index 0000000..5e90b25
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/form/ExamTemplateForm.java
@@ -0,0 +1,112 @@
+package com.ycl.jxkg.domain.form;
+
+import com.ycl.jxkg.domain.base.AbsForm;
+import com.ycl.jxkg.domain.entity.ExamTemplate;
+import com.ycl.jxkg.group.Add;
+import com.ycl.jxkg.group.Update;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 闅忔満璇曞嵎妯℃澘琛ㄥ崟
+ *
+ * @author 寮�鍙戜汉鍛樺悕瀛�
+ * @since 2024-06-03
+ */
+@Data
+@ApiModel(value = "ExamTemplate琛ㄥ崟", description = "闅忔満璇曞嵎妯℃澘琛ㄥ崟")
+public class ExamTemplateForm extends AbsForm {
+
+    @NotBlank(message = "妯℃澘鍚嶇О涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("妯℃澘鍚嶇О")
+    private String name;
+
+    @NotNull(message = "璇曞嵎绉戠洰涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("璇曞嵎绉戠洰")
+    private Integer subjectId;
+
+    @NotNull(message = "鑰冭瘯鏃堕暱(鍒嗛挓)涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鑰冭瘯鏃堕暱(鍒嗛挓)")
+    private Integer suggestTime;
+
+    @NotNull(message = "鍗曢�夐鏁伴噺涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍗曢�夐鏁伴噺")
+    private Integer singleChoice;
+
+    @NotNull(message = "澶氶�夐鏁伴噺涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("澶氶�夐鏁伴噺")
+    private Integer multipleChoice;
+
+    @NotNull(message = "濉┖棰樻暟閲忎笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("濉┖棰樻暟閲�")
+    private Integer gapFilling;
+
+    @NotNull(message = "鍒ゆ柇鏁伴噺涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒ゆ柇鏁伴噺")
+    private Integer trueFalse;
+
+    @NotNull(message = "绠�绛旈鏁伴噺涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("绠�绛旈鏁伴噺")
+    private Integer shortAnswer;
+
+    @NotNull(message = "璁$畻棰樻暟閲忎笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("璁$畻棰樻暟閲�")
+    private Integer calculation;
+
+    @NotNull(message = "璇曞嵎鎬诲垎涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("璇曞嵎鎬诲垎")
+    private Integer score;
+
+    @NotBlank(message = "澶氶�夐鎵e垎鏂瑰紡涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("澶氶�夐鎵e垎鏂瑰紡")
+    private String deductType;
+
+    @NotNull(message = "鍒涘缓浜轰笉鑳戒负绌�", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓浜�")
+    private Integer createUser;
+
+    @NotNull(message = "鍒涘缓鏃堕棿涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    private LocalDateTime createTime;
+
+    @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("")
+    private BigDecimal singleScore;
+
+    @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("")
+    private BigDecimal multipleScore;
+
+    @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("")
+    private BigDecimal gapScore;
+
+    @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("")
+    private BigDecimal trueFalseScore;
+
+    @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("")
+    private BigDecimal shortAnswerScore;
+
+    @NotNull(message = "涓嶈兘涓虹┖", groups = {Add.class, Update.class})
+    @ApiModelProperty("")
+    private BigDecimal calculationScore;
+
+    public static ExamTemplate getEntityByForm(@NonNull ExamTemplateForm form, ExamTemplate entity) {
+        if(entity == null) {
+          entity = new ExamTemplate();
+        }
+        BeanUtils.copyProperties(form, entity);
+        return entity;
+    }
+
+}
diff --git a/src/main/java/com/ycl/jxkg/domain/query/ExamTemplateQuery.java b/src/main/java/com/ycl/jxkg/domain/query/ExamTemplateQuery.java
new file mode 100644
index 0000000..b61ccc3
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/query/ExamTemplateQuery.java
@@ -0,0 +1,17 @@
+package com.ycl.jxkg.domain.query;
+
+import com.ycl.jxkg.domain.base.AbsQuery;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 闅忔満璇曞嵎妯℃澘鏌ヨ
+ *
+ * @author 寮�鍙戜汉鍛樺悕瀛�
+ * @since 2024-06-03
+ */
+@Data
+@ApiModel(value = "ExamTemplate鏌ヨ", description = "闅忔満璇曞嵎妯℃澘鏌ヨ")
+public class ExamTemplateQuery extends AbsQuery {
+}
+
diff --git a/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamTemplateVO.java b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamTemplateVO.java
new file mode 100644
index 0000000..50a06de
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/domain/vo/admin/exam/ExamTemplateVO.java
@@ -0,0 +1,86 @@
+package com.ycl.jxkg.domain.vo.admin.exam;
+
+import com.ycl.jxkg.domain.base.AbsVo;
+import com.ycl.jxkg.domain.entity.ExamTemplate;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+import org.springframework.lang.NonNull;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 闅忔満璇曞嵎妯℃澘灞曠ず
+ *
+ * @author 寮�鍙戜汉鍛樺悕瀛�
+ * @since 2024-06-03
+ */
+@Data
+public class ExamTemplateVO extends AbsVo {
+
+    /** 妯℃澘鍚嶇О */
+    private String name;
+
+    /** 璇曞嵎绉戠洰 */
+    private Integer subjectId;
+
+    /** 鑰冭瘯鏃堕暱(鍒嗛挓) */
+    private Integer suggestTime;
+
+    /** 鍗曢�夐鏁伴噺 */
+    private Integer singleChoice;
+
+    /** 澶氶�夐鏁伴噺 */
+    private Integer multipleChoice;
+
+    /** 濉┖棰樻暟閲� */
+    private Integer gapFilling;
+
+    /** 鍒ゆ柇鏁伴噺 */
+    private Integer trueFalse;
+
+    /** 绠�绛旈鏁伴噺 */
+    private Integer shortAnswer;
+
+    /** 璁$畻棰樻暟閲� */
+    private Integer calculation;
+
+    /** 璇曞嵎鎬诲垎 */
+    private Integer score;
+
+    /** 澶氶�夐鎵e垎鏂瑰紡 */
+    private String deductType;
+
+    /** 鍒涘缓浜� */
+    private Integer createUser;
+
+    /** 鍒涘缓鏃堕棿 */
+    private Date createTime;
+
+    /**  */
+    private BigDecimal singleScore;
+
+    /**  */
+    private BigDecimal multipleScore;
+
+    /**  */
+    private BigDecimal gapScore;
+
+    /**  */
+    private BigDecimal trueFalseScore;
+
+    /**  */
+    private BigDecimal shortAnswerScore;
+
+    /**  */
+    private BigDecimal calculationScore;
+
+    public static ExamTemplateVO getVoByEntity(@NonNull ExamTemplate entity, ExamTemplateVO vo) {
+        if(vo == null) {
+            vo = new ExamTemplateVO();
+        }
+        BeanUtils.copyProperties(entity, vo);
+        return vo;
+    }
+
+}
diff --git a/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java b/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java
index bd2dcca..0a56336 100644
--- a/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java
+++ b/src/main/java/com/ycl/jxkg/listener/CalculateExamPaperAnswerListener.java
@@ -76,7 +76,7 @@
         examPaperQuestionCustomerAnswerService.insertList(examPaperQuestionCustomerAnswers);
 
         switch (ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) {
-            case Task: {
+            case RandomOrder: {
                 examCustomerAnswerService.insertOrUpdate(examPaper, examPaperAnswer, now);
                 break;
             }
diff --git a/src/main/java/com/ycl/jxkg/mapper/ExamTemplateMapper.java b/src/main/java/com/ycl/jxkg/mapper/ExamTemplateMapper.java
new file mode 100644
index 0000000..7d7e546
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/mapper/ExamTemplateMapper.java
@@ -0,0 +1,32 @@
+package com.ycl.jxkg.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.ycl.jxkg.domain.entity.ExamTemplate;
+import com.ycl.jxkg.domain.query.ExamTemplateQuery;
+import com.ycl.jxkg.domain.vo.admin.exam.ExamTemplateVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * 闅忔満璇曞嵎妯℃澘 Mapper 鎺ュ彛
+ *
+ * @author 寮�鍙戜汉鍛樺悕瀛�
+ * @since 2024-06-03
+ */
+@Mapper
+public interface ExamTemplateMapper extends BaseMapper<ExamTemplate> {
+
+    /**
+     * id鏌ユ壘闅忔満璇曞嵎妯℃澘
+     * @param id
+     * @return
+     */
+    ExamTemplateVO getById(Integer id);
+
+    /**
+    *  鍒嗛〉
+    */
+    IPage getPage(IPage page, @Param("query") ExamTemplateQuery query);
+
+}
diff --git a/src/main/java/com/ycl/jxkg/service/ExamTemplateService.java b/src/main/java/com/ycl/jxkg/service/ExamTemplateService.java
new file mode 100644
index 0000000..dc2c864
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/service/ExamTemplateService.java
@@ -0,0 +1,66 @@
+package com.ycl.jxkg.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.jxkg.base.Result;
+import com.ycl.jxkg.domain.entity.ExamTemplate;
+import com.ycl.jxkg.domain.form.ExamTemplateForm;
+import com.ycl.jxkg.domain.query.ExamTemplateQuery;
+
+import java.util.List;
+
+/**
+ * 闅忔満璇曞嵎妯℃澘 鏈嶅姟绫�
+ *
+ * @author 寮�鍙戜汉鍛樺悕瀛�
+ * @since 2024-06-03
+ */
+public interface ExamTemplateService extends IService<ExamTemplate> {
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    Result add(ExamTemplateForm form);
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    Result update(ExamTemplateForm form);
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    Result remove(List<String> ids);
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    Result removeById(String id);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    Result page(ExamTemplateQuery query);
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    Result detail(Integer id);
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    Result all();
+}
diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java
index 11fe208..2d977e5 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperAnswerServiceImpl.java
@@ -61,7 +61,7 @@
         ExamPaper examPaper = examPaperMapper.selectById(examPaperSubmitVO.getId());
         ExamPaperTypeEnum paperTypeEnum = ExamPaperTypeEnum.fromCode(examPaper.getPaperType());
         //浠诲姟璇曞嵎鍙兘鍋氫竴娆�
-        if (paperTypeEnum == ExamPaperTypeEnum.Task) {
+        if (paperTypeEnum == ExamPaperTypeEnum.RandomOrder) {
             ExamPaperAnswer examPaperAnswer = examPaperAnswerMapper.getByPidUid(examPaperSubmitVO.getId(), user.getId());
             if (null != examPaperAnswer)
                 return null;
@@ -118,7 +118,7 @@
 
         ExamPaperTypeEnum examPaperTypeEnum = ExamPaperTypeEnum.fromCode(examPaperAnswer.getPaperType());
         switch (examPaperTypeEnum) {
-            case Task:
+            case RandomOrder:
                 //浠诲姟璇曞嵎鎵规敼瀹屾垚鍚庯紝闇�瑕佹洿鏂颁换鍔$殑鐘舵��
                 ExamPaper examPaper = examPaperMapper.selectById(examPaperAnswer.getExamPaperId());
                 Integer taskId = examPaper.getTaskExamId();
diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java
index 227d86f..367300d 100644
--- a/src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java
+++ b/src/main/java/com/ycl/jxkg/service/impl/ExamPaperServiceImpl.java
@@ -128,7 +128,7 @@
         }).collect(Collectors.toList());
         vo.setTitleItems(examPaperTitleItemVOS);
         vo.setScore(ExamUtil.scoreToVM(examPaper.getScore()));
-        if (ExamPaperTypeEnum.TimeLimit == ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) {
+        if (ExamPaperTypeEnum.Random == ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) {
             List<String> limitDateTime = Arrays.asList(DateTimeUtil.dateFormat(examPaper.getLimitStartTime()), DateTimeUtil.dateFormat(examPaper.getLimitEndTime()));
             vo.setLimitDateTime(limitDateTime);
         }
@@ -170,7 +170,7 @@
         examPaper.setScore(score);
         examPaper.setGradeLevel(gradeLevel);
         List<String> dateTimes = examPaperEditRequestVO.getLimitDateTime();
-        if (ExamPaperTypeEnum.TimeLimit == ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) {
+        if (ExamPaperTypeEnum.Random == ExamPaperTypeEnum.fromCode(examPaper.getPaperType())) {
             examPaper.setLimitStartTime(DateTimeUtil.parse(dateTimes.get(0), DateTimeUtil.STANDER_FORMAT));
             examPaper.setLimitEndTime(DateTimeUtil.parse(dateTimes.get(1), DateTimeUtil.STANDER_FORMAT));
         }
diff --git a/src/main/java/com/ycl/jxkg/service/impl/ExamTemplateServiceImpl.java b/src/main/java/com/ycl/jxkg/service/impl/ExamTemplateServiceImpl.java
new file mode 100644
index 0000000..5ebc5cb
--- /dev/null
+++ b/src/main/java/com/ycl/jxkg/service/impl/ExamTemplateServiceImpl.java
@@ -0,0 +1,123 @@
+package com.ycl.jxkg.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Assert;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageInfo;
+import com.ycl.jxkg.base.Result;
+import com.ycl.jxkg.domain.entity.ExamTemplate;
+import com.ycl.jxkg.domain.form.ExamTemplateForm;
+import com.ycl.jxkg.domain.query.ExamTemplateQuery;
+import com.ycl.jxkg.domain.vo.admin.exam.ExamTemplateVO;
+import com.ycl.jxkg.mapper.ExamTemplateMapper;
+import com.ycl.jxkg.service.ExamTemplateService;
+import com.ycl.jxkg.utils.PageUtil;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 闅忔満璇曞嵎妯℃澘 鏈嶅姟瀹炵幇绫�
+ *
+ * @author 寮�鍙戜汉鍛樺悕瀛�
+ * @since 2024-06-03
+ */
+@Service
+@RequiredArgsConstructor
+public class ExamTemplateServiceImpl extends ServiceImpl<ExamTemplateMapper, ExamTemplate> implements ExamTemplateService {
+
+    private final ExamTemplateMapper examTemplateMapper;
+
+    /**
+     * 娣诲姞
+     * @param form
+     * @return
+     */
+    @Override
+    public Result add(ExamTemplateForm form) {
+        ExamTemplate entity = ExamTemplateForm.getEntityByForm(form, null);
+        baseMapper.insert(entity);
+        return Result.ok("娣诲姞鎴愬姛");
+    }
+
+    /**
+     * 淇敼
+     * @param form
+     * @return
+     */
+    @Override
+    public Result update(ExamTemplateForm form) {
+        ExamTemplate entity = baseMapper.selectById(form.getId());
+
+        // 涓虹┖鎶汭llegalArgumentException锛屽仛鍏ㄥ眬寮傚父澶勭悊
+        Assert.notNull(entity, "璁板綍涓嶅瓨鍦�");
+        BeanUtils.copyProperties(form, entity);
+        baseMapper.updateById(entity);
+        return Result.ok("淇敼鎴愬姛");
+    }
+
+    /**
+     * 鎵归噺鍒犻櫎
+     * @param ids
+     * @return
+     */
+    @Override
+    public Result remove(List<String> ids) {
+        baseMapper.deleteBatchIds(ids);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * id鍒犻櫎
+     * @param id
+     * @return
+     */
+    @Override
+    public Result removeById(String id) {
+        baseMapper.deleteById(id);
+        return Result.ok("鍒犻櫎鎴愬姛");
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     * @param query
+     * @return
+     */
+    @Override
+    public Result page(ExamTemplateQuery query) {
+        IPage<ExamTemplateVO> page = PageUtil.getPage(query, ExamTemplateVO.class);
+        baseMapper.getPage(page, query);
+        PageInfo<ExamTemplateVO> pageInfo = new PageInfo<>();
+        pageInfo.setList(page.getRecords());
+        pageInfo.setTotal(page.getTotal());
+        return Result.ok(pageInfo);
+    }
+
+    /**
+     * 鏍规嵁id鏌ユ壘
+     * @param id
+     * @return
+     */
+    @Override
+    public Result detail(Integer id) {
+        ExamTemplateVO vo = baseMapper.getById(id);
+        Assert.notNull(vo, "璁板綍涓嶅瓨鍦�");
+        return Result.ok(vo);
+    }
+
+    /**
+     * 鍒楄〃
+     * @return
+     */
+    @Override
+    public Result all() {
+        List<ExamTemplate> entities = baseMapper.selectList(null);
+        List<ExamTemplateVO> vos = entities.stream()
+                .map(entity -> ExamTemplateVO.getVoByEntity(entity, null))
+                .collect(Collectors.toList());
+        return Result.ok(vos);
+    }
+}
diff --git a/src/main/resources/mapper/ExamTemplateMapper.xml b/src/main/resources/mapper/ExamTemplateMapper.xml
new file mode 100644
index 0000000..9edd4df
--- /dev/null
+++ b/src/main/resources/mapper/ExamTemplateMapper.xml
@@ -0,0 +1,91 @@
+<?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="com.monkeylessey.mapper.ExamTemplateMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ycl.jxkg.domain.vo.admin.exam.ExamTemplateVO">
+        <result column="name" property="name" />
+        <result column="subject_id" property="subjectId" />
+        <result column="suggest_time" property="suggestTime" />
+        <result column="single_choice" property="singleChoice" />
+        <result column="multiple_choice" property="multipleChoice" />
+        <result column="gap_filling" property="gapFilling" />
+        <result column="true_false" property="trueFalse" />
+        <result column="short_answer" property="shortAnswer" />
+        <result column="calculation" property="calculation" />
+        <result column="score" property="score" />
+        <result column="deduct_type" property="deductType" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="single_score" property="singleScore" />
+        <result column="multiple_score" property="multipleScore" />
+        <result column="gap_score" property="gapScore" />
+        <result column="true_false_score" property="trueFalseScore" />
+        <result column="short_answer_score" property="shortAnswerScore" />
+        <result column="calculation__score" property="calculationScore" />
+    </resultMap>
+
+
+
+
+
+
+
+    <select id="getById" resultMap="BaseResultMap">
+        SELECT
+            TET.name,
+            TET.subject_id,
+            TET.suggest_time,
+            TET.single_choice,
+            TET.multiple_choice,
+            TET.gap_filling,
+            TET.true_false,
+            TET.short_answer,
+            TET.calculation,
+            TET.score,
+            TET.deduct_type,
+            TET.create_user,
+            TET.create_time,
+            TET.single_score,
+            TET.multiple_score,
+            TET.gap_score,
+            TET.true_false_score,
+            TET.short_answer_score,
+            TET.calculation__score,
+            TET.id
+        FROM
+            t_exam_template TET
+        WHERE
+            TET.id = #{id} AND TET.deleted = 0
+    </select>
+
+
+    <select id="getPage" resultMap="BaseResultMap">
+        SELECT
+            TET.name,
+            TET.subject_id,
+            TET.suggest_time,
+            TET.single_choice,
+            TET.multiple_choice,
+            TET.gap_filling,
+            TET.true_false,
+            TET.short_answer,
+            TET.calculation,
+            TET.score,
+            TET.deduct_type,
+            TET.create_user,
+            TET.create_time,
+            TET.single_score,
+            TET.multiple_score,
+            TET.gap_score,
+            TET.true_false_score,
+            TET.short_answer_score,
+            TET.calculation__score,
+            TET.id
+        FROM
+            t_exam_template TET
+        WHERE
+            TET.deleted = 0
+    </select>
+
+</mapper>

--
Gitblit v1.8.0