From ccca8c65b3c76a9021a471a3667d61d965a4f2cb Mon Sep 17 00:00:00 2001
From: xiangpei <xiangpei@timesnew.cn>
Date: 星期六, 11 五月 2024 18:04:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'

---
 src/main/java/com/mindskip/xzs/domain/ExamPaperAnswer.java                         |   13 +
 src/main/java/com/mindskip/xzs/controller/admin/ExamPaperController.java           |   15 +
 src/main/java/com/mindskip/xzs/controller/student/QuestionAndAnswerController.java |   34 +++
 src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java              |   57 ++---
 src/main/resources/mapper/QuestionAnswerMapper.xml                                 |   18 +
 src/main/java/com/mindskip/xzs/repository/UserMapper.java                          |    3 
 src/main/resources/mapper/UserMapper.xml                                           |   16 +
 src/main/java/com/mindskip/xzs/domain/enums/AnswerInvalidEnum.java                 |   31 +++
 src/main/java/com/mindskip/xzs/repository/ExamPaperMapper.java                     |    4 
 src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java               |    6 
 src/main/resources/mapper/ExamPaperMapper.xml                                      |   15 -
 src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java          |   14 +
 src/main/java/com/mindskip/xzs/domain/Feedback.java                                |    9 
 src/main/java/com/mindskip/xzs/controller/admin/QuestionAnswerController.java      |   76 +++++++
 src/main/java/com/mindskip/xzs/domain/vo/QuestionAnswerVO.java                     |   30 +++
 src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java                   |    5 
 src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java                    |    1 
 src/main/java/com/mindskip/xzs/controller/student/ExamPaperAnswerController.java   |   11 -
 src/main/java/com/mindskip/xzs/service/QuestionAnswerService.java                  |   19 +
 src/main/java/com/mindskip/xzs/controller/student/FeedBackController.java          |    2 
 src/main/java/com/mindskip/xzs/controller/admin/FeedBackController.java            |    2 
 src/main/resources/mapper/ExamPaperAnswerMapper.xml                                |   31 ++
 src/main/java/com/mindskip/xzs/service/impl/QuestionAnswerServiceImpl.java         |   58 +++++
 src/main/java/com/mindskip/xzs/repository/QuestionAnswerMapper.java                |   20 ++
 src/main/java/com/mindskip/xzs/service/ExamPaperService.java                       |    4 
 /dev/null                                                                          |   16 -
 src/main/java/com/mindskip/xzs/domain/QuestionAnswer.java                          |   33 +++
 src/main/resources/mapper/FeedbackMapper.xml                                       |    3 
 src/main/java/com/mindskip/xzs/domain/enums/QuestionAnswerStatusEnum.java          |   31 +++
 src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperEditRequestVM.java    |    1 
 src/main/java/com/mindskip/xzs/domain/enums/UserConditionEnum.java                 |    1 
 src/main/java/com/mindskip/xzs/domain/vo/FeedbackVO.java                           |    2 
 src/main/java/com/mindskip/xzs/service/UserService.java                            |    3 
 33 files changed, 484 insertions(+), 100 deletions(-)

diff --git a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
index 5228899..1d3da20 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/DepartmentController.java
@@ -4,6 +4,7 @@
 import com.mindskip.xzs.base.BaseApiController;
 import com.mindskip.xzs.base.RestResponse;
 import com.mindskip.xzs.domain.Department;
+import com.mindskip.xzs.domain.ExamPaper;
 import com.mindskip.xzs.domain.User;
 import com.mindskip.xzs.domain.UserDepartment;
 import com.mindskip.xzs.domain.vo.BaseSelect;
@@ -93,7 +94,7 @@
     }
 
     @RequestMapping(value = "/getDepartmentUser", method = RequestMethod.POST)
-    public RestResponse<List<DepartmentVO>> getUserDepartment(){
+    public RestResponse<List<DepartmentVO>> getUserDepartment(Integer examPaperId){
         User currentUser = webContext.getCurrentUser();
         Integer deptId = null;
         if (Objects.nonNull(currentUser)) {
@@ -108,7 +109,16 @@
                     List<UserDepartment> userDepartments = userDepartmentMapper.selectByDepartmentId(e.getId());
                     List<User> list = new ArrayList<>();
                     for (UserDepartment userDepartment : userDepartments) {
-                        User user = userService.getUserById(userDepartment.getUserId());
+                        User user;
+                        // 閫夋嫨琛ヨ�冪敤鎴锋椂鏌ヨ绗﹀悎琛ヨ�冩潯浠剁殑鐢ㄦ埛
+                        if (examPaperId != null) {
+                            ExamPaper examPaper = new ExamPaper();
+                            examPaper.setCreateUser(userDepartment.getUserId());
+                            examPaper.setId(examPaperId);
+                            user = userService.getUserByExam(examPaper);
+                        } else {
+                            user = userService.getUserById(userDepartment.getUserId());
+                        }
                         if (ObjectUtils.isNotEmpty(user)) {
                             list.add(user);
                         }
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/ExamMissController.java b/src/main/java/com/mindskip/xzs/controller/admin/ExamMissController.java
deleted file mode 100644
index a2ed3a5..0000000
--- a/src/main/java/com/mindskip/xzs/controller/admin/ExamMissController.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.mindskip.xzs.controller.admin;
-
-import com.mindskip.xzs.service.ExamMissService;
-import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * @author gonghl
- * @since 2024/5/9 涓嬪崍 5:58
- */
-
-@RestController
-@RequiredArgsConstructor
-public class ExamMissController {
-
-    private final ExamMissService examMissService;
-
-
-
-}
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperController.java b/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperController.java
index 6881c2c..662afdb 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/ExamPaperController.java
@@ -87,13 +87,20 @@
         ExamPaper examPaper = examPaperService.savePaperFromVM(model, getCurrentUser());
         ExamPaperEditRequestVO newVM = examPaperService.examPaperToVM(examPaper.getId());
 
-        // 鍔犲叆寤舵椂闃熷垪锛屽畾鏃惰瘯鍗风粨鏉熸椂璁板綍缂鸿�冨鐢�
-        if (examPaper.getPaperType() == 4) {
-            examPaperService.addTimeTask(examPaper);
-        }
         return RestResponse.ok(newVM);
     }
 
+    /**
+     * 琛ヨ��
+     * @param model 鏁版嵁
+     * @return 鎿嶄綔缁撴灉
+     */
+    @RequestMapping(value = "/missExam", method = RequestMethod.POST)
+    public RestResponse<String> missExam(@RequestBody ExamPaperEditRequestVM model) {
+        examPaperService.missExam(model);
+        return RestResponse.ok("鎿嶄綔鎴愬姛");
+    }
+
     @RequestMapping(value = "/select/{id}", method = RequestMethod.POST)
     public RestResponse<ExamPaperEditRequestVO> select(@PathVariable Integer id) {
         ExamPaperEditRequestVO vm = examPaperService.examPaperToVM(id);
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/FeedBackController.java b/src/main/java/com/mindskip/xzs/controller/admin/FeedBackController.java
index 94c4370..43180d2 100644
--- a/src/main/java/com/mindskip/xzs/controller/admin/FeedBackController.java
+++ b/src/main/java/com/mindskip/xzs/controller/admin/FeedBackController.java
@@ -15,7 +15,7 @@
  */
 
 @RequiredArgsConstructor
-@RestController("adminFeedBackController")
+@RestController("AdminFeedBackController")
 @RequestMapping("/api/admin/feedback")
 public class FeedBackController extends BaseApiController {
 
diff --git a/src/main/java/com/mindskip/xzs/controller/admin/QuestionAnswerController.java b/src/main/java/com/mindskip/xzs/controller/admin/QuestionAnswerController.java
new file mode 100644
index 0000000..b13a647
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/controller/admin/QuestionAnswerController.java
@@ -0,0 +1,76 @@
+package com.mindskip.xzs.controller.admin;
+
+import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.base.BaseApiController;
+import com.mindskip.xzs.base.RestResponse;
+import com.mindskip.xzs.domain.QuestionAnswer;
+import com.mindskip.xzs.domain.vo.QuestionAnswerVO;
+import com.mindskip.xzs.service.QuestionAnswerService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author gonghl
+ * @since 2024/5/11 涓嬪崍 3:57
+ */
+
+@RequiredArgsConstructor
+@RestController("AdminQuestionAnswerController")
+@RequestMapping("/api/admin/questionAnswer")
+public class QuestionAnswerController extends BaseApiController {
+
+    private final QuestionAnswerService questionAnswerService;
+
+    /**
+     * 淇濆瓨銆佷慨鏀归棶绛�
+     */
+    @PostMapping("save")
+    public RestResponse<String> saveQuestionAnswer(@RequestBody QuestionAnswer questionAnswer) {
+        questionAnswerService.saveOrUpdate(questionAnswer);
+        return RestResponse.ok("鎿嶄綔鎴愬姛");
+    }
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     */
+    @PostMapping("page")
+    public RestResponse<PageInfo<QuestionAnswerVO>> page(@RequestBody QuestionAnswerVO questionAnswer) {
+        return RestResponse.ok(questionAnswerService.questionAnswerPage(questionAnswer));
+    }
+
+    /**
+     * 鍒犻櫎闂瓟
+     */
+    @PostMapping("delete/{id}")
+    public RestResponse<String> delete(@PathVariable Integer id) {
+        questionAnswerService.removeById(id);
+        return RestResponse.ok("鎿嶄綔鎴愬姛");
+    }
+
+    /**
+     * 鏌ヨ闂瓟
+     */
+    @PostMapping("query/{id}")
+    public RestResponse<QuestionAnswer> query(@PathVariable Integer id) {
+        return RestResponse.ok(questionAnswerService.getById(id));
+    }
+
+    /**
+     * 淇敼闂瓟
+     */
+    @PostMapping("update")
+    public RestResponse<String> update(@RequestBody QuestionAnswer questionAnswer) {
+        questionAnswerService.updateById(questionAnswer);
+        return RestResponse.ok("鎿嶄綔鎴愬姛");
+    }
+
+    /**
+     * 淇敼闂瓟鐘舵��
+     */
+    @PostMapping("updateStatus/{id}")
+    public RestResponse<String> updateStatus(@PathVariable Integer id) {
+        questionAnswerService.updateStatus(id);
+        return RestResponse.ok("鎿嶄綔鎴愬姛");
+    }
+
+}
diff --git a/src/main/java/com/mindskip/xzs/controller/student/ExamPaperAnswerController.java b/src/main/java/com/mindskip/xzs/controller/student/ExamPaperAnswerController.java
index 155183d..d08fe72 100644
--- a/src/main/java/com/mindskip/xzs/controller/student/ExamPaperAnswerController.java
+++ b/src/main/java/com/mindskip/xzs/controller/student/ExamPaperAnswerController.java
@@ -34,17 +34,15 @@
     private final ApplicationEventPublisher eventPublisher;
     private final ExamPaperSubjectService examPaperSubjectService;
     private final ExamTemplatesUserCountService examTemplatesUserCountService;
-    private final ExamMissService examMissService;
 
     @Autowired
-    public ExamPaperAnswerController(ExamPaperAnswerService examPaperAnswerService, ExamPaperService examPaperService, SubjectService subjectService, ApplicationEventPublisher eventPublisher, ExamPaperSubjectService examPaperSubjectService, ExamTemplatesUserCountService examTemplatesUserCountService, ExamMissService examMissService) {
+    public ExamPaperAnswerController(ExamPaperAnswerService examPaperAnswerService, ExamPaperService examPaperService, SubjectService subjectService, ApplicationEventPublisher eventPublisher, ExamPaperSubjectService examPaperSubjectService, ExamTemplatesUserCountService examTemplatesUserCountService) {
         this.examPaperAnswerService = examPaperAnswerService;
         this.examPaperService = examPaperService;
         this.subjectService = subjectService;
         this.eventPublisher = eventPublisher;
         this.examPaperSubjectService = examPaperSubjectService;
         this.examTemplatesUserCountService = examTemplatesUserCountService;
-        this.examMissService = examMissService;
     }
 
 
@@ -100,13 +98,6 @@
             examTemplatesUserCountService.add(examTemplatesUserCount);
         }
 
-        // 鑷姩鎻愪氦瀹氫箟涓虹己鑰�
-        if (examPaperSubmitVM.isAutoCommit()) {
-            ExamMiss examMiss = new ExamMiss();
-            examMiss.setExamId(examPaperSubmitVM.getId());
-            examMiss.setUserId(user.getId());
-            examMissService.save(examMiss);
-        }
         return RestResponse.ok(scoreVm);
     }
 
diff --git a/src/main/java/com/mindskip/xzs/controller/student/FeedBackController.java b/src/main/java/com/mindskip/xzs/controller/student/FeedBackController.java
index 14a5048..566c178 100644
--- a/src/main/java/com/mindskip/xzs/controller/student/FeedBackController.java
+++ b/src/main/java/com/mindskip/xzs/controller/student/FeedBackController.java
@@ -16,7 +16,7 @@
  */
 
 @RequiredArgsConstructor
-@RestController("studentFeedBackController")
+@RestController("StudentFeedBackController")
 @RequestMapping("/api/student/feedback")
 public class FeedBackController extends BaseApiController {
 
diff --git a/src/main/java/com/mindskip/xzs/controller/student/QuestionAndAnswerController.java b/src/main/java/com/mindskip/xzs/controller/student/QuestionAndAnswerController.java
new file mode 100644
index 0000000..2feeac4
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/controller/student/QuestionAndAnswerController.java
@@ -0,0 +1,34 @@
+package com.mindskip.xzs.controller.student;
+
+import com.mindskip.xzs.base.BaseApiController;
+import com.mindskip.xzs.base.RestResponse;
+import com.mindskip.xzs.domain.QuestionAnswer;
+import com.mindskip.xzs.service.QuestionAnswerService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * @author gonghl
+ * @since 2024/5/11 涓嬪崍 3:57
+ */
+
+@RequiredArgsConstructor
+@RestController("StudentQuestionAndAnswerController")
+@RequestMapping("/api/student/questionAnswer")
+public class QuestionAndAnswerController extends BaseApiController {
+
+    private final QuestionAnswerService questionAnswerService;
+
+    /**
+     * 鏌ヨ
+     */
+    @PostMapping("list")
+    public RestResponse<List<QuestionAnswer>> page() {
+        return RestResponse.ok(questionAnswerService.list());
+    }
+
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/ExamMiss.java b/src/main/java/com/mindskip/xzs/domain/ExamMiss.java
deleted file mode 100644
index e972e42..0000000
--- a/src/main/java/com/mindskip/xzs/domain/ExamMiss.java
+++ /dev/null
@@ -1,25 +0,0 @@
-package com.mindskip.xzs.domain;
-
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * @author gonghl
- */
-@TableName(value = "t_exam_miss")
-@Data
-public class ExamMiss implements Serializable {
-
-    @TableId(type = IdType.AUTO)
-    private Integer id;
-
-    private Integer examId;
-
-    private Integer userId;
-
-    private static final long serialVersionUID = 1L;
-}
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/domain/ExamPaperAnswer.java b/src/main/java/com/mindskip/xzs/domain/ExamPaperAnswer.java
index 0e8aa9d..d2c2eec 100644
--- a/src/main/java/com/mindskip/xzs/domain/ExamPaperAnswer.java
+++ b/src/main/java/com/mindskip/xzs/domain/ExamPaperAnswer.java
@@ -1,5 +1,7 @@
 package com.mindskip.xzs.domain;
 
+import com.mindskip.xzs.domain.enums.AnswerInvalidEnum;
+
 import java.io.Serializable;
 import java.util.Date;
 
@@ -83,8 +85,19 @@
 
     private String userName;
 
+    /**
+     * 鏄惁浣滃簾锛�1/0 鏄�/鍚︼紙浣滃簾浠h〃闇�瑕佽ˉ鑰冿級
+     */
+    private AnswerInvalidEnum invalid;
 
 
+    public AnswerInvalidEnum getInvalid() {
+        return invalid;
+    }
+
+    public void setInvalid(AnswerInvalidEnum invalid) {
+        this.invalid = invalid;
+    }
 
     public Integer getId() {
         return id;
diff --git a/src/main/java/com/mindskip/xzs/domain/Feedback.java b/src/main/java/com/mindskip/xzs/domain/Feedback.java
index 7cbb4d0..e8ad14b 100644
--- a/src/main/java/com/mindskip/xzs/domain/Feedback.java
+++ b/src/main/java/com/mindskip/xzs/domain/Feedback.java
@@ -1,14 +1,10 @@
 package com.mindskip.xzs.domain;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
 import lombok.Data;
 
 import java.io.Serializable;
 import java.time.LocalDateTime;
-import java.util.Date;
 
 /**
  * @author gonghl
@@ -34,5 +30,8 @@
 
     private LocalDateTime fixTime;
 
+    @TableLogic
+    private Boolean deleted;
+
     private static final long serialVersionUID = 1L;
 }
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/domain/QuestionAnswer.java b/src/main/java/com/mindskip/xzs/domain/QuestionAnswer.java
new file mode 100644
index 0000000..1c29c77
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/QuestionAnswer.java
@@ -0,0 +1,33 @@
+package com.mindskip.xzs.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.mindskip.xzs.domain.enums.QuestionAnswerStatusEnum;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author gonghl
+ * @TableName t_question_answer
+ */
+@TableName(value = "t_question_answer")
+@Data
+public class QuestionAnswer implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    private String question;
+
+    private String answer;
+
+    private QuestionAnswerStatusEnum status;
+
+    @TableLogic
+    private Boolean deleted;
+
+    private static final long serialVersionUID = 1L;
+}
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/domain/enums/AnswerInvalidEnum.java b/src/main/java/com/mindskip/xzs/domain/enums/AnswerInvalidEnum.java
new file mode 100644
index 0000000..b60e0e4
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/enums/AnswerInvalidEnum.java
@@ -0,0 +1,31 @@
+package com.mindskip.xzs.domain.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Getter;
+
+/**
+ * 鑰冭瘯浣滃簾
+ *
+ * @author gonghl
+ */
+@Getter
+public enum AnswerInvalidEnum {
+
+    VALID("0", "鏈夋晥"),
+    INVALID("1", "鏃犳晥"),
+    ;
+
+
+    @EnumValue // 鏍囨槑璇ュ瓧娈靛瓨鍏ユ暟鎹簱
+    private final String code;
+
+    @JsonValue // 鏍囨槑鍦ㄨ浆JSON鏃朵娇鐢ㄨ瀛楁锛屽嵆鍝嶅簲鏃�
+    private final String desc;
+
+    AnswerInvalidEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/enums/QuestionAnswerStatusEnum.java b/src/main/java/com/mindskip/xzs/domain/enums/QuestionAnswerStatusEnum.java
new file mode 100644
index 0000000..7bd8a05
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/enums/QuestionAnswerStatusEnum.java
@@ -0,0 +1,31 @@
+package com.mindskip.xzs.domain.enums;
+
+import com.baomidou.mybatisplus.annotation.EnumValue;
+import com.fasterxml.jackson.annotation.JsonValue;
+import lombok.Getter;
+
+/**
+ * 闂瓟鐘舵��
+ *
+ * @author gonghl
+ */
+@Getter
+public enum QuestionAnswerStatusEnum {
+
+    ENABLE("1", "鍚敤"),
+    DISABLE("2", "绂佺敤"),
+    ;
+
+
+    @EnumValue // 鏍囨槑璇ュ瓧娈靛瓨鍏ユ暟鎹簱
+    private final String code;
+
+    @JsonValue // 鏍囨槑鍦ㄨ浆JSON鏃朵娇鐢ㄨ瀛楁锛屽嵆鍝嶅簲鏃�
+    private final String desc;
+
+    QuestionAnswerStatusEnum(String code, String desc) {
+        this.code = code;
+        this.desc = desc;
+    }
+
+}
diff --git a/src/main/java/com/mindskip/xzs/domain/enums/UserConditionEnum.java b/src/main/java/com/mindskip/xzs/domain/enums/UserConditionEnum.java
index fdcaf01..c1fa8c2 100644
--- a/src/main/java/com/mindskip/xzs/domain/enums/UserConditionEnum.java
+++ b/src/main/java/com/mindskip/xzs/domain/enums/UserConditionEnum.java
@@ -12,6 +12,7 @@
 @Getter
 public enum UserConditionEnum {
 
+    NORMAL("0", "姝e父"),
     SICK("1", "鐥呭亣"),
     BUSINESS_TRIP("2", "鍑哄樊"),
     OTHER("3", "鍏朵粬"),
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/ExamMissVO.java b/src/main/java/com/mindskip/xzs/domain/vo/ExamMissVO.java
deleted file mode 100644
index 04eb497..0000000
--- a/src/main/java/com/mindskip/xzs/domain/vo/ExamMissVO.java
+++ /dev/null
@@ -1,24 +0,0 @@
-package com.mindskip.xzs.domain.vo;
-
-import lombok.Data;
-
-import java.io.Serializable;
-
-/**
- * @author gonghl
- */
-@Data
-public class ExamMissVO implements Serializable {
-
-    private Integer id;
-
-    private Integer examId;
-
-    private Integer examName;
-
-    private Integer userId;
-
-    private Integer userName;
-
-    private static final long serialVersionUID = 1L;
-}
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/FeedbackVO.java b/src/main/java/com/mindskip/xzs/domain/vo/FeedbackVO.java
index 2e3f6dd..cefa44c 100644
--- a/src/main/java/com/mindskip/xzs/domain/vo/FeedbackVO.java
+++ b/src/main/java/com/mindskip/xzs/domain/vo/FeedbackVO.java
@@ -31,6 +31,8 @@
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime fixTime;
 
+    private Boolean deleted;
+
     private Integer pageIndex;
 
     private Integer pageSize;
diff --git a/src/main/java/com/mindskip/xzs/domain/vo/QuestionAnswerVO.java b/src/main/java/com/mindskip/xzs/domain/vo/QuestionAnswerVO.java
new file mode 100644
index 0000000..8991f5c
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/domain/vo/QuestionAnswerVO.java
@@ -0,0 +1,30 @@
+package com.mindskip.xzs.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author gonghl
+ * @TableName t_question_answer
+ */
+@Data
+public class QuestionAnswerVO implements Serializable {
+
+    @TableId(type = IdType.AUTO)
+    private Integer id;
+
+    private String question;
+
+    private String answer;
+
+    private Boolean deleted;
+
+    private static final long serialVersionUID = 1L;
+
+    private Integer pageIndex;
+
+    private Integer pageSize;
+}
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/queue/ExamPaperTimeTask.java b/src/main/java/com/mindskip/xzs/queue/ExamPaperTimeTask.java
deleted file mode 100644
index a6831b1..0000000
--- a/src/main/java/com/mindskip/xzs/queue/ExamPaperTimeTask.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package com.mindskip.xzs.queue;
-
-import lombok.Getter;
-import lombok.Setter;
-
-import java.util.concurrent.Delayed;
-import java.util.concurrent.TimeUnit;
-
-/**
- * @author gonghl
- */
-
-@Getter
-@Setter
-public class ExamPaperTimeTask implements Delayed {
-
-    private long examPaperId;
-
-    private long expiry;
-
-    @Override
-    public long getDelay(TimeUnit unit) {
-        return unit.convert(expiry - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
-    }
-
-    @Override
-    public int compareTo(Delayed o) {
-        return Long.compare(expiry, ((ExamPaperTimeTask) o).expiry);
-    }
-
-}
\ No newline at end of file
diff --git a/src/main/java/com/mindskip/xzs/repository/ExamMissMapper.java b/src/main/java/com/mindskip/xzs/repository/ExamMissMapper.java
deleted file mode 100644
index 43a45ce..0000000
--- a/src/main/java/com/mindskip/xzs/repository/ExamMissMapper.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.mindskip.xzs.repository;
-
-import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.mindskip.xzs.domain.ExamMiss;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * @author gonghl
- * @description 閽堝琛ㄣ�恡_exam_miss(璇曞嵎缂鸿��)銆戠殑鏁版嵁搴撴搷浣淢apper
- * @createDate 2024-05-09 15:41:36
- * @Entity com.mindskip.xzs.examMiss.ExamMiss
- */
-@Mapper
-public interface ExamMissMapper extends BaseMapper<ExamMiss> {
-
-}
-
-
-
-
diff --git a/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java b/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
index 8c6d5ec..a1ff9fa 100644
--- a/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/ExamPaperAnswerMapper.java
@@ -1,11 +1,14 @@
 package com.mindskip.xzs.repository;
 
+import com.mindskip.xzs.domain.ExamPaper;
 import com.mindskip.xzs.domain.ExamPaperAnswer;
 import com.mindskip.xzs.domain.ExamTemplatesUserCount;
 import com.mindskip.xzs.domain.ScoreTemplatesUserCount;
 import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.vo.ScoreTemplatesCountVO;
 import com.mindskip.xzs.domain.vo.TeamplatesUserExcelVO;
+import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVM;
+import com.mindskip.xzs.viewmodel.admin.exam.ExamPaperEditRequestVO;
 import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradePageRequestVM;
 import com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradeQuery;
 import com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageVM;
@@ -46,7 +49,8 @@
 
     List<TeamplatesUserExcelVO> getByTimeOne();
 
+    void setMissExam(ExamPaperEditRequestVM model);
 
-
+    void insertDefault(ExamPaperEditRequestVM model);
 
 }
diff --git a/src/main/java/com/mindskip/xzs/repository/ExamPaperMapper.java b/src/main/java/com/mindskip/xzs/repository/ExamPaperMapper.java
index 2e81460..7997772 100644
--- a/src/main/java/com/mindskip/xzs/repository/ExamPaperMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/ExamPaperMapper.java
@@ -1,6 +1,5 @@
 package com.mindskip.xzs.repository;
 
-import com.mindskip.xzs.domain.ExamMiss;
 import com.mindskip.xzs.domain.ExamPaper;
 import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.vo.PaperExcelVO;
@@ -39,7 +38,4 @@
 
     List<PaperExcelVO> getPaperExcelById(@Param("id") Integer id);
 
-    void saveMissExamUser(long examPaperId);
-
-    List<ExamPaper> selectTimeTaskPaper(Date time);
 }
diff --git a/src/main/java/com/mindskip/xzs/repository/QuestionAnswerMapper.java b/src/main/java/com/mindskip/xzs/repository/QuestionAnswerMapper.java
new file mode 100644
index 0000000..aa04b79
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/repository/QuestionAnswerMapper.java
@@ -0,0 +1,20 @@
+package com.mindskip.xzs.repository;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.mindskip.xzs.domain.QuestionAnswer;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * @author gonghl
+ * @description 閽堝琛ㄣ�恡_question_answer(闂瓟)銆戠殑鏁版嵁搴撴搷浣淢apper
+ * @createDate 2024-05-11 11:53:55
+ * @Entity com.mindskip.xzs.questionAnswer.QuestionAnswer
+ */
+@Mapper
+public interface QuestionAnswerMapper extends BaseMapper<QuestionAnswer> {
+
+}
+
+
+
+
diff --git a/src/main/java/com/mindskip/xzs/repository/UserMapper.java b/src/main/java/com/mindskip/xzs/repository/UserMapper.java
index 1895320..4ae498b 100644
--- a/src/main/java/com/mindskip/xzs/repository/UserMapper.java
+++ b/src/main/java/com/mindskip/xzs/repository/UserMapper.java
@@ -1,5 +1,6 @@
 package com.mindskip.xzs.repository;
 
+import com.mindskip.xzs.domain.ExamPaper;
 import com.mindskip.xzs.domain.ExamPaperAnswer;
 import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.User;
@@ -158,4 +159,6 @@
      * @param deptId
      */
     void clearDeptAdmin(List<Integer> userIds, @Param("deptId") Integer deptId);
+
+    User getUserByExam(ExamPaper examPaper);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/ExamMissService.java b/src/main/java/com/mindskip/xzs/service/ExamMissService.java
deleted file mode 100644
index 9463aeb..0000000
--- a/src/main/java/com/mindskip/xzs/service/ExamMissService.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.mindskip.xzs.service;
-
-import com.baomidou.mybatisplus.extension.service.IService;
-import com.mindskip.xzs.domain.ExamMiss;
-
-/**
- * @author gonghl
- * @description 閽堝琛ㄣ�恡_exam_miss(璇曞嵎缂鸿��)銆戠殑鏁版嵁搴撴搷浣淪ervice
- * @createDate 2024-05-09 15:41:36
- */
-public interface ExamMissService extends IService<ExamMiss> {
-
-}
diff --git a/src/main/java/com/mindskip/xzs/service/ExamPaperService.java b/src/main/java/com/mindskip/xzs/service/ExamPaperService.java
index 691162c..ba50cd5 100644
--- a/src/main/java/com/mindskip/xzs/service/ExamPaperService.java
+++ b/src/main/java/com/mindskip/xzs/service/ExamPaperService.java
@@ -38,7 +38,5 @@
 
     List<PaperExcelVO> getPaperExcelById(Integer id);
 
-    void addTimeTask(ExamPaper examPaper);
-
-    void saveMissExamUser(long examPaperId);
+    void missExam(ExamPaperEditRequestVM model);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/QuestionAnswerService.java b/src/main/java/com/mindskip/xzs/service/QuestionAnswerService.java
new file mode 100644
index 0000000..4808151
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/service/QuestionAnswerService.java
@@ -0,0 +1,19 @@
+package com.mindskip.xzs.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.domain.QuestionAnswer;
+import com.mindskip.xzs.domain.vo.QuestionAnswerVO;
+
+/**
+ * @author gonghl
+ * @description 閽堝琛ㄣ�恡_question_answer(闂瓟)銆戠殑鏁版嵁搴撴搷浣淪ervice
+ * @createDate 2024-05-11 11:53:55
+ */
+public interface QuestionAnswerService extends IService<QuestionAnswer> {
+
+    PageInfo<QuestionAnswerVO> questionAnswerPage(QuestionAnswerVO questionAnswer);
+
+    void updateStatus(Integer id);
+
+}
diff --git a/src/main/java/com/mindskip/xzs/service/UserService.java b/src/main/java/com/mindskip/xzs/service/UserService.java
index ab61ec6..6fc577d 100644
--- a/src/main/java/com/mindskip/xzs/service/UserService.java
+++ b/src/main/java/com/mindskip/xzs/service/UserService.java
@@ -1,5 +1,6 @@
 package com.mindskip.xzs.service;
 
+import com.mindskip.xzs.domain.ExamPaper;
 import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.User;
 import com.mindskip.xzs.domain.vo.UserVO;
@@ -135,4 +136,6 @@
     User getUserByRealName(String realName);
 
     void setStatus(UserVO user);
+
+    User getUserByExam(ExamPaper examPaper);
 }
diff --git a/src/main/java/com/mindskip/xzs/service/impl/ExamMissServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/ExamMissServiceImpl.java
deleted file mode 100644
index fc1a371..0000000
--- a/src/main/java/com/mindskip/xzs/service/impl/ExamMissServiceImpl.java
+++ /dev/null
@@ -1,21 +0,0 @@
-package com.mindskip.xzs.service.impl;
-
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.mindskip.xzs.domain.ExamMiss;
-import com.mindskip.xzs.repository.ExamMissMapper;
-import com.mindskip.xzs.service.ExamMissService;
-import org.springframework.stereotype.Service;
-
-/**
- * @author gonghl
- * @description 閽堝琛ㄣ�恡_exam_miss(璇曞嵎缂鸿��)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
- * @createDate 2024-05-09 15:41:36
- */
-@Service
-public class ExamMissServiceImpl extends ServiceImpl<ExamMissMapper, ExamMiss> implements ExamMissService {
-
-}
-
-
-
-
diff --git a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
index f434bc1..67543e5 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/ExamPaperServiceImpl.java
@@ -10,7 +10,7 @@
 import com.mindskip.xzs.domain.exam.ExamPaperTitleItemObject;
 import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.vo.PaperExcelVO;
-import com.mindskip.xzs.queue.ExamPaperTimeTask;
+import com.mindskip.xzs.repository.ExamPaperAnswerMapper;
 import com.mindskip.xzs.repository.ExamPaperMapper;
 import com.mindskip.xzs.repository.QuestionMapper;
 import com.mindskip.xzs.repository.UserDepartmentMapper;
@@ -20,22 +20,21 @@
 import com.mindskip.xzs.utility.ExamUtil;
 import com.mindskip.xzs.utility.JsonUtil;
 import com.mindskip.xzs.utility.ModelMapperSingle;
-import com.mindskip.xzs.utility.minio.DateUtils;
 import com.mindskip.xzs.viewmodel.admin.exam.*;
 import com.mindskip.xzs.viewmodel.admin.question.ExamQuestionVO;
 import com.mindskip.xzs.viewmodel.admin.question.QuestionEditRequestVM;
 import com.mindskip.xzs.viewmodel.student.dashboard.PaperFilter;
 import com.mindskip.xzs.viewmodel.student.dashboard.PaperInfo;
 import com.mindskip.xzs.viewmodel.student.exam.ExamPaperPageVM;
+import org.apache.commons.lang3.ObjectUtils;
 import org.modelmapper.ModelMapper;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
 
-import javax.annotation.PostConstruct;
 import java.util.*;
-import java.util.concurrent.DelayQueue;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.stream.Collectors;
 
@@ -44,6 +43,7 @@
 
     protected final static ModelMapper modelMapper = ModelMapperSingle.Instance();
     private final ExamPaperMapper examPaperMapper;
+    private final ExamPaperAnswerMapper examPaperAnswerMapper;
     private final QuestionMapper questionMapper;
     private final TextContentService textContentService;
     private final QuestionService questionService;
@@ -55,29 +55,14 @@
     private final UserService userService;
     private final UserDepartmentMapper userDepartmentMapper;
     private final DepartmentService departmentService;
-    private final DelayQueue<ExamPaperTimeTask> QUEUE = new DelayQueue<>();
 
 
-    /**
-     * 灏嗚繘琛屼腑鐨勫畾鏃惰瘯鍗峰姞鍏ュ埌闃熷垪涓紝骞跺惎鍔ㄤ竴涓嚎绋嬫潵杞闃熷垪
-     */
-    @PostConstruct
-    public void pollQueue() {
-        examPaperMapper.selectTimeTaskPaper(DateUtils.getNowDate()).forEach(this::addTimeTask);
-        new Thread(() -> {
-            try {
-                ExamPaperTimeTask task = QUEUE.take();
-                saveMissExamUser(task.getExamPaperId());
-            } catch (InterruptedException e) {
-                Thread.currentThread().interrupt();
-            }
-        }).start();
-    }
 
     @Autowired
-    public ExamPaperServiceImpl(ExamPaperMapper examPaperMapper, QuestionMapper questionMapper, TextContentService textContentService, QuestionService questionService, SubjectService subjectService, ExamPaperDepartmentService examPaperDepartmentService, ExamPaperSubjectService examPaperSubjectService, QuestionSubjectService questionSubjectService, ExamPaperUserService examPaperUserService, UserService userService, UserDepartmentMapper userDepartmentMapper, DepartmentService departmentService) {
+    public ExamPaperServiceImpl(ExamPaperMapper examPaperMapper, ExamPaperAnswerMapper examPaperAnswerMapper, QuestionMapper questionMapper, TextContentService textContentService, QuestionService questionService, SubjectService subjectService, ExamPaperDepartmentService examPaperDepartmentService, ExamPaperSubjectService examPaperSubjectService, QuestionSubjectService questionSubjectService, ExamPaperUserService examPaperUserService, UserService userService, UserDepartmentMapper userDepartmentMapper, DepartmentService departmentService) {
         super(examPaperMapper);
         this.examPaperMapper = examPaperMapper;
+        this.examPaperAnswerMapper = examPaperAnswerMapper;
         this.questionMapper = questionMapper;
         this.textContentService = textContentService;
         this.questionService = questionService;
@@ -220,8 +205,11 @@
         List<ExamPaperUser> examPaperUsers = examPaperUserService.getByExamPaperId(examPaper.getId());
         Integer[][] userIds = new Integer[examPaperUsers.size()][2];
         for (int i = 0; i < examPaperUsers.size(); i++) {
-            Integer[] userId = {userService.getUserById(examPaperUsers.get(i).getUserId()).getUserLevel(), examPaperUsers.get(i).getUserId()};
-            userIds[i] = userId;
+            User user = userService.getUserById(examPaperUsers.get(i).getUserId());
+            if (ObjectUtils.isNotEmpty(user)) {
+                Integer[] userId = {user.getUserLevel(), examPaperUsers.get(i).getUserId()};
+                userIds[i] = userId;
+            }
         }
         vm.setUserId(userIds);
         return vm;
@@ -617,15 +605,20 @@
     }
 
     @Override
-    public void addTimeTask(ExamPaper examPaper) {
-        ExamPaperTimeTask examPaperTimeTask = new ExamPaperTimeTask();
-        examPaperTimeTask.setExamPaperId(examPaper.getId());
-        examPaperTimeTask.setExpiry(examPaper.getLimitEndTime().getTime());
-        QUEUE.add(examPaperTimeTask);
-    }
+    @Transactional
+    public void missExam(ExamPaperEditRequestVM model) {
+        // 淇敼鍘熸潵鐨勮瘯鍗锋椂闂�
+        if (ObjectUtils.isNotEmpty(model.getLimitDateTime())) {
+            ExamPaper examPaper = new ExamPaper();
+            examPaper.setId(model.getExamPaperId());
+            examPaper.setLimitStartTime(DateTimeUtil.parse(model.getLimitDateTime().get(0), DateTimeUtil.STANDER_FORMAT));
+            examPaper.setLimitEndTime(DateTimeUtil.parse(model.getLimitDateTime().get(1), DateTimeUtil.STANDER_FORMAT));
+            examPaperMapper.updateByPrimaryKeySelective(examPaper);
+        }
+        // 鏍规嵁鑰冭瘯id灏嗛�夋嫨鐨勮ˉ鑰冭�冪敓鐨勮�冭瘯鎴愮哗璁剧疆涓烘棤鏁�
+        examPaperAnswerMapper.setMissExam(model);
 
-    @Override
-    public void saveMissExamUser(long examPaperId) {
-        examPaperMapper.saveMissExamUser(examPaperId);
+        // 琛ヨ�冩椂灏嗘病鏈夐�夋嫨鐨勫苟涓旀病鏈夊弬鍔犺繃鑰冭瘯鐨勮�冪敓澧炲姞涓�鏉¢浂鍒嗚�冭瘯璁板綍锛屽惁鍒欐病鏈夊弬鍔犺繃鑰冭瘯鐨勫嵆浣夸笉琚�夋嫨涔熷彲浠ュ弬鍔犺ˉ鑰�
+        examPaperAnswerMapper.insertDefault(model);
     }
 }
diff --git a/src/main/java/com/mindskip/xzs/service/impl/QuestionAnswerServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/QuestionAnswerServiceImpl.java
new file mode 100644
index 0000000..0694389
--- /dev/null
+++ b/src/main/java/com/mindskip/xzs/service/impl/QuestionAnswerServiceImpl.java
@@ -0,0 +1,58 @@
+package com.mindskip.xzs.service.impl;
+
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.LambdaUpdateChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
+import com.mindskip.xzs.domain.QuestionAnswer;
+import com.mindskip.xzs.domain.enums.QuestionAnswerStatusEnum;
+import com.mindskip.xzs.domain.vo.QuestionAnswerVO;
+import com.mindskip.xzs.repository.QuestionAnswerMapper;
+import com.mindskip.xzs.service.QuestionAnswerService;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+
+/**
+ * @author gonghl
+ * @description 閽堝琛ㄣ�恡_question_answer(闂瓟)銆戠殑鏁版嵁搴撴搷浣淪ervice瀹炵幇
+ * @createDate 2024-05-11 11:53:55
+ */
+@Service
+@RequiredArgsConstructor
+public class QuestionAnswerServiceImpl extends ServiceImpl<QuestionAnswerMapper, QuestionAnswer> implements QuestionAnswerService {
+
+    private final QuestionAnswerMapper questionAnswerMapper;
+
+    @Override
+    public void updateStatus(Integer id) {
+        new LambdaUpdateChainWrapper<>(questionAnswerMapper)
+                .eq(QuestionAnswer::getId, id)
+                .set(QuestionAnswer::getStatus, "1".equals(getById(id).getStatus().getCode()) ? QuestionAnswerStatusEnum.DISABLE : QuestionAnswerStatusEnum.ENABLE)
+                .update();
+    }
+
+    @Override
+    public PageInfo<QuestionAnswerVO> questionAnswerPage(QuestionAnswerVO questionAnswerVO) {
+        return PageHelper.startPage(questionAnswerVO.getPageIndex(), questionAnswerVO.getPageSize()).doSelectPageInfo(() ->
+                new LambdaQueryChainWrapper<>(questionAnswerMapper)
+                        .like(StringUtils.hasText(questionAnswerVO.getQuestion()), QuestionAnswer::getQuestion, questionAnswerVO.getQuestion())
+                        .or(StringUtils.hasText(questionAnswerVO.getQuestion()), wrapper -> wrapper.like(QuestionAnswer::getAnswer, questionAnswerVO.getQuestion()))
+                        .orderByDesc(QuestionAnswer::getId)
+                        .list());
+    }
+
+    @Override
+    public List<QuestionAnswer> list() {
+        return new LambdaQueryChainWrapper<>(questionAnswerMapper)
+                .eq(QuestionAnswer::getStatus, QuestionAnswerStatusEnum.ENABLE.getCode())
+                .list();
+    }
+}
+
+
+
+
diff --git a/src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java
index c1f8c8b..9938353 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/TagServiceImpl.java
@@ -28,7 +28,6 @@
         return PageHelper.startPage(tag.getPageIndex(), tag.getPageSize(), "id desc").doSelectPageInfo(() ->
                 new LambdaQueryChainWrapper<>(baseMapper)
                         .like(StringUtils.hasText(tag.getName()), Tag::getName, tag.getName())
-                        .eq(Tag::getDeleted, false)
                         .list()
         );
     }
diff --git a/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java b/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
index b7c4452..b470504 100644
--- a/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
+++ b/src/main/java/com/mindskip/xzs/service/impl/UserServiceImpl.java
@@ -1,5 +1,6 @@
 package com.mindskip.xzs.service.impl;
 
+import com.mindskip.xzs.domain.ExamPaper;
 import com.mindskip.xzs.domain.other.KeyValue;
 import com.mindskip.xzs.domain.vo.UserVO;
 import com.mindskip.xzs.exception.BusinessException;
@@ -178,4 +179,8 @@
         userMapper.setStatus(user);
     }
 
+    @Override
+    public User getUserByExam(ExamPaper examPaper) {
+        return userMapper.getUserByExam(examPaper);
+    }
 }
diff --git a/src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperEditRequestVM.java b/src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperEditRequestVM.java
index 5fc0d0a..67fc687 100644
--- a/src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperEditRequestVM.java
+++ b/src/main/java/com/mindskip/xzs/viewmodel/admin/exam/ExamPaperEditRequestVM.java
@@ -54,5 +54,6 @@
     private String type;
     private String status;
     private String menuIds;
+    private Integer examPaperId;
 
 }
diff --git a/src/main/resources/mapper/ExamMissMapper.xml b/src/main/resources/mapper/ExamMissMapper.xml
deleted file mode 100644
index 48d51b4..0000000
--- a/src/main/resources/mapper/ExamMissMapper.xml
+++ /dev/null
@@ -1,16 +0,0 @@
-<?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.mindskip.xzs.repository.ExamMissMapper">
-
-    <resultMap id="BaseResultMap" type="com.mindskip.xzs.domain.ExamMiss">
-        <id property="id" column="id" jdbcType="INTEGER"/>
-        <result property="examId" column="exam_id" jdbcType="INTEGER"/>
-        <result property="userId" column="user_id" jdbcType="INTEGER"/>
-    </resultMap>
-
-    <sql id="Base_Column_List">
-        id,exam_id,user_id
-    </sql>
-</mapper>
diff --git a/src/main/resources/mapper/ExamPaperAnswerMapper.xml b/src/main/resources/mapper/ExamPaperAnswerMapper.xml
index 2e9cba5..9f4e0bf 100644
--- a/src/main/resources/mapper/ExamPaperAnswerMapper.xml
+++ b/src/main/resources/mapper/ExamPaperAnswerMapper.xml
@@ -231,11 +231,19 @@
     where id = #{id,jdbcType=INTEGER}
   </update>
 
+  <update id="setMissExam">
+    update t_exam_paper_answer
+    set invalid = 1
+    where exam_paper_id = #{examPaperId}
+    and create_user in (
+    <foreach collection="userIds" item="item" index="index" separator=",">
+      #{item}
+    </foreach>
+    )
+  </update>
 
 
-
-
-  <select id="studentPage" resultMap="BaseResultMap" parameterType="com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageVM">
+    <select id="studentPage" resultMap="BaseResultMap" parameterType="com.mindskip.xzs.viewmodel.student.exampaper.ExamPaperAnswerPageVM">
     SELECT
     <include refid="Base_Column_List"/>
     FROM t_exam_paper_answer
@@ -321,6 +329,7 @@
                   (#{item.examPaperId},#{item.userId})
         </foreach>
       </if>
+    and (invalid = 0 or invalid is null)
   </select>
   <select id="adminPageByGrade" resultMap="BaseResultMap" parameterType="com.mindskip.xzs.viewmodel.admin.paper.ExamPaperGradePageRequestVM">
     select
@@ -386,4 +395,20 @@
     where a.create_time
   </select>
 
+  <insert id="insertDefault">
+    INSERT INTO t_exam_paper_answer(exam_paper_id, paper_name, paper_type, system_score, user_score, paper_score, question_correct, question_count, do_time, status,
+    create_user, create_time, invalid)
+    SELECT
+    a.id, a.name, a.paper_type, 0, 0, a.score, 0,  a.question_count, 0, 2, b.user_id, NOW(), 0
+    FROM t_exam_paper a
+    left join t_exam_paper_user b on a.id = b.exam_paper_id and b.deleted = 0
+    left join t_exam_paper_answer c on a.id = c.exam_paper_id and c.create_user = b.user_id
+    WHERE a.id = #{examPaperId}
+    and c.id is null
+    and b.user_id not in
+    <foreach collection="userIds" item="item" open="(" close=")" separator=",">
+      #{item}
+    </foreach>
+  </insert>
+
 </mapper>
diff --git a/src/main/resources/mapper/ExamPaperMapper.xml b/src/main/resources/mapper/ExamPaperMapper.xml
index de8bcd2..9a4c638 100644
--- a/src/main/resources/mapper/ExamPaperMapper.xml
+++ b/src/main/resources/mapper/ExamPaperMapper.xml
@@ -423,19 +423,4 @@
     where a.exam_paper_id = #{id}
   </select>
 
-    <select id="saveMissExamUser" resultType="com.mindskip.xzs.domain.ExamMiss">
-      INSERT INTO t_exam_miss(exam_id, user_id)
-      SELECT a.id,
-             b.user_id
-      FROM t_exam_paper a
-             left join t_exam_paper_user b on a.id = b.exam_paper_id
-             left join t_exam_paper_answer c on a.id = c.exam_paper_id and c.create_user = b.user_id
-      WHERE a.id = #{examPaperId}
-        and c.id is null
-    </select>
-
-  <select id="selectTimeTaskPaper" resultType="com.mindskip.xzs.domain.ExamPaper">
-    select id, limit_end_time from t_exam_paper where paper_type = 4 and limit_end_time >= #{time} and deleted = 0
-  </select>
-
 </mapper>
diff --git a/src/main/resources/mapper/FeedbackMapper.xml b/src/main/resources/mapper/FeedbackMapper.xml
index 6b6c8d0..64180f6 100644
--- a/src/main/resources/mapper/FeedbackMapper.xml
+++ b/src/main/resources/mapper/FeedbackMapper.xml
@@ -26,7 +26,8 @@
                c.real_name as userName
         from t_feedback a
                  left join t_text_content b on a.content_id = b.id
-                 left join t_user c on a.user_id = c.id and deleted = 0
+                 left join t_user c on a.user_id = c.id and c.deleted = 0
+        where a.deleted = 0
         order by id desc
     </select>
 </mapper>
diff --git a/src/main/resources/mapper/QuestionAnswerMapper.xml b/src/main/resources/mapper/QuestionAnswerMapper.xml
new file mode 100644
index 0000000..ab8011f
--- /dev/null
+++ b/src/main/resources/mapper/QuestionAnswerMapper.xml
@@ -0,0 +1,18 @@
+<?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.mindskip.xzs.repository.QuestionAnswerMapper">
+
+    <resultMap id="BaseResultMap" type="com.mindskip.xzs.domain.QuestionAnswer">
+        <id property="id" column="id" jdbcType="INTEGER"/>
+        <result property="question" column="question" jdbcType="VARCHAR"/>
+        <result property="answer" column="answer" jdbcType="VARCHAR"/>
+        <result property="deleted" column="deleted" jdbcType="BIT"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        id,question,answer,
+        deleted
+    </sql>
+</mapper>
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
index bf9ec38..45aa42a 100644
--- a/src/main/resources/mapper/UserMapper.xml
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -268,7 +268,7 @@
     select
     <include refid="Base_Column_List"/>
     from t_user
-    where id=#{value} and status = 1 and deleted = 0
+    where id=#{value} and status = 1 and deleted = 0 and (`condition` = 0 or `condition` is null)
   </select>
 
     <select id="getUserByUserName" resultMap="BaseResultMap">
@@ -494,4 +494,18 @@
         tu.id desc
     </select>
 
+    <select id="getUserByExam" resultType="com.mindskip.xzs.domain.User">
+        <![CDATA[
+        SELECT
+        d.*
+        FROM t_exam_paper a
+        left join t_exam_paper_user b on a.id = b.exam_paper_id and b.deleted = 0
+        left join t_exam_paper_answer c on a.id = c.exam_paper_id and c.create_user = b.user_id
+        left join t_user d on b.user_id = d.id
+        WHERE a.id = #{id}
+        and (c.id is null or (user_score / paper_score) < 0.6)
+        and b.user_id = #{createUser}
+        ]]>
+    </select>
+
 </mapper>

--
Gitblit v1.8.0