From ea09629d8857e0afa329858f72cf1c93e25b813c Mon Sep 17 00:00:00 2001
From: huangzhen <867217663@qq.com>
Date: 星期五, 15 九月 2023 10:36:59 +0800
Subject: [PATCH] 煤矿功能实现

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperateTypeServiceImpl.java                                 |   23 
 exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffTrain.java                                               |   60 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/CmStaffPageRespDTO.java                                 |   55 
 exam-system/src/main/java/com/gkhy/exam/coalmine/entity/TeacherManage.java                                              |   70 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/AttachmentInfoRespDTO.java                              |   22 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageAddReqDTO.java                             |   66 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffResumeService.java                          |   19 
 exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/EmonExamRecordMapper.java                                       |   12 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateOperateTypeReqDTO.java               |   32 
 exam-system/src/main/resources/mapper/coalmine/CmStaffMapper.xml                                                        |   25 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffAddReqDTO.java                                    |   44 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffResumeUpdateReqDTO.java                           |   39 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/EmonTrainRecordServiceImpl.java               |   41 
 exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/ExaminerManageOperateTypeBindMapper.java                        |   11 
 exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffQaMapper.java                                            |   12 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/TeacherManageOperateTypeBindService.java           |   19 
 exam-system/src/main/java/com/gkhy/exam/coalmine/entity/EmonExamRecord.java                                             |   60 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffExamServiceImpl.java                   |   41 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffExamUpdateReqDTO.java                             |   48 
 exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffExamController.java                                  |   86 +
 exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffMapper.java                                              |   11 
 exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffResume.java                                              |   55 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/EduResourcesManagerService.java                                |   45 
 exam-system/src/main/resources/mapper/coalmine/CmStaffTrainMapper.xml                                                   |   24 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/ExaminerManageServiceImpl.java                |   39 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateReqDTO.java                           |   67 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/EmonExamRecordService.java                         |   20 
 exam-system/src/main/java/com/gkhy/exam/coalmine/entity/ExaminerManageOperateTypeBind.java                              |   58 
 exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffTrainController.java                                 |   86 +
 exam-system/src/main/resources/mapper/coalmine/ExaminerManageMapper.xml                                                 |   34 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTeacherRespDTO.java                                  |   56 
 exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaff.java                                                    |   62 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExaminerRespDTO.java                                 |   56 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageAddOperateTypeReqDTO.java                   |   33 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffTrainUpdateReqDTO.java                            |   47 
 exam-system/src/main/resources/mapper/coalmine/TeacherManageMapper.xml                                                  |   30 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/EmonExamRecordServiceImpl.java                |   41 
 exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffResumeController.java                                |   82 +
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/EduResourcesManagerServiceImpl.java                       |  405 +++++
 exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/ExaminerManageMapper.java                                       |   12 
 exam-system/src/main/java/com/gkhy/exam/coalmine/controller/TeacherManageController.java                                |  149 +
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageAddReqDTO.java                              |   64 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffExamAddReqDTO.java                                |   44 
 exam-system/src/main/resources/mapper/coalmine/EmonTrainRecordMapper.xml                                                |   23 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/TeacherManageService.java                          |   16 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/TeacherManageOperateTypeBindServiceImpl.java  |   42 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExamDataRespDTO.java                                 |   32 
 exam-system/src/main/resources/mapper/coalmine/TeacherManageOperateTypeBindMapper.xml                                   |   23 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffQaUpdateReqDTO.java                               |   50 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTrainDataRespDTO.java                                |   31 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/EmonTrainRecordService.java                        |   19 
 exam-system/src/main/java/com/gkhy/exam/coalmine/entity/TeacherManageOperateTypeBind.java                               |   58 
 exam-system/src/main/java/com/gkhy/exam/coalmine/controller/ExaminerManageController.java                               |  145 +
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageAddOperateTypeReqDTO.java                  |   35 
 exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffExam.java                                                |   61 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffResumeServiceImpl.java                 |   41 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/ExaminerManageOperateTypeBindService.java          |   18 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/CmStaffManagerServiceImpl.java                            |  229 ++
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffQaService.java                              |   20 
 exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffTrainMapper.java                                         |   12 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffService.java                                |   13 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateStatusReqDTO.java                     |   25 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/CmStaffManagerService.java                                     |   43 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/TeacherManageServiceImpl.java                 |   40 
 exam-system/src/main/resources/mapper/coalmine/EmonExamRecordMapper.xml                                                 |   25 
 exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffResumeMapper.java                                        |   12 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffTrainAddReqDTO.java                               |   44 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffTrainService.java                           |   18 
 exam-system/src/main/java/com/gkhy/exam/coalmine/entity/ExaminerManage.java                                             |   78 
 exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/EmonTrainRecordMapper.java                                      |   14 
 exam-system/src/main/java/com/gkhy/exam/coalmine/entity/EmonTrainRecord.java                                            |   60 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateReqDTO.java                          |   68 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateStatusReqDTO.java                    |   22 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffTrainServiceImpl.java                  |   41 
 exam-system/src/main/java/com/gkhy/exam/coalmine/utils/AttachmentUtil.java                                              |   29 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffQaAddReqDTO.java                                  |   47 
 exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/TeacherManageMapper.java                                        |   11 
 exam-system/src/main/resources/mapper/coalmine/CmStaffExamMapper.xml                                                    |   24 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/EmonRecordManagerServiceImpl.java                         |  211 ++
 exam-system/src/main/resources/mapper/coalmine/CmStaffResumeMapper.xml                                                  |   22 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffExamService.java                            |   19 
 exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffController.java                                      |   70 
 exam-system/src/main/resources/mapper/coalmine/CmStaffQaMapper.xml                                                      |   25 
 exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffQaController.java                                    |   88 +
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/ExaminerManageOperateTypeBindServiceImpl.java |   40 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffResumeAddReqDTO.java                              |   36 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/ExaminerManageService.java                         |   16 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TrainReceiveReqDTO.java                                  |   31 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExaminerOperateTypesRespDTO.java                     |   34 
 ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/EnableStatusEnum.java                                   |   12 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffQaServiceImpl.java                     |   42 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffServiceImpl.java                       |   17 
 exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffExamMapper.java                                          |   12 
 exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffQa.java                                                  |   64 
 exam-system/src/main/java/com/gkhy/exam/coalmine/controller/EmonRecordController.java                                   |  118 +
 exam-system/src/main/resources/mapper/coalmine/ExaminerManageOperateTypeBindMapper.xml                                  |   24 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTeacherOperateTypesRespDTO.java                      |   34 
 exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/TeacherManageOperateTypeBindMapper.java                         |   11 
 exam-system/src/main/java/com/gkhy/exam/coalmine/service/EmonRecordManagerService.java                                  |   30 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateOperateTypeReqDTO.java                |   32 
 exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExamReceiveReqDTO.java                                   |   34 
 101 files changed, 4,781 insertions(+), 15 deletions(-)

diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffController.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffController.java
new file mode 100644
index 0000000..e05eec4
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffController.java
@@ -0,0 +1,70 @@
+package com.gkhy.exam.coalmine.controller;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gkhy.exam.coalmine.entity.CmStaff;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.ExaminerManageAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.CmStaffPageRespDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetExaminerRespDTO;
+import com.gkhy.exam.coalmine.service.CmStaffManagerService;
+import com.gkhy.exam.coalmine.service.baseService.CmStaffService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.page.TableDataInfo;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.core.domain.AjaxResult;
+
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+@RestController
+@RequestMapping("/cm/staff")
+public class CmStaffController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private CmStaffManagerService cmStaffManagerService;
+
+    /**
+     * 分页查询人员
+     */
+    @ApiOperation(value = "分页获取人员",httpMethod = "GET")
+    @GetMapping("/page")
+    public TableDataInfo selectPage() {
+        startPage();
+        List<CmStaffPageRespDTO> list = cmStaffManagerService.selectPage();
+        return getDataTable(list);
+    }
+
+    /**
+     * 新增数据
+     */
+    @PostMapping("/add")
+    @ApiOperation(value = "新增人员",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "name",dataTypeClass = String.class, value = "姓名",required = true),
+            @ApiImplicitParam(name = "sex", dataTypeClass = String.class,value = "性别"),
+            @ApiImplicitParam(name = "code", dataTypeClass = String.class,value = "身份证",required = true),
+            @ApiImplicitParam(name = "mobilePhone", dataTypeClass = String.class,value = "手机号",required = true),
+            @ApiImplicitParam(name = "nationCode", dataTypeClass = String.class,value = "民族",required = true),
+            @ApiImplicitParam(name = "photoAttachment", dataTypeClass = Long.class,value = "证件照id"),
+            @ApiImplicitParam(name = "eduLevel", dataTypeClass = String.class,value = "最高学历",required = true)
+    })
+    public AjaxResult insert(@Validated @RequestBody CmStaffAddReqDTO reqDTO) {
+        return this.cmStaffManagerService.saveCmStaff(reqDTO);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffExamController.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffExamController.java
new file mode 100644
index 0000000..ac33b1e
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffExamController.java
@@ -0,0 +1,86 @@
+package com.gkhy.exam.coalmine.controller;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gkhy.exam.coalmine.entity.CmStaffExam;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffExamAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffExamUpdateReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffResumeAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffResumeUpdateReqDTO;
+import com.gkhy.exam.coalmine.service.CmStaffManagerService;
+import com.gkhy.exam.coalmine.service.baseService.CmStaffExamService;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.core.domain.AjaxResult;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+@RestController
+@RequestMapping("/cmStaffExam")
+public class CmStaffExamController{
+    /**
+     * 服务对象
+     */
+    @Resource
+    private CmStaffManagerService cmStaffManagerService;
+
+    /**
+     * 新增考试经历
+     */
+    @PostMapping("/add")
+    @ApiOperation(value = "新增考试经历",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "staffId",dataTypeClass = Long.class, value = "人员id",required = true),
+            @ApiImplicitParam(name = "startTime", dataTypeClass = LocalDateTime.class,value = "开始时间"),
+            @ApiImplicitParam(name = "endTime", dataTypeClass = LocalDateTime.class,value = "结束时间",required = true),
+            @ApiImplicitParam(name = "examCenter", dataTypeClass = String.class,value = "考试中心",required = true),
+            @ApiImplicitParam(name = "subject", dataTypeClass = String.class,value = "科目",required = true),
+            @ApiImplicitParam(name = "result", dataTypeClass = String.class,value = "考试结果;0-通过;1-未通过",required = true)
+    })
+    public AjaxResult insert(@Validated @RequestBody CmStaffExamAddReqDTO reqDTO) {
+        return this.cmStaffManagerService.saveCmStaffExam(reqDTO);
+    }
+
+
+    /**
+     * 删除考试经历
+     */
+    @ApiOperation(value = "根据id删除考试经历",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "考试经历id",required = true)
+    @GetMapping("/del")
+    public AjaxResult delete(@PathVariable @NotNull(message = "id不能为空") Long id) {
+        return this.cmStaffManagerService.deleteCmStaffExam(id);
+    }
+
+    /**
+     * 修改考试经历
+     */
+    @PostMapping("/edit")
+    @ApiOperation(value = "修改考试经历",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",dataTypeClass = Long.class, value = "考试经历id",required = true),
+            @ApiImplicitParam(name = "staffId",dataTypeClass = Long.class, value = "人员id",required = true),
+            @ApiImplicitParam(name = "startTime", dataTypeClass = LocalDateTime.class,value = "开始时间"),
+            @ApiImplicitParam(name = "endTime", dataTypeClass = LocalDateTime.class,value = "结束时间",required = true),
+            @ApiImplicitParam(name = "examCenter", dataTypeClass = String.class,value = "考试中心",required = true),
+            @ApiImplicitParam(name = "subject", dataTypeClass = String.class,value = "科目",required = true),
+            @ApiImplicitParam(name = "result", dataTypeClass = String.class,value = "考试结果;0-通过;1-未通过",required = true)
+    })
+    public AjaxResult insert(@Validated @RequestBody CmStaffExamUpdateReqDTO reqDTO) {
+        return this.cmStaffManagerService.updateCmStaffExam(reqDTO);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffQaController.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffQaController.java
new file mode 100644
index 0000000..74360d6
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffQaController.java
@@ -0,0 +1,88 @@
+package com.gkhy.exam.coalmine.controller;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gkhy.exam.coalmine.entity.CmStaffQa;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffExamAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffExamUpdateReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffQaAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffQaUpdateReqDTO;
+import com.gkhy.exam.coalmine.service.CmStaffManagerService;
+import com.gkhy.exam.coalmine.service.baseService.CmStaffQaService;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.core.domain.AjaxResult;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+@RestController
+@RequestMapping("/cmStaffQa")
+public class CmStaffQaController{
+    /**
+     * 服务对象
+     */
+    @Resource
+    private CmStaffManagerService cmStaffManagerService;
+
+    /**
+     * 新增资格证书
+     */
+    @PostMapping("/add")
+    @ApiOperation(value = "新增资格证书",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "staffId",dataTypeClass = Long.class, value = "人员id",required = true),
+            @ApiImplicitParam(name = "name", dataTypeClass = String.class,value = "证书名字",required = true),
+            @ApiImplicitParam(name = "operateTypeId", dataTypeClass = Long.class,value = "操作类型",required = true),
+            @ApiImplicitParam(name = "qualificationType", dataTypeClass = String.class,value = "资格类型",required = true),
+            @ApiImplicitParam(name = "jobCategory", dataTypeClass = String.class,value = "作业类别",required = true),
+            @ApiImplicitParam(name = "operationItems", dataTypeClass = String.class,value = "操作项目",required = true),
+            @ApiImplicitParam(name = "expiredTime", dataTypeClass = LocalDateTime.class,value = "过期时间")
+    })
+    public AjaxResult insert(@Validated @RequestBody CmStaffQaAddReqDTO reqDTO) {
+        return this.cmStaffManagerService.saveCmStaffQa(reqDTO);
+    }
+
+
+    /**
+     * 删除资格证书
+     */
+    @ApiOperation(value = "根据id删除资格证书",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "资格证书id",required = true)
+    @GetMapping("/del")
+    public AjaxResult delete(@PathVariable @NotNull(message = "id不能为空") Long id) {
+        return this.cmStaffManagerService.deleteCmStaffQa(id);
+    }
+
+    /**
+     * 修改资格证书
+     */
+    @PostMapping("/edit")
+    @ApiOperation(value = "修改资格证书",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",dataTypeClass = Long.class, value = "资格证书id",required = true),
+            @ApiImplicitParam(name = "staffId",dataTypeClass = Long.class, value = "人员id",required = true),
+            @ApiImplicitParam(name = "name", dataTypeClass = String.class,value = "证书名字",required = true),
+            @ApiImplicitParam(name = "operateTypeId", dataTypeClass = Long.class,value = "操作类型",required = true),
+            @ApiImplicitParam(name = "qualificationType", dataTypeClass = String.class,value = "资格类型",required = true),
+            @ApiImplicitParam(name = "jobCategory", dataTypeClass = String.class,value = "作业类别",required = true),
+            @ApiImplicitParam(name = "operationItems", dataTypeClass = String.class,value = "操作项目",required = true),
+            @ApiImplicitParam(name = "expiredTime", dataTypeClass = LocalDateTime.class,value = "过期时间")
+    })
+    public AjaxResult insert(@Validated @RequestBody CmStaffQaUpdateReqDTO reqDTO) {
+        return this.cmStaffManagerService.updateCmStaffQa(reqDTO);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffResumeController.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffResumeController.java
new file mode 100644
index 0000000..7a07e46
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffResumeController.java
@@ -0,0 +1,82 @@
+package com.gkhy.exam.coalmine.controller;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gkhy.exam.coalmine.entity.CmStaffResume;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffResumeAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffResumeUpdateReqDTO;
+import com.gkhy.exam.coalmine.service.CmStaffManagerService;
+import com.gkhy.exam.coalmine.service.baseService.CmStaffResumeService;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.core.domain.AjaxResult;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+@RestController
+@RequestMapping("/cm/staffResume")
+public class CmStaffResumeController{
+    /**
+     * 服务对象
+     */
+    @Resource
+    private CmStaffManagerService cmStaffManagerService;
+
+    /**
+     * 新增个人履历
+     */
+    @PostMapping("/add")
+    @ApiOperation(value = "新增个人履历",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "staffId",dataTypeClass = Long.class, value = "人员id",required = true),
+            @ApiImplicitParam(name = "startTime", dataTypeClass = LocalDateTime.class,value = "开始时间"),
+            @ApiImplicitParam(name = "endTime", dataTypeClass = LocalDateTime.class,value = "结束时间",required = true),
+            @ApiImplicitParam(name = "unit", dataTypeClass = String.class,value = "单位",required = true)
+    })
+    public AjaxResult insert(@Validated @RequestBody CmStaffResumeAddReqDTO reqDTO) {
+        return this.cmStaffManagerService.saveCmStaffResume(reqDTO);
+    }
+
+
+    /**
+     * 删除个人履历
+     */
+    @ApiOperation(value = "根据id删除个人履历",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "履历id",required = true)
+    @GetMapping("/del")
+    public AjaxResult delete(@PathVariable @NotNull(message = "id不能为空") Long id) {
+        return this.cmStaffManagerService.deleteCmStaffResume(id);
+    }
+
+    /**
+     * 修改个人履历
+     */
+    @PostMapping("/edit")
+    @ApiOperation(value = "修改个人履历",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",dataTypeClass = Long.class, value = "id",required = true),
+            @ApiImplicitParam(name = "staffId",dataTypeClass = Long.class, value = "人员id",required = true),
+            @ApiImplicitParam(name = "startTime", dataTypeClass = LocalDateTime.class,value = "开始时间"),
+            @ApiImplicitParam(name = "endTime", dataTypeClass = LocalDateTime.class,value = "结束时间",required = true),
+            @ApiImplicitParam(name = "unit", dataTypeClass = String.class,value = "单位",required = true)
+    })
+    public AjaxResult insert(@Validated @RequestBody CmStaffResumeUpdateReqDTO reqDTO) {
+        return this.cmStaffManagerService.updateCmStaffResume(reqDTO);
+    }
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffTrainController.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffTrainController.java
new file mode 100644
index 0000000..f908677
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/CmStaffTrainController.java
@@ -0,0 +1,86 @@
+package com.gkhy.exam.coalmine.controller;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gkhy.exam.coalmine.entity.CmStaffTrain;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffResumeAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffResumeUpdateReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffTrainAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.CmStaffTrainUpdateReqDTO;
+import com.gkhy.exam.coalmine.service.CmStaffManagerService;
+import com.gkhy.exam.coalmine.service.baseService.CmStaffTrainService;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.core.domain.AjaxResult;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+@RestController
+@RequestMapping("/cmStaffTrain")
+public class CmStaffTrainController{
+    /**
+     * 服务对象
+     */
+    @Resource
+    private CmStaffManagerService cmStaffManagerService;
+
+    /**
+     * 新增个人培训经历
+     */
+    @PostMapping("/add")
+    @ApiOperation(value = "新增个人培训经历",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "staffId",dataTypeClass = Long.class, value = "人员id",required = true),
+            @ApiImplicitParam(name = "startTime", dataTypeClass = LocalDateTime.class,value = "开始时间"),
+            @ApiImplicitParam(name = "endTime", dataTypeClass = LocalDateTime.class,value = "结束时间",required = true),
+            @ApiImplicitParam(name = "unit", dataTypeClass = String.class,value = "单位",required = true),
+            @ApiImplicitParam(name = "batch", dataTypeClass = String.class,value = "所属批次",required = true),
+            @ApiImplicitParam(name = "subject", dataTypeClass = String.class,value = "科目",required = true)
+    })
+    public AjaxResult insert(@Validated @RequestBody CmStaffTrainAddReqDTO reqDTO) {
+        return this.cmStaffManagerService.saveCmStaffTrain(reqDTO);
+    }
+
+
+    /**
+     * 删除个人履历
+     */
+    @ApiOperation(value = "根据id删除个人培训经历",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "培训经历id",required = true)
+    @GetMapping("/del")
+    public AjaxResult delete(@PathVariable @NotNull(message = "id不能为空") Long id) {
+        return this.cmStaffManagerService.deleteCmStaffTrain(id);
+    }
+
+    /**
+     * 修改个人培训经历
+     */
+    @PostMapping("/edit")
+    @ApiOperation(value = "修改个人培训经历",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",dataTypeClass = Long.class, value = "id",required = true),
+            @ApiImplicitParam(name = "staffId",dataTypeClass = Long.class, value = "人员id",required = true),
+            @ApiImplicitParam(name = "startTime", dataTypeClass = LocalDateTime.class,value = "开始时间"),
+            @ApiImplicitParam(name = "endTime", dataTypeClass = LocalDateTime.class,value = "结束时间",required = true),
+            @ApiImplicitParam(name = "unit", dataTypeClass = String.class,value = "单位",required = true),
+            @ApiImplicitParam(name = "batch", dataTypeClass = String.class,value = "所属批次",required = true),
+            @ApiImplicitParam(name = "subject", dataTypeClass = String.class,value = "科目",required = true)
+    })
+    public AjaxResult insert(@Validated @RequestBody CmStaffTrainUpdateReqDTO reqDTO) {
+        return this.cmStaffManagerService.updateCmStaffTrain(reqDTO);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/EmonRecordController.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/EmonRecordController.java
new file mode 100644
index 0000000..a97a890
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/EmonRecordController.java
@@ -0,0 +1,118 @@
+package com.gkhy.exam.coalmine.controller;
+
+
+
+import com.gkhy.exam.coalmine.model.dto.req.ExamReceiveReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.ExaminerManageUpdateStatusReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.TrainReceiveReqDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetExamDataRespDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetExaminerRespDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetTrainDataRespDTO;
+import com.gkhy.exam.coalmine.service.EmonRecordManagerService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.page.TableDataInfo;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import com.ruoyi.common.core.domain.AjaxResult;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-13 10:13:39
+ */
+@RestController
+@RequestMapping("/emonRecord")
+public class EmonRecordController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private EmonRecordManagerService emonRecordManagerService;
+
+    /**
+     * 异常考场监控记录接收
+     */
+    @PostMapping("/examReceive")
+    @ApiOperation(value = "异常考场监控记录接收",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "reportTime", dataTypeClass = String.class,value = "上传时间"),
+            @ApiImplicitParam(name = "districtId", dataTypeClass = Long.class,value = "区划id"),
+            @ApiImplicitParam(name = "examCenter", dataTypeClass = String.class,value = "考试中心"),
+            @ApiImplicitParam(name = "excType", dataTypeClass = String.class,value = "AI分析异常类别"),
+            @ApiImplicitParam(name = "isCm", dataTypeClass = Byte.class,value = "是否为煤矿:0为非,1是"),
+            @ApiImplicitParam(name = "files", dataTypeClass = Arrays.class,value = "文件流"),
+            @ApiImplicitParam(name = "status", dataTypeClass = String.class,value = "文件模块")
+    })
+    public AjaxResult examReceive(@RequestPart("file") MultipartFile[] file,@RequestPart("req") ExamReceiveReqDTO reqDTO) {
+        return this.emonRecordManagerService.examReceive(file,reqDTO);
+    }
+
+    /**
+     * 培训监控异常记录接收
+     */
+    @PostMapping("/trainReceive")
+    @ApiOperation(value = "培训监控异常记录接收",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "reportTime", dataTypeClass = String.class,value = "上传时间"),
+            @ApiImplicitParam(name = "districtId", dataTypeClass = Long.class,value = "区划id"),
+            @ApiImplicitParam(name = "examCenter", dataTypeClass = String.class,value = "考试中心"),
+            @ApiImplicitParam(name = "excType", dataTypeClass = String.class,value = "AI分析异常类别"),
+            @ApiImplicitParam(name = "isCm", dataTypeClass = Byte.class,value = "是否为煤矿:0为非,1是"),
+            @ApiImplicitParam(name = "files", dataTypeClass = Arrays.class,value = "文件流"),
+            @ApiImplicitParam(name = "status", dataTypeClass = String.class,value = "文件模块")
+    })
+    public AjaxResult trainReceive(@RequestParam("file") MultipartFile[] file ,@RequestPart("req") TrainReceiveReqDTO reqDTO) {
+        return this.emonRecordManagerService.trainReceive(file,reqDTO);
+    }
+
+    /**
+     * 异常考场监控记录获取
+     */
+    @GetMapping("/getExamData")
+    @ApiOperation(value = "异常考场监控记录获取",httpMethod = "GET")
+    public TableDataInfo getExamData() {
+        startPage();
+        List<GetExamDataRespDTO> list = emonRecordManagerService.getExamData();
+        return getDataTable(list);
+    }
+
+    /**
+     * 异常培训监控记录获取
+     */
+    @GetMapping("/getTrainData")
+    @ApiOperation(value = "异常培训监控记录获取",httpMethod = "GET")
+    public TableDataInfo getTrainData() {
+        startPage();
+        List<GetTrainDataRespDTO> list = emonRecordManagerService.getTrainData();
+        return getDataTable(list);
+    }
+
+    /**
+     * 根据id删除考场异常监控记录
+     */
+    @ApiOperation(value = "根据id删除考场异常监控记录",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "记录id",required = true)
+    @GetMapping("/exam/del")
+    public AjaxResult deleteExamRecord(@PathVariable @NotNull(message = "id不能为空") Long id) {
+        return this.emonRecordManagerService.deleteExamRecord(id);
+    }
+
+    /**
+     * 根据id删除培训异常监控记录
+     */
+    @ApiOperation(value = "根据id删除培训异常监控记录",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "记录id",required = true)
+    @GetMapping("/train/del")
+    public AjaxResult deleteTrainRecord(@PathVariable @NotNull(message = "id不能为空") Long id) {
+        return this.emonRecordManagerService.deleteTrainRecord(id);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/ExaminerManageController.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/ExaminerManageController.java
new file mode 100644
index 0000000..0b320ed
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/ExaminerManageController.java
@@ -0,0 +1,145 @@
+package com.gkhy.exam.coalmine.controller;
+
+
+
+import com.gkhy.exam.coalmine.model.dto.req.ExaminerManageAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.ExaminerManageUpdateReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.ExaminerManageUpdateStatusReqDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetExaminerRespDTO;
+import com.gkhy.exam.coalmine.service.EduResourcesManagerService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.page.TableDataInfo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+import static com.ruoyi.common.core.domain.AjaxResult.success;
+
+/**
+ * @author hz
+ * @since 2023-09-11 14:26:20
+ */
+@Api(tags = "考评员管理")
+@RestController
+@RequestMapping("/examinerManage")
+public class ExaminerManageController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private EduResourcesManagerService eduResourcesManagerService;
+
+    /**
+     * 分页查询所有数据
+     */
+    @ApiOperation(value = "分页获取考评员管理",httpMethod = "GET")
+    @GetMapping("/page")
+    public TableDataInfo selectAll() {
+        startPage();
+        List<GetExaminerRespDTO> list = eduResourcesManagerService.selectAll();
+        return getDataTable(list);
+    }
+
+    /**
+     * 通过主键查询单条数据
+     */
+    @ApiOperation(value = "根据id获取考评员管理",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "考评员id",required = true)
+    @GetMapping("{id}")
+    public AjaxResult selectOne(@PathVariable @NotNull(message = "id不能为空") Long id) {
+        return this.eduResourcesManagerService.getExaminerById(id);
+    }
+
+    /**
+     * 修改状态
+     */
+    @PostMapping("/updateStatus")
+    @ApiOperation(value = "开启停用状态",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",dataTypeClass = Long.class, value = "id",required = true),
+            @ApiImplicitParam(name = "status", dataTypeClass = String.class,value = "状态不能为空:0-正常,1-停用",required = true)
+    })
+    public AjaxResult updateStatus(@Validated @RequestBody ExaminerManageUpdateStatusReqDTO reqDTO) {
+        return this.eduResourcesManagerService.updateExaminerStatus(reqDTO);
+    }
+
+    /**
+     * 新增数据
+     */
+    @PostMapping("/add")
+    @ApiOperation(value = "新增考评员",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "name",dataTypeClass = String.class, value = "姓名",required = true),
+            @ApiImplicitParam(name = "sex", dataTypeClass = String.class,value = "性别"),
+            @ApiImplicitParam(name = "code", dataTypeClass = String.class,value = "身份证",required = true),
+            @ApiImplicitParam(name = "mobilePhone", dataTypeClass = String.class,value = "手机号",required = true),
+            @ApiImplicitParam(name = "photoAttachment", dataTypeClass = Long.class,value = "证件照id"),
+            @ApiImplicitParam(name = "qaAttachment", dataTypeClass = Long.class,value = "资质照id"),
+            @ApiImplicitParam(name = "jobTitle", dataTypeClass = String.class,value = "职称"),
+            @ApiImplicitParam(name = "eduLevel", dataTypeClass = String.class,value = "最高学历",required = true),
+            @ApiImplicitParam(name = "expiredTime", dataTypeClass = LocalDateTime.class,value = "过期时间",required = true),
+            @ApiImplicitParam(name = "isCm", dataTypeClass = Byte.class,value = "是否为煤矿:0为非,1是",required = true),
+            @ApiImplicitParam(name = "status", dataTypeClass = String.class,value = "状态不能为空:0-正常,1-停用",required = true),
+            @ApiImplicitParam(name = "description", dataTypeClass = String.class,value = "描述"),
+            @ApiImplicitParam(name = "operateTypes", dataTypeClass = List.class,value = "工种详情")
+    })
+    public AjaxResult insert(@Validated @RequestBody ExaminerManageAddReqDTO reqDTO) {
+        return this.eduResourcesManagerService.saveExaminer(reqDTO);
+    }
+
+    /**
+     * 修改数据
+     */
+    @ApiOperation(value = "修改考评员数据",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",dataTypeClass = Long.class, value = "id",required = true),
+            @ApiImplicitParam(name = "name",dataTypeClass = String.class, value = "姓名",required = true),
+            @ApiImplicitParam(name = "sex", dataTypeClass = String.class,value = "性别"),
+            @ApiImplicitParam(name = "code", dataTypeClass = String.class,value = "身份证",required = true),
+            @ApiImplicitParam(name = "mobilePhone", dataTypeClass = String.class,value = "手机号",required = true),
+            @ApiImplicitParam(name = "photoAttachment", dataTypeClass = Long.class,value = "证件照id"),
+            @ApiImplicitParam(name = "qaAttachment", dataTypeClass = Long.class,value = "资质照id"),
+            @ApiImplicitParam(name = "jobTitle", dataTypeClass = String.class,value = "职称"),
+            @ApiImplicitParam(name = "eduLevel", dataTypeClass = String.class,value = "最高学历",required = true),
+            @ApiImplicitParam(name = "expiredTime", dataTypeClass = LocalDateTime.class,value = "过期时间",required = true),
+            @ApiImplicitParam(name = "isCm", dataTypeClass = Byte.class,value = "是否为煤矿:0为非,1是",required = true),
+            @ApiImplicitParam(name = "status", dataTypeClass = String.class,value = "状态不能为空:0-正常,1-停用",required = true),
+            @ApiImplicitParam(name = "description", dataTypeClass = String.class,value = "描述"),
+            @ApiImplicitParam(name = "operateTypes", dataTypeClass = List.class,value = "工种详情")
+    })
+    @PostMapping("/update")
+    public AjaxResult update(@Validated @RequestBody ExaminerManageUpdateReqDTO reqDTO) {
+        return this.eduResourcesManagerService.updateExaminerById(reqDTO);
+    }
+
+    /**
+     * 删除数据
+     */
+    @ApiOperation(value = "根据id删除考评员",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "考评员id",required = true)
+    @GetMapping("/del")
+    public AjaxResult delete(@PathVariable @NotNull(message = "id不能为空") Long id) {
+        return this.eduResourcesManagerService.removeExaminerById(id);
+    }
+
+    /**
+     * 根据id删除与之关联的工种信息
+     */
+    @ApiOperation(value = "根据id删除与之关联的工种信息",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "关联的工种id",required = true)
+    @GetMapping("/operateType/del")
+    public AjaxResult deleteExaminerBindOperateType(@PathVariable @NotNull(message = "id不能为空") Long id) {
+        return this.eduResourcesManagerService.deleteExaminerBindOperateType(id);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/TeacherManageController.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/TeacherManageController.java
new file mode 100644
index 0000000..901c4fe
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/controller/TeacherManageController.java
@@ -0,0 +1,149 @@
+package com.gkhy.exam.coalmine.controller;
+
+
+
+import com.gkhy.exam.coalmine.entity.TeacherManage;
+import com.gkhy.exam.coalmine.model.dto.req.TeacherManageAddReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.TeacherManageUpdateReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.TeacherManageUpdateStatusReqDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetTeacherRespDTO;
+import com.gkhy.exam.coalmine.service.EduResourcesManagerService;
+import com.gkhy.exam.coalmine.service.baseService.TeacherManageService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.domain.entity.SysRole;
+import com.ruoyi.common.core.page.TableDataInfo;
+import io.lettuce.core.StrAlgoArgs;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.constraints.NotNull;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+import static com.ruoyi.common.core.domain.AjaxResult.success;
+
+/**
+ * @author hz
+ * @since 2023-09-11 14:26:20
+ */
+@Api(tags = "教师管理")
+@RestController
+@RequestMapping("/teacherManage")
+public class TeacherManageController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private EduResourcesManagerService eduResourcesManagerService;
+
+    /**
+     * 分页查询所有数据
+     */
+    @ApiOperation(value = "分页获取教师管理",httpMethod = "GET")
+    @GetMapping("/page")
+    public TableDataInfo selectTeacherAll() {
+        startPage();
+        List<GetTeacherRespDTO> list = eduResourcesManagerService.selectTeacherAll();
+        return getDataTable(list);
+    }
+
+    /**
+     * 通过主键查询单条数据
+     */
+    @ApiOperation(value = "根据id获取教师管理",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "教师id",required = true)
+    @GetMapping("{id}")
+    public AjaxResult selectOne(@PathVariable Long id) {
+        return this.eduResourcesManagerService.getTeacherById(id);
+    }
+
+    /**
+     * 修改状态
+     */
+    @PostMapping("/updateStatus")
+    @ApiOperation(value = "开启停用状态",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",dataTypeClass = Long.class, value = "id",required = true),
+            @ApiImplicitParam(name = "status", dataTypeClass = String.class,value = "状态不能为空:0-正常,1-停用",required = true)
+    })
+    public AjaxResult updateStatus(@Validated @RequestBody TeacherManageUpdateStatusReqDTO reqDTO) {
+        return this.eduResourcesManagerService.updateStatus(reqDTO);
+    }
+
+    /**
+     * 新增数据
+     */
+    @PostMapping("/add")
+    @ApiOperation(value = "新增教师",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "name",dataTypeClass = String.class, value = "姓名",required = true),
+            @ApiImplicitParam(name = "sex", dataTypeClass = String.class,value = "性别"),
+            @ApiImplicitParam(name = "code", dataTypeClass = String.class,value = "身份证",required = true),
+            @ApiImplicitParam(name = "mobilePhone", dataTypeClass = String.class,value = "手机号",required = true),
+            @ApiImplicitParam(name = "photoAttachment", dataTypeClass = Long.class,value = "证件照id"),
+            @ApiImplicitParam(name = "qaAttachment", dataTypeClass = Long.class,value = "资质照id"),
+            @ApiImplicitParam(name = "jobTitle", dataTypeClass = String.class,value = "职称"),
+            @ApiImplicitParam(name = "eduLevel", dataTypeClass = String.class,value = "最高学历",required = true),
+            @ApiImplicitParam(name = "expiredTime", dataTypeClass = LocalDateTime.class,value = "过期时间",required = true),
+            @ApiImplicitParam(name = "isCm", dataTypeClass = Byte.class,value = "是否为煤矿:0为非,1是",required = true),
+            @ApiImplicitParam(name = "status", dataTypeClass = String.class,value = "状态不能为空:0-正常,1-停用",required = true),
+            @ApiImplicitParam(name = "description", dataTypeClass = String.class,value = "描述"),
+            @ApiImplicitParam(name = "operateTypes", dataTypeClass = List.class,value = "工种详情")
+    })
+    public AjaxResult insert(@Validated @RequestBody TeacherManageAddReqDTO reqDTO) {
+        return this.eduResourcesManagerService.saveTeacher(reqDTO);
+    }
+
+    /**
+     * 修改数据
+     */
+    @ApiOperation(value = "修改教师数据",httpMethod = "POST")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "id",dataTypeClass = Long.class, value = "id",required = true),
+            @ApiImplicitParam(name = "name",dataTypeClass = String.class, value = "姓名",required = true),
+            @ApiImplicitParam(name = "sex", dataTypeClass = String.class,value = "性别"),
+            @ApiImplicitParam(name = "code", dataTypeClass = String.class,value = "身份证",required = true),
+            @ApiImplicitParam(name = "mobilePhone", dataTypeClass = String.class,value = "手机号",required = true),
+            @ApiImplicitParam(name = "photoAttachment", dataTypeClass = Long.class,value = "证件照id"),
+            @ApiImplicitParam(name = "qaAttachment", dataTypeClass = Long.class,value = "资质照id"),
+            @ApiImplicitParam(name = "jobTitle", dataTypeClass = String.class,value = "职称"),
+            @ApiImplicitParam(name = "eduLevel", dataTypeClass = String.class,value = "最高学历",required = true),
+            @ApiImplicitParam(name = "expiredTime", dataTypeClass = LocalDateTime.class,value = "过期时间",required = true),
+            @ApiImplicitParam(name = "isCm", dataTypeClass = Byte.class,value = "是否为煤矿:0为非,1是",required = true),
+            @ApiImplicitParam(name = "status", dataTypeClass = String.class,value = "状态不能为空:0-正常,1-停用",required = true),
+            @ApiImplicitParam(name = "description", dataTypeClass = String.class,value = "描述"),
+            @ApiImplicitParam(name = "operateTypes", dataTypeClass = List.class,value = "工种详情")
+    })
+    @PostMapping("/update")
+    public AjaxResult update(@Validated @RequestBody TeacherManageUpdateReqDTO reqDTO) {
+        return this.eduResourcesManagerService.updateTeacherById(reqDTO);
+    }
+
+    /**
+     * 删除数据
+     */
+    @ApiOperation(value = "根据id删除教师",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "教师id",required = true)
+    @GetMapping("/del")
+    public AjaxResult delete(@PathVariable @NotNull(message = "id不能为空") Long id) {
+        return this.eduResourcesManagerService.removeTeacherById(id);
+    }
+
+    /**
+     * 根据id删除与之关联的工种信息
+     */
+    @ApiOperation(value = "根据id删除与之关联的工种信息",httpMethod = "GET")
+    @ApiImplicitParam(name = "id",dataTypeClass = Long.class,value = "关联的工种id",required = true)
+    @GetMapping("/operateType/del")
+    public AjaxResult deleteTeacherBindOperateType(@PathVariable @NotNull(message = "id不能为空") Long id) {
+        return this.eduResourcesManagerService.deleteTeacherBindOperateType(id);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaff.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaff.java
new file mode 100644
index 0000000..d6fd958
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaff.java
@@ -0,0 +1,62 @@
+package com.gkhy.exam.coalmine.entity;
+
+import java.time.LocalDateTime;
+import java.io.Serializable;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+@Data
+@TableName("cm_staff")
+public class CmStaff implements Serializable {
+
+    @Id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    //姓名    
+    private String name;
+
+    //性别    
+    private String sex;
+
+    //民族    
+    private String nationCode;
+
+    //身份证    
+    private String code;
+
+    //手机号    
+    private String mobilePhone;
+
+    //最高学历    
+    private String eduLevel;
+
+    //证件照    
+    private Long photoAttachment;
+
+    //删除标志(0代表存在 2代表删除)    
+    private Byte delFlag;
+
+    /** 创建者 */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /** 更新者 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffExam.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffExam.java
new file mode 100644
index 0000000..aa89181
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffExam.java
@@ -0,0 +1,61 @@
+package com.gkhy.exam.coalmine.entity;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+@Data
+@TableName("cm_staff_exam")
+public class CmStaffExam implements Serializable {
+
+    @Id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    //人员id    
+    private Long staffId;
+
+    //开始时间    
+    private LocalDateTime startTime;
+
+    //结束时间    
+    private LocalDateTime endTime;
+
+    //考试中心    
+    private String examCenter;
+
+    //科目    
+    private String subject;
+
+    //考试结果;0-未通过;1-通过    
+    private String result;
+
+    //删除标志(0代表存在 2代表删除)    
+    private Byte delFlag;
+
+    /** 创建者 */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /** 更新者 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffQa.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffQa.java
new file mode 100644
index 0000000..95cf1d6
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffQa.java
@@ -0,0 +1,64 @@
+package com.gkhy.exam.coalmine.entity;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+@Data
+@TableName("cm_staff_qa")
+public class CmStaffQa implements Serializable {
+
+    @Id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    //人员id    
+    private Long staffId;
+
+    //证书名字    
+    private String name;
+
+    //操作类型    
+    private Long operateTypeId;
+
+    //资格类型    
+    private String qualificationType;
+
+    //作业类别    
+    private String jobCategory;
+
+    //操作项目    
+    private String operationItems;
+
+    //过期时间    
+    private LocalDateTime expiredTime;
+
+    //删除标志(0代表存在 2代表删除)    
+    private Byte delFlag;
+
+    /** 创建者 */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /** 更新者 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffResume.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffResume.java
new file mode 100644
index 0000000..732948e
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffResume.java
@@ -0,0 +1,55 @@
+package com.gkhy.exam.coalmine.entity;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+@Data
+@TableName("cm_staff_resume")
+public class CmStaffResume implements Serializable {
+
+    @Id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    //人员id    
+    private Long staffId;
+
+    //开始时间    
+    private LocalDateTime startTime;
+
+    //结束时间    
+    private LocalDateTime endTime;
+
+    //单位    
+    private String unit;
+
+    //删除标志(0代表存在 2代表删除)    
+    private Byte delFlag;
+
+    /** 创建者 */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /** 更新者 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffTrain.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffTrain.java
new file mode 100644
index 0000000..b0b1cd2
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/CmStaffTrain.java
@@ -0,0 +1,60 @@
+package com.gkhy.exam.coalmine.entity;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+@Data
+@TableName("cm_staff_train")
+public class CmStaffTrain implements Serializable {
+
+    @Id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    //人员id    
+    private Long staffId;
+
+    //开始时间    
+    private LocalDateTime startTime;
+
+    //结束时间    
+    private LocalDateTime endTime;
+
+    //单位    
+    private String unit;
+
+    //所属批次    
+    private String batch;
+
+    //科目    
+    private String subject;
+
+    //删除标志(0代表存在 2代表删除)    
+    private Byte delFlag;
+
+    /** 创建者 */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /** 更新者 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/EmonExamRecord.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/EmonExamRecord.java
new file mode 100644
index 0000000..a0be7bb
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/EmonExamRecord.java
@@ -0,0 +1,60 @@
+package com.gkhy.exam.coalmine.entity;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+@Data
+@TableName("emon_exam_record")
+public class EmonExamRecord implements Serializable {
+
+    @Id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+        
+    private LocalDateTime reportTime;
+
+        
+    private Long districtId;
+
+        
+    private String examCenter;
+
+        
+    private String excType;
+
+    //是否为煤矿:0为非,1是    
+    private Byte isCm;
+
+    private String excImage;
+
+    //删除标志(0代表存在 2代表删除)
+    private Byte delFlag;
+
+    /** 创建者 */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /** 更新者 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/EmonTrainRecord.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/EmonTrainRecord.java
new file mode 100644
index 0000000..ced1835
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/EmonTrainRecord.java
@@ -0,0 +1,60 @@
+package com.gkhy.exam.coalmine.entity;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+@Data
+@TableName("emon_train_record")
+public class EmonTrainRecord implements Serializable {
+
+    @Id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+        
+    private LocalDateTime reportTime;
+
+        
+    private Long districtId;
+
+        
+    private String examCenter;
+
+        
+    private String excType;
+
+    //是否为煤矿:0为非,1是    
+    private Byte isCm;
+
+    private String excImage;
+
+    //删除标志(0代表存在 2代表删除)
+    private Byte delFlag;
+
+    /** 创建者 */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /** 更新者 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/ExaminerManage.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/ExaminerManage.java
new file mode 100644
index 0000000..d41dc8b
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/ExaminerManage.java
@@ -0,0 +1,78 @@
+package com.gkhy.exam.coalmine.entity;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.lettuce.core.StrAlgoArgs;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+@Data
+@TableName("examiner_manage")
+public class ExaminerManage implements Serializable {
+
+    @Id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    //姓名    
+    private String name;
+
+    //性别    
+    private String sex;
+
+    //身份证    
+    private String code;
+
+    //手机号    
+    private String mobilePhone;
+
+    //职称    
+    private String jobTitle;
+
+    //最高学历    
+    private String eduLevel;
+
+    //过期时间    
+    private LocalDateTime expiredTime;
+
+    //是否为煤矿:0为非,1是    
+    private Byte isCm;
+
+    //描述    
+    private String description;
+
+    private Long photoAttachment;
+
+    private Long qaAttachment;
+
+    //状态    
+    private String status;
+
+    //删除标志(0代表存在 2代表删除)    
+    private Byte delFlag;
+
+    /** 创建者 */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /** 更新者 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/ExaminerManageOperateTypeBind.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/ExaminerManageOperateTypeBind.java
new file mode 100644
index 0000000..2581a4f
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/ExaminerManageOperateTypeBind.java
@@ -0,0 +1,58 @@
+package com.gkhy.exam.coalmine.entity;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+@Data
+@TableName("examiner_manage_operate_type_bind")
+public class ExaminerManageOperateTypeBind implements Serializable {
+
+    @Id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    //考评员管理id
+    private Long examinerManageId;
+
+    //操作类型    
+    private Long operateTypeId;
+
+    //资格类型    
+    private String qualificationType;
+
+    //作业类别    
+    private String jobCategory;
+
+    //操作项目    
+    private String operationItems;
+
+    //删除标志(0代表存在 2代表删除)    
+    private Byte delFlag;
+
+    /** 创建者 */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /** 更新者 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/TeacherManage.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/TeacherManage.java
new file mode 100644
index 0000000..3fb79ed
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/TeacherManage.java
@@ -0,0 +1,70 @@
+package com.gkhy.exam.coalmine.entity;
+
+import java.time.LocalDateTime;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+import lombok.Data;
+import com.baomidou.mybatisplus.annotation.TableName;
+import org.springframework.data.annotation.Id;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+
+@Data
+@TableName("teacher_manage")
+public class TeacherManage implements Serializable {
+
+    @Id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    //性别    
+    private String sex;
+
+    //身份证    
+    private String code;
+
+    //手机号    
+    private String mobilePhone;
+
+    //姓名    
+    private String name;
+
+    //职称    
+    private String jobTitle;
+
+    //最高学历    
+    private String eduLevel;
+
+    //过期时间    
+    private LocalDateTime expiredTime;
+
+    //是否为煤矿:0为非,1是    
+    private Integer isCm;
+
+    //描述    
+    private String description;
+
+    private Long photoAttachment;
+
+    private Long qaAttachment;
+
+    //状态    
+    private String status;
+
+    //删除标志(0代表存在 2代表删除)    
+    private Byte delFlag;
+
+    //创建者    
+    private String createBy;
+
+    //创建时间    
+    private LocalDateTime createTime;
+
+    //更新者    
+    private String updateBy;
+
+    //更新时间    
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/TeacherManageOperateTypeBind.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/TeacherManageOperateTypeBind.java
new file mode 100644
index 0000000..eacf34b
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/entity/TeacherManageOperateTypeBind.java
@@ -0,0 +1,58 @@
+package com.gkhy.exam.coalmine.entity;
+
+import java.time.LocalDateTime;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.data.annotation.Id;
+
+@Data
+@TableName("teacher_manage_operate_type_bind")
+public class TeacherManageOperateTypeBind implements Serializable {
+
+    @Id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+
+    //老师管理id    
+    private Long teacherManageId;
+
+    //操作类型    
+    private Long operateTypeId;
+
+    //资格类型    
+    private String qualificationType;
+
+    //作业类别    
+    private String jobCategory;
+
+    //操作项目    
+    private String operationItems;
+
+    //删除标志(0代表存在 2代表删除)    
+    private Byte delFlag;
+
+    /** 创建者 */
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /** 更新者 */
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffExamMapper.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffExamMapper.java
new file mode 100644
index 0000000..a0da94e
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffExamMapper.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.coalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.coalmine.entity.CmStaffExam;
+import org.springframework.stereotype.Repository;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface CmStaffExamMapper extends BaseMapper<CmStaffExam> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffMapper.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffMapper.java
new file mode 100644
index 0000000..f83ffcb
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffMapper.java
@@ -0,0 +1,11 @@
+package com.gkhy.exam.coalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.coalmine.entity.CmStaff;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface CmStaffMapper extends BaseMapper<CmStaff> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffQaMapper.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffQaMapper.java
new file mode 100644
index 0000000..4f178e2
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffQaMapper.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.coalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.coalmine.entity.CmStaffQa;
+import org.springframework.stereotype.Repository;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface CmStaffQaMapper extends BaseMapper<CmStaffQa> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffResumeMapper.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffResumeMapper.java
new file mode 100644
index 0000000..1fcc71b
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffResumeMapper.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.coalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.coalmine.entity.CmStaffResume;
+import org.springframework.stereotype.Repository;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface CmStaffResumeMapper extends BaseMapper<CmStaffResume> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffTrainMapper.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffTrainMapper.java
new file mode 100644
index 0000000..dc10d82
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/CmStaffTrainMapper.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.coalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.coalmine.entity.CmStaffTrain;
+import org.springframework.stereotype.Repository;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface CmStaffTrainMapper extends BaseMapper<CmStaffTrain> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/EmonExamRecordMapper.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/EmonExamRecordMapper.java
new file mode 100644
index 0000000..2d3cb8c
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/EmonExamRecordMapper.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.coalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.coalmine.entity.EmonExamRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface EmonExamRecordMapper extends BaseMapper<EmonExamRecord> {
+
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/EmonTrainRecordMapper.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/EmonTrainRecordMapper.java
new file mode 100644
index 0000000..df902ca
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/EmonTrainRecordMapper.java
@@ -0,0 +1,14 @@
+package com.gkhy.exam.coalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.coalmine.entity.EmonTrainRecord;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface EmonTrainRecordMapper extends BaseMapper<EmonTrainRecord> {
+
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/ExaminerManageMapper.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/ExaminerManageMapper.java
new file mode 100644
index 0000000..c940da6
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/ExaminerManageMapper.java
@@ -0,0 +1,12 @@
+package com.gkhy.exam.coalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.coalmine.entity.ExaminerManage;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+
+public interface ExaminerManageMapper extends BaseMapper<ExaminerManage> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/ExaminerManageOperateTypeBindMapper.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/ExaminerManageOperateTypeBindMapper.java
new file mode 100644
index 0000000..76e7edd
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/ExaminerManageOperateTypeBindMapper.java
@@ -0,0 +1,11 @@
+package com.gkhy.exam.coalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.coalmine.entity.ExaminerManageOperateTypeBind;
+import org.apache.ibatis.annotations.Mapper;
+
+
+public interface ExaminerManageOperateTypeBindMapper extends BaseMapper<ExaminerManageOperateTypeBind> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/TeacherManageMapper.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/TeacherManageMapper.java
new file mode 100644
index 0000000..04e91ec
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/TeacherManageMapper.java
@@ -0,0 +1,11 @@
+package com.gkhy.exam.coalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.coalmine.entity.TeacherManage;
+import org.apache.ibatis.annotations.Mapper;
+
+
+public interface TeacherManageMapper extends BaseMapper<TeacherManage> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/TeacherManageOperateTypeBindMapper.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/TeacherManageOperateTypeBindMapper.java
new file mode 100644
index 0000000..45925f4
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/mapper/TeacherManageOperateTypeBindMapper.java
@@ -0,0 +1,11 @@
+package com.gkhy.exam.coalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.coalmine.entity.TeacherManageOperateTypeBind;
+import org.apache.ibatis.annotations.Mapper;
+
+
+public interface TeacherManageOperateTypeBindMapper extends BaseMapper<TeacherManageOperateTypeBind> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffAddReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffAddReqDTO.java
new file mode 100644
index 0000000..df89952
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffAddReqDTO.java
@@ -0,0 +1,44 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 11:00
+ */
+@Data
+public class CmStaffAddReqDTO implements Serializable {
+
+    //姓名
+    @NotBlank(message = "姓名不能为空")
+    private String name;
+
+    //性别
+    @NotBlank(message = "性别不能为空")
+    private String sex;
+
+    //民族
+    @NotBlank(message = "民族不能为空")
+    private String nationCode;
+
+    //身份证
+    @NotBlank(message = "身份证不能为空")
+    private String code;
+
+    //手机号
+    @NotBlank(message = "手机号不能为空")
+    private String mobilePhone;
+
+    //最高学历
+    @NotBlank(message = "最高学历不能为空")
+    private String eduLevel;
+
+    //证件照
+    @NotNull(message = "证件照不能为空")
+    private Long photoAttachment;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffExamAddReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffExamAddReqDTO.java
new file mode 100644
index 0000000..d7a9f6f
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffExamAddReqDTO.java
@@ -0,0 +1,44 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 15:23
+ */
+@Data
+public class CmStaffExamAddReqDTO implements Serializable {
+
+    //人员id
+    @NotNull(message = "人员id不能为空")
+    private Long staffId;
+
+    //开始时间
+    @NotNull(message = "开始时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+
+    //结束时间
+    @NotNull(message = "结束时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
+
+    //考试中心
+    @NotBlank(message = "考试中心不能为空")
+    private String examCenter;
+
+    //科目
+    @NotBlank(message = "科目不能为空")
+    private String subject;
+
+    //考试结果;0-通过;1-未通过
+    @NotBlank(message = "考试结果不能为空")
+    private String result;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffExamUpdateReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffExamUpdateReqDTO.java
new file mode 100644
index 0000000..6a61d1d
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffExamUpdateReqDTO.java
@@ -0,0 +1,48 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 15:23
+ */
+@Data
+public class CmStaffExamUpdateReqDTO implements Serializable {
+
+    //id
+    @NotNull(message = "id不能为空")
+    private Long id;
+
+    //人员id
+    @NotNull(message = "人员id不能为空")
+    private Long staffId;
+
+    //开始时间
+    @NotNull(message = "开始时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+
+    //结束时间
+    @NotNull(message = "结束时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
+
+    //考试中心
+    @NotBlank(message = "考试中心不能为空")
+    private String examCenter;
+
+    //科目
+    @NotBlank(message = "科目不能为空")
+    private String subject;
+
+    //考试结果;0-通过;1-未通过
+    @NotBlank(message = "考试结果不能为空")
+    private String result;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffQaAddReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffQaAddReqDTO.java
new file mode 100644
index 0000000..384e88b
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffQaAddReqDTO.java
@@ -0,0 +1,47 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 15:39
+ */
+@Data
+public class CmStaffQaAddReqDTO implements Serializable {
+
+    //人员id
+    @NotNull(message = "人员id不能为空")
+    private Long staffId;
+
+    //证书名字
+    @NotBlank(message = "证书名字不能为空")
+    private String name;
+
+    //操作类型
+    @NotNull(message = "操作类型不能为空")
+    private Long operateTypeId;
+
+    //资格类型
+    @NotBlank(message = "资格类型不能为空")
+    private String qualificationType;
+
+    //作业类别
+    @NotBlank(message = "作业类别不能为空")
+    private String jobCategory;
+
+    //操作项目
+    @NotBlank(message = "操作项目不能为空")
+    private String operationItems;
+
+    //过期时间
+    @NotNull(message = "操作类型不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime expiredTime;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffQaUpdateReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffQaUpdateReqDTO.java
new file mode 100644
index 0000000..d25c6a4
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffQaUpdateReqDTO.java
@@ -0,0 +1,50 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 15:39
+ */
+@Data
+public class CmStaffQaUpdateReqDTO implements Serializable {
+
+    @NotNull(message = "id不能为空")
+    private Long id;
+
+    //人员id
+    @NotNull(message = "人员id不能为空")
+    private Long staffId;
+
+    //证书名字
+    @NotBlank(message = "证书名字不能为空")
+    private String name;
+
+    //操作类型
+    @NotNull(message = "操作类型不能为空")
+    private Long operateTypeId;
+
+    //资格类型
+    @NotBlank(message = "资格类型不能为空")
+    private String qualificationType;
+
+    //作业类别
+    @NotBlank(message = "作业类别不能为空")
+    private String jobCategory;
+
+    //操作项目
+    @NotBlank(message = "操作项目不能为空")
+    private String operationItems;
+
+    //过期时间
+    @NotNull(message = "操作类型不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime expiredTime;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffResumeAddReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffResumeAddReqDTO.java
new file mode 100644
index 0000000..b0a92f6
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffResumeAddReqDTO.java
@@ -0,0 +1,36 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 14:32
+ */
+@Data
+public class CmStaffResumeAddReqDTO implements Serializable {
+
+    //人员id
+    @NotNull(message = "人员id不能为空")
+    private Long staffId;
+
+    //开始时间
+    @NotNull(message = "开始时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+
+    //结束时间
+    @NotNull(message = "结束时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
+
+    //单位
+    @NotBlank(message = "单位不能为空")
+    private String unit;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffResumeUpdateReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffResumeUpdateReqDTO.java
new file mode 100644
index 0000000..6f0d5b0
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffResumeUpdateReqDTO.java
@@ -0,0 +1,39 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 14:32
+ */
+@Data
+public class CmStaffResumeUpdateReqDTO implements Serializable {
+
+    @NotNull(message = "履历id不能为空")
+    private Long id;
+
+    //人员id
+    @NotNull(message = "人员id不能为空")
+    private Long staffId;
+
+    //开始时间
+    @NotNull(message = "开始时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+
+    //结束时间
+    @NotNull(message = "结束时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
+
+    //单位
+    @NotBlank(message = "单位不能为空")
+    private String unit;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffTrainAddReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffTrainAddReqDTO.java
new file mode 100644
index 0000000..db39f36
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffTrainAddReqDTO.java
@@ -0,0 +1,44 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 15:09
+ */
+@Data
+public class CmStaffTrainAddReqDTO implements Serializable {
+
+    //人员id
+    @NotNull(message = "人员id不能为空")
+    private Long staffId;
+
+    //开始时间
+    @NotNull(message = "开始时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+
+    //结束时间
+    @NotNull(message = "结束时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
+
+    //单位
+    @NotBlank(message = "单位不能为空")
+    private String unit;
+
+    //所属批次
+    @NotBlank(message = "所属批次不能为空")
+    private String batch;
+
+    //科目
+    @NotBlank(message = "科目不能为空")
+    private String subject;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffTrainUpdateReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffTrainUpdateReqDTO.java
new file mode 100644
index 0000000..65fe74a
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/CmStaffTrainUpdateReqDTO.java
@@ -0,0 +1,47 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 15:09
+ */
+@Data
+public class CmStaffTrainUpdateReqDTO implements Serializable {
+
+    @NotNull(message = "id不能为空")
+    private Long id;
+
+    //人员id
+    @NotNull(message = "人员id不能为空")
+    private Long staffId;
+
+    //开始时间
+    @NotNull(message = "开始时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime startTime;
+
+    //结束时间
+    @NotNull(message = "结束时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime endTime;
+
+    //单位
+    @NotBlank(message = "单位不能为空")
+    private String unit;
+
+    //所属批次
+    @NotBlank(message = "所属批次不能为空")
+    private String batch;
+
+    //科目
+    @NotBlank(message = "科目不能为空")
+    private String subject;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExamReceiveReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExamReceiveReqDTO.java
new file mode 100644
index 0000000..cdef2f7
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExamReceiveReqDTO.java
@@ -0,0 +1,34 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/13 10:27
+ */
+@Data
+public class ExamReceiveReqDTO{
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime reportTime;
+
+    private Long districtId;
+
+    private String examCenter;
+
+    private String excType;
+
+    //是否为煤矿:0为非,1是
+    private Byte isCm;
+
+    private String module;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageAddOperateTypeReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageAddOperateTypeReqDTO.java
new file mode 100644
index 0000000..acd0517
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageAddOperateTypeReqDTO.java
@@ -0,0 +1,35 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/11 15:57
+ */
+@Data
+public class ExaminerManageAddOperateTypeReqDTO implements Serializable {
+
+    //操作类型
+    @NotNull(message = "操作类型id不能为空")
+    private Long operateTypeId;
+
+    //资格类型
+    @NotBlank(message = "资格类型不能为空")
+    private String qualificationType;
+
+    //作业类别
+    @NotBlank(message = "作业类别不能为空")
+    private String jobCategory;
+
+    //操作项目
+    @NotBlank(message = "操作项目不能为空")
+    private String operationItems;
+
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageAddReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageAddReqDTO.java
new file mode 100644
index 0000000..e32dc94
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageAddReqDTO.java
@@ -0,0 +1,66 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import org.springframework.validation.annotation.Validated;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/11 15:57
+ */
+@Data
+public class ExaminerManageAddReqDTO implements Serializable {
+
+    //姓名
+    @NotBlank(message = "姓名不能为空")
+    private String name;
+
+    //性别
+    private String sex;
+
+    //身份证
+    @NotBlank(message = "身份证不能为空")
+    private String code;
+
+    //手机号
+    @NotBlank(message = "手机号不能为空")
+    private String mobilePhone;
+
+    private Long photoAttachment;
+
+    private Long qaAttachment;
+
+    //职称
+    private String jobTitle;
+
+    //最高学历
+    @NotNull(message = "最高学历不能为空")
+    private String eduLevel;
+
+    //过期时间
+    @NotNull(message = "过期时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime expiredTime;
+
+    //是否为煤矿:0为非,1是
+    @NotNull(message = "煤矿类型不能为空")
+    private Byte isCm;
+
+
+    @NotNull(message = "状态不能为空")
+    private String status;
+
+    private String description;
+
+    @Valid
+    private List<ExaminerManageAddOperateTypeReqDTO> operateTypes;
+
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateOperateTypeReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateOperateTypeReqDTO.java
new file mode 100644
index 0000000..7dd0114
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateOperateTypeReqDTO.java
@@ -0,0 +1,32 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/12 15:21
+ */
+@Data
+public class ExaminerManageUpdateOperateTypeReqDTO implements Serializable {
+
+    //操作类型
+    @NotNull(message = "操作类型id不能为空")
+    private Long operateTypeId;
+
+    //资格类型
+    @NotBlank(message = "资格类型不能为空")
+    private String qualificationType;
+
+    //作业类别
+    @NotBlank(message = "作业类别不能为空")
+    private String jobCategory;
+
+    //操作项目
+    @NotBlank(message = "操作项目不能为空")
+    private String operationItems;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateReqDTO.java
new file mode 100644
index 0000000..73b7c07
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateReqDTO.java
@@ -0,0 +1,68 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/11 15:57
+ */
+@Data
+public class ExaminerManageUpdateReqDTO implements Serializable {
+
+    @NotNull(message = "id不能为空")
+    private Long id;
+
+    //姓名
+    @NotBlank(message = "姓名不能为空")
+    private String name;
+
+    //性别
+    private String sex;
+
+    //身份证
+    @NotBlank(message = "身份证不能为空")
+    private String code;
+
+    //手机号
+    @NotBlank(message = "手机号不能为空")
+    private String mobilePhone;
+
+    //职称
+    private String jobTitle;
+
+    private Long photoAttachment;
+
+    private Long qaAttachment;
+
+    //最高学历
+    @NotNull(message = "最高学历不能为空")
+    private String eduLevel;
+
+    //过期时间
+    @NotNull(message = "过期时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime expiredTime;
+
+    //是否为煤矿:0为非,1是
+    @NotNull(message = "煤矿类型不能为空")
+    private Byte isCm;
+
+    @NotNull(message = "状态不能为空")
+    private String status;
+
+    //描述
+    private String description;
+
+    @Valid
+    private List<ExaminerManageAddOperateTypeReqDTO> operateTypes;
+
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateStatusReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateStatusReqDTO.java
new file mode 100644
index 0000000..acf65f0
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/ExaminerManageUpdateStatusReqDTO.java
@@ -0,0 +1,22 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/11 15:57
+ */
+@Data
+public class ExaminerManageUpdateStatusReqDTO implements Serializable {
+
+    @NotNull(message = "id不能为空")
+    private Long id;
+
+    @NotNull(message = "状态不能为空")
+    private String status;
+
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageAddOperateTypeReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageAddOperateTypeReqDTO.java
new file mode 100644
index 0000000..bf2c51d
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageAddOperateTypeReqDTO.java
@@ -0,0 +1,33 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/11 15:57
+ */
+@Data
+public class TeacherManageAddOperateTypeReqDTO implements Serializable {
+
+    //操作类型
+    @NotNull(message = "操作类型id不能为空")
+    private Long operateTypeId;
+
+    //资格类型
+    @NotBlank(message = "资格类型不能为空")
+    private String qualificationType;
+
+    //作业类别
+    @NotBlank(message = "作业类别不能为空")
+    private String jobCategory;
+
+    //操作项目
+    @NotBlank(message = "操作项目不能为空")
+    private String operationItems;
+
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageAddReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageAddReqDTO.java
new file mode 100644
index 0000000..bd2a011
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageAddReqDTO.java
@@ -0,0 +1,64 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/11 15:57
+ */
+@Data
+public class TeacherManageAddReqDTO implements Serializable {
+
+    //姓名
+    @NotBlank(message = "姓名不能为空")
+    private String name;
+
+    //性别
+    private String sex;
+
+    //身份证
+    @NotBlank(message = "身份证不能为空")
+    private String code;
+
+    //手机号
+    @NotBlank(message = "手机号不能为空")
+    private String mobilePhone;
+
+    private Long photoAttachment;
+
+    private Long qaAttachment;
+
+    //职称
+    private String jobTitle;
+
+    //最高学历
+    @NotNull(message = "最高学历不能为空")
+    private String eduLevel;
+
+    //过期时间
+    @NotNull(message = "过期时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime expiredTime;
+
+    //是否为煤矿:0为非,1是
+    @NotNull(message = "煤矿类型不能为空")
+    private Byte isCm;
+
+
+    @NotNull(message = "状态不能为空")
+    private String status;
+
+    private String description;
+
+    @Valid
+    private List<TeacherManageAddOperateTypeReqDTO> operateTypes;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateOperateTypeReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateOperateTypeReqDTO.java
new file mode 100644
index 0000000..b02b7d2
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateOperateTypeReqDTO.java
@@ -0,0 +1,32 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/12 15:21
+ */
+@Data
+public class TeacherManageUpdateOperateTypeReqDTO implements Serializable {
+
+    //操作类型
+    @NotNull(message = "操作类型id不能为空")
+    private Long operateTypeId;
+
+    //资格类型
+    @NotBlank(message = "资格类型不能为空")
+    private String qualificationType;
+
+    //作业类别
+    @NotBlank(message = "作业类别不能为空")
+    private String jobCategory;
+
+    //操作项目
+    @NotBlank(message = "操作项目不能为空")
+    private String operationItems;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateReqDTO.java
new file mode 100644
index 0000000..3cf9d24
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateReqDTO.java
@@ -0,0 +1,67 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/11 15:57
+ */
+@Data
+public class TeacherManageUpdateReqDTO implements Serializable {
+
+    @NotNull(message = "id不能为空")
+    private Long id;
+
+    //姓名
+    @NotBlank(message = "姓名不能为空")
+    private String name;
+
+    //性别
+    private String sex;
+
+    //身份证
+    @NotBlank(message = "身份证不能为空")
+    private String code;
+
+    //手机号
+    @NotBlank(message = "手机号不能为空")
+    private String mobilePhone;
+
+    //职称
+    private String jobTitle;
+
+    private Long photoAttachment;
+
+    private Long qaAttachment;
+
+    //最高学历
+    @NotNull(message = "最高学历不能为空")
+    private String eduLevel;
+
+    //过期时间
+    @NotNull(message = "过期时间不能为空")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime expiredTime;
+
+    //是否为煤矿:0为非,1是
+    @NotNull(message = "煤矿类型不能为空")
+    private Byte isCm;
+
+    @NotNull(message = "状态不能为空")
+    private String status;
+
+    //描述
+    private String description;
+
+    @Valid
+    private List<TeacherManageAddOperateTypeReqDTO> operateTypes;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateStatusReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateStatusReqDTO.java
new file mode 100644
index 0000000..7b69d2d
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TeacherManageUpdateStatusReqDTO.java
@@ -0,0 +1,25 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/11 15:57
+ */
+@Data
+public class TeacherManageUpdateStatusReqDTO implements Serializable {
+
+    @NotNull(message = "id不能为空")
+    private Long id;
+
+    @NotNull(message = "状态不能为空")
+    private String status;
+
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TrainReceiveReqDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TrainReceiveReqDTO.java
new file mode 100644
index 0000000..e0b2a04
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/req/TrainReceiveReqDTO.java
@@ -0,0 +1,31 @@
+package com.gkhy.exam.coalmine.model.dto.req;
+
+import lombok.Data;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/13 10:27
+ */
+@Data
+public class TrainReceiveReqDTO implements Serializable {
+
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime reportTime;
+
+    private Long districtId;
+
+    private String examCenter;
+
+    private String excType;
+
+    //是否为煤矿:0为非,1是
+    private Byte isCm;
+
+    private String module;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/AttachmentInfoRespDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/AttachmentInfoRespDTO.java
new file mode 100644
index 0000000..cb07fc3
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/AttachmentInfoRespDTO.java
@@ -0,0 +1,22 @@
+package com.gkhy.exam.coalmine.model.dto.resp;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/5/6
+ * @time: 14:54
+ */
+@Data
+public class AttachmentInfoRespDTO implements Serializable {
+
+    private Long id;
+
+    private String fileUrl;
+
+    private String fileName;
+
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/CmStaffPageRespDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/CmStaffPageRespDTO.java
new file mode 100644
index 0000000..5f323b2
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/CmStaffPageRespDTO.java
@@ -0,0 +1,55 @@
+package com.gkhy.exam.coalmine.model.dto.resp;
+
+import com.gkhy.exam.coalmine.entity.*;
+import com.gkhy.exam.noncoalmine.model.vo.ViolationRegistrationVO;
+import com.gkhy.exam.noncoalmine.model.vo.WorkRegistrationVO;
+import com.ruoyi.file.entity.AttachmentInfo;
+import jdk.internal.dynalink.linker.LinkerServices;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 15:57
+ */
+@Data
+public class CmStaffPageRespDTO implements Serializable {
+
+    private Long id;
+
+    //姓名
+    private String name;
+
+    //性别
+    private String sex;
+
+    //民族
+    private String nationCode;
+
+    //身份证
+    private String code;
+
+    //手机号
+    private String mobilePhone;
+
+    //最高学历
+    private String eduLevel;
+
+    //证件照
+    private AttachmentInfo photoAttachment;
+
+    private List<ViolationRegistrationVO> violationRegistrationVOS;
+
+    private List<WorkRegistrationVO> workRegistrationVOS;
+
+    private List<CmStaffResume>  cmStaffResumes;
+
+    private List<CmStaffTrain> cmStaffTrains;
+
+    private List<CmStaffExam> cmStaffExams;
+
+    private List<CmStaffQa> cmStaffQas;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExamDataRespDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExamDataRespDTO.java
new file mode 100644
index 0000000..13ac950
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExamDataRespDTO.java
@@ -0,0 +1,32 @@
+package com.gkhy.exam.coalmine.model.dto.resp;
+
+import com.ruoyi.file.entity.AttachmentInfo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/13 14:23
+ */
+@Data
+public class GetExamDataRespDTO implements Serializable {
+
+    private Long id;
+
+    private LocalDateTime reportTime;
+
+    private Long districtId;
+
+    private String examCenter;
+
+    private String excType;
+
+    //是否为煤矿:0为非,1是
+    private Byte isCm;
+
+    private List<AttachmentInfoRespDTO> attachmentInfos;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExaminerOperateTypesRespDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExaminerOperateTypesRespDTO.java
new file mode 100644
index 0000000..85f3d92
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExaminerOperateTypesRespDTO.java
@@ -0,0 +1,34 @@
+package com.gkhy.exam.coalmine.model.dto.resp;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/12 13:14
+ */
+@Data
+public class GetExaminerOperateTypesRespDTO implements Serializable {
+
+    private Long id;
+
+    //老师管理id
+    private Long teacherManageId;
+
+    //操作类型
+    private Long operateTypeId;
+
+    //资格类型
+    private String qualificationType;
+
+    //作业类别
+    private String jobCategory;
+
+    //操作项目
+    private String operationItems;
+
+    private Integer type;
+
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExaminerRespDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExaminerRespDTO.java
new file mode 100644
index 0000000..023ea0e
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetExaminerRespDTO.java
@@ -0,0 +1,56 @@
+package com.gkhy.exam.coalmine.model.dto.resp;
+
+import com.ruoyi.file.entity.AttachmentInfo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/12 13:14
+ */
+@Data
+public class GetExaminerRespDTO implements Serializable {
+
+    private Long id;
+
+    //姓名
+    private String name;
+
+    //性别
+    private Integer sex;
+
+    //身份证
+    private String code;
+
+    //手机号
+    private String mobilePhone;
+
+    //职称
+    private Long jobTitle;
+
+    //最高学历
+    private Long eduLevel;
+
+    //过期时间
+    private LocalDateTime expiredTime;
+
+    //是否为煤矿:0为非,1是
+    private Byte isCm;
+
+    //描述
+    private String description;
+
+    private AttachmentInfo photoAttachment;
+
+    private AttachmentInfo qaAttachment;
+
+    private List<GetExaminerOperateTypesRespDTO>  operateTypes;
+
+    //状态
+    private Byte status;
+
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTeacherOperateTypesRespDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTeacherOperateTypesRespDTO.java
new file mode 100644
index 0000000..6337278
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTeacherOperateTypesRespDTO.java
@@ -0,0 +1,34 @@
+package com.gkhy.exam.coalmine.model.dto.resp;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/12 13:14
+ */
+@Data
+public class GetTeacherOperateTypesRespDTO implements Serializable {
+
+    private Long id;
+
+    //老师管理id
+    private Long teacherManageId;
+
+    //操作类型
+    private Long operateTypeId;
+
+    //资格类型
+    private String qualificationType;
+
+    //作业类别
+    private String jobCategory;
+
+    //操作项目
+    private String operationItems;
+
+    private Integer type;
+
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTeacherRespDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTeacherRespDTO.java
new file mode 100644
index 0000000..75304f4
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTeacherRespDTO.java
@@ -0,0 +1,56 @@
+package com.gkhy.exam.coalmine.model.dto.resp;
+
+import com.ruoyi.file.entity.AttachmentInfo;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/12 13:14
+ */
+@Data
+public class GetTeacherRespDTO implements Serializable {
+
+    private Long id;
+
+    //姓名
+    private String name;
+
+    //性别
+    private Integer sex;
+
+    //身份证
+    private String code;
+
+    //手机号
+    private String mobilePhone;
+
+    //职称
+    private Long jobTitle;
+
+    //最高学历
+    private Long eduLevel;
+
+    //过期时间
+    private LocalDateTime expiredTime;
+
+    //是否为煤矿:0为非,1是
+    private Byte isCm;
+
+    //描述
+    private String description;
+
+    private AttachmentInfo photoAttachment;
+
+    private AttachmentInfo qaAttachment;
+
+    private List<GetTeacherOperateTypesRespDTO>  operateTypes;
+
+    //状态
+    private Byte status;
+
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTrainDataRespDTO.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTrainDataRespDTO.java
new file mode 100644
index 0000000..1a0ac0b
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/model/dto/resp/GetTrainDataRespDTO.java
@@ -0,0 +1,31 @@
+package com.gkhy.exam.coalmine.model.dto.resp;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/13 14:23
+ */
+@Data
+public class GetTrainDataRespDTO implements Serializable {
+
+    private Long id;
+
+    private LocalDateTime reportTime;
+
+    private Long districtId;
+
+    private String examCenter;
+
+    private String excType;
+
+    //是否为煤矿:0为非,1是
+    private Byte isCm;
+
+    private List<AttachmentInfoRespDTO> attachmentInfos;
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/CmStaffManagerService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/CmStaffManagerService.java
new file mode 100644
index 0000000..e23b4eb
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/CmStaffManagerService.java
@@ -0,0 +1,43 @@
+package com.gkhy.exam.coalmine.service;
+
+import com.gkhy.exam.coalmine.model.dto.req.*;
+import com.gkhy.exam.coalmine.model.dto.resp.CmStaffPageRespDTO;
+import com.ruoyi.common.core.domain.AjaxResult;
+
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 10:48
+ */
+public interface CmStaffManagerService {
+    AjaxResult saveCmStaff(CmStaffAddReqDTO reqDTO);
+
+    AjaxResult saveCmStaffResume(CmStaffResumeAddReqDTO reqDTO);
+
+    AjaxResult deleteCmStaffResume(Long id);
+
+    AjaxResult updateCmStaffResume(CmStaffResumeUpdateReqDTO reqDTO);
+
+    AjaxResult saveCmStaffTrain(CmStaffTrainAddReqDTO reqDTO);
+
+    AjaxResult deleteCmStaffTrain(Long id);
+
+    AjaxResult updateCmStaffTrain(CmStaffTrainUpdateReqDTO reqDTO);
+
+    AjaxResult saveCmStaffExam(CmStaffExamAddReqDTO reqDTO);
+
+    AjaxResult deleteCmStaffExam(Long id);
+
+    AjaxResult updateCmStaffExam(CmStaffExamUpdateReqDTO reqDTO);
+
+    AjaxResult saveCmStaffQa(CmStaffQaAddReqDTO reqDTO);
+
+    AjaxResult deleteCmStaffQa(Long id);
+
+    AjaxResult updateCmStaffQa(CmStaffQaUpdateReqDTO reqDTO);
+
+    List<CmStaffPageRespDTO> selectPage();
+
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/EduResourcesManagerService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/EduResourcesManagerService.java
new file mode 100644
index 0000000..2837c13
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/EduResourcesManagerService.java
@@ -0,0 +1,45 @@
+package com.gkhy.exam.coalmine.service;
+
+import com.gkhy.exam.coalmine.entity.TeacherManage;
+import com.gkhy.exam.coalmine.model.dto.req.*;
+import com.gkhy.exam.coalmine.model.dto.resp.GetExaminerRespDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetTeacherRespDTO;
+import com.ruoyi.common.core.domain.AjaxResult;
+
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/11 14:52
+ */
+public interface EduResourcesManagerService {
+    AjaxResult saveExaminer(ExaminerManageAddReqDTO reqDTO);
+
+    AjaxResult removeExaminerById(Long id);
+
+    AjaxResult updateExaminerById(ExaminerManageUpdateReqDTO reqDTO);
+
+    AjaxResult getExaminerById(Long id);
+
+    List<GetExaminerRespDTO> selectAll();
+
+    AjaxResult saveTeacher(TeacherManageAddReqDTO reqDTO);
+
+    AjaxResult updateTeacherById(TeacherManageUpdateReqDTO reqDTO);
+
+    AjaxResult removeTeacherById(Long id);
+
+    AjaxResult getTeacherById(Long id);
+
+    List<GetTeacherRespDTO> selectTeacherAll();
+
+    AjaxResult updateStatus(TeacherManageUpdateStatusReqDTO reqDTO);
+
+    AjaxResult updateExaminerStatus(ExaminerManageUpdateStatusReqDTO reqDTO);
+
+    AjaxResult deleteExaminerBindOperateType(Long id);
+
+    AjaxResult deleteTeacherBindOperateType(Long id);
+
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/EmonRecordManagerService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/EmonRecordManagerService.java
new file mode 100644
index 0000000..61623dc
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/EmonRecordManagerService.java
@@ -0,0 +1,30 @@
+package com.gkhy.exam.coalmine.service;
+
+import com.gkhy.exam.coalmine.model.dto.req.ExamReceiveReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.TrainReceiveReqDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetExamDataRespDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetTrainDataRespDTO;
+import com.ruoyi.common.core.domain.AjaxResult;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/13 10:19
+ */
+public interface EmonRecordManagerService {
+
+    AjaxResult examReceive(MultipartFile[] file,ExamReceiveReqDTO reqDTO);
+
+    AjaxResult trainReceive(MultipartFile[] file,TrainReceiveReqDTO reqDTO);
+
+    List<GetExamDataRespDTO> getExamData();
+
+    List<GetTrainDataRespDTO> getTrainData();
+
+    AjaxResult deleteExamRecord(Long id);
+
+    AjaxResult deleteTrainRecord(Long id);
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffExamService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffExamService.java
new file mode 100644
index 0000000..1f47512
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffExamService.java
@@ -0,0 +1,19 @@
+package com.gkhy.exam.coalmine.service.baseService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.coalmine.entity.CmStaffExam;
+import com.gkhy.exam.coalmine.entity.CmStaffTrain;
+
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+public interface CmStaffExamService extends IService<CmStaffExam> {
+
+    CmStaffExam getValidById(Long id);
+
+    List<CmStaffExam> listValid(Long id);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffQaService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffQaService.java
new file mode 100644
index 0000000..b824df0
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffQaService.java
@@ -0,0 +1,20 @@
+package com.gkhy.exam.coalmine.service.baseService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.coalmine.entity.CmStaffQa;
+import com.gkhy.exam.coalmine.entity.CmStaffTrain;
+
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+public interface CmStaffQaService extends IService<CmStaffQa> {
+
+    CmStaffQa getValidById(Long id);
+
+    List<CmStaffQa> listValid(Long id);
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffResumeService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffResumeService.java
new file mode 100644
index 0000000..94437cf
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffResumeService.java
@@ -0,0 +1,19 @@
+package com.gkhy.exam.coalmine.service.baseService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.coalmine.entity.CmStaffResume;
+import com.gkhy.exam.coalmine.entity.CmStaffTrain;
+
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+public interface CmStaffResumeService extends IService<CmStaffResume> {
+
+    CmStaffResume getValidById(Long id);
+
+    List<CmStaffResume> listValid(Long id);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffService.java
new file mode 100644
index 0000000..8dc239b
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffService.java
@@ -0,0 +1,13 @@
+package com.gkhy.exam.coalmine.service.baseService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.coalmine.entity.CmStaff;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+public interface CmStaffService extends IService<CmStaff> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffTrainService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffTrainService.java
new file mode 100644
index 0000000..adbc918
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/CmStaffTrainService.java
@@ -0,0 +1,18 @@
+package com.gkhy.exam.coalmine.service.baseService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.coalmine.entity.CmStaffTrain;
+
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+public interface CmStaffTrainService extends IService<CmStaffTrain> {
+
+    CmStaffTrain getValidById(Long id);
+
+    List<CmStaffTrain> listValid(Long id);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/EmonExamRecordService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/EmonExamRecordService.java
new file mode 100644
index 0000000..1368e34
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/EmonExamRecordService.java
@@ -0,0 +1,20 @@
+package com.gkhy.exam.coalmine.service.baseService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.coalmine.entity.EmonExamRecord;
+
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-13 10:13:39
+ */
+public interface EmonExamRecordService extends IService<EmonExamRecord> {
+
+
+    EmonExamRecord findValidById(Long id);
+
+    List<EmonExamRecord> listValid();
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/EmonTrainRecordService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/EmonTrainRecordService.java
new file mode 100644
index 0000000..a5470c7
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/EmonTrainRecordService.java
@@ -0,0 +1,19 @@
+package com.gkhy.exam.coalmine.service.baseService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.coalmine.entity.EmonTrainRecord;
+
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-13 10:13:40
+ */
+public interface EmonTrainRecordService extends IService<EmonTrainRecord> {
+
+    EmonTrainRecord findValidById(Long id);
+
+    List<EmonTrainRecord> listValid();
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/ExaminerManageOperateTypeBindService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/ExaminerManageOperateTypeBindService.java
new file mode 100644
index 0000000..93965cb
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/ExaminerManageOperateTypeBindService.java
@@ -0,0 +1,18 @@
+package com.gkhy.exam.coalmine.service.baseService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.coalmine.entity.ExaminerManageOperateTypeBind;
+
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-11 14:47:33
+ */
+public interface ExaminerManageOperateTypeBindService extends IService<ExaminerManageOperateTypeBind> {
+
+    List<ExaminerManageOperateTypeBind> listByExaminerManageId(Long id);
+
+    ExaminerManageOperateTypeBind getNoDeleteById(Long id);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/ExaminerManageService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/ExaminerManageService.java
new file mode 100644
index 0000000..3b6a389
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/ExaminerManageService.java
@@ -0,0 +1,16 @@
+package com.gkhy.exam.coalmine.service.baseService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.coalmine.entity.ExaminerManage;
+
+/**
+ * @author hz
+ * @since 2023-09-11 14:47:33
+ */
+public interface ExaminerManageService extends IService<ExaminerManage> {
+
+    ExaminerManage getExaminerById(Long id);
+
+    ExaminerManage getExaminerByCode(String code);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/TeacherManageOperateTypeBindService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/TeacherManageOperateTypeBindService.java
new file mode 100644
index 0000000..f90c034
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/TeacherManageOperateTypeBindService.java
@@ -0,0 +1,19 @@
+package com.gkhy.exam.coalmine.service.baseService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.coalmine.entity.ExaminerManageOperateTypeBind;
+import com.gkhy.exam.coalmine.entity.TeacherManageOperateTypeBind;
+
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-11 14:47:33
+ */
+public interface TeacherManageOperateTypeBindService extends IService<TeacherManageOperateTypeBind> {
+
+    List<TeacherManageOperateTypeBind> listByTeacherManageId(Long id);
+
+    TeacherManageOperateTypeBind getNoDeleteById(Long id);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/TeacherManageService.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/TeacherManageService.java
new file mode 100644
index 0000000..23b899f
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/TeacherManageService.java
@@ -0,0 +1,16 @@
+package com.gkhy.exam.coalmine.service.baseService;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.coalmine.entity.TeacherManage;
+
+/**
+ * @author hz
+ * @since 2023-09-11 14:47:33
+ */
+public interface TeacherManageService extends IService<TeacherManage> {
+
+    TeacherManage getTeacherByCode(String code);
+
+    TeacherManage getTeacherById(Long id);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffExamServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffExamServiceImpl.java
new file mode 100644
index 0000000..b4e5d6f
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffExamServiceImpl.java
@@ -0,0 +1,41 @@
+package com.gkhy.exam.coalmine.service.baseService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.coalmine.entity.CmStaffTrain;
+import com.gkhy.exam.coalmine.mapper.CmStaffExamMapper;
+import com.gkhy.exam.coalmine.entity.CmStaffExam;
+import com.gkhy.exam.coalmine.service.baseService.CmStaffExamService;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+@Service("cmStaffExamServiceImpl")
+public class CmStaffExamServiceImpl extends ServiceImpl<CmStaffExamMapper, CmStaffExam> implements CmStaffExamService {
+
+    @Resource
+    private CmStaffExamMapper cmStaffExamMapper;
+
+    @Override
+    public CmStaffExam getValidById(Long id) {
+        LambdaQueryWrapper<CmStaffExam> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CmStaffExam::getId,id)
+                .eq(CmStaffExam::getDelFlag, DeleteStatusEnum.NO.getStatus());
+        return cmStaffExamMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<CmStaffExam> listValid(Long id) {
+        LambdaQueryWrapper<CmStaffExam> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CmStaffExam::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(CmStaffExam::getId,id);
+        return cmStaffExamMapper.selectList(wrapper);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffQaServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffQaServiceImpl.java
new file mode 100644
index 0000000..0aa4046
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffQaServiceImpl.java
@@ -0,0 +1,42 @@
+package com.gkhy.exam.coalmine.service.baseService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.coalmine.entity.CmStaffExam;
+import com.gkhy.exam.coalmine.mapper.CmStaffQaMapper;
+import com.gkhy.exam.coalmine.entity.CmStaffQa;
+import com.gkhy.exam.coalmine.service.baseService.CmStaffQaService;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.lang.ref.PhantomReference;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+@Service("cmStaffQaServiceImpl")
+public class CmStaffQaServiceImpl extends ServiceImpl<CmStaffQaMapper, CmStaffQa> implements CmStaffQaService {
+
+    @Resource
+    private CmStaffQaMapper cmStaffQaMapper;
+
+    @Override
+    public CmStaffQa getValidById(Long id) {
+        LambdaQueryWrapper<CmStaffQa> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CmStaffQa::getId,id)
+                .eq(CmStaffQa::getDelFlag, DeleteStatusEnum.NO.getStatus());
+        return cmStaffQaMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<CmStaffQa> listValid(Long id) {
+        LambdaQueryWrapper<CmStaffQa> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CmStaffQa::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(CmStaffQa::getId,id);
+        return cmStaffQaMapper.selectList(wrapper);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffResumeServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffResumeServiceImpl.java
new file mode 100644
index 0000000..15e4af0
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffResumeServiceImpl.java
@@ -0,0 +1,41 @@
+package com.gkhy.exam.coalmine.service.baseService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.coalmine.mapper.CmStaffResumeMapper;
+import com.gkhy.exam.coalmine.entity.CmStaffResume;
+import com.gkhy.exam.coalmine.service.baseService.CmStaffResumeService;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import org.springframework.stereotype.Service;
+import org.springframework.web.bind.annotation.DeleteMapping;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+@Service("cmStaffResumeServiceImpl")
+public class CmStaffResumeServiceImpl extends ServiceImpl<CmStaffResumeMapper, CmStaffResume> implements CmStaffResumeService {
+
+    @Resource
+    private CmStaffResumeMapper cmStaffResumeMapper;
+
+    @Override
+    public CmStaffResume getValidById(Long id) {
+        LambdaQueryWrapper<CmStaffResume> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CmStaffResume::getId,id)
+                .eq(CmStaffResume::getDelFlag, DeleteStatusEnum.NO.getStatus());
+        return cmStaffResumeMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<CmStaffResume> listValid(Long id) {
+        LambdaQueryWrapper<CmStaffResume> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CmStaffResume::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(CmStaffResume::getStaffId,id);
+        return cmStaffResumeMapper.selectList(wrapper);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffServiceImpl.java
new file mode 100644
index 0000000..bff6cce
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffServiceImpl.java
@@ -0,0 +1,17 @@
+package com.gkhy.exam.coalmine.service.baseService.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.coalmine.mapper.CmStaffMapper;
+import com.gkhy.exam.coalmine.entity.CmStaff;
+import com.gkhy.exam.coalmine.service.baseService.CmStaffService;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+@Service("cmStaffManageServiceImpl")
+public class CmStaffServiceImpl extends ServiceImpl<CmStaffMapper, CmStaff> implements CmStaffService {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffTrainServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffTrainServiceImpl.java
new file mode 100644
index 0000000..7ea77ab
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/CmStaffTrainServiceImpl.java
@@ -0,0 +1,41 @@
+package com.gkhy.exam.coalmine.service.baseService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.coalmine.entity.CmStaffResume;
+import com.gkhy.exam.coalmine.mapper.CmStaffTrainMapper;
+import com.gkhy.exam.coalmine.entity.CmStaffTrain;
+import com.gkhy.exam.coalmine.service.baseService.CmStaffTrainService;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-14 10:37:03
+ */
+@Service("cmStaffTrainServiceImpl")
+public class CmStaffTrainServiceImpl extends ServiceImpl<CmStaffTrainMapper, CmStaffTrain> implements CmStaffTrainService {
+
+    @Resource
+    private CmStaffTrainMapper cmStaffTrainMapper;
+
+    @Override
+    public CmStaffTrain getValidById(Long id) {
+        LambdaQueryWrapper<CmStaffTrain> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CmStaffTrain::getId,id)
+                .eq(CmStaffTrain::getDelFlag, DeleteStatusEnum.NO.getStatus());
+        return cmStaffTrainMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<CmStaffTrain> listValid(Long id) {
+        LambdaQueryWrapper<CmStaffTrain> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CmStaffTrain::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(CmStaffTrain::getStaffId,id);;
+        return cmStaffTrainMapper.selectList(wrapper);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/EmonExamRecordServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/EmonExamRecordServiceImpl.java
new file mode 100644
index 0000000..9b3f883
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/EmonExamRecordServiceImpl.java
@@ -0,0 +1,41 @@
+package com.gkhy.exam.coalmine.service.baseService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.coalmine.mapper.EmonExamRecordMapper;
+import com.gkhy.exam.coalmine.entity.EmonExamRecord;
+import com.gkhy.exam.coalmine.service.baseService.EmonExamRecordService;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-13 10:13:40
+ */
+@Service("emonExamRecordServiceImpl")
+public class EmonExamRecordServiceImpl extends ServiceImpl<EmonExamRecordMapper, EmonExamRecord> implements EmonExamRecordService {
+
+    @Resource
+    private EmonExamRecordMapper emonExamRecordMapper;
+
+
+    @Override
+    public EmonExamRecord findValidById(Long id) {
+        LambdaQueryWrapper<EmonExamRecord> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EmonExamRecord::getId,id)
+                .eq(EmonExamRecord::getDelFlag, DeleteStatusEnum.NO.getStatus());
+        return emonExamRecordMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<EmonExamRecord> listValid() {
+        LambdaQueryWrapper<EmonExamRecord> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EmonExamRecord::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .orderByDesc(EmonExamRecord::getReportTime);
+        return emonExamRecordMapper.selectList(wrapper);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/EmonTrainRecordServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/EmonTrainRecordServiceImpl.java
new file mode 100644
index 0000000..f25152b
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/EmonTrainRecordServiceImpl.java
@@ -0,0 +1,41 @@
+package com.gkhy.exam.coalmine.service.baseService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.coalmine.mapper.EmonTrainRecordMapper;
+import com.gkhy.exam.coalmine.entity.EmonTrainRecord;
+import com.gkhy.exam.coalmine.service.baseService.EmonTrainRecordService;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-13 10:13:40
+ */
+@Service("emonTrainRecordServiceImpl")
+public class EmonTrainRecordServiceImpl extends ServiceImpl<EmonTrainRecordMapper, EmonTrainRecord> implements EmonTrainRecordService {
+
+    @Resource
+    private EmonTrainRecordMapper emonTrainRecordMapper;
+
+
+    @Override
+    public EmonTrainRecord findValidById(Long id) {
+        LambdaQueryWrapper<EmonTrainRecord> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EmonTrainRecord::getId,id)
+                .eq(EmonTrainRecord::getDelFlag, DeleteStatusEnum.NO.getStatus());
+        return emonTrainRecordMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<EmonTrainRecord> listValid() {
+        LambdaQueryWrapper<EmonTrainRecord> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(EmonTrainRecord::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .orderByDesc(EmonTrainRecord::getReportTime);
+        return emonTrainRecordMapper.selectList(wrapper);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/ExaminerManageOperateTypeBindServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/ExaminerManageOperateTypeBindServiceImpl.java
new file mode 100644
index 0000000..e760ed4
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/ExaminerManageOperateTypeBindServiceImpl.java
@@ -0,0 +1,40 @@
+package com.gkhy.exam.coalmine.service.baseService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.coalmine.mapper.ExaminerManageOperateTypeBindMapper;
+import com.gkhy.exam.coalmine.entity.ExaminerManageOperateTypeBind;
+import com.gkhy.exam.coalmine.service.baseService.ExaminerManageOperateTypeBindService;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-11 14:47:33
+ */
+@Service("examinerManageOperateTypeBindServiceImpl")
+public class ExaminerManageOperateTypeBindServiceImpl extends ServiceImpl<ExaminerManageOperateTypeBindMapper, ExaminerManageOperateTypeBind> implements ExaminerManageOperateTypeBindService {
+
+    @Resource
+    private ExaminerManageOperateTypeBindMapper examinerManageOperateTypeBindMapper;
+
+    @Override
+    public List<ExaminerManageOperateTypeBind> listByExaminerManageId(Long id) {
+        LambdaQueryWrapper<ExaminerManageOperateTypeBind> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ExaminerManageOperateTypeBind::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(ExaminerManageOperateTypeBind::getExaminerManageId,id);
+        return examinerManageOperateTypeBindMapper.selectList(wrapper);
+    }
+
+    @Override
+    public ExaminerManageOperateTypeBind getNoDeleteById(Long id) {
+        LambdaQueryWrapper<ExaminerManageOperateTypeBind> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ExaminerManageOperateTypeBind::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(ExaminerManageOperateTypeBind::getId,id);
+        return examinerManageOperateTypeBindMapper.selectOne(wrapper);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/ExaminerManageServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/ExaminerManageServiceImpl.java
new file mode 100644
index 0000000..d0c8453
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/ExaminerManageServiceImpl.java
@@ -0,0 +1,39 @@
+package com.gkhy.exam.coalmine.service.baseService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.coalmine.mapper.ExaminerManageMapper;
+import com.gkhy.exam.coalmine.entity.ExaminerManage;
+import com.gkhy.exam.coalmine.service.baseService.ExaminerManageService;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * @author hz
+ * @since 2023-09-11 14:47:33
+ */
+@Service("examinerManageServiceImpl")
+public class ExaminerManageServiceImpl extends ServiceImpl<ExaminerManageMapper, ExaminerManage> implements ExaminerManageService {
+
+    @Resource
+    private ExaminerManageMapper examinerManageMapper;
+
+    @Override
+    public ExaminerManage getExaminerById(Long id) {
+        LambdaQueryWrapper<ExaminerManage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ExaminerManage::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(ExaminerManage::getId,id);
+        return examinerManageMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public ExaminerManage getExaminerByCode(String code) {
+        LambdaQueryWrapper<ExaminerManage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ExaminerManage::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(ExaminerManage::getCode,code);
+        return examinerManageMapper.selectOne(wrapper);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/TeacherManageOperateTypeBindServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/TeacherManageOperateTypeBindServiceImpl.java
new file mode 100644
index 0000000..6188dfe
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/TeacherManageOperateTypeBindServiceImpl.java
@@ -0,0 +1,42 @@
+package com.gkhy.exam.coalmine.service.baseService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.coalmine.entity.ExaminerManageOperateTypeBind;
+import com.gkhy.exam.coalmine.mapper.TeacherManageOperateTypeBindMapper;
+import com.gkhy.exam.coalmine.entity.TeacherManageOperateTypeBind;
+import com.gkhy.exam.coalmine.service.baseService.TeacherManageOperateTypeBindService;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import org.springframework.stereotype.Repository;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * @author hz
+ * @since 2023-09-11 14:47:33
+ */
+@Service("teacherManageOperateTypeBindServiceImpl")
+public class TeacherManageOperateTypeBindServiceImpl extends ServiceImpl<TeacherManageOperateTypeBindMapper, TeacherManageOperateTypeBind> implements TeacherManageOperateTypeBindService {
+
+    @Resource
+    private TeacherManageOperateTypeBindMapper teacherManageOperateTypeBindMapper;
+
+    @Override
+    public List<TeacherManageOperateTypeBind> listByTeacherManageId(Long id) {
+        LambdaQueryWrapper<TeacherManageOperateTypeBind> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TeacherManageOperateTypeBind::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(TeacherManageOperateTypeBind::getTeacherManageId,id);
+        return teacherManageOperateTypeBindMapper.selectList(wrapper);
+    }
+
+    @Override
+    public TeacherManageOperateTypeBind getNoDeleteById(Long id) {
+        LambdaQueryWrapper<TeacherManageOperateTypeBind> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TeacherManageOperateTypeBind::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(TeacherManageOperateTypeBind::getId,id);
+        return teacherManageOperateTypeBindMapper.selectOne(wrapper);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/TeacherManageServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/TeacherManageServiceImpl.java
new file mode 100644
index 0000000..be45a16
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/baseService/impl/TeacherManageServiceImpl.java
@@ -0,0 +1,40 @@
+package com.gkhy.exam.coalmine.service.baseService.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.coalmine.entity.ExaminerManage;
+import com.gkhy.exam.coalmine.mapper.TeacherManageMapper;
+import com.gkhy.exam.coalmine.entity.TeacherManage;
+import com.gkhy.exam.coalmine.service.baseService.TeacherManageService;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+
+/**
+ * @author hz
+ * @since 2023-09-11 14:47:33
+ */
+@Service("teacherManageServiceImpl")
+public class TeacherManageServiceImpl extends ServiceImpl<TeacherManageMapper, TeacherManage> implements TeacherManageService {
+
+    @Resource
+    private TeacherManageMapper teacherManageMapper;
+
+    @Override
+    public TeacherManage getTeacherByCode(String code) {
+        LambdaQueryWrapper<TeacherManage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TeacherManage::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(TeacherManage::getCode,code);
+        return teacherManageMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public TeacherManage getTeacherById(Long id) {
+        LambdaQueryWrapper<TeacherManage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TeacherManage::getDelFlag, DeleteStatusEnum.NO.getStatus())
+                .eq(TeacherManage::getId,id);
+        return teacherManageMapper.selectOne(wrapper);
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/CmStaffManagerServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/CmStaffManagerServiceImpl.java
new file mode 100644
index 0000000..d45b56a
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/CmStaffManagerServiceImpl.java
@@ -0,0 +1,229 @@
+package com.gkhy.exam.coalmine.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gkhy.exam.coalmine.entity.*;
+import com.gkhy.exam.coalmine.model.dto.req.*;
+import com.gkhy.exam.coalmine.model.dto.resp.CmStaffPageRespDTO;
+import com.gkhy.exam.coalmine.service.CmStaffManagerService;
+import com.gkhy.exam.coalmine.service.baseService.*;
+import com.gkhy.exam.noncoalmine.service.ViolationRegistrationService;
+import com.gkhy.exam.noncoalmine.service.WorkRegistrationService;
+import com.ruoyi.common.constant.ResultConstants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import com.ruoyi.common.exception.BusinessException;
+import com.ruoyi.file.service.AttachmentInfoService;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 10:48
+ */
+@Service
+public class CmStaffManagerServiceImpl implements CmStaffManagerService {
+
+    @Resource
+    private CmStaffService cmStaffService;
+
+    @Resource
+    private CmStaffTrainService cmStaffTrainService;
+
+    @Resource
+    private CmStaffResumeService cmStaffResumeService;
+
+    @Resource
+    private CmStaffExamService cmStaffExamService;
+
+    @Resource
+    private CmStaffQaService cmStaffQaService;
+
+    @Resource
+    private AttachmentInfoService attachmentInfoService;
+
+    @Resource
+    private ViolationRegistrationService violationRegistrationService;
+
+    @Resource
+    private WorkRegistrationService workRegistrationService;
+
+    @Override
+    public AjaxResult saveCmStaff(CmStaffAddReqDTO reqDTO) {
+        CmStaff cmStaff = new CmStaff();
+        BeanUtils.copyProperties(reqDTO,cmStaff);
+        cmStaff.setDelFlag(DeleteStatusEnum.NO.getStatus());
+        boolean save = cmStaffService.save(cmStaff);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"新增失败");
+        return AjaxResult.success("新增成功");
+    }
+
+    @Override
+    public AjaxResult saveCmStaffResume(CmStaffResumeAddReqDTO reqDTO) {
+        CmStaffResume cmStaffResume = new CmStaffResume();
+        BeanUtils.copyProperties(reqDTO,cmStaffResume);
+        cmStaffResume.setDelFlag(DeleteStatusEnum.NO.getStatus());
+        boolean save = cmStaffResumeService.save(cmStaffResume);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"新增履历失败");
+        return AjaxResult.success("新增履历成功");
+    }
+
+    @Override
+    public AjaxResult deleteCmStaffResume(Long id) {
+        CmStaffResume cmStaffResume = cmStaffResumeService.getValidById(id);
+        if (cmStaffResume == null)
+            return AjaxResult.success("删除履历成功");
+        cmStaffResume.setDelFlag(DeleteStatusEnum.YES.getStatus());
+        boolean save = cmStaffResumeService.save(cmStaffResume);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"删除履历失败");
+        return AjaxResult.success("删除履历成功");
+    }
+
+    @Override
+    public AjaxResult updateCmStaffResume(CmStaffResumeUpdateReqDTO reqDTO) {
+        CmStaffResume cmStaffResume = cmStaffResumeService.getValidById(reqDTO.getId());
+        if (cmStaffResume == null)
+            throw new BusinessException(this.getClass(),ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"数据不存在");
+        BeanUtils.copyProperties(reqDTO,cmStaffResume,"id");
+        boolean save = cmStaffResumeService.save(cmStaffResume);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"删除履历失败");
+        return AjaxResult.success("删除履历成功");
+    }
+
+    @Override
+    public AjaxResult saveCmStaffTrain(CmStaffTrainAddReqDTO reqDTO) {
+        CmStaffTrain cmStaffTrain = new CmStaffTrain();
+        BeanUtils.copyProperties(reqDTO,cmStaffTrain);
+        cmStaffTrain.setDelFlag(DeleteStatusEnum.NO.getStatus());
+        boolean save = cmStaffTrainService.save(cmStaffTrain);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"新增培训经历失败");
+        return AjaxResult.success("新增培训经历成功");
+    }
+
+    @Override
+    public AjaxResult deleteCmStaffTrain(Long id) {
+        CmStaffTrain cmStaffTrain = cmStaffTrainService.getValidById(id);
+        if (cmStaffTrain == null)
+            return AjaxResult.success("删除培训经历成功");
+        cmStaffTrain.setDelFlag(DeleteStatusEnum.YES.getStatus());
+        boolean save = cmStaffTrainService.save(cmStaffTrain);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"删除培训经历失败");
+        return AjaxResult.success("删除培训经历成功");
+    }
+
+    @Override
+    public AjaxResult updateCmStaffTrain(CmStaffTrainUpdateReqDTO reqDTO) {
+        CmStaffTrain cmStaffTrain = cmStaffTrainService.getValidById(reqDTO.getId());
+        if (cmStaffTrain == null)
+            throw new BusinessException(this.getClass(),ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"数据不存在");
+        BeanUtils.copyProperties(reqDTO,cmStaffTrain,"id");
+        boolean save = cmStaffTrainService.save(cmStaffTrain);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"修改培训经历失败");
+        return AjaxResult.success("修改培训经历成功");
+    }
+
+    @Override
+    public AjaxResult saveCmStaffExam(CmStaffExamAddReqDTO reqDTO) {
+        CmStaffExam cmStaffExam = new CmStaffExam();
+        BeanUtils.copyProperties(reqDTO,cmStaffExam);
+        cmStaffExam.setDelFlag(DeleteStatusEnum.NO.getStatus());
+        boolean save = cmStaffExamService.save(cmStaffExam);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"新增考试经历失败");
+        return AjaxResult.success("新增考试经历成功");
+    }
+
+    @Override
+    public AjaxResult deleteCmStaffExam(Long id) {
+        CmStaffExam cmStaffExam = cmStaffExamService.getValidById(id);
+        if (cmStaffExam == null)
+            return AjaxResult.success("删除考试经历成功");
+        cmStaffExam.setDelFlag(DeleteStatusEnum.YES.getStatus());
+        boolean save = cmStaffExamService.save(cmStaffExam);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"删除考试经历失败");
+        return AjaxResult.success("删除考试经历成功");
+    }
+
+    @Override
+    public AjaxResult updateCmStaffExam(CmStaffExamUpdateReqDTO reqDTO) {
+        CmStaffExam cmStaffExam = cmStaffExamService.getValidById(reqDTO.getId());
+        if (cmStaffExam == null)
+            throw new BusinessException(this.getClass(),ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"数据不存在");
+        BeanUtils.copyProperties(reqDTO,cmStaffExam,"id");
+        boolean save = cmStaffExamService.save(cmStaffExam);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"修改考试经历失败");
+        return AjaxResult.success("修改考试经历成功");
+    }
+
+    @Override
+    public AjaxResult saveCmStaffQa(CmStaffQaAddReqDTO reqDTO) {
+        CmStaffQa cmStaffQa = new CmStaffQa();
+        BeanUtils.copyProperties(reqDTO,cmStaffQa);
+        cmStaffQa.setDelFlag(DeleteStatusEnum.NO.getStatus());
+        boolean save = cmStaffQaService.save(cmStaffQa);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"新增资格证书失败");
+        return AjaxResult.success("新增资格证书成功");
+    }
+
+    @Override
+    public AjaxResult deleteCmStaffQa(Long id) {
+        CmStaffQa cmStaffQa = cmStaffQaService.getValidById(id);
+        if (cmStaffQa == null)
+            return AjaxResult.success("删除资格证书成功");
+        cmStaffQa.setDelFlag(DeleteStatusEnum.YES.getStatus());
+        boolean save = cmStaffQaService.save(cmStaffQa);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"删除资格证书失败");
+        return AjaxResult.success("删除资格证书成功");
+    }
+
+    @Override
+    public AjaxResult updateCmStaffQa(CmStaffQaUpdateReqDTO reqDTO) {
+        CmStaffQa cmStaffQa = cmStaffQaService.getValidById(reqDTO.getId());
+        if (cmStaffQa == null)
+            throw new BusinessException(this.getClass(),ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"数据不存在");
+        BeanUtils.copyProperties(reqDTO,cmStaffQa,"id");
+        boolean save = cmStaffQaService.save(cmStaffQa);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"修改资格证书失败");
+        return AjaxResult.success("修改资格证书成功");
+    }
+
+    @Override
+    public List<CmStaffPageRespDTO> selectPage() {
+        LambdaQueryWrapper<CmStaff> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(CmStaff::getDelFlag,DeleteStatusEnum.NO.getStatus());
+        List<CmStaff> cmStaffs = cmStaffService.list(wrapper);
+        if (CollectionUtils.isEmpty(cmStaffs)){
+            return null;
+        }
+        List<CmStaffPageRespDTO> dtos = cmStaffs.stream().map(cmStaff -> {
+            CmStaffPageRespDTO dto = new CmStaffPageRespDTO();
+            Long id = cmStaff.getId();
+            dto.setPhotoAttachment(attachmentInfoService.getById(cmStaff.getPhotoAttachment()));
+            dto.setWorkRegistrationVOS(workRegistrationService.getByIdCard(cmStaff.getCode(), (byte) 0));
+            dto.setViolationRegistrationVOS(violationRegistrationService.getByIdCard(cmStaff.getCode(),(byte)0));
+            dto.setCmStaffResumes(cmStaffResumeService.listValid(id));
+            dto.setCmStaffTrains(cmStaffTrainService.listValid(id));
+            dto.setCmStaffExams(cmStaffExamService.listValid(id));
+            dto.setCmStaffQas(cmStaffQaService.listValid(id));
+            return dto;
+        }).collect(Collectors.toList());
+        return dtos;
+    }
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/EduResourcesManagerServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/EduResourcesManagerServiceImpl.java
new file mode 100644
index 0000000..5eb58e2
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/EduResourcesManagerServiceImpl.java
@@ -0,0 +1,405 @@
+package com.gkhy.exam.coalmine.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.gkhy.exam.coalmine.entity.ExaminerManage;
+import com.gkhy.exam.coalmine.entity.ExaminerManageOperateTypeBind;
+import com.gkhy.exam.coalmine.entity.TeacherManage;
+import com.gkhy.exam.coalmine.entity.TeacherManageOperateTypeBind;
+import com.gkhy.exam.coalmine.model.dto.req.*;
+import com.gkhy.exam.coalmine.model.dto.resp.GetExaminerOperateTypesRespDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetExaminerRespDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetTeacherOperateTypesRespDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetTeacherRespDTO;
+import com.gkhy.exam.coalmine.service.EduResourcesManagerService;
+import com.gkhy.exam.coalmine.service.baseService.ExaminerManageOperateTypeBindService;
+import com.gkhy.exam.coalmine.service.baseService.ExaminerManageService;
+import com.gkhy.exam.coalmine.service.baseService.TeacherManageOperateTypeBindService;
+import com.gkhy.exam.coalmine.service.baseService.TeacherManageService;
+import com.ruoyi.common.constant.CacheConstants;
+import com.ruoyi.common.constant.ResultConstants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.core.redis.RedisCache;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import com.ruoyi.common.enums.coalmineEnums.EnableStatusEnum;
+import com.ruoyi.common.exception.BusinessException;
+import com.ruoyi.file.entity.AttachmentInfo;
+import com.ruoyi.file.service.AttachmentInfoService;
+import com.ruoyi.system.domain.bo.SysOperateTypeWholeNameBO;
+import com.ruoyi.system.service.SysOperateTypeService;
+import com.sun.org.apache.bcel.internal.generic.IF_ACMPEQ;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/11 16:04
+ */
+@Service
+public class EduResourcesManagerServiceImpl implements EduResourcesManagerService {
+
+    @Resource
+    private ExaminerManageService examinerManageService;
+
+    @Resource
+    private TeacherManageService teacherManageService;
+
+    @Resource
+    private AttachmentInfoService attachmentInfoService;
+
+    @Resource
+    private SysOperateTypeService operateTypeService;
+
+    @Resource
+    private RedisCache redisCache;
+
+    @Resource
+    private ExaminerManageOperateTypeBindService examinerManageOperateTypeBindService;
+
+    @Resource
+    private TeacherManageOperateTypeBindService teacherManageOperateTypeBindService;
+
+    @Override
+    @Transactional
+    public AjaxResult saveExaminer(ExaminerManageAddReqDTO reqDTO) {
+        ExaminerManage examinerByCode = examinerManageService.getExaminerByCode(reqDTO.getCode());
+        if (examinerByCode != null)
+            throw new BusinessException(this.getClass(),ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"身份证已存在");
+        ExaminerManage examinerManage = new ExaminerManage();
+        BeanUtils.copyProperties(reqDTO,examinerManage);
+        examinerManage.setDelFlag(DeleteStatusEnum.NO.getStatus());
+        examinerManage.setStatus(EnableStatusEnum.YES.getStatus());
+        boolean save = examinerManageService.save(examinerManage);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"考评员信息保存失败");
+        if (!CollectionUtils.isEmpty(reqDTO.getOperateTypes())){
+            ArrayList<ExaminerManageOperateTypeBind> binds = new ArrayList<>();
+            for (ExaminerManageAddOperateTypeReqDTO operateType : reqDTO.getOperateTypes()) {
+                ExaminerManageOperateTypeBind examinerManageOperateTypeBind = new ExaminerManageOperateTypeBind();
+                BeanUtils.copyProperties(operateType,examinerManageOperateTypeBind);
+                examinerManageOperateTypeBind.setDelFlag(DeleteStatusEnum.NO.getStatus());
+                examinerManageOperateTypeBind.setExaminerManageId(examinerManage.getId());
+                binds.add(examinerManageOperateTypeBind);
+            }
+            boolean saveBatch = examinerManageOperateTypeBindService.saveBatch(binds);
+            if (!saveBatch)
+                throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"考评员工种数据保存失败");
+        }
+        return AjaxResult.success("新增成功");
+    }
+
+
+    @Override
+    @Transactional
+    public AjaxResult removeExaminerById(Long id) {
+        ExaminerManage manage = examinerManageService.getExaminerById(id);
+        if (manage == null)
+            return AjaxResult.success("删除成功");
+        manage.setDelFlag(DeleteStatusEnum.YES.getStatus());
+        boolean save = examinerManageService.updateById(manage);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"考评员信息删除失败");
+        removeOldExaminerManageOperateTypeBind(id);
+        return AjaxResult.success("删除成功");
+    }
+
+    private void removeOldExaminerManageOperateTypeBind(Long id){
+        List<ExaminerManageOperateTypeBind> binds = examinerManageOperateTypeBindService.listByExaminerManageId(id);
+        if (!CollectionUtils.isEmpty(binds)){
+            binds = binds.stream().map(bind -> {
+                bind.setDelFlag(DeleteStatusEnum.YES.getStatus());
+                return bind;
+            }).collect(Collectors.toList());
+            boolean updateBatchById = examinerManageOperateTypeBindService.updateBatchById(binds);
+            if (!updateBatchById)
+                throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"考评员信息修改失败");
+        }
+    }
+
+    private void removeOldTeacherManageOperateTypeBind(Long id){
+        List<TeacherManageOperateTypeBind> binds = teacherManageOperateTypeBindService.listByTeacherManageId(id);
+        if (!CollectionUtils.isEmpty(binds)){
+            binds = binds.stream().map(bind -> {
+                bind.setDelFlag(DeleteStatusEnum.YES.getStatus());
+                return bind;
+            }).collect(Collectors.toList());
+            boolean updateBatchById = teacherManageOperateTypeBindService.updateBatchById(binds);
+            if (!updateBatchById)
+                throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"教师信息修改失败");
+        }
+    }
+
+    @Override
+    @Transactional
+    public AjaxResult updateExaminerById(ExaminerManageUpdateReqDTO reqDTO) {
+        ExaminerManage examinerByCode = examinerManageService.getExaminerByCode(reqDTO.getCode());
+        if (examinerByCode != null && examinerByCode.getId() != reqDTO.getId())
+            throw new BusinessException(this.getClass(),ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"身份证已存在");
+        ExaminerManage examinerManage = new ExaminerManage();
+        BeanUtils.copyProperties(reqDTO,examinerManage,"id");
+        boolean save = examinerManageService.updateById(examinerManage);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"考评员信息修改失败");
+        removeOldExaminerManageOperateTypeBind(reqDTO.getId());
+        if (!CollectionUtils.isEmpty(reqDTO.getOperateTypes())){
+            ArrayList<ExaminerManageOperateTypeBind> binds = new ArrayList<>();
+            for (ExaminerManageAddOperateTypeReqDTO operateType : reqDTO.getOperateTypes()) {
+                ExaminerManageOperateTypeBind examinerManageOperateTypeBind = new ExaminerManageOperateTypeBind();
+                BeanUtils.copyProperties(operateType,examinerManageOperateTypeBind);
+                examinerManageOperateTypeBind.setDelFlag(DeleteStatusEnum.NO.getStatus());
+                examinerManageOperateTypeBind.setExaminerManageId(examinerManage.getId());
+                binds.add(examinerManageOperateTypeBind);
+            }
+            boolean saveBatch = examinerManageOperateTypeBindService.saveBatch(binds);
+            if (!saveBatch)
+                throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"考评员工种数据保存失败");
+        }
+        return AjaxResult.success("修改成功");
+    }
+
+    private AttachmentInfo getAttachmentInfoById(Long id){
+        if (id != null){
+            AttachmentInfo attachmentInfo = attachmentInfoService.findById(id);
+            return attachmentInfo;
+        }
+        return null;
+    }
+
+    @Override
+    public AjaxResult getExaminerById(Long id) {
+        ExaminerManage manage = examinerManageService.getExaminerById(id);
+        GetExaminerRespDTO dto = getExaminerRespDTO(manage);
+        return AjaxResult.success(dto);
+    }
+
+    private GetExaminerRespDTO getExaminerRespDTO(ExaminerManage manage) {
+        GetExaminerRespDTO dto = new GetExaminerRespDTO();
+        if (manage == null)
+            return null;
+        BeanUtils.copyProperties(manage,dto);
+        dto.setQaAttachment(getAttachmentInfoById(manage.getQaAttachment()));
+        dto.setPhotoAttachment(getAttachmentInfoById(manage.getPhotoAttachment()));
+        LambdaQueryWrapper<ExaminerManageOperateTypeBind> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ExaminerManageOperateTypeBind::getExaminerManageId,manage.getId())
+                .eq(ExaminerManageOperateTypeBind::getDelFlag,DeleteStatusEnum.NO.getStatus());
+        List<ExaminerManageOperateTypeBind> list = examinerManageOperateTypeBindService.list(wrapper);
+        if (CollectionUtils.isEmpty(list))
+            return dto;
+        Boolean flag = redisCache.hasKey(CacheConstants.SYS_OPERATE_TYPE_NAME_KEY);
+        Map<Long, SysOperateTypeWholeNameBO> map;
+        if (flag){
+            operateTypeService.resetOperateTypeCache();
+        }
+        map  = redisCache.getCacheObject(CacheConstants.SYS_OPERATE_TYPE_NAME_KEY);
+        List<GetExaminerOperateTypesRespDTO> getExaminerOperateTypesRespDTOS = new ArrayList<>();
+        for (ExaminerManageOperateTypeBind examinerManageOperateTypeBind : list) {
+            GetExaminerOperateTypesRespDTO operateTypesRespDTO = new GetExaminerOperateTypesRespDTO();
+            BeanUtils.copyProperties(examinerManageOperateTypeBind,operateTypesRespDTO);
+            SysOperateTypeWholeNameBO sysOperateTypeWholeNameBO = map.get(examinerManageOperateTypeBind.getOperateTypeId());
+            if (sysOperateTypeWholeNameBO != null){
+                BeanUtils.copyProperties(sysOperateTypeWholeNameBO,operateTypesRespDTO);
+            }
+            getExaminerOperateTypesRespDTOS.add(operateTypesRespDTO);
+        }
+        dto.setOperateTypes(getExaminerOperateTypesRespDTOS);
+        return dto;
+    }
+
+
+    @Override
+    public List<GetExaminerRespDTO> selectAll() {
+        LambdaQueryWrapper<ExaminerManage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(ExaminerManage::getDelFlag,DeleteStatusEnum.NO.getStatus());
+        List<ExaminerManage> list = examinerManageService.list(wrapper);
+        if (CollectionUtils.isEmpty(list))
+            return null;
+        List<GetExaminerRespDTO> dtos = new ArrayList<>();
+        for (ExaminerManage manage : list) {
+            GetExaminerRespDTO dto = getExaminerRespDTO(manage);
+            dtos.add(dto);
+        }
+        return dtos;
+    }
+
+    @Override
+    @Transactional
+    public AjaxResult saveTeacher(TeacherManageAddReqDTO reqDTO) {
+        TeacherManage teacherManage = teacherManageService.getTeacherByCode(reqDTO.getCode());
+        if (teacherManage != null)
+            throw new BusinessException(this.getClass(),ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"身份证已存在");
+        teacherManage = new TeacherManage();
+        BeanUtils.copyProperties(reqDTO,teacherManage);
+        teacherManage.setDelFlag(DeleteStatusEnum.NO.getStatus());
+        teacherManage.setStatus(EnableStatusEnum.YES.getStatus());
+        boolean save = teacherManageService.save(teacherManage);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"教师信息保存失败");
+        if (!CollectionUtils.isEmpty(reqDTO.getOperateTypes())){
+            ArrayList<TeacherManageOperateTypeBind> binds = new ArrayList<>();
+            for (TeacherManageAddOperateTypeReqDTO operateType : reqDTO.getOperateTypes()) {
+                TeacherManageOperateTypeBind teacherManageOperateTypeBind = new TeacherManageOperateTypeBind();
+                BeanUtils.copyProperties(operateType,teacherManageOperateTypeBind);
+                teacherManageOperateTypeBind.setDelFlag(DeleteStatusEnum.NO.getStatus());
+                teacherManageOperateTypeBind.setTeacherManageId(teacherManage.getId());
+                binds.add(teacherManageOperateTypeBind);
+            }
+            boolean saveBatch = teacherManageOperateTypeBindService.saveBatch(binds);
+            if (!saveBatch)
+                throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"教师工种数据保存失败");
+        }
+        return AjaxResult.success("新增成功");
+    }
+
+    @Override
+    @Transactional
+    public AjaxResult updateTeacherById(TeacherManageUpdateReqDTO reqDTO) {
+        TeacherManage teacherByCode = teacherManageService.getTeacherByCode(reqDTO.getCode());
+        if (teacherByCode != null && teacherByCode.getId() != reqDTO.getId())
+            throw new BusinessException(this.getClass(),ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"身份证已存在");
+        TeacherManage teacherManage = new TeacherManage();
+        BeanUtils.copyProperties(reqDTO,teacherManage,"id");
+        boolean save = teacherManageService.updateById(teacherManage);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"教师信息修改失败");
+        removeOldTeacherManageOperateTypeBind(reqDTO.getId());
+        if (!CollectionUtils.isEmpty(reqDTO.getOperateTypes())){
+            ArrayList<TeacherManageOperateTypeBind> binds = new ArrayList<>();
+            for (TeacherManageAddOperateTypeReqDTO operateType : reqDTO.getOperateTypes()) {
+                TeacherManageOperateTypeBind examinerManageOperateTypeBind = new TeacherManageOperateTypeBind();
+                BeanUtils.copyProperties(operateType,examinerManageOperateTypeBind);
+                examinerManageOperateTypeBind.setDelFlag(DeleteStatusEnum.NO.getStatus());
+                examinerManageOperateTypeBind.setTeacherManageId(teacherManage.getId());
+                binds.add(examinerManageOperateTypeBind);
+            }
+            boolean saveBatch = teacherManageOperateTypeBindService.saveBatch(binds);
+            if (!saveBatch)
+                throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"教师工种数据保存失败");
+        }
+        return AjaxResult.success("修改成功");
+    }
+
+    @Override
+    public AjaxResult removeTeacherById(Long id) {
+        TeacherManage manage = teacherManageService.getTeacherById(id);
+        if (manage == null)
+            return AjaxResult.success("删除成功");
+        manage.setDelFlag(DeleteStatusEnum.YES.getStatus());
+        boolean save = teacherManageService.updateById(manage);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"教师信息删除失败");
+        removeOldTeacherManageOperateTypeBind(id);
+        return AjaxResult.success("删除成功");
+    }
+
+    @Override
+    public AjaxResult getTeacherById(Long id) {
+        TeacherManage manage = teacherManageService.getTeacherById(id);
+        GetTeacherRespDTO dto = getTeacherRespDTO(manage);
+        return AjaxResult.success(dto);
+    }
+
+    private GetTeacherRespDTO getTeacherRespDTO(TeacherManage manage) {
+        GetTeacherRespDTO dto = new GetTeacherRespDTO();
+        if (manage == null)
+            return null;
+        BeanUtils.copyProperties(manage,dto);
+        dto.setQaAttachment(getAttachmentInfoById(manage.getQaAttachment()));
+        dto.setPhotoAttachment(getAttachmentInfoById(manage.getPhotoAttachment()));
+        LambdaQueryWrapper<TeacherManageOperateTypeBind> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TeacherManageOperateTypeBind::getTeacherManageId,manage.getId())
+                .eq(TeacherManageOperateTypeBind::getDelFlag,DeleteStatusEnum.NO.getStatus());
+        List<TeacherManageOperateTypeBind> list = teacherManageOperateTypeBindService.list(wrapper);
+        if (CollectionUtils.isEmpty(list))
+            return dto;
+        Boolean flag = redisCache.hasKey(CacheConstants.SYS_OPERATE_TYPE_NAME_KEY);
+        Map<Long, SysOperateTypeWholeNameBO> map;
+        if (flag){
+            operateTypeService.resetOperateTypeCache();
+        }
+        map  = redisCache.getCacheObject(CacheConstants.SYS_OPERATE_TYPE_NAME_KEY);
+        List<GetTeacherOperateTypesRespDTO> getTeacherOperateTypesRespDTOS = new ArrayList<>();
+        for (TeacherManageOperateTypeBind examinerManageOperateTypeBind : list) {
+            GetTeacherOperateTypesRespDTO operateTypesRespDTO = new GetTeacherOperateTypesRespDTO();
+            BeanUtils.copyProperties(examinerManageOperateTypeBind,operateTypesRespDTO);
+            SysOperateTypeWholeNameBO sysOperateTypeWholeNameBO = map.get(examinerManageOperateTypeBind.getOperateTypeId());
+            if (sysOperateTypeWholeNameBO != null){
+                BeanUtils.copyProperties(sysOperateTypeWholeNameBO,operateTypesRespDTO);
+            }
+            getTeacherOperateTypesRespDTOS.add(operateTypesRespDTO);
+        }
+        dto.setOperateTypes(getTeacherOperateTypesRespDTOS);
+        return dto;
+    }
+
+    @Override
+    public List<GetTeacherRespDTO> selectTeacherAll() {
+        LambdaQueryWrapper<TeacherManage> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(TeacherManage::getDelFlag,DeleteStatusEnum.NO.getStatus());
+        List<TeacherManage> list = teacherManageService.list(wrapper);
+        if (CollectionUtils.isEmpty(list))
+            return null;
+        List<GetTeacherRespDTO> dtos = new ArrayList<>();
+        for (TeacherManage manage : list) {
+            GetTeacherRespDTO dto = getTeacherRespDTO(manage);
+            dtos.add(dto);
+        }
+        return dtos;
+
+    }
+
+    @Override
+    public AjaxResult updateStatus(TeacherManageUpdateStatusReqDTO reqDTO) {
+        TeacherManage manage = teacherManageService.getTeacherById(reqDTO.getId());
+        if (manage == null)
+            return AjaxResult.success("数据不存在");
+        manage.setStatus(reqDTO.getStatus());
+        boolean save = teacherManageService.updateById(manage);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"教师状态变更失败");
+        return AjaxResult.success("教师状态变更成功");
+    }
+
+    @Override
+    public AjaxResult updateExaminerStatus(ExaminerManageUpdateStatusReqDTO reqDTO) {
+        ExaminerManage manage = examinerManageService.getExaminerById(reqDTO.getId());
+        if (manage == null)
+            return AjaxResult.success("数据不存在");
+        manage.setStatus(reqDTO.getStatus());
+        boolean save = examinerManageService.updateById(manage);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"考评员状态变更失败");
+        return AjaxResult.success("教师状态变更成功");
+    }
+
+    @Override
+    public AjaxResult deleteExaminerBindOperateType(Long id) {
+        ExaminerManageOperateTypeBind manage = examinerManageOperateTypeBindService.getNoDeleteById(id);
+        if (manage == null)
+            return AjaxResult.success("数据不存在");
+        manage.setDelFlag(DeleteStatusEnum.YES.getStatus());
+        boolean save = examinerManageOperateTypeBindService.updateById(manage);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"考评员关联工种删除失败");
+        return AjaxResult.success("考评员关联工种删除失败");
+    }
+
+    @Override
+    public AjaxResult deleteTeacherBindOperateType(Long id) {
+        TeacherManageOperateTypeBind manage = teacherManageOperateTypeBindService.getNoDeleteById(id);
+        if (manage == null)
+            return AjaxResult.success("数据不存在");
+        manage.setDelFlag(DeleteStatusEnum.YES.getStatus());
+        boolean save = teacherManageOperateTypeBindService.updateById(manage);
+        if (!save)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL,"教师关联工种删除失败");
+        return AjaxResult.success("教师关联工种删除失败");
+    }
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/EmonRecordManagerServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/EmonRecordManagerServiceImpl.java
new file mode 100644
index 0000000..60596a3
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/service/impl/EmonRecordManagerServiceImpl.java
@@ -0,0 +1,211 @@
+package com.gkhy.exam.coalmine.service.impl;
+
+import com.gkhy.exam.coalmine.entity.EmonExamRecord;
+import com.gkhy.exam.coalmine.entity.EmonTrainRecord;
+import com.gkhy.exam.coalmine.model.dto.req.ExamReceiveReqDTO;
+import com.gkhy.exam.coalmine.model.dto.req.TrainReceiveReqDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.AttachmentInfoRespDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetExamDataRespDTO;
+import com.gkhy.exam.coalmine.model.dto.resp.GetTrainDataRespDTO;
+import com.gkhy.exam.coalmine.service.EmonRecordManagerService;
+import com.gkhy.exam.coalmine.service.baseService.EmonExamRecordService;
+import com.gkhy.exam.coalmine.service.baseService.EmonTrainRecordService;
+import com.gkhy.exam.coalmine.utils.AttachmentUtil;
+import com.ruoyi.common.constant.ResultConstants;
+import com.ruoyi.common.core.domain.AjaxResult;
+import com.ruoyi.common.enums.coalmineEnums.DeleteStatusEnum;
+import com.ruoyi.common.exception.BusinessException;
+import com.ruoyi.common.utils.SecurityUtils;
+import com.ruoyi.file.entity.AttachmentInfo;
+import com.ruoyi.file.service.AttachmentService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/13 10:19
+ */
+@Service
+public class EmonRecordManagerServiceImpl implements EmonRecordManagerService {
+
+    @Resource
+    private AttachmentService attachmentService;
+
+    @Resource
+    private EmonExamRecordService  emonExamRecordService;
+
+    @Resource
+    private EmonTrainRecordService emonTrainRecordService;
+
+
+    private Boolean examDataIsValid(MultipartFile[] file,ExamReceiveReqDTO reqDTO){
+        boolean valid = reqDTO != null && reqDTO.getReportTime() != null && reqDTO.getDistrictId() != null
+                && StringUtils.isNotBlank(reqDTO.getExamCenter()) && StringUtils.isNotBlank(reqDTO.getExcType())
+                && reqDTO.getIsCm() != null && StringUtils.isNotBlank(reqDTO.getModule()) && !CollectionUtils.isEmpty(Arrays.asList(file));
+        return valid;
+    }
+
+    @Override
+    @Transactional
+    public AjaxResult examReceive(MultipartFile[] file,ExamReceiveReqDTO reqDTO) {
+        if (examDataIsValid(file,reqDTO)) {
+            List<AttachmentInfo> attachmentInfos = (List<AttachmentInfo>) attachmentService.saveBatchFileToPath(file, reqDTO.getModule());
+            if (CollectionUtils.isEmpty(attachmentInfos))
+                throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL, "考场异常监控记录图片保存失败");
+            String attachmentIds = AttachmentUtil.idConvertString(attachmentInfos);
+            EmonExamRecord emonExamRecord = new EmonExamRecord();
+            BeanUtils.copyProperties(reqDTO, emonExamRecord);
+            emonExamRecord.setDelFlag(DeleteStatusEnum.NO.getStatus());
+            emonExamRecord.setExcImage(attachmentIds);
+            boolean save = emonExamRecordService.save(emonExamRecord);
+            if (!save)
+                throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL, "考场异常监控记录保存失败");
+
+            return AjaxResult.success();
+        }
+        return null;
+    }
+
+    private Boolean trainDataIsValid(MultipartFile[] file,TrainReceiveReqDTO reqDTO){
+        boolean valid = reqDTO != null && reqDTO.getReportTime() != null && reqDTO.getDistrictId() != null
+                && StringUtils.isNotBlank(reqDTO.getExamCenter()) && StringUtils.isNotBlank(reqDTO.getExcType())
+                && reqDTO.getIsCm() != null && !CollectionUtils.isEmpty(Arrays.asList(file))
+                && StringUtils.isNotBlank(reqDTO.getModule());
+        return valid;
+    }
+
+    @Override
+    public AjaxResult trainReceive(MultipartFile[] file,TrainReceiveReqDTO reqDTO) {
+        List<AttachmentInfo> attachmentInfos = (List<AttachmentInfo>) attachmentService.saveBatchFileToPath(file, reqDTO.getModule());
+        if (CollectionUtils.isEmpty(attachmentInfos))
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL, "培训监控异常记录图片保存失败");
+        String attachmentIds = AttachmentUtil.idConvertString(attachmentInfos);
+        if (trainDataIsValid(file,reqDTO)) {
+            EmonTrainRecord emonTrainRecord = new EmonTrainRecord ();
+            BeanUtils.copyProperties(reqDTO,emonTrainRecord);
+            emonTrainRecord.setDelFlag(DeleteStatusEnum.NO.getStatus());
+            emonTrainRecord.setExcImage(attachmentIds);
+            boolean save = emonTrainRecordService.save(emonTrainRecord);
+            if (!save)
+                throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL, "培训监控异常记录保存失败");
+            return AjaxResult.success();
+        }
+        return null;
+    }
+
+    @Override
+    public List<GetExamDataRespDTO> getExamData() {
+        List<EmonExamRecord> emonExamRecords =  emonExamRecordService.listValid();
+        if (!CollectionUtils.isEmpty(emonExamRecords)){
+            List<GetExamDataRespDTO> list = emonExamRecords.stream().map(emonExamRecord -> {
+                GetExamDataRespDTO dto = new GetExamDataRespDTO();
+                BeanUtils.copyProperties(emonExamRecord, dto);
+                String excImage = emonExamRecord.getExcImage();
+                if (StringUtils.isNotBlank(excImage)) {
+                    List<Long> ids = AttachmentUtil.stringConvertIds(excImage);
+                    List<AttachmentInfo> attachmentInfos = attachmentService.findByIds(ids);
+                    if (!CollectionUtils.isEmpty(attachmentInfos)) {
+                        List<AttachmentInfoRespDTO> attachmentInfoRespDTOS = attachmentInfos.stream().map(attachmentInfo -> {
+                            AttachmentInfoRespDTO respDTO = new AttachmentInfoRespDTO();
+                            BeanUtils.copyProperties(attachmentInfo, respDTO);
+                            return respDTO;
+                        }).collect(Collectors.toList());
+                        dto.setAttachmentInfos(attachmentInfoRespDTOS);
+                    }
+                }
+                return dto;
+            }).collect(Collectors.toList());
+            return list;
+        }
+        return null;
+    }
+
+    @Override
+    public List<GetTrainDataRespDTO> getTrainData() {
+        List<EmonTrainRecord> emonTrainRecords =  emonTrainRecordService.listValid();
+        if (!CollectionUtils.isEmpty(emonTrainRecords)){
+            List<GetTrainDataRespDTO> list = emonTrainRecords.stream().map(emonTrainRecord -> {
+                GetTrainDataRespDTO dto = new GetTrainDataRespDTO();
+                BeanUtils.copyProperties(emonTrainRecord, dto);
+                String excImage = emonTrainRecord.getExcImage();
+                if (StringUtils.isNotBlank(excImage)) {
+                    List<Long> ids = AttachmentUtil.stringConvertIds(excImage);
+                    List<AttachmentInfo> attachmentInfos = attachmentService.findByIds(ids);
+                    if (!CollectionUtils.isEmpty(attachmentInfos)) {
+                        List<AttachmentInfoRespDTO> attachmentInfoRespDTOS = attachmentInfos.stream().map(attachmentInfo -> {
+                            AttachmentInfoRespDTO respDTO = new AttachmentInfoRespDTO();
+                            BeanUtils.copyProperties(attachmentInfo, respDTO);
+                            return respDTO;
+                        }).collect(Collectors.toList());
+                        dto.setAttachmentInfos(attachmentInfoRespDTOS);
+                    }
+                }
+                return dto;
+            }).collect(Collectors.toList());
+            return list;
+        }
+        return null;
+    }
+
+    @Override
+    public AjaxResult deleteExamRecord(Long id) {
+        EmonExamRecord emonExamRecord = emonExamRecordService.findValidById(id);
+        if (emonExamRecord == null)
+            return AjaxResult.success();
+        emonExamRecord.setDelFlag(DeleteStatusEnum.YES.getStatus());
+        boolean update = emonExamRecordService.updateById(emonExamRecord);
+        if (!update)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL, "考场异常监控记录删除失败");
+        String excImage = emonExamRecord.getExcImage();
+        if (StringUtils.isNotBlank(excImage)) {
+            List<Long> ids = AttachmentUtil.stringConvertIds(excImage);
+            List<AttachmentInfo> attachmentInfos = attachmentService.findByIds(ids);
+            if (!CollectionUtils.isEmpty(attachmentInfos)) {
+                attachmentInfos = attachmentInfos.stream().map(attachmentInfo -> {
+                    attachmentInfo.setDelFlag(1);
+                    attachmentInfo.setUpdateBy(SecurityUtils.getUsername());
+                    attachmentInfo.setUpdateTime(new Date());
+                    return attachmentInfo;
+                }).collect(Collectors.toList());
+                attachmentService.updateBatchById(attachmentInfos);
+            }
+        }
+        return AjaxResult.success("考场异常监控记录删除成功");
+    }
+
+    @Override
+    public AjaxResult deleteTrainRecord(Long id) {
+        EmonTrainRecord emonTrainRecord = emonTrainRecordService.findValidById(id);
+        if (emonTrainRecord == null)
+            return AjaxResult.success();
+        emonTrainRecord.setDelFlag(DeleteStatusEnum.YES.getStatus());
+        boolean update = emonTrainRecordService.updateById(emonTrainRecord);
+        if (!update)
+            throw new BusinessException(this.getClass(), ResultConstants.SYSTEM_ERROR_DATABASE_FAIL, "培训异常监控记录删除失败");
+        String excImage = emonTrainRecord.getExcImage();
+        if (StringUtils.isNotBlank(excImage)) {
+            List<AttachmentInfo> attachmentInfos = attachmentService.findByBusinessId(id);
+            if (!CollectionUtils.isEmpty(attachmentInfos)) {
+                attachmentInfos = attachmentInfos.stream().map(attachmentInfo -> {
+                    attachmentInfo.setDelFlag(1);
+                    attachmentInfo.setUpdateBy(SecurityUtils.getUsername());
+                    attachmentInfo.setUpdateTime(new Date());
+                    return attachmentInfo;
+                }).collect(Collectors.toList());
+                attachmentService.updateBatchById(attachmentInfos);
+            }
+        }
+        return AjaxResult.success("培训异常监控记录删除成功");
+    }
+}
\ No newline at end of file
diff --git a/exam-system/src/main/java/com/gkhy/exam/coalmine/utils/AttachmentUtil.java b/exam-system/src/main/java/com/gkhy/exam/coalmine/utils/AttachmentUtil.java
new file mode 100644
index 0000000..faa4366
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/coalmine/utils/AttachmentUtil.java
@@ -0,0 +1,29 @@
+package com.gkhy.exam.coalmine.utils;
+
+import com.ruoyi.file.entity.AttachmentInfo;
+
+import java.util.List;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+
+/**
+ * @author Mr.huang
+ * @decription
+ * @date 2023/9/14 9:59
+ */
+public class AttachmentUtil {
+
+    public static List<Long> stringConvertIds(String str){
+        List<Long> list = Pattern.compile(",\\s*")
+                .splitAsStream(str)
+                .map(Long::parseLong)
+                .collect(Collectors.toList());
+        return list;
+    }
+
+    public static String idConvertString(List<AttachmentInfo> attachmentInfos){
+        String attachmentIds = attachmentInfos.stream().map(AttachmentInfo::getId).map(Object::toString)
+                .collect(Collectors.joining(","));
+        return attachmentIds;
+    }
+}
\ No newline at end of file
diff --git a/exam-system/src/main/resources/mapper/coalmine/CmStaffExamMapper.xml b/exam-system/src/main/resources/mapper/coalmine/CmStaffExamMapper.xml
new file mode 100644
index 0000000..8cfd93e
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/coalmine/CmStaffExamMapper.xml
@@ -0,0 +1,24 @@
+<?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.gkhy.exam.coalmine.mapper.CmStaffExamMapper">
+
+    <resultMap type="com.gkhy.exam.coalmine.entity.CmStaffExam" id="CmStaffExamMap">
+        <result property="id" column="id"/>
+        <result property="staffId" column="staff_id"/>
+        <result property="startTime" column="start_time"/>
+        <result property="endTime" column="end_time"/>
+        <result property="examCenter" column="exam_center"/>
+        <result property="subject" column="subject"/>
+        <result property="result" column="result"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <sql id="selectAllField">
+        select id, staff_id, start_time, end_time, exam_center, subject, result, del_flag, create_by, create_time, update_by, update_time        
+        from cm_staff_exam
+    </sql>
+</mapper>
+
diff --git a/exam-system/src/main/resources/mapper/coalmine/CmStaffMapper.xml b/exam-system/src/main/resources/mapper/coalmine/CmStaffMapper.xml
new file mode 100644
index 0000000..c5a8bb5
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/coalmine/CmStaffMapper.xml
@@ -0,0 +1,25 @@
+<?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.gkhy.exam.coalmine.mapper.CmStaffMapper">
+
+    <resultMap type="com.gkhy.exam.coalmine.entity.CmStaff" id="CmStaffManageMap">
+        <result property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="sex" column="sex"/>
+        <result property="nationCode" column="nation_code"/>
+        <result property="code" column="code"/>
+        <result property="mobilePhone" column="mobile_phone"/>
+        <result property="eduLevel" column="edu_level"/>
+        <result property="photoAttachment" column="photo_attachment"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <sql id="selectAllField">
+        select id, name, sex, nation_code, code, mobile_phone, edu_level, photo_attachment, del_flag, create_by, create_time, update_by, update_time        
+        from cm_staff_manage
+    </sql>
+</mapper>
+
diff --git a/exam-system/src/main/resources/mapper/coalmine/CmStaffQaMapper.xml b/exam-system/src/main/resources/mapper/coalmine/CmStaffQaMapper.xml
new file mode 100644
index 0000000..a59351a
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/coalmine/CmStaffQaMapper.xml
@@ -0,0 +1,25 @@
+<?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.gkhy.exam.coalmine.mapper.CmStaffQaMapper">
+
+    <resultMap type="com.gkhy.exam.coalmine.entity.CmStaffQa" id="CmStaffQaMap">
+        <result property="id" column="id"/>
+        <result property="staffId" column="staff_id"/>
+        <result property="name" column="name"/>
+        <result property="operateTypeId" column="operate_type_id"/>
+        <result property="qualificationType" column="qualification_type"/>
+        <result property="jobCategory" column="job_category"/>
+        <result property="operationItems" column="operation_items"/>
+        <result property="expiredTime" column="expired_time"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <sql id="selectAllField">
+        select id, staff_id, name, operate_type_id, qualification_type, job_category, operation_items, expired_time, del_flag, create_by, create_time, update_by, update_time        
+        from cm_staff_qa
+    </sql>
+</mapper>
+
diff --git a/exam-system/src/main/resources/mapper/coalmine/CmStaffResumeMapper.xml b/exam-system/src/main/resources/mapper/coalmine/CmStaffResumeMapper.xml
new file mode 100644
index 0000000..f0f957e
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/coalmine/CmStaffResumeMapper.xml
@@ -0,0 +1,22 @@
+<?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.gkhy.exam.coalmine.mapper.CmStaffResumeMapper">
+
+    <resultMap type="com.gkhy.exam.coalmine.entity.CmStaffResume" id="CmStaffResumeMap">
+        <result property="id" column="id"/>
+        <result property="staffId" column="staff_id"/>
+        <result property="startTime" column="start_time"/>
+        <result property="endTime" column="end_time"/>
+        <result property="unit" column="unit"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <sql id="selectAllField">
+        select id, staff_id, start_time, end_time, unit, del_flag, create_by, create_time, update_by, update_time        
+        from cm_staff_resume
+    </sql>
+</mapper>
+
diff --git a/exam-system/src/main/resources/mapper/coalmine/CmStaffTrainMapper.xml b/exam-system/src/main/resources/mapper/coalmine/CmStaffTrainMapper.xml
new file mode 100644
index 0000000..49c0f6a
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/coalmine/CmStaffTrainMapper.xml
@@ -0,0 +1,24 @@
+<?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.gkhy.exam.coalmine.mapper.CmStaffTrainMapper">
+
+    <resultMap type="com.gkhy.exam.coalmine.entity.CmStaffTrain" id="CmStaffTrainMap">
+        <result property="id" column="id"/>
+        <result property="staffId" column="staff_id"/>
+        <result property="startTime" column="start_time"/>
+        <result property="endTime" column="end_time"/>
+        <result property="unit" column="unit"/>
+        <result property="batch" column="batch"/>
+        <result property="subject" column="subject"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <sql id="selectAllField">
+        select id, staff_id, start_time, end_time, unit, batch, subject, del_flag, create_by, create_time, update_by, update_time        
+        from cm_staff_train
+    </sql>
+</mapper>
+
diff --git a/exam-system/src/main/resources/mapper/coalmine/EmonExamRecordMapper.xml b/exam-system/src/main/resources/mapper/coalmine/EmonExamRecordMapper.xml
new file mode 100644
index 0000000..ef1611b
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/coalmine/EmonExamRecordMapper.xml
@@ -0,0 +1,25 @@
+<?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.gkhy.exam.coalmine.mapper.EmonExamRecordMapper">
+
+    <resultMap type="com.gkhy.exam.coalmine.entity.EmonExamRecord" id="EmonExamRecordMap">
+        <result property="id" column="id"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="districtId" column="district_id"/>
+        <result property="examCenter" column="exam_center"/>
+        <result property="excType" column="exc_type"/>
+        <result property="isCm" column="is_cm"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="delFlag" column="del_flag"/>
+    </resultMap>
+
+    <sql id="selectAllField">
+        select id, report_time, district_id, exam_center, exc_type, is_cm,exc_image, update_by, update_time, create_by, create_time, del_flag
+        from emon_exam_record
+    </sql>
+
+</mapper>
+
diff --git a/exam-system/src/main/resources/mapper/coalmine/EmonTrainRecordMapper.xml b/exam-system/src/main/resources/mapper/coalmine/EmonTrainRecordMapper.xml
new file mode 100644
index 0000000..f2b4a5e
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/coalmine/EmonTrainRecordMapper.xml
@@ -0,0 +1,23 @@
+<?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.gkhy.exam.coalmine.mapper.EmonTrainRecordMapper">
+
+    <resultMap type="com.gkhy.exam.coalmine.entity.EmonTrainRecord" id="EmonTrainRecordMap">
+        <result property="id" column="id"/>
+        <result property="reportTime" column="report_time"/>
+        <result property="districtId" column="district_id"/>
+        <result property="examCenter" column="exam_center"/>
+        <result property="excType" column="exc_type"/>
+        <result property="isCm" column="is_cm"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="delFlag" column="del_flag"/>
+    </resultMap>
+    <sql id="selectAllField">
+        select id, report_time, district_id, exam_center, exc_type, is_cm, update_by, update_time, create_by, create_time, del_flag        
+        from emon_train_record
+    </sql>
+</mapper>
+
diff --git a/exam-system/src/main/resources/mapper/coalmine/ExaminerManageMapper.xml b/exam-system/src/main/resources/mapper/coalmine/ExaminerManageMapper.xml
index b977843..b488d33 100644
--- a/exam-system/src/main/resources/mapper/coalmine/ExaminerManageMapper.xml
+++ b/exam-system/src/main/resources/mapper/coalmine/ExaminerManageMapper.xml
@@ -1,7 +1,31 @@
-<?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">
+<?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.gkhy.exam.coalmine.mapper.ExaminerManageMapper">
 
-</mapper>
\ No newline at end of file
+    <resultMap type="com.gkhy.exam.coalmine.entity.ExaminerManage" id="ExaminerManageMap">
+        <result property="id" column="id"/>
+        <result property="name" column="name"/>
+        <result property="sex" column="sex"/>
+        <result property="code" column="code"/>
+        <result property="mobilePhone" column="mobile_phone"/>
+        <result property="jobTitle" column="job_title"/>
+        <result property="eduLevel" column="edu_level"/>
+        <result property="expiredTime" column="expired_time"/>
+        <result property="isCm" column="is_cm"/>
+        <result property="description" column="description"/>
+        <result property="photoAttachment" column="photo_attachment"/>
+        <result property="qaAttachment" column="qa_attachment"/>
+        <result property="status" column="status"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <sql id="selectAllField">
+        select id, name, sex, code, mobile_phone, job_title, edu_level, expired_time, is_cm, description,photo_attachment, qa_attachment,status, del_flag, create_by, create_time, update_by, update_time
+        from examiner_manage
+    </sql>
+</mapper>
+
diff --git a/exam-system/src/main/resources/mapper/coalmine/ExaminerManageOperateTypeBindMapper.xml b/exam-system/src/main/resources/mapper/coalmine/ExaminerManageOperateTypeBindMapper.xml
new file mode 100644
index 0000000..f945198
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/coalmine/ExaminerManageOperateTypeBindMapper.xml
@@ -0,0 +1,24 @@
+<?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.gkhy.exam.coalmine.mapper.ExaminerManageOperateTypeBindMapper">
+
+    <resultMap type="com.gkhy.exam.coalmine.entity.ExaminerManageOperateTypeBind" id="ExaminerManageOperateTypeBindMap">
+        <result property="id" column="id"/>
+        <result property="teacherManageId" column="teacher_manage_id"/>
+        <result property="operateTypeId" column="operate_type_id"/>
+        <result property="qualificationType" column="qualification_type"/>
+        <result property="jobCategory" column="job_category"/>
+        <result property="operationItems" column="operation_items"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+
+    <sql id="selectAllField">
+        select id, teacher_manage_id, operate_type_id, qualification_type, job_category, operation_items, del_flag, create_by, create_time, update_by, update_time        
+        from examiner_manage_operate_type_bind
+    </sql>
+</mapper>
+
diff --git a/exam-system/src/main/resources/mapper/coalmine/TeacherManageMapper.xml b/exam-system/src/main/resources/mapper/coalmine/TeacherManageMapper.xml
new file mode 100644
index 0000000..c3b3127
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/coalmine/TeacherManageMapper.xml
@@ -0,0 +1,30 @@
+<?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.gkhy.exam.coalmine.mapper.TeacherManageMapper">
+
+    <resultMap type="com.gkhy.exam.coalmine.entity.TeacherManage" id="TeacherManageMap">
+        <result property="id" column="id"/>
+        <result property="sex" column="sex"/>
+        <result property="code" column="code"/>
+        <result property="mobilePhone" column="mobile_phone"/>
+        <result property="name" column="name"/>
+        <result property="jobTitle" column="job_title"/>
+        <result property="eduLevel" column="edu_level"/>
+        <result property="expiredTime" column="expired_time"/>
+        <result property="isCm" column="is_cm"/>
+        <result property="description" column="description"/>
+        <result property="photoAttachment" column="photo_attachment"/>
+        <result property="qaAttachment" column="qa_attachment"/>
+        <result property="status" column="status"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <sql id="selectAllField">
+        select id, sex, code, mobile_phone, name, job_title, edu_level, expired_time, is_cm, description,photo_attachment, qa_attachment, status, del_flag, create_by, create_time, update_by, update_time
+        from teacher_manage
+    </sql>
+</mapper>
+
diff --git a/exam-system/src/main/resources/mapper/coalmine/TeacherManageOperateTypeBindMapper.xml b/exam-system/src/main/resources/mapper/coalmine/TeacherManageOperateTypeBindMapper.xml
new file mode 100644
index 0000000..c3b2af6
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/coalmine/TeacherManageOperateTypeBindMapper.xml
@@ -0,0 +1,23 @@
+<?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.gkhy.exam.coalmine.mapper.TeacherManageOperateTypeBindMapper">
+
+    <resultMap type="com.gkhy.exam.coalmine.entity.TeacherManageOperateTypeBind" id="TeacherManageOperateTypeBindMap">
+        <result property="id" column="id"/>
+        <result property="teacherManageId" column="teacher_manage_id"/>
+        <result property="operateTypeId" column="operate_type_id"/>
+        <result property="qualificationType" column="qualification_type"/>
+        <result property="jobCategory" column="job_category"/>
+        <result property="operationItems" column="operation_items"/>
+        <result property="delFlag" column="del_flag"/>
+        <result property="createBy" column="create_by"/>
+        <result property="createTime" column="create_time"/>
+        <result property="updateBy" column="update_by"/>
+        <result property="updateTime" column="update_time"/>
+    </resultMap>
+    <sql id="selectAllField">
+        select id, teacher_manage_id, operate_type_id, qualification_type, job_category, operation_items, del_flag, create_by, create_time, update_by, update_time        
+        from teacher_manage_operate_type_bind
+    </sql>
+</mapper>
+
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/EnableStatusEnum.java b/ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/EnableStatusEnum.java
index 7ab58f9..f371016 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/EnableStatusEnum.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/enums/coalmineEnums/EnableStatusEnum.java
@@ -2,23 +2,23 @@
 
 public enum EnableStatusEnum {
 
-    NO((byte)0,"停用"),
-    YES((byte)1,"启用"),
+    NO("1","停用"),
+    YES("0","启用"),
     ;
 
-    private Byte status;
+    private String status;
     private String desc;
 
-    EnableStatusEnum(Byte status, String desc) {
+    EnableStatusEnum(String status, String desc) {
         this.status = status;
         this.desc = desc;
     }
 
-    public Byte getStatus() {
+    public String getStatus() {
         return status;
     }
 
-    public void setStatus(Byte status) {
+    public void setStatus(String status) {
         this.status = status;
     }
 
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperateTypeServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperateTypeServiceImpl.java
index d1de2a7..e04cd77 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperateTypeServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperateTypeServiceImpl.java
@@ -20,12 +20,14 @@
 import com.ruoyi.system.mapper.SysOperateTypeMapper;
 import com.ruoyi.system.mapper.SysRoleMapper;
 import com.ruoyi.system.service.SysOperateTypeService;
+import org.apache.ibatis.logging.Log;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
 import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -45,21 +47,26 @@
     @Autowired
     private SysRoleMapper roleMapper;
 
+    @Resource
+    private RedisCache redisCache;
+
+
     @PostConstruct
     public void init()
     {
         loadingOperateTypeCache();
+
     }
 
     @Override
     public void loadingOperateTypeCache() {
         LambdaQueryWrapper<SysOperateType> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(SysOperateType::getDelFlag, DeleteStatusEnum.YES.getStatus());
+        wrapper.eq(SysOperateType::getDelFlag, DeleteStatusEnum.NO.getStatus());
         List<SysOperateType> sysOperateTypes = operateTypeMapper.selectList(wrapper);
         if (!CollectionUtils.isEmpty(sysOperateTypes)){
             Map<Long, SysOperateTypeWholeNameBO> map = new HashMap<>();
             for (SysOperateType sysOperateType : sysOperateTypes) {
-                SysOperateTypeWholeNameBO nameBO = this.getOperateTypeWholeNameById(sysOperateType.getId());
+                SysOperateTypeWholeNameBO nameBO = this.operateTypeWholeNameCacheById(sysOperateType.getId());
                 map.put(sysOperateType.getId(),nameBO);
             }
             SpringUtils.getBean(RedisCache.class).setCacheObject(CacheConstants.SYS_OPERATE_TYPE_NAME_KEY, map);
@@ -302,8 +309,7 @@
         return this.operateTypeMapper.updateById(sysOperateType);
     }
 
-    @Override
-    public SysOperateTypeWholeNameBO getOperateTypeWholeNameById(Long id) {
+    private SysOperateTypeWholeNameBO operateTypeWholeNameCacheById(Long id){
         SysOperateType sysOperateType = operateTypeMapper.selectOperateTypeById(id);
         if (sysOperateType == null)
             return null;
@@ -333,6 +339,15 @@
         }
         return bo;
     }
+
+    @Override
+    public SysOperateTypeWholeNameBO getOperateTypeWholeNameById(Long id) {
+        Map<Long, SysOperateTypeWholeNameBO> map = redisCache.getCacheObject(CacheConstants.SYS_OPERATE_TYPE_NAME_KEY);
+        if (map != null){
+            return map.get(id);
+        }
+        return null;
+    }
     //
     ///**
     // * 递归列表

--
Gitblit v1.9.2