From c858ae26143fde37b8c77d403baeb7a050bc2ab6 Mon Sep 17 00:00:00 2001
From: zf <1603559716@qq.com>
Date: 星期一, 25 九月 2023 15:17:42 +0800
Subject: [PATCH] 非煤相关接口

---
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcExamPlan.java                             |   98 +
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffAddForm.java                  |   55 +
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperateTypeServiceImpl.java                |    2 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcStaffQuery.java                      |   21 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/ExamSiteModForm.java                 |   19 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcExamPlanMapper.java                       |   23 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ReturnCertVO.java                         |  115 ++
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/ExamSiteService.java                       |    2 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ExamSiteAddForm.java                 |   14 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcExamineesService.java                    |   20 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ViolationRegistrationServiceImpl.java |   10 
 exam-system/src/main/resources/mapper/noncoalmine/ExamSiteMapper.xml                                   |    6 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ReturnVO.java                             |   16 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffServiceImpl.java               |  337 ++++++
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/WorkRegistrationController.java         |   39 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaffResume.java                          |   51 +
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffResumeMapper.java                    |   19 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/TrainingInstitutionQuery.java          |    7 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/WorkRegistrationQuery.java             |    4 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/TrainingInstitutionVO.java                |    5 
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java                      |   19 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffService.java                        |   30 
 exam-system/src/main/resources/mapper/noncoalmine/NcStaffMapper.xml                                    |   20 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcExamPlanQuery.java                   |   25 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffResumeAddForm.java            |   34 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/ViolationRegistrationModForm.java    |   12 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcExamPlanServiceImpl.java            |  125 ++
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/ViolationRegistration.java                  |    5 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/NcStaffModForm.java                  |   61 +
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcCertQuery.java                       |   27 
 ruoyi-admin/src/main/resources/application.yml                                                         |    2 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/TrainingInstitutionAddForm.java      |   12 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/NcStaffVO.java                            |   75 +
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcExamPlanService.java                     |   21 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcCertService.java                         |   24 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/WorkRegistrationAddForm.java         |   21 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamSiteVO.java                           |    5 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/WorkRegistrationService.java               |    2 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcCertMapper.java                           |   19 
 ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java                           |    2 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/WorkRegistration.java                       |    7 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffMapper.java                          |   25 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffResumeServiceImpl.java         |   30 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaffTrain.java                           |   77 +
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/WorkRegistrationMapper.java                 |    1 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/TrainingInstitutionService.java            |    2 
 ruoyi-admin/src/main/resources/application-dev.yml                                                     |    6 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffController.java                  |   90 +
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/TrainingInstitution.java                    |    5 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffTrainAddForm.java             |   42 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/ExamSiteQuery.java                     |    7 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamPlanInfo.java                         |   75 +
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffTrainMapper.java                     |   19 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcExamineesController.java              |   33 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamPlanExaminee.java                     |   19 
 exam-system/src/main/resources/mapper/noncoalmine/ViolationRegistrationMapper.xml                      |    6 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/TrainingInstitutionController.java      |   22 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/ViolationRegistrationService.java          |    2 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcCert.java                                 |  106 ++
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/TrainingInstitutionModForm.java      |   11 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ViolationRegistrationAddForm.java    |   11 
 exam-system/src/main/resources/mapper/noncoalmine/TrainingInstitutionMapper.xml                        |    6 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcExamineesServiceImpl.java           |   33 
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java                     |   42 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcExamPlanController.java               |   63 +
 exam-system/src/main/resources/mapper/noncoalmine/NcExamPlanMapper.xml                                 |   17 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/WorkRegistrationServiceImpl.java      |   11 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/ExamSite.java                               |   11 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/WorkRegistrationModForm.java         |   20 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffTrainService.java                   |   18 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffResumeController.java            |   26 
 ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/login/LoginVo.java                        |   31 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ExamSiteServiceImpl.java              |   10 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcCertServiceImpl.java                |   95 +
 exam-system/src/main/resources/mapper/noncoalmine/WorkRegistrationMapper.xml                           |    7 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffResumeService.java                  |   18 
 ruoyi-file/src/main/java/com/ruoyi/file/entity/AttachmentInfo.java                                     |   26 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcExaminees.java                            |   89 +
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcExamineesMapper.java                      |   19 
 ruoyi-common/src/main/java/com/ruoyi/common/signature/SignatureUtils.java                              |  104 +
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffTrainController.java             |   25 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/TrainingInstitutionServiceImpl.java   |   10 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ViolationRegistrationVO.java              |    5 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcExamineesAddForm.java              |   36 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcCertController.java                   |   62 +
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/WorkRegistrationVO.java                   |   10 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffTrainServiceImpl.java          |   29 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/ExamSiteController.java                 |   23 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaff.java                                |   55 +
 ruoyi-common/src/main/java/com/ruoyi/common/signature/NcCertQuery1.java                                |   21 
 exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/ViolationRegistrationController.java    |   25 
 ruoyi-file/src/main/java/com/ruoyi/file/controller/AttachmentController.java                           |   29 
 92 files changed, 2,876 insertions(+), 100 deletions(-)

diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/ExamSiteController.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/ExamSiteController.java
index 80ef674..011bdaf 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/ExamSiteController.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/ExamSiteController.java
@@ -7,6 +7,10 @@
 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.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -18,6 +22,7 @@
  * @author makejava
  * @since 2023-09-13 16:11:04
  */
+@Api(tags = "考点接口")
 @RestController
 @RequestMapping("exam/site")
 public class ExamSiteController extends BaseController {
@@ -33,6 +38,11 @@
      * @param query 查询实体
      * @return 所有数据
      */
+    @ApiOperation(value = "分页查询列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", dataTypeClass = String.class,value = "页码",required = true),
+            @ApiImplicitParam(name = "pageSize", dataTypeClass = String.class,value = "页数",required = true),
+    })
     @GetMapping("page/list")
     public TableDataInfo listByPage(ExamSiteQuery query) {
         startPage();
@@ -45,7 +55,8 @@
      * @param siteId 主键
      * @return 单条数据
      */
-    @GetMapping("{get/siteId}")
+    @ApiOperation(value = "通过主键查询单条数据")
+    @GetMapping("get/{siteId}")
     public AjaxResult selectOne(@PathVariable Long siteId) {
         return success(this.examSiteService.getById(siteId));
     }
@@ -56,6 +67,7 @@
      * @param addForm 实体对象
      * @return 新增结果
      */
+    @ApiOperation(value = "新增数据")
     @PostMapping("add")
     public AjaxResult add(@Validated @RequestBody ExamSiteAddForm addForm) {
         return toAjax(this.examSiteService.add(addForm));
@@ -67,7 +79,8 @@
      * @param modForm 实体对象
      * @return 修改结果
      */
-    @PutMapping("mod")
+    @ApiOperation(value = "修改数据")
+    @PostMapping("mod")
     public AjaxResult mod(@Validated @RequestBody ExamSiteModForm modForm) {
         return toAjax(this.examSiteService.mod(modForm));
     }
@@ -78,9 +91,11 @@
      * @param siteIds 主键结合
      * @return 删除结果
      */
+    @ApiOperation(value = "删除数据")
     @DeleteMapping("/del/batch/{siteIds}")
-    public AjaxResult delete(@PathVariable("siteIds") List<Long> siteIds) {
-        return toAjax(this.examSiteService.removeByIds(siteIds));
+    public AjaxResult delBatch(@PathVariable("siteIds") List<Long> siteIds) {
+        this.examSiteService.delBatch(siteIds);
+        return success();
     }
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcCertController.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcCertController.java
new file mode 100644
index 0000000..c3f3685
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcCertController.java
@@ -0,0 +1,62 @@
+package com.gkhy.exam.noncoalmine.controller;
+
+import com.gkhy.exam.noncoalmine.model.query.NcCertQuery;
+import com.gkhy.exam.noncoalmine.service.NcCertService;
+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.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+
+
+/**
+ * (NcCert)表控制层
+ *
+ * @author makejava
+ * @since 2023-09-15 17:14:35
+ */
+@Api(tags = "证书接口")
+@RestController
+@RequestMapping("nc/cert")
+public class NcCertController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private NcCertService ncCertService;
+
+    /**
+     * 分页查询所有数据
+     *
+     * @param query 查询实体
+     * @return 所有数据
+     */
+    @GetMapping("page/list")
+    @ApiOperation(value = "分页查询列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", dataTypeClass = String.class,value = "页码",required = true),
+            @ApiImplicitParam(name = "pageSize", dataTypeClass = String.class,value = "页数",required = true),
+    })
+    public TableDataInfo listByPage(NcCertQuery query) {
+        startPage();
+        return getDataTable(this.ncCertService.getList(query));
+    }
+    /**
+     * 同步证书数据
+     */
+    @GetMapping("sync/data")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "idcardNum", dataTypeClass = String.class,value = "身份证号",required = true),
+    })
+    @ApiOperation(value = "同步证书数据")
+    public AjaxResult syncCert(NcCertQuery query){
+        this.ncCertService.syncCert(query);
+        return success();
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcExamPlanController.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcExamPlanController.java
new file mode 100644
index 0000000..44af243
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcExamPlanController.java
@@ -0,0 +1,63 @@
+package com.gkhy.exam.noncoalmine.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gkhy.exam.noncoalmine.entity.NcExamPlan;
+import com.gkhy.exam.noncoalmine.model.query.NcExamPlanQuery;
+import com.gkhy.exam.noncoalmine.service.NcExamPlanService;
+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.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * (NcExamPlan)表控制层
+ *
+ * @author makejava
+ * @since 2023-09-18 13:21:48
+ */
+@Api(tags = "批次管理接口")
+@RestController
+@RequestMapping("nc/exam/plan")
+public class NcExamPlanController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Autowired
+    private NcExamPlanService ncExamPlanService;
+
+    /**
+     * 分页查询所有数据
+     *
+     * @param query 查询实体
+     * @return 所有数据
+     */
+    @ApiOperation(value = "分页查询")
+    @GetMapping("page/list")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", dataTypeClass = String.class,value = "页码",required = true),
+            @ApiImplicitParam(name = "pageSize", dataTypeClass = String.class,value = "页数",required = true),
+    })
+    public TableDataInfo listByPage(NcExamPlanQuery query) {
+        startPage();
+        return getDataTable(this.ncExamPlanService.selectNcExamPlanList(query));
+    }
+    /**
+     * 同步考试计划
+     */
+    @ApiOperation(value = "同步考试计划")
+    @GetMapping("sync/data")
+    public AjaxResult syncExamPlan(){
+        ncExamPlanService.syncExamPlan();
+        return success();
+    }
+
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcExamineesController.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcExamineesController.java
new file mode 100644
index 0000000..5cdbb51
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcExamineesController.java
@@ -0,0 +1,33 @@
+package com.gkhy.exam.noncoalmine.controller;
+
+
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gkhy.exam.noncoalmine.entity.NcExaminees;
+import com.gkhy.exam.noncoalmine.service.NcExamineesService;
+import com.ruoyi.common.core.controller.BaseController;
+import com.ruoyi.common.core.domain.AjaxResult;
+import org.springframework.web.bind.annotation.*;
+import javax.annotation.Resource;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * (NcExaminees)表控制层
+ *
+ * @author makejava
+ * @since 2023-09-18 10:01:22
+ */
+@RestController
+@RequestMapping("nc/examinees")
+public class NcExamineesController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Resource
+    private NcExamineesService ncExamineesService;
+
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffController.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffController.java
new file mode 100644
index 0000000..e623a69
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffController.java
@@ -0,0 +1,90 @@
+package com.gkhy.exam.noncoalmine.controller;
+
+import com.gkhy.exam.noncoalmine.model.addForm.NcStaffAddForm;
+import com.gkhy.exam.noncoalmine.model.modForm.NcStaffModForm;
+import com.gkhy.exam.noncoalmine.model.query.NcStaffQuery;
+import com.gkhy.exam.noncoalmine.service.NcStaffService;
+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.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import java.util.List;
+
+/**
+ * (NcStaff)表控制层
+ *
+ * @author makejava
+ * @since 2023-09-18 09:59:58
+ */
+@Api(tags = "非煤人员接口")
+@RestController
+@RequestMapping("nc/staff")
+public class NcStaffController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Autowired
+    private NcStaffService ncStaffService;
+
+    /**
+     * 分页查询所有数据
+     *
+     * @param query 查询实体
+     * @return 所有数据
+     */
+    @ApiOperation(value = "分页查询")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", dataTypeClass = String.class,value = "页码",required = true),
+            @ApiImplicitParam(name = "pageSize", dataTypeClass = String.class,value = "页数",required = true),
+    })
+    @GetMapping("list/page")
+    public TableDataInfo listByPage(NcStaffQuery query) {
+        startPage();
+        return getDataTable(this.ncStaffService.selectStaffList(query));
+    }
+
+
+    /**
+     * 新增数据
+     *
+     * @param addForm 实体对象
+     * @return 新增结果
+     */
+    @ApiOperation(value = "新增数据")
+    @PostMapping("add")
+    public AjaxResult add(@RequestBody NcStaffAddForm addForm) {
+        return toAjax(this.ncStaffService.add(addForm));
+    }
+
+    /**
+     * 修改数据
+     *
+     * @param modForm 实体对象
+     * @return 修改结果
+     */
+    @ApiOperation(value = "修改数据")
+    @PostMapping("mod")
+    public AjaxResult mod(@RequestBody NcStaffModForm modForm) {
+        this.ncStaffService.mod(modForm);
+        return success();
+    }
+
+    /**
+     * 删除数据
+     *
+     * @param staffIds 主键结合
+     * @return 删除结果
+     */
+    @ApiOperation(value = "删除数据")
+    @DeleteMapping("del/batch/{staffIds}")
+    public AjaxResult delBatch(@PathVariable("staffIds") List<Long> staffIds) {
+        this.ncStaffService.delBatch(staffIds);
+        return success();
+    }
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffResumeController.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffResumeController.java
new file mode 100644
index 0000000..6a9ae87
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffResumeController.java
@@ -0,0 +1,26 @@
+package com.gkhy.exam.noncoalmine.controller;
+
+import com.gkhy.exam.noncoalmine.service.NcStaffResumeService;
+import com.ruoyi.common.core.controller.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * (NcStaffResume)表控制层
+ *
+ * @author makejava
+ * @since 2023-09-18 14:06:43
+ */
+@RestController
+@RequestMapping("nc/staff/resume")
+public class NcStaffResumeController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Autowired
+    private NcStaffResumeService ncStaffResumeService;
+
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffTrainController.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffTrainController.java
new file mode 100644
index 0000000..edfa0ad
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/NcStaffTrainController.java
@@ -0,0 +1,25 @@
+package com.gkhy.exam.noncoalmine.controller;
+
+import com.gkhy.exam.noncoalmine.service.NcStaffTrainService;
+import com.ruoyi.common.core.controller.BaseController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * (NcStaffTrain)表控制层
+ *
+ * @author makejava
+ * @since 2023-09-18 10:00:25
+ */
+@RestController
+@RequestMapping("nc/staff/train")
+public class NcStaffTrainController extends BaseController {
+    /**
+     * 服务对象
+     */
+    @Autowired
+    private NcStaffTrainService ncStaffTrainService;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/TrainingInstitutionController.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/TrainingInstitutionController.java
index 0f92283..67409a9 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/TrainingInstitutionController.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/TrainingInstitutionController.java
@@ -7,6 +7,10 @@
 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.beans.factory.annotation.Autowired;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -18,6 +22,7 @@
  * @author makejava
  * @since 2023-09-13 16:12:31
  */
+@Api(tags = "培训机构接口")
 @RestController
 @RequestMapping("training/institution")
 public class TrainingInstitutionController extends BaseController {
@@ -33,6 +38,11 @@
      * @param query 查询实体
      * @return 所有数据
      */
+    @ApiOperation(value = "分页查询")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", dataTypeClass = String.class,value = "页码",required = true),
+            @ApiImplicitParam(name = "pageSize", dataTypeClass = String.class,value = "页数",required = true),
+    })
     @GetMapping("page/list")
     public TableDataInfo listByPage(TrainingInstitutionQuery query) {
         startPage();
@@ -45,6 +55,7 @@
      * @param institutionId 主键
      * @return 单条数据
      */
+    @ApiOperation(value = "通过主键查询单条数据")
     @GetMapping("get/{institutionId}")
     public AjaxResult selectOne(@PathVariable Long institutionId) {
         return success(this.trainingInstitutionService.getById(institutionId));
@@ -56,6 +67,7 @@
      * @param addForm 实体对象
      * @return 新增结果
      */
+    @ApiOperation(value = "新增数据")
     @PostMapping("add")
     public AjaxResult add(@Validated @RequestBody TrainingInstitutionAddForm addForm) {
         return toAjax(this.trainingInstitutionService.add(addForm));
@@ -67,7 +79,8 @@
      * @param modForm 实体对象
      * @return 修改结果
      */
-    @PutMapping("mod")
+    @ApiOperation(value = "修改数据")
+    @PostMapping("mod")
     public AjaxResult mod(@Validated @RequestBody TrainingInstitutionModForm modForm) {
         return toAjax(this.trainingInstitutionService.mod(modForm));
     }
@@ -78,13 +91,16 @@
      * @param institutionIds 主键结合
      * @return 删除结果
      */
+    @ApiOperation(value = "删除数据")
     @DeleteMapping("/del/batch/{institutionIds}")
-    public AjaxResult delete(@PathVariable("institutionIds") List<Long> institutionIds) {
-        return toAjax(this.trainingInstitutionService.removeByIds(institutionIds));
+    public AjaxResult delBatch(@PathVariable("institutionIds") List<Long> institutionIds) {
+        this.trainingInstitutionService.delBatch(institutionIds);
+        return success();
     }
     /**
      * 选择列表
      */
+    @ApiOperation(value = "选择列表")
     @GetMapping("select")
     public AjaxResult selectList(TrainingInstitutionQuery query){
         return success(this.trainingInstitutionService.listByPage(query));
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/ViolationRegistrationController.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/ViolationRegistrationController.java
index 682b590..1e422db 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/ViolationRegistrationController.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/ViolationRegistrationController.java
@@ -9,6 +9,10 @@
 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;
@@ -20,6 +24,7 @@
  * @author makejava
  * @since 2023-09-11 16:59:05
  */
+@Api(tags = "违规登记接口")
 @RestController
 @RequestMapping("violation/registration")
 public class ViolationRegistrationController extends BaseController {
@@ -35,6 +40,15 @@
      * @param query 查询实体
      * @return 所有数据
      */
+    @ApiOperation(value = "分页查询")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", dataTypeClass = String.class,value = "页码",required = true),
+            @ApiImplicitParam(name = "pageSize", dataTypeClass = String.class,value = "页数",required = true),
+            @ApiImplicitParam(name = "dept", dataTypeClass = String.class,value = "部门名"),
+            @ApiImplicitParam(name = "name", dataTypeClass = String.class,value = "姓名"),
+            @ApiImplicitParam(name = "idCard", dataTypeClass = String.class,value = "身份证号"),
+            @ApiImplicitParam(name = "operateTypeId", dataTypeClass = Long.class,value = "作业类型Id"),
+    })
     @GetMapping("page/list")
     public TableDataInfo listByPage(ViolationRegistrationQuery query) {
         startPage();
@@ -47,6 +61,7 @@
      * @param violationId 主键
      * @return 单条数据
      */
+    @ApiOperation(value = "通过主键查询单条数据")
     @GetMapping("get/{violationId}")
     public AjaxResult selectOne(@PathVariable Long violationId) {
         return success(this.violationRegistrationService.getById(violationId));
@@ -58,6 +73,7 @@
      * @param addForm 实体对象
      * @return 新增结果
      */
+    @ApiOperation(value = "新增数据")
     @PostMapping("add")
     public AjaxResult add(@Validated @RequestBody ViolationRegistrationAddForm addForm) {
         return toAjax(this.violationRegistrationService.add(addForm));
@@ -69,7 +85,8 @@
      * @param modForm 实体对象
      * @return 修改结果
      */
-    @PutMapping("mod")
+    @ApiOperation(value = "修改数据")
+    @PostMapping("mod")
     public AjaxResult mod(@Validated @RequestBody ViolationRegistrationModForm modForm) {
         return toAjax(this.violationRegistrationService.mod(modForm));
     }
@@ -80,9 +97,11 @@
      * @param violationIds 主键结合
      * @return 删除结果
      */
+    @ApiOperation(value = "删除数据")
     @DeleteMapping("/del/batch/{violationIds}")
-    public AjaxResult delete(@PathVariable("violationIds") List<Long> violationIds) {
-        return success(this.violationRegistrationService.removeByIds(violationIds));
+    public AjaxResult delBatch(@PathVariable("violationIds") List<Long> violationIds) {
+        this.violationRegistrationService.delBatch(violationIds);
+        return success();
     }
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/WorkRegistrationController.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/WorkRegistrationController.java
index bfab52a..393372c 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/WorkRegistrationController.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/controller/WorkRegistrationController.java
@@ -9,9 +9,14 @@
 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 java.lang.reflect.Array;
 import java.util.List;
 
 /**
@@ -20,6 +25,8 @@
  * @author makejava
  * @since 2023-09-11 16:59:58
  */
+
+@Api(tags = "作业登记接口")
 @RestController
 @RequestMapping("work/registration")
 public class WorkRegistrationController extends BaseController {
@@ -35,6 +42,15 @@
      * @param query 查询实体
      * @return 所有数据
      */
+    @ApiOperation(value = "分页查询列表")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "pageNum", dataTypeClass = String.class,value = "页码",required = true),
+            @ApiImplicitParam(name = "pageSize", dataTypeClass = String.class,value = "页数",required = true),
+            @ApiImplicitParam(name = "dept", dataTypeClass = String.class,value = "部门名"),
+            @ApiImplicitParam(name = "name", dataTypeClass = String.class,value = "姓名"),
+            @ApiImplicitParam(name = "idCard", dataTypeClass = String.class,value = "身份证号"),
+            @ApiImplicitParam(name = "operateTypeId", dataTypeClass = Long.class,value = "作业类型Id"),
+    })
     @GetMapping("/list/page")
     public TableDataInfo listByPage(WorkRegistrationQuery query) {
         startPage();
@@ -44,12 +60,16 @@
     /**
      * 通过主键查询单条数据
      *
-     * @param id 主键
+     * @param workId 主键
      * @return 单条数据
      */
-    @GetMapping("get/{id}")
-    public AjaxResult selectOne(@PathVariable Long id) {
-        return success(this.workRegistrationService.getById(id));
+    @ApiOperation(value = "根据id查询")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "workId", dataTypeClass = Long.class,value = "作业登记Id"),
+    })
+    @GetMapping("get/{workId}")
+    public AjaxResult selectOne(@PathVariable Long workId) {
+        return success(this.workRegistrationService.getById(workId));
     }
 
     /**
@@ -58,6 +78,7 @@
      * @param addForm 实体对象
      * @return 新增结果
      */
+    @ApiOperation(value = "新增")
     @PostMapping("add")
     public AjaxResult add(@Validated @RequestBody WorkRegistrationAddForm addForm) {
         return toAjax(this.workRegistrationService.add(addForm));
@@ -68,6 +89,7 @@
      * @param modForm
      * @return
      */
+    @ApiOperation(value = "修改")
     @PostMapping("mod")
     public AjaxResult mod(@Validated @RequestBody WorkRegistrationModForm modForm) {
         return toAjax(this.workRegistrationService.mod(modForm));
@@ -79,9 +101,14 @@
      * @param workIds 主键结合
      * @return 删除结果
      */
+    @ApiOperation(value = "批量删除")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "workIds", dataTypeClass = List.class,value = "作业登记Ids"),
+    })
     @DeleteMapping("del/batch/{workIds}")
-    public AjaxResult delete(@PathVariable List<Long> workIds) {
-        return success(this.workRegistrationService.removeByIds(workIds));
+    public AjaxResult delBatch(@PathVariable List<Long> workIds) {
+        this.workRegistrationService.delBatch(workIds);
+        return success();
     }
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/ExamSite.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/ExamSite.java
index 8269068..4f5336a 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/ExamSite.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/ExamSite.java
@@ -1,16 +1,15 @@
 package com.gkhy.exam.noncoalmine.entity;
 
-import java.util.Date;
+import java.time.LocalDateTime;
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.extension.activerecord.Model;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
 import lombok.Data;
 
-import java.io.Serializable;
 
 /**
  * (ExamSite)表实体类
@@ -50,11 +49,9 @@
     private String updateBy;
     @TableField(fill = FieldFill.INSERT)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
+    private LocalDateTime createTime;
     @TableField(fill = FieldFill.INSERT_UPDATE)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
-
-
+    private LocalDateTime updateTime;
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcCert.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcCert.java
new file mode 100644
index 0000000..a0a0e7a
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcCert.java
@@ -0,0 +1,106 @@
+package com.gkhy.exam.noncoalmine.entity;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * (NcCert)表实体类
+ *
+ * @author makejava
+ * @since 2023-09-15 17:14:35
+ */
+@Data
+public class NcCert extends Model<NcCert> {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    //证书id(国家数据)
+    private Long certId;
+    //姓名
+    private String name;
+    //性别
+    private String sex;
+    //证件类型
+    private String idcardTypeCode;
+    //证件类型名称
+    private String idcardTypeName;
+    //身份证号
+    private String idcardNum;
+    //档案编号
+    private String archivesNum;
+    //证书编号
+    private String certNum;
+    //证书状态
+    private String certStatus;
+    //人员类型代码
+    private String personTypeCode;
+    //人员类型名称
+    private String personTypeName;
+    //作业类别名称
+    private String jobTypeCode;
+    //作业类别名称
+    private String jobTypeName;
+    //操作项目代码
+    private String operItemCode;
+    //操作项目名称
+    private String operItemName;
+    //签发机关ID
+    private Long issueOrgId;
+    //签发机关编码
+    private String issueOrgCode;
+    //初领日期
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date firstCertDate;
+    //应复审日期
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date shouldReviewDate;
+    //签发机关名称
+    private String issueOrgName;
+    //实际复审日期
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date reviewDate;
+    //有效开始时间
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date validBeginDate;
+    //有效结束时间
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date validEndDate;
+    //复审机关ID
+    private Long reviewOrgId;
+    //复审机关编码
+    private String reviewOrgCode;
+    //复审机关名称
+    private String reviewOrgName;
+    //二维码字符串
+    private String qrcode;
+    //二维码图片路径
+    private String qrcodePath;
+    //照片名称
+    private String imgName;
+    //照片数据,base64编码
+    private String imgData;
+    private String imgPath;
+    
+    private Byte delFlag;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcExamPlan.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcExamPlan.java
new file mode 100644
index 0000000..e583371
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcExamPlan.java
@@ -0,0 +1,98 @@
+package com.gkhy.exam.noncoalmine.entity;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * (NcExamPlan)表实体类
+ *
+ * @author makejava
+ * @since 2023-09-18 13:21:48
+ */
+@Data
+public class NcExamPlan {
+    //考试计划id
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    //考试计划id(国家数据)
+    private Long examPlanId;
+    //考试计划名称
+    private String examPlanName;
+    //人员类型ID
+    private String personTypeCode;
+    //人员类型
+    private String personTypeName;
+    //作业类别(行业类别)ID:(字典:考核对象第二级)
+    private String jobTypeCode;
+    //作业类别(行业类别)   字典:考核对象第二级
+    private String jobTypeName;
+    //操作项目ID  字典:考核对象第三级 人员类型为特种作业操作人员时必填
+    private String operitemCode;
+    //操作项目   字典:考核对象第三级 人员类型为特种作业操作人员时必填
+    private String operitemName;
+    //考试类型 1:初训 2:复训
+    private String examType;
+    //计划考试人数
+    private Long plannedExamNumber;
+    //考试计划备案机关id
+    private String filingOrgId;
+    //考试计划备案机关名称
+    private String filingOrg;
+    //理论考试点代码
+    private String theoryExamPlaceCode;
+    //理论考试点名称
+    private String theoryExamPlaceName;
+    //理论考试实施方式 1:流水考试 2:固定场次
+    private String theoryExamUseMethod;
+    //理论考试时间(开始) 格式:yyyy-MM-dd HH:mm:ss
+    private Date theoryExamStartTime;
+    //理论考试时间(截止) 格式:yyyy-MM-dd HH:mm:ss
+    private Date theoryExamEndTime;
+    //理论考试是否当场补考
+    private String isTheoryMakeupImmediate;
+    //理论考试补考时间(开始) 格式:yyyy-MM-dd HH:mm:ss
+    private Date theoryExamMakeupStartTime;
+    //理论考试补考时间(截止) 格式:yyyy-MM-dd HH:mm:ss
+    private Date theoryExamMakeupEndTime;
+    //实操考试点代码
+    private String practicalExamPlaceCode;
+    //实操考试点名称
+    private String practicalExamPlaceName;
+    //实操考试方式 1:人工考评 2:实操设备考评
+    private String practicalExamMethod;
+    //实操考试时间(开始) 格式:yyyy-MM-dd HH:mm:ss
+    private Date practicalExamStartTime;
+    //实操考试时间(截止) 格式:yyyy-MM-dd HH:mm:ss
+    private Date practicalExamEndTime;
+    //实操考试是否当场补考
+    private String isPracticalMakeupImmediate;
+    //实操考试补考时间(开始) 格式:yyyy-MM-dd HH:mm:ss
+    private Date practicalExamMakeupStartTime;
+    //实操考试补考时间(截止) 格式:yyyy-MM-dd HH:mm:ss
+    private Date practicalExamMakeupEndTime;
+    
+    private Byte delFlag;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcExaminees.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcExaminees.java
new file mode 100644
index 0000000..2ec1a25
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcExaminees.java
@@ -0,0 +1,89 @@
+package com.gkhy.exam.noncoalmine.entity;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * (NcExaminees)表实体类
+ *
+ * @author makejava
+ * @since 2023-09-18 10:01:22
+ */
+@Data
+public class NcExaminees {
+    //主键
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    //本系统中人员id
+    private Long staffId;
+    //培训系统中学员id 当学员被报名审核确认后,直接将相关档案信息从培训中取出放入该表,为0则为自主报名,不关联培训信息
+    private Long trainStudentId;
+    //姓名
+    private String name;
+    //性别描述
+    private String sexName;
+    //性别 字典,性别
+    private String sex;
+    //证件类型 字典,证件类型
+    private String cardType;
+    //证件类型名称
+    private String cardName;
+    //证件号码
+    private String cardNum;
+    //考试计划(国家系统)
+    private Long examPlanId;
+    //培训机构id
+    private Long trainOrgId;
+    //培训机构名称
+    private String trainOrgAme;
+    //民族 字典
+    private String nationCode;
+    //民族名称
+    private String nationName;
+    //理论场次ID
+    private Long theorySessionId;
+    //实操场次ID
+    private Long practicalSessionId;
+    //理论准考证号
+    private String examCard;
+    //实操准考证号
+    private String pracExamCard;
+    //考试中心
+    private String examCenter;
+    //科目
+    private String subject;
+    //考试结果;0-通过;1-未通过;2未知
+    private String result;
+    //考试日期
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date examTime;
+
+    private Byte delFlag;
+    
+    private Long createOrgId;
+    
+    private String createOrgName;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaff.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaff.java
new file mode 100644
index 0000000..7a33cba
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaff.java
@@ -0,0 +1,55 @@
+package com.gkhy.exam.noncoalmine.entity;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * (NcStaff)表实体类
+ *
+ * @author makejava
+ * @since 2023-09-18 09:59:58
+ */
+@Data
+public class NcStaff  {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    //姓名
+    private String name;
+    //性别
+    private String sex;
+    //民族
+    private String nationCode;
+    //身份证
+    private String idCardNum;
+    //手机号
+    private String phone;
+    //最高学历
+    private String highestEducation;
+    //证件照
+    private String photoPath;
+    //删除标志(0代表存在 2代表删除)
+    private Byte delFlag;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaffResume.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaffResume.java
new file mode 100644
index 0000000..d339c66
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaffResume.java
@@ -0,0 +1,51 @@
+package com.gkhy.exam.noncoalmine.entity;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * (NcStaffResume)表实体类
+ *
+ * @author makejava
+ * @since 2023-09-18 14:06:43
+ */
+@Data
+public class NcStaffResume {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    //人员id
+    private Long staffId;
+    //开始时间
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+    //结束时间
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+    //单位
+    private String unit;
+    //删除标志(0代表存在 2代表删除)
+    private Byte delFlag;
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaffTrain.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaffTrain.java
new file mode 100644
index 0000000..7fb5ed1
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/NcStaffTrain.java
@@ -0,0 +1,77 @@
+package com.gkhy.exam.noncoalmine.entity;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.ruoyi.common.core.domain.BaseEntity;
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * (NcStaffTrain)表实体类
+ *
+ * @author makejava
+ * @since 2023-09-18 10:00:25
+ */
+@Data
+public class NcStaffTrain {
+    @TableId(type = IdType.AUTO)
+    private Long id;
+    //人员id
+    private Long staffId;
+    //开始时间
+    private Date startTime;
+    //结束时间
+    private Date endTime;
+    
+    private Long trainInstitutionId;
+    //培训机构名称
+    private String trainInstitutionName;
+    //计划名称
+    private String examPlanName;
+    //所属批次(本系统中计划id)
+    private String planId;
+    //科目
+    private String subject;
+
+    //培训类型 1:初训 2:复训
+    private String trianTypeCode;
+    
+    private String personTypeCode;
+    
+    private String personTypeName;
+    
+    private String jobTypeCode;
+    
+    private String jobTypeName;
+    
+    private String operItemCode;
+    
+    private String operItemName;
+    //删除标志(0代表存在 2代表删除)
+    private Byte delFlag;
+    
+    private String name;
+    
+    private String idCardNum;
+
+    @TableField(fill = FieldFill.INSERT)
+    private String createBy;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateBy;
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime updateTime;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/TrainingInstitution.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/TrainingInstitution.java
index ad62bbe..7e1d178 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/TrainingInstitution.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/TrainingInstitution.java
@@ -1,5 +1,6 @@
 package com.gkhy.exam.noncoalmine.entity;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
@@ -49,10 +50,10 @@
     private String updateBy;
     @TableField(fill = FieldFill.INSERT)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
+    private LocalDateTime createTime;
     @TableField(fill = FieldFill.INSERT_UPDATE)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
+    private LocalDateTime updateTime;
 
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/ViolationRegistration.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/ViolationRegistration.java
index 5ca0df5..25bc506 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/ViolationRegistration.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/ViolationRegistration.java
@@ -1,5 +1,6 @@
 package com.gkhy.exam.noncoalmine.entity;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
@@ -52,10 +53,10 @@
     private String updateBy;
     @TableField(fill = FieldFill.INSERT)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
+    private LocalDateTime createTime;
     @TableField(fill = FieldFill.INSERT_UPDATE)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
+    private LocalDateTime updateTime;
 
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/WorkRegistration.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/WorkRegistration.java
index 8bffe22..57f47dd 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/WorkRegistration.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/entity/WorkRegistration.java
@@ -1,5 +1,6 @@
 package com.gkhy.exam.noncoalmine.entity;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.FieldFill;
@@ -50,12 +51,10 @@
     private String updateBy;
     @TableField(fill = FieldFill.INSERT)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
+    private LocalDateTime createTime;
     @TableField(fill = FieldFill.INSERT_UPDATE)
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
-
-
+    private LocalDateTime updateTime;
 
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcCertMapper.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcCertMapper.java
new file mode 100644
index 0000000..5f27181
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcCertMapper.java
@@ -0,0 +1,19 @@
+package com.gkhy.exam.noncoalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.noncoalmine.entity.NcCert;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * (NcCert)表数据库访问层
+ *
+ * @author makejava
+ * @since 2023-09-15 17:14:35
+ */
+@Repository
+@Mapper
+public interface NcCertMapper extends BaseMapper<NcCert> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcExamPlanMapper.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcExamPlanMapper.java
new file mode 100644
index 0000000..5865d69
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcExamPlanMapper.java
@@ -0,0 +1,23 @@
+package com.gkhy.exam.noncoalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.noncoalmine.entity.NcExamPlan;
+import com.gkhy.exam.noncoalmine.model.query.NcExamPlanQuery;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * (NcExamPlan)表数据库访问层
+ *
+ * @author makejava
+ * @since 2023-09-18 13:21:48
+ */
+@Repository
+@Mapper
+public interface NcExamPlanMapper extends BaseMapper<NcExamPlan> {
+	List<NcExamPlan> selectNcExamPlanList(@Param("query") NcExamPlanQuery query);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcExamineesMapper.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcExamineesMapper.java
new file mode 100644
index 0000000..3ea2df7
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcExamineesMapper.java
@@ -0,0 +1,19 @@
+package com.gkhy.exam.noncoalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.noncoalmine.entity.NcExaminees;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * (NcExaminees)表数据库访问层
+ *
+ * @author makejava
+ * @since 2023-09-18 10:01:22
+ */
+@Repository
+@Mapper
+public interface NcExamineesMapper extends BaseMapper<NcExaminees> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffMapper.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffMapper.java
new file mode 100644
index 0000000..e8f1a9f
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffMapper.java
@@ -0,0 +1,25 @@
+package com.gkhy.exam.noncoalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.noncoalmine.entity.NcStaff;
+import com.gkhy.exam.noncoalmine.model.query.NcStaffQuery;
+import com.gkhy.exam.noncoalmine.model.vo.NcStaffVO;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * (NcStaff)表数据库访问层
+ *
+ * @author makejava
+ * @since 2023-09-18 09:59:58
+ */
+@Repository
+@Mapper
+public interface NcStaffMapper extends BaseMapper<NcStaff> {
+
+	List<NcStaffVO> getList(@Param("query") NcStaffQuery query);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffResumeMapper.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffResumeMapper.java
new file mode 100644
index 0000000..d76db7e
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffResumeMapper.java
@@ -0,0 +1,19 @@
+package com.gkhy.exam.noncoalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.noncoalmine.entity.NcStaffResume;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * (NcStaffResume)表数据库访问层
+ *
+ * @author makejava
+ * @since 2023-09-18 14:06:43
+ */
+@Repository
+@Mapper
+public interface NcStaffResumeMapper extends BaseMapper<NcStaffResume> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffTrainMapper.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffTrainMapper.java
new file mode 100644
index 0000000..7a1e11f
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/NcStaffTrainMapper.java
@@ -0,0 +1,19 @@
+package com.gkhy.exam.noncoalmine.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.gkhy.exam.noncoalmine.entity.NcStaffTrain;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * (NcStaffTrain)表数据库访问层
+ *
+ * @author makejava
+ * @since 2023-09-18 10:00:25
+ */
+@Repository
+@Mapper
+public interface NcStaffTrainMapper extends BaseMapper<NcStaffTrain> {
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/WorkRegistrationMapper.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/WorkRegistrationMapper.java
index abe3809..143ed28 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/WorkRegistrationMapper.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/mapper/WorkRegistrationMapper.java
@@ -18,5 +18,6 @@
 public interface WorkRegistrationMapper extends BaseMapper<WorkRegistration> {
 
 	List<WorkRegistration> listByPage(@Param("query") WorkRegistrationQuery query);
+
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ExamSiteAddForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ExamSiteAddForm.java
index c194d48..11ca06b 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ExamSiteAddForm.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ExamSiteAddForm.java
@@ -1,5 +1,6 @@
 package com.gkhy.exam.noncoalmine.model.addForm;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotEmpty;
@@ -14,28 +15,37 @@
 @Data
 public class ExamSiteAddForm {
 
-	//机构名称
+	//考点名称
+	@ApiModelProperty(value = "考点名称",required = true)
 	@NotEmpty(message = "请输入考点名称")
 	private String siteName;
 	//地区id
+	@ApiModelProperty(value = "地区id",required = true)
 	@NotNull(message = "请选择地区")
 	private Long districtId;
 	//地址
+	@ApiModelProperty(value = "地址")
 	private String address;
 	//负责人
+	@ApiModelProperty(value = "负责人")
 	private String header;
 	//负责人电话
+	@ApiModelProperty(value = "负责人电话")
 	private String hphone;
 	//联系人
+	@ApiModelProperty(value = "联系人")
 	private String contact;
 	//联系人电话
+	@ApiModelProperty(value = "联系人电话")
 	private String cphone;
 	//是否为煤矿:0为非,1是
+	@ApiModelProperty(value = "是否为煤矿",required = true,notes = "0为非,1是")
 	@NotNull(message = "请选择是否为煤矿")
 	private Byte isCm;
 	//备注
+	@ApiModelProperty(value = "备注")
 	private String remark;
-
+	@ApiModelProperty(value = "机构id",required = true)
 	@NotNull(message = "请选择机构")
 	private Long institutionId;
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcExamineesAddForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcExamineesAddForm.java
new file mode 100644
index 0000000..b901ea5
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcExamineesAddForm.java
@@ -0,0 +1,36 @@
+package com.gkhy.exam.noncoalmine.model.addForm;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/18
+ * @time: 14:45
+ */
+@ApiModel("考试经历")
+@Data
+public class NcExamineesAddForm {
+	@ApiModelProperty(value = "主键")
+	private Long id;
+	//考试中心
+	@ApiModelProperty(value = "考试中心")
+	private String examCenter;
+	//科目
+	@ApiModelProperty(value = "科目")
+	private String subject;
+	//考试结果;0-通过;1-未通过
+	@ApiModelProperty(value = "考试结果;0-通过;1-未通过")
+	private String result;
+	//考试时间
+	@ApiModelProperty(value = "考试时间")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date examTime;
+
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffAddForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffAddForm.java
new file mode 100644
index 0000000..d6cd44b
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffAddForm.java
@@ -0,0 +1,55 @@
+package com.gkhy.exam.noncoalmine.model.addForm;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/18
+ * @time: 14:04
+ */
+@ApiModel(value = "人员新增实体")
+@Data
+public class NcStaffAddForm {
+	//姓名
+	@ApiModelProperty(value = "姓名",required = true)
+	@NotEmpty(message = "姓名不可为空")
+	private String name;
+	//性别
+	@ApiModelProperty(value = "性别",required = true)
+	@NotNull(message = "性别不可为空")
+	private String sex;
+	//民族
+	@ApiModelProperty(value = "民族",required = true)
+	@NotNull(message = "民族不可为空")
+	private String nationCode;
+	//身份证
+	@ApiModelProperty(value = "身份证",required = true)
+	@NotEmpty(message = "身份证号不可为空")
+	private String idCardNum;
+	//手机号
+	@ApiModelProperty(value = "手机号")
+	private String phone;
+	//最高学历
+	@ApiModelProperty(value = "最高学历")
+	private String highestEducation;
+	//证件照
+	@ApiModelProperty(value = "证件照")
+	private String photoPath;
+	//个人履历
+	@ApiModelProperty(value = "个人履历")
+	private List<NcStaffResumeAddForm> resumeList;
+	//培训经历
+	@ApiModelProperty(value = "培训经历")
+	private List<NcStaffTrainAddForm> trainList;
+	//考试经历
+	@ApiModelProperty(value = "考试经历")
+	private List<NcExamineesAddForm> examineeList;
+
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffResumeAddForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffResumeAddForm.java
new file mode 100644
index 0000000..388e28d
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffResumeAddForm.java
@@ -0,0 +1,34 @@
+package com.gkhy.exam.noncoalmine.model.addForm;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * (NcStaffResume)表实体类
+ *
+ * @author makejava
+ * @since 2023-09-18 14:06:43
+ */
+@ApiModel(value = "履历实体")
+@Data
+public class NcStaffResumeAddForm{
+    @ApiModelProperty(value = "主键")
+    private Long id;
+
+    //开始时间
+    @ApiModelProperty(value = "开始时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date startTime;
+    //结束时间
+    @ApiModelProperty(value = "结束时间")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date endTime;
+    //单位
+    @ApiModelProperty(value = "单位")
+    private String unit;
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffTrainAddForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffTrainAddForm.java
new file mode 100644
index 0000000..19a76f9
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/NcStaffTrainAddForm.java
@@ -0,0 +1,42 @@
+package com.gkhy.exam.noncoalmine.model.addForm;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/18
+ * @time: 14:27
+ */
+@ApiModel("培训实体")
+@Data
+public class NcStaffTrainAddForm {
+	@ApiModelProperty(value = "主键")
+	private Long id;
+	//开始时间
+	@ApiModelProperty(value = "开始时间")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date startTime;
+	//结束时间
+	@ApiModelProperty(value = "开始时间")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date endTime;
+	@ApiModelProperty(value = "培训机构id")
+	private Long trainInstitutionId;
+	//培训机构名称
+	@ApiModelProperty(value = "培训机构名称")
+	private String trainInstitutionName;
+	//计划名称
+	@ApiModelProperty(value = "计划名称")
+	private String examPlanName;
+	//所属批次(本系统中计划id)
+	@ApiModelProperty(value = "所属批次(本系统中计划id)")
+	private Long planId;
+	//科目
+	@ApiModelProperty(value = "科目")
+	private String subject;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/TrainingInstitutionAddForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/TrainingInstitutionAddForm.java
index a9f390b..5dab069 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/TrainingInstitutionAddForm.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/TrainingInstitutionAddForm.java
@@ -3,6 +3,8 @@
 import com.baomidou.mybatisplus.annotation.FieldFill;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotEmpty;
@@ -14,28 +16,38 @@
  * @date: 2023/9/13
  * @time: 16:46
  */
+@ApiModel(value = "机构新增实体")
 @Data
 public class TrainingInstitutionAddForm {
 	//机构名称
+	@ApiModelProperty(value = "机构名称",required = true)
 	@NotEmpty(message = "请输入机构名称")
 	private String institutionName;
 	//地区id
+	@ApiModelProperty(value = "地区id",required = true)
 	@NotNull(message = "请选择地区")
 	private Long districtId;
 	//地址
+	@ApiModelProperty(value = "地址")
 	private String address;
 	//负责人
+	@ApiModelProperty(value = "负责人")
 	private String header;
 	//负责人电话
+	@ApiModelProperty(value = "负责人电话")
 	private String hphone;
 	//联系人
+	@ApiModelProperty(value = "联系人")
 	private String contact;
 	//联系人电话
+	@ApiModelProperty(value = "联系人电话")
 	private String cphone;
 	//是否为煤矿:0为非,1是
+	@ApiModelProperty(value = "是否为煤矿:0为非,1是", required = true)
 	@NotNull(message = "请选择是否为煤矿")
 	private Byte isCm;
 	//备注
+	@ApiModelProperty(value = "备注")
 	private String remark;
 
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ViolationRegistrationAddForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ViolationRegistrationAddForm.java
index b2a892a..dfa9575 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ViolationRegistrationAddForm.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/ViolationRegistrationAddForm.java
@@ -1,6 +1,7 @@
 package com.gkhy.exam.noncoalmine.model.addForm;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotEmpty;
@@ -16,30 +17,40 @@
 @Data
 public class ViolationRegistrationAddForm {
 	//姓名
+	@ApiModelProperty(value = "姓名",required = true)
 	@NotEmpty(message = "请填写姓名")
 	private String name;
 	//身份证
+	@ApiModelProperty(value = "身份证",required = true)
 	@NotEmpty(message = "请填写身份证")
 	private String idCard;
 	//电子证号
+	@ApiModelProperty(value = "电子证号")
 	private String electNum;
 	//IC卡编号
+	@ApiModelProperty(value = "IC卡编号")
 	private String icNum;
 	//作业时间
+	@ApiModelProperty(value = "作业时间",required = true)
 	@NotNull(message = "请填写做业时间")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	private Date violationTime;
 	//违章附件
+	@ApiModelProperty(value = "违章附件")
 	private String violationPath;
 	//所属单位
+	@ApiModelProperty(value = "所属单位",required = true)
 	@NotEmpty(message = "请填写所属单位")
 	private String dept;
 	//操作类型id
+	@ApiModelProperty(value = "操作类型id",required = true)
 	@NotNull(message = "请选择操作类型")
 	private Long operateTypeId;
 	//是否为煤矿:0为非,1是
+	@ApiModelProperty(value = "是否为煤矿",required = true)
 	@NotNull(message = "是否为煤矿不可为空")
 	private Integer isCm;
 	//描述
+	@ApiModelProperty(value = "描述")
 	private String remark;
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/WorkRegistrationAddForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/WorkRegistrationAddForm.java
index 648cc3d..248086e 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/WorkRegistrationAddForm.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/addForm/WorkRegistrationAddForm.java
@@ -1,10 +1,10 @@
 package com.gkhy.exam.noncoalmine.model.addForm;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.fasterxml.jackson.annotation.JsonFormat;
-import lombok.Data;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.util.Date;
@@ -15,33 +15,42 @@
  * @date: 2023/9/11
  * @time: 17:09
  */
+@ApiModel(value = "作业登记实体")
 @Data
 public class WorkRegistrationAddForm {
-
 	//姓名
+	@ApiModelProperty(value = "姓名",required = true)
 	@NotEmpty(message = "请填写姓名")
 	private String name;
 	//身份证
+	@ApiModelProperty(value = "身份证",required = true)
 	@NotEmpty(message = "请填写身份证")
 	private String idCard;
 	//电子证号
+	@ApiModelProperty(value = "电子证号")
 	private String electNum;
 	//IC卡编号
+	@ApiModelProperty(value = "IC卡编号")
 	private String icNum;
 	//作业时间
+	@ApiModelProperty(value = "作业时间",required = true)
 	@NotNull(message = "请填写做业时间")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	private Date workTime;
 	//所属单位
+	@ApiModelProperty(value = "所属单位")
 	@NotEmpty(message = "请填写所属单位")
 	private String dept;
 	//操作类型id
+	@ApiModelProperty(value = "操作类型id",required = true)
 	@NotNull(message = "请选择操作类型")
 	private Long operateTypeId;
 	//是否为煤矿:0为非,1是
+	@ApiModelProperty(value = "是否为煤矿",required = true,notes = "0为非,1是")
 	@NotNull(message = "是否为煤矿不可为空")
-	private Integer isCm;
+	private Byte isCm;
 	//描述
+	@ApiModelProperty(value = "描述")
 	private String remark;
 
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/ExamSiteModForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/ExamSiteModForm.java
index e33e46b..6afcd8a 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/ExamSiteModForm.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/ExamSiteModForm.java
@@ -1,6 +1,10 @@
 package com.gkhy.exam.noncoalmine.model.modForm;
 
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 
@@ -10,32 +14,43 @@
  * @date: 2023/9/14
  * @time: 16:47
  */
+@ApiModel(value = "考点实体")
 @Data
 public class ExamSiteModForm {
+	@ApiModelProperty(value = "考点主键",required = true)
 	@NotNull(message = "考点主键不可为空")
-	private String siteId;
+	private Long siteId;
 	//考点名称
+	@ApiModelProperty(value = "考点名称",required = true)
 	@NotEmpty(message = "请输入考点名称")
 	private String siteName;
 	//地区id
+	@ApiModelProperty(value = "地区id",required = true)
 	@NotNull(message = "请选择地区")
 	private Long districtId;
 	//地址
+	@ApiModelProperty(value = "地址")
 	private String address;
 	//负责人
+	@ApiModelProperty(value = "负责人")
 	private String header;
 	//负责人电话
+	@ApiModelProperty(value = "负责人电话")
 	private String hphone;
 	//联系人
+	@ApiModelProperty(value = "联系人")
 	private String contact;
 	//联系人电话
+	@ApiModelProperty(value = "联系人电话")
 	private String cphone;
 	//是否为煤矿:0为非,1是
+	@ApiModelProperty(value = "是否为煤矿",required = true,notes = "0为非,1是")
 	@NotNull(message = "请选择是否为煤矿")
 	private Byte isCm;
 	//备注
+	@ApiModelProperty(value = "备注")
 	private String remark;
-
+	@ApiModelProperty(value = "机构id",required = true)
 	@NotNull(message = "请选择机构")
 	private Long institutionId;
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/NcStaffModForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/NcStaffModForm.java
new file mode 100644
index 0000000..b79bbb6
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/NcStaffModForm.java
@@ -0,0 +1,61 @@
+package com.gkhy.exam.noncoalmine.model.modForm;
+
+import com.gkhy.exam.noncoalmine.model.addForm.NcExamineesAddForm;
+import com.gkhy.exam.noncoalmine.model.addForm.NcStaffResumeAddForm;
+import com.gkhy.exam.noncoalmine.model.addForm.NcStaffTrainAddForm;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/18
+ * @time: 14:11
+ */
+@ApiModel(value = "人员实体")
+@Data
+public class NcStaffModForm {
+	@ApiModelProperty(value = "人员主键",required = true)
+	@NotNull(message = "人员主键不可为空")
+	private Long id;
+	//姓名
+	@ApiModelProperty(value = "姓名",required = true)
+	@NotEmpty(message = "姓名不可为空")
+	private String name;
+	//性别
+	@ApiModelProperty(value = "性别",required = true)
+	@NotNull(message = "性别不可为空")
+	private String sex;
+	//民族
+	@ApiModelProperty(value = "民族",required = true)
+	@NotNull(message = "民族不可为空")
+	private String nationCode;
+	//身份证
+	@ApiModelProperty(value = "身份证",required = true)
+	@NotEmpty(message = "身份证号不可为空")
+	private String idCardNum;
+	//手机号
+	@ApiModelProperty(value = "手机号")
+	private String phone;
+	//最高学历
+	@ApiModelProperty(value = "最高学历")
+	private String highestEducation;
+	//证件照
+	@ApiModelProperty(value = "证件照")
+	private String photoPath;
+	//个人履历
+	@ApiModelProperty(value = "个人履历")
+	private List<NcStaffResumeAddForm> resumeList;
+	//培训经历
+	@ApiModelProperty(value = "培训经历")
+	private List<NcStaffTrainAddForm> trainList;
+	//考试经历
+	@ApiModelProperty(value = "考试经历")
+	private List<NcExamineesAddForm> examineeList;
+
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/TrainingInstitutionModForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/TrainingInstitutionModForm.java
index 044acfb..f8e23ec 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/TrainingInstitutionModForm.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/TrainingInstitutionModForm.java
@@ -1,5 +1,6 @@
 package com.gkhy.exam.noncoalmine.model.modForm;
 
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotEmpty;
@@ -13,27 +14,37 @@
  */
 @Data
 public class TrainingInstitutionModForm {
+	@ApiModelProperty(value = "机构主键",required = true)
 	@NotNull(message = "机构主键不可为空")
 	private String institutionId;
 	//机构名称
+	@ApiModelProperty(value = "机构名称",required = true)
 	@NotEmpty(message = "请输入机构名称")
 	private String institutionName;
 	//地区id
+	@ApiModelProperty(value = "地区id",required = true)
 	@NotNull(message = "请选择地区")
 	private Long districtId;
 	//地址
+	@ApiModelProperty(value = "地址")
 	private String address;
 	//负责人
+	@ApiModelProperty(value = "负责人")
 	private String header;
 	//负责人电话
+	@ApiModelProperty(value = "负责人电话")
 	private String hphone;
 	//联系人
+	@ApiModelProperty(value = "联系人")
 	private String contact;
 	//联系人电话
+	@ApiModelProperty(value = "联系人电话")
 	private String cphone;
 	//是否为煤矿:0为非,1是
+	@ApiModelProperty(value = "是否为煤矿:0为非,1是", required = true)
 	@NotNull(message = "请选择是否为煤矿")
 	private Byte isCm;
 	//备注
+	@ApiModelProperty(value = "备注")
 	private String remark;
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/ViolationRegistrationModForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/ViolationRegistrationModForm.java
index 35828a9..440336f 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/ViolationRegistrationModForm.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/ViolationRegistrationModForm.java
@@ -1,6 +1,7 @@
 package com.gkhy.exam.noncoalmine.model.modForm;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import javax.validation.constraints.NotEmpty;
@@ -15,33 +16,44 @@
  */
 @Data
 public class ViolationRegistrationModForm {
+	@ApiModelProperty(value = "违章主键",required = true)
 	@NotNull(message = "违章主键不可为空")
 	private Long violationId;
 	//姓名
+	@ApiModelProperty(value = "姓名",required = true)
 	@NotEmpty(message = "请填写姓名")
 	private String name;
 	//身份证
+	@ApiModelProperty(value = "身份证",required = true)
 	@NotEmpty(message = "请填写身份证")
 	private String idCard;
 	//电子证号
+	@ApiModelProperty(value = "电子证号")
 	private String electNum;
 	//IC卡编号
+	@ApiModelProperty(value = "IC卡编号")
 	private String icNum;
 	//作业时间
+	@ApiModelProperty(value = "作业时间",required = true)
 	@NotNull(message = "请填写做业时间")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 	private Date violationTime;
 	//违章附件
+	@ApiModelProperty(value = "违章附件")
 	private String violationPath;
 	//所属单位
+	@ApiModelProperty(value = "所属单位",required = true)
 	@NotEmpty(message = "请填写所属单位")
 	private String dept;
 	//操作类型id
+	@ApiModelProperty(value = "操作类型id",required = true)
 	@NotNull(message = "请选择操作类型")
 	private Long operateTypeId;
 	//是否为煤矿:0为非,1是
+	@ApiModelProperty(value = "是否为煤矿",required = true)
 	@NotNull(message = "是否为煤矿不可为空")
 	private Integer isCm;
 	//描述
+	@ApiModelProperty(value = "描述")
 	private String remark;
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/WorkRegistrationModForm.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/WorkRegistrationModForm.java
index 0773022..59a3fa4 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/WorkRegistrationModForm.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/modForm/WorkRegistrationModForm.java
@@ -1,10 +1,8 @@
 package com.gkhy.exam.noncoalmine.model.modForm;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-
 import javax.validation.constraints.NotEmpty;
 import javax.validation.constraints.NotNull;
 import java.util.Date;
@@ -17,31 +15,41 @@
  */
 @Data
 public class WorkRegistrationModForm {
-	@NotNull(message = "做业主键不可为空")
+	@ApiModelProperty(value = "作业主键",required = true)
+	@NotNull(message = "作业主键不可为空")
 	private Long workId;
 	//姓名
+	@ApiModelProperty(value = "姓名",required = true)
 	@NotEmpty(message = "请填写姓名")
 	private String name;
 	//身份证
+	@ApiModelProperty(value = "身份证",required = true)
 	@NotEmpty(message = "请填写身份证")
 	private String idCard;
 	//电子证号
+	@ApiModelProperty(value = "电子证号")
 	private String electNum;
 	//IC卡编号
+	@ApiModelProperty(value = "IC卡编号")
 	private String icNum;
 	//作业时间
+	@ApiModelProperty(value = "作业时间",required = true)
 	@NotNull(message = "请填写做业时间")
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date violationTime;
+	private Date workTime;
 	//所属单位
+	@ApiModelProperty(value = "所属单位")
 	@NotEmpty(message = "请填写所属单位")
 	private String dept;
 	//操作类型id
+	@ApiModelProperty(value = "操作类型id",required = true)
 	@NotNull(message = "请选择操作类型")
 	private Long operateTypeId;
 	//是否为煤矿:0为非,1是
+	@ApiModelProperty(value = "是否为煤矿",required = true,notes = "0为非,1是")
 	@NotNull(message = "是否为煤矿不可为空")
-	private Integer isCm;
+	private Byte isCm;
 	//描述
+	@ApiModelProperty(value = "描述")
 	private String remark;
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/ExamSiteQuery.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/ExamSiteQuery.java
index b42d4e6..77a7ce8 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/ExamSiteQuery.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/ExamSiteQuery.java
@@ -1,5 +1,8 @@
 package com.gkhy.exam.noncoalmine.model.query;
 
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
@@ -8,12 +11,16 @@
  * @date: 2023/9/14
  * @time: 16:35
  */
+@ApiModel
 @Data
 public class ExamSiteQuery {
 	//机构名称
+	@ApiModelProperty(value = "机构名称")
 	private String siteName;
 	//是否为煤矿:0为非,1是
+	@ApiModelProperty(value = "是否为煤矿",notes = "0为非,1是")
 	private Byte isCm;
 	//区划编码
+	@ApiModelProperty(value = "区划编码")
 	private String districtCode;
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcCertQuery.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcCertQuery.java
new file mode 100644
index 0000000..0298e50
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcCertQuery.java
@@ -0,0 +1,27 @@
+package com.gkhy.exam.noncoalmine.model.query;
+
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/15
+ * @time: 17:20
+ */
+@ApiModel(value = "证书查询实体")
+@Data
+public class NcCertQuery {
+	@ApiModelProperty(value = "姓名")
+	private String name;
+
+	/** 证件类型代码 */
+	@ApiModelProperty(value = "证件类型代码")
+	private String idcardTypeCode;
+
+	/** 身份证件号 */
+	@ApiModelProperty(value = "身份证件号")
+	private String idcardNum;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcExamPlanQuery.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcExamPlanQuery.java
new file mode 100644
index 0000000..111c457
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcExamPlanQuery.java
@@ -0,0 +1,25 @@
+package com.gkhy.exam.noncoalmine.model.query;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/18
+ * @time: 13:25
+ */
+@ApiModel("考试计划查询实体")
+@Data
+public class NcExamPlanQuery {
+	@ApiModelProperty(value = "考试计划名称")
+	private String examPlanName;
+	@ApiModelProperty(value = "开始时间")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private String startTime;
+	@ApiModelProperty(value = "结束时间")
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private String endTime;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcStaffQuery.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcStaffQuery.java
new file mode 100644
index 0000000..11221a0
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/NcStaffQuery.java
@@ -0,0 +1,21 @@
+package com.gkhy.exam.noncoalmine.model.query;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/18
+ * @time: 14:00
+ */
+@ApiModel(value = "人员查询实体")
+@Data
+public class NcStaffQuery {
+	@ApiModelProperty(value = "姓名")
+	private String name;
+
+	@ApiModelProperty(value = "省份证")
+	private String idCardNum;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/TrainingInstitutionQuery.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/TrainingInstitutionQuery.java
index 9b324ae..bf0ba97 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/TrainingInstitutionQuery.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/TrainingInstitutionQuery.java
@@ -1,6 +1,9 @@
 package com.gkhy.exam.noncoalmine.model.query;
 
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
 
 /**
  * @email 1603559716@qq.com
@@ -8,12 +11,16 @@
  * @date: 2023/9/13
  * @time: 16:33
  */
+@ApiModel(value = "机构擦查询实体")
 @Data
 public class TrainingInstitutionQuery {
 	//机构名称
+	@ApiModelProperty(value = "机构名称")
 	private String institutionName;
 	//是否为煤矿:0为非,1是
+	@ApiModelProperty(value = "是否为煤矿:0为非,1是")
 	private Byte isCm;
 	//区划编码
+	@ApiModelProperty(value = "区划编码")
 	private String districtCode;
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/WorkRegistrationQuery.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/WorkRegistrationQuery.java
index 0bd6d96..13918c1 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/WorkRegistrationQuery.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/query/WorkRegistrationQuery.java
@@ -1,5 +1,7 @@
 package com.gkhy.exam.noncoalmine.model.query;
 
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 /**
@@ -9,7 +11,7 @@
  * @time: 16:48
  */
 @Data
-public class WorkRegistrationQuery {
+public class WorkRegistrationQuery{
 	private String dept;
 	private String name;
 	private String idCard;
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamPlanExaminee.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamPlanExaminee.java
new file mode 100644
index 0000000..d2fbd57
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamPlanExaminee.java
@@ -0,0 +1,19 @@
+package com.gkhy.exam.noncoalmine.model.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/20
+ * @time: 10:29
+ */
+@Data
+public class ExamPlanExaminee {
+	private String cardType;
+	private String cardNum;
+	private String name;
+	private String sex;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamPlanInfo.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamPlanInfo.java
new file mode 100644
index 0000000..3d9fd75
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamPlanInfo.java
@@ -0,0 +1,75 @@
+package com.gkhy.exam.noncoalmine.model.vo;
+
+import lombok.Data;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/20
+ * @time: 10:26
+ */
+@Data
+public class ExamPlanInfo<T> {
+	private Long id;
+	//考试计划名称
+	private String examPlanName;
+	//人员类型ID
+	private String personTypeCode;
+	//人员类型
+	private String personTypeName;
+	//作业类别(行业类别)ID:(字典:考核对象第二级)
+	private String jobTypeCode;
+	//作业类别(行业类别)   字典:考核对象第二级
+	private String jobTypeName;
+	//操作项目ID  字典:考核对象第三级 人员类型为特种作业操作人员时必填
+	private String operitemCode;
+	//操作项目   字典:考核对象第三级 人员类型为特种作业操作人员时必填
+	private String operitemName;
+	//考试类型 1:初训 2:复训
+	private String examType;
+	//计划考试人数
+	private Long plannedExamNumber;
+	//考试计划备案机关id
+	private String filingOrgId;
+	//考试计划备案机关名称
+	private String filingOrg;
+	//理论考试点代码
+	private String theoryExamPlaceCode;
+	//理论考试点名称
+	private String theoryExamPlaceName;
+	//理论考试实施方式 1:流水考试 2:固定场次
+	private String theoryExamUseMethod;
+	//理论考试时间(开始) 格式:yyyy-MM-dd HH:mm:ss
+	private Date theoryExamStartTime;
+	//理论考试时间(截止) 格式:yyyy-MM-dd HH:mm:ss
+	private Date theoryExamEndTime;
+	//理论考试是否当场补考
+	private String isTheoryMakeupImmediate;
+	//理论考试补考时间(开始) 格式:yyyy-MM-dd HH:mm:ss
+	private Date theoryExamMakeupStartTime;
+	//理论考试补考时间(截止) 格式:yyyy-MM-dd HH:mm:ss
+	private Date theoryExamMakeupEndTime;
+	//实操考试点代码
+	private String practicalExamPlaceCode;
+	//实操考试点名称
+	private String practicalExamPlaceName;
+	//实操考试方式 1:人工考评 2:实操设备考评
+	private String practicalExamMethod;
+	//实操考试时间(开始) 格式:yyyy-MM-dd HH:mm:ss
+	private Date practicalExamStartTime;
+	//实操考试时间(截止) 格式:yyyy-MM-dd HH:mm:ss
+	private Date practicalExamEndTime;
+	//实操考试是否当场补考
+	private String isPracticalMakeupImmediate;
+	//实操考试补考时间(开始) 格式:yyyy-MM-dd HH:mm:ss
+	private Date practicalExamMakeupStartTime;
+	//实操考试补考时间(截止) 格式:yyyy-MM-dd HH:mm:ss
+	private Date practicalExamMakeupEndTime;
+	/**
+	 * 考生信息
+	 */
+	private List<T> examinees;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamSiteVO.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamSiteVO.java
index c1ee0ef..a03c420 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamSiteVO.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ExamSiteVO.java
@@ -5,6 +5,7 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -42,9 +43,9 @@
 	private String createBy;
 	private String updateBy;
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date createTime;
+	private LocalDateTime createTime;
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date updateTime;
+	private LocalDateTime updateTime;
 	private String districtName;
 
 }
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/NcStaffVO.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/NcStaffVO.java
new file mode 100644
index 0000000..026ed88
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/NcStaffVO.java
@@ -0,0 +1,75 @@
+package com.gkhy.exam.noncoalmine.model.vo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.gkhy.exam.noncoalmine.model.addForm.NcExamineesAddForm;
+import com.gkhy.exam.noncoalmine.model.addForm.NcStaffResumeAddForm;
+import com.gkhy.exam.noncoalmine.model.addForm.NcStaffTrainAddForm;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/18
+ * @time: 14:03
+ */
+@Data
+public class NcStaffVO {
+	private Long id;
+	//姓名
+	private String name;
+	//性别
+	private String sex;
+	//民族
+	private String nationCode;
+	//身份证
+	private String idCardNum;
+	//手机号
+	private String phone;
+	//最高学历
+	private String highestEducation;
+	//证件照
+	private String photoPath;
+	//删除标志(0代表存在 2代表删除)
+	private Integer delFlag;
+
+	@TableField(fill = FieldFill.INSERT)
+	private String createBy;
+	@TableField(fill = FieldFill.INSERT_UPDATE)
+	private String updateBy;
+	@TableField(fill = FieldFill.INSERT)
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime createTime;
+	@TableField(fill = FieldFill.INSERT_UPDATE)
+	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+	private LocalDateTime updateTime;
+
+	//履历
+	private Object resumeList;
+	//培训
+	private Object trainList;
+	//考试
+	private Object examineeList;
+	//证书
+	private Object certList;
+	//违章
+	private Object violationList;
+	//作业
+	private Object workList;
+	//作业数量
+	private Integer workCount;
+	//违章数量
+	private Integer violationCount;
+	//证书数据量
+	private Integer certCount;
+
+
+
+
+
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ReturnCertVO.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ReturnCertVO.java
new file mode 100644
index 0000000..99e032f
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ReturnCertVO.java
@@ -0,0 +1,115 @@
+package com.gkhy.exam.noncoalmine.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/20
+ * @time: 16:03
+ */
+@Data
+public class ReturnCertVO {
+	/** 主键 */
+	private Long id;
+
+	/** 姓名 */
+	private String name;
+
+	/** 性别 */
+	private String sex;
+
+	/** 证件类型代码 */
+	private String idcardTypeCode;
+
+	/** 证件类型名称 */
+	private String idcardTypeName;
+
+	/** 身份证件号 */
+	private String idcardNum;
+
+	/** 档案编号 */
+	private String archivesNum;
+
+	/** 证号 */
+	private String certNum;
+
+	/** 证书状态 */
+	private String certStatus;
+
+	/** 人员类型代码 */
+	private String personTypeCode;
+
+	/** 人员类型名称 */
+	private String personTypeName;
+
+	/** 作业类别名称 */
+	private String jobTypeCode;
+
+	/** 作业类别名称 */
+	private String jobTypeName;
+
+	/** 操作项目代码 */
+	private String operItemCode;
+
+	/** 操作项目名称 */
+	private String operItemName;
+
+	/** 签发机关ID */
+	private Long issueOrgId;
+
+	/** 签发机关编码 */
+	private String issueOrgCode;
+
+	/** 初领日期 */
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date firstCertDate;
+
+	/** 应复审日期 */
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date shouldReviewDate;
+
+	/** 签发机关名称 */
+	private String issueOrgName;
+
+	/** 实际复审日期 */
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date reviewDate;
+
+	/** 有效开始时间 */
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date validBeginDate;
+
+	/** 有效结束时间 */
+	@JsonFormat(pattern = "yyyy-MM-dd")
+	private Date validEndDate;
+
+	/** 复审机关ID */
+	private Long reviewOrgId;
+
+	/** 复审机关编码 */
+	private String reviewOrgCode;
+
+	/** 复审机关名称 */
+	private String reviewOrgName;
+
+	/** 二维码字符串 */
+	private String qrcode;
+
+	/** 二维码图片路径 */
+	private String qrcodePath;
+
+	/** 创建人名称 */
+	private String createUserName;
+
+	/** 照片名称 */
+	private String imgName;
+
+	/** 照片数据,base64编码 */
+	private String imgData;
+	private String imgPath;
+
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ReturnVO.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ReturnVO.java
new file mode 100644
index 0000000..610e3f1
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ReturnVO.java
@@ -0,0 +1,16 @@
+package com.gkhy.exam.noncoalmine.model.vo;
+
+import lombok.Data;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/20
+ * @time: 10:57
+ */
+@Data
+public class ReturnVO<T> {
+	private Integer code;
+	private String msg;
+	private T data;
+}
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/TrainingInstitutionVO.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/TrainingInstitutionVO.java
index 25c40b4..737a4d4 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/TrainingInstitutionVO.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/TrainingInstitutionVO.java
@@ -5,6 +5,7 @@
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -39,9 +40,9 @@
 	private String createBy;
 	private String updateBy;
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date createTime;
+	private LocalDateTime createTime;
 	@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-	private Date updateTime;
+	private LocalDateTime updateTime;
 
 	private String districtName;
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ViolationRegistrationVO.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ViolationRegistrationVO.java
index c0d0c5b..3760af4 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ViolationRegistrationVO.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/ViolationRegistrationVO.java
@@ -6,6 +6,7 @@
 import lombok.Data;
 
 import java.io.Serializable;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -47,10 +48,10 @@
     private String updateBy;
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
+    private LocalDateTime createTime;
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date updateTime;
+    private LocalDateTime updateTime;
 
     private String qualificationType;
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/WorkRegistrationVO.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/WorkRegistrationVO.java
index b904495..eb7fb15 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/WorkRegistrationVO.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/model/vo/WorkRegistrationVO.java
@@ -1,13 +1,9 @@
 package com.gkhy.exam.noncoalmine.model.vo;
 
-import com.baomidou.mybatisplus.annotation.FieldFill;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableField;
-import com.baomidou.mybatisplus.annotation.TableId;
+
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
-
-import java.io.Serializable;
+import java.time.LocalDateTime;
 import java.util.Date;
 
 /**
@@ -42,7 +38,7 @@
 
     private String createBy;
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date createTime;
+    private LocalDateTime createTime;
 
     private String qualificationType;
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/ExamSiteService.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/ExamSiteService.java
index cfb78cc..b00fc77 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/ExamSiteService.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/ExamSiteService.java
@@ -22,5 +22,7 @@
 	int add(ExamSiteAddForm addForm);
 
 	int mod(ExamSiteModForm modForm);
+
+	void delBatch(List<Long> siteIds);
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcCertService.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcCertService.java
new file mode 100644
index 0000000..5baa03f
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcCertService.java
@@ -0,0 +1,24 @@
+package com.gkhy.exam.noncoalmine.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.noncoalmine.entity.NcCert;
+import com.gkhy.exam.noncoalmine.model.query.NcCertQuery;
+import com.ruoyi.common.core.domain.AjaxResult;
+
+import java.util.List;
+
+/**
+ * (NcCert)表服务接口
+ *
+ * @author makejava
+ * @since 2023-09-15 17:14:35
+ */
+public interface NcCertService extends IService<NcCert> {
+
+	List<NcCert> getList(NcCertQuery query);
+
+	void syncCert(NcCertQuery query);
+
+	List<NcCert> getByIdCard(String idCard);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcExamPlanService.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcExamPlanService.java
new file mode 100644
index 0000000..af13cd2
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcExamPlanService.java
@@ -0,0 +1,21 @@
+package com.gkhy.exam.noncoalmine.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.noncoalmine.entity.NcExamPlan;
+import com.gkhy.exam.noncoalmine.model.query.NcExamPlanQuery;
+
+import java.util.List;
+
+/**
+ * (NcExamPlan)表服务接口
+ *
+ * @author makejava
+ * @since 2023-09-18 13:21:55
+ */
+public interface NcExamPlanService extends IService<NcExamPlan> {
+
+	List<NcExamPlan> selectNcExamPlanList(NcExamPlanQuery query);
+
+	void syncExamPlan();
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcExamineesService.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcExamineesService.java
new file mode 100644
index 0000000..a8bbdab
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcExamineesService.java
@@ -0,0 +1,20 @@
+package com.gkhy.exam.noncoalmine.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.noncoalmine.entity.NcExaminees;
+
+import java.util.List;
+
+/**
+ * (NcExaminees)表服务接口
+ *
+ * @author makejava
+ * @since 2023-09-18 10:01:22
+ */
+public interface NcExamineesService extends IService<NcExaminees> {
+
+	List<NcExaminees> getByStaffid(Long stuffId);
+
+	List<NcExaminees> getByIdCard(String idCard);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffResumeService.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffResumeService.java
new file mode 100644
index 0000000..2b65882
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffResumeService.java
@@ -0,0 +1,18 @@
+package com.gkhy.exam.noncoalmine.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.noncoalmine.entity.NcStaffResume;
+
+import java.util.List;
+
+/**
+ * (NcStaffResume)表服务接口
+ *
+ * @author makejava
+ * @since 2023-09-18 14:06:43
+ */
+public interface NcStaffResumeService extends IService<NcStaffResume> {
+
+	List<NcStaffResume> getByStaffId(Long stuffId);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffService.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffService.java
new file mode 100644
index 0000000..0a36011
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffService.java
@@ -0,0 +1,30 @@
+package com.gkhy.exam.noncoalmine.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.noncoalmine.entity.NcStaff;
+import com.gkhy.exam.noncoalmine.model.addForm.NcStaffAddForm;
+import com.gkhy.exam.noncoalmine.model.modForm.NcStaffModForm;
+import com.gkhy.exam.noncoalmine.model.query.NcStaffQuery;
+import com.gkhy.exam.noncoalmine.model.vo.NcStaffVO;
+
+import java.util.List;
+
+/**
+ * (NcStaff)表服务接口
+ *
+ * @author makejava
+ * @since 2023-09-18 09:59:58
+ */
+public interface NcStaffService extends IService<NcStaff> {
+
+	List<NcStaffVO> selectStaffList(NcStaffQuery query);
+
+	int add(NcStaffAddForm addForm);
+
+	void mod(NcStaffModForm modForm);
+
+	NcStaff getByIdCard(String IdCard);
+
+	void delBatch(List<Long> staffIds);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffTrainService.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffTrainService.java
new file mode 100644
index 0000000..c9f70fc
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/NcStaffTrainService.java
@@ -0,0 +1,18 @@
+package com.gkhy.exam.noncoalmine.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.gkhy.exam.noncoalmine.entity.NcStaffTrain;
+
+import java.util.List;
+
+/**
+ * (NcStaffTrain)表服务接口
+ *
+ * @author makejava
+ * @since 2023-09-18 10:00:25
+ */
+public interface NcStaffTrainService extends IService<NcStaffTrain> {
+
+	List<NcStaffTrain> getByStaffId(Long staffId);
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/TrainingInstitutionService.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/TrainingInstitutionService.java
index e7673c1..a38eebe 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/TrainingInstitutionService.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/TrainingInstitutionService.java
@@ -22,5 +22,7 @@
 	int mod(TrainingInstitutionModForm modForm);
 
 	int add(TrainingInstitutionAddForm addForm);
+
+	void delBatch(List<Long> institutionIds);
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/ViolationRegistrationService.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/ViolationRegistrationService.java
index 53828c7..869e2ac 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/ViolationRegistrationService.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/ViolationRegistrationService.java
@@ -23,5 +23,7 @@
 
 	int mod(ViolationRegistrationModForm modForm);
 	List<ViolationRegistrationVO> getByIdCard(String idCard,byte isCm);
+
+	void delBatch(List<Long> violationIds);
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/WorkRegistrationService.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/WorkRegistrationService.java
index 35fb49f..574127d 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/WorkRegistrationService.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/WorkRegistrationService.java
@@ -24,5 +24,7 @@
 	int mod(WorkRegistrationModForm modForm);
 
 	List<WorkRegistrationVO> getByIdCard(String idCard, byte isCm);
+
+	void delBatch(List<Long> workIds);
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ExamSiteServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ExamSiteServiceImpl.java
index 907d442..203fcff 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ExamSiteServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ExamSiteServiceImpl.java
@@ -1,7 +1,9 @@
 package com.gkhy.exam.noncoalmine.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.exam.noncoalmine.entity.ExamSite;
+import com.gkhy.exam.noncoalmine.entity.WorkRegistration;
 import com.gkhy.exam.noncoalmine.mapper.ExamSiteMapper;
 import com.gkhy.exam.noncoalmine.model.addForm.ExamSiteAddForm;
 import com.gkhy.exam.noncoalmine.model.modForm.ExamSiteModForm;
@@ -78,5 +80,13 @@
 		BeanUtils.copyProperties(modForm,examSite);
 		return baseMapper.updateById(examSite);
 	}
+
+	@Override
+	public void delBatch(List<Long> siteIds) {
+		UpdateWrapper<ExamSite> updateWrapper = new UpdateWrapper<>();
+		updateWrapper.in("site_id",siteIds)
+				.set("del_flag",(byte)2);
+		this.update(updateWrapper);
+	}
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcCertServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcCertServiceImpl.java
new file mode 100644
index 0000000..cb13f60
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcCertServiceImpl.java
@@ -0,0 +1,95 @@
+package com.gkhy.exam.noncoalmine.service.impl;
+
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.TypeReference;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.noncoalmine.entity.NcCert;
+import com.gkhy.exam.noncoalmine.mapper.NcCertMapper;
+import com.gkhy.exam.noncoalmine.model.query.NcCertQuery;
+import com.gkhy.exam.noncoalmine.model.vo.ExamPlanExaminee;
+import com.gkhy.exam.noncoalmine.model.vo.ExamPlanInfo;
+import com.gkhy.exam.noncoalmine.model.vo.ReturnCertVO;
+import com.gkhy.exam.noncoalmine.model.vo.ReturnVO;
+import com.gkhy.exam.noncoalmine.service.NcCertService;
+import com.ruoyi.common.enums.HttpMethod;
+import com.ruoyi.common.exception.ServiceException;
+import com.ruoyi.common.signature.SignatureUtils;
+import com.ruoyi.common.utils.StringUtils;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+
+/**
+ * (NcCert)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-09-15 17:14:35
+ */
+@Service("ncCertService")
+public class NcCertServiceImpl extends ServiceImpl<NcCertMapper, NcCert> implements NcCertService {
+	@Autowired
+	private NcCertMapper ncCertMapper;
+
+	@Override
+	public List<NcCert> getList(NcCertQuery query) {
+		List<NcCert> ncCerts = ncCertMapper.selectList(new LambdaQueryWrapper<NcCert>()
+				.eq(NcCert::getDelFlag, (byte) 0)
+				.eq(StringUtils.isNotEmpty(query.getName()), NcCert::getName, query.getName())
+		);
+		return ncCerts;
+	}
+
+	@Override
+	public void syncCert(NcCertQuery query) {
+		if(StringUtils.isEmpty(query.getIdcardNum())){
+			throw new ServiceException("身份证号不能为空");
+		}
+		query.setIdcardTypeCode("01");
+		String bodyParam = JSON.toJSONString(query);
+
+		String json = SignatureUtils.getObject(bodyParam, "/api/v1/cert/query", HttpMethod.POST);
+		ReturnVO<List<ReturnCertVO>> returnVo = JSONObject.parseObject(json, new TypeReference<ReturnVO<List<ReturnCertVO>>>() {});
+		if(returnVo.getCode() == null || returnVo.getCode() != 200){
+			throw new ServiceException("拉取数据异常");
+		}
+		if(returnVo.getData() == null){
+			throw new ServiceException("无数据可更新");
+		}
+		//同步数据
+		List<ReturnCertVO> returnCertVOList = returnVo.getData();
+		if(!CollectionUtils.isEmpty(returnCertVOList)){
+			for (ReturnCertVO returnCertVo : returnCertVOList) {
+				NcCert ncCert = new NcCert();
+				BeanUtils.copyProperties(returnCertVo,ncCert);
+				ncCert.setCertId(returnCertVo.getId());
+				ncCert.setId(null);
+				ncCert.setDelFlag((byte) 0);
+				if(!isExsit(returnCertVo.getId())){
+					baseMapper.insert(ncCert);
+				}
+			}
+		}
+	}
+
+	@Override
+	public List<NcCert> getByIdCard(String idCard) {
+		List<NcCert> ncCerts = baseMapper.selectList(new LambdaQueryWrapper<NcCert>().eq(NcCert::getDelFlag, (byte) 0)
+				.eq(NcCert::getIdcardNum, idCard));
+		return ncCerts;
+	}
+	private boolean isExsit(Long certId){
+		NcCert ncCert = baseMapper.selectOne(new LambdaQueryWrapper<NcCert>()
+				.eq(NcCert::getDelFlag, (byte) 0)
+				.eq(NcCert::getCertId, certId));
+		if (ncCert != null){
+			return true;
+		}
+		return false;
+	}
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcExamPlanServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcExamPlanServiceImpl.java
new file mode 100644
index 0000000..6621288
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcExamPlanServiceImpl.java
@@ -0,0 +1,125 @@
+package com.gkhy.exam.noncoalmine.service.impl;
+
+import com.alibaba.fastjson2.JSONObject;
+import com.alibaba.fastjson2.TypeReference;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.noncoalmine.entity.NcExaminees;
+import com.gkhy.exam.noncoalmine.entity.NcStaff;
+import com.gkhy.exam.noncoalmine.mapper.NcExamPlanMapper;
+import com.gkhy.exam.noncoalmine.entity.NcExamPlan;
+import com.gkhy.exam.noncoalmine.model.query.NcExamPlanQuery;
+import com.gkhy.exam.noncoalmine.model.vo.ExamPlanExaminee;
+import com.gkhy.exam.noncoalmine.model.vo.ExamPlanInfo;
+import com.gkhy.exam.noncoalmine.model.vo.ReturnVO;
+import com.gkhy.exam.noncoalmine.service.NcExamPlanService;
+import com.gkhy.exam.noncoalmine.service.NcExamineesService;
+import com.gkhy.exam.noncoalmine.service.NcStaffService;
+import com.ruoyi.common.enums.HttpMethod;
+import com.ruoyi.common.exception.ServiceException;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.io.UnsupportedEncodingException;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+import static com.ruoyi.common.signature.SignatureUtils.getObject;
+
+/**
+ * (NcExamPlan)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-09-18 13:21:55
+ */
+@Service("ncExamPlanService")
+public class NcExamPlanServiceImpl extends ServiceImpl<NcExamPlanMapper, NcExamPlan> implements NcExamPlanService {
+	@Autowired
+	private NcExamPlanMapper ncExamPlanMapper;
+
+	@Autowired
+	private NcStaffService ncStaffService;
+	@Autowired
+	private NcExamineesService ncExamineesService;
+	@Override
+	public List<NcExamPlan> selectNcExamPlanList(NcExamPlanQuery query) {
+		return ncExamPlanMapper.selectNcExamPlanList(query);
+	}
+	@Transactional
+	@Override
+	public void syncExamPlan() {
+
+		String startTime = "2018-05-25 00:00:00";
+		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+		String endTime = sdf.format(new Date());
+		try {
+			startTime = URLEncoder.encode(startTime, "UTF-8");
+			endTime = URLEncoder.encode(endTime, "UTF-8");
+		} catch (UnsupportedEncodingException e) {
+			throw new RuntimeException(e.getCause());
+		}
+		String getQueryParam = "startTime=" + startTime + "&endTime=" + endTime;
+		String json = getObject(getQueryParam,"/api/v1/exam/plan/enroll/download", HttpMethod.GET);
+		ReturnVO<List<ExamPlanInfo<ExamPlanExaminee>>> returnVo = JSONObject.parseObject(json, new TypeReference<ReturnVO<List<ExamPlanInfo<ExamPlanExaminee>>>>() {});
+		if(returnVo.getCode() == null || returnVo.getCode() != 200){
+			throw new ServiceException("拉取数据异常");
+		}
+		if(returnVo.getData() == null){
+			throw new ServiceException("无数据可更新");
+		}
+		List<ExamPlanInfo<ExamPlanExaminee>> data = returnVo.getData();
+		for (ExamPlanInfo examPlanInfo : data) {
+			NcExamPlan ncExamPlan = new NcExamPlan();
+			BeanUtils.copyProperties(examPlanInfo,ncExamPlan);
+			ncExamPlan.setDelFlag((byte)0);
+			ncExamPlan.setId(null);
+			ncExamPlan.setExamPlanId(examPlanInfo.getId());
+			//判断是否已同步
+			if(!this.isExsit(examPlanInfo.getId())){
+				//插入
+				ncExamPlanMapper.insert(ncExamPlan);
+				List<ExamPlanExaminee> examPlanExaminees = examPlanInfo.getExaminees();
+				if(!CollectionUtils.isEmpty(examPlanInfo.getExaminees())){
+					for (ExamPlanExaminee examPlanExaminee : examPlanExaminees) {
+						NcExaminees ncExaminees = new NcExaminees();
+						ncExaminees.setExamPlanId(examPlanInfo.getId());
+						ncExaminees.setDelFlag((byte)0);
+						ncExaminees.setCardNum(examPlanExaminee.getCardNum());
+						ncExaminees.setCardType(examPlanExaminee.getCardType());
+						ncExaminees.setName(examPlanExaminee.getName());
+						//判断人员是否存在
+						NcStaff ncStaff = ncStaffService.getByIdCard(examPlanExaminee.getCardNum());
+						if(ncStaff == null){
+							//插入staff表
+							ncStaff = new NcStaff();
+							ncStaff.setName(examPlanExaminee.getName());
+							ncStaff.setSex(examPlanExaminee.getSex());
+							ncStaff.setIdCardNum(examPlanExaminee.getCardNum());
+							ncStaff.setDelFlag((byte)0);
+							ncStaffService.save(ncStaff);
+
+						}
+						ncExaminees.setStaffId(ncStaff.getId());
+						ncExamineesService.save(ncExaminees);
+					}
+
+				}
+			}
+		}
+	}
+	public boolean isExsit(Long explanId){
+		NcExamPlan ncExamPlan = ncExamPlanMapper.selectOne(new LambdaQueryWrapper<NcExamPlan>()
+				.eq(NcExamPlan::getDelFlag, (byte) 0)
+				.eq(NcExamPlan::getExamPlanId, explanId));
+		if(ncExamPlan != null){
+			return true;
+		}
+		return false;
+	}
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcExamineesServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcExamineesServiceImpl.java
new file mode 100644
index 0000000..31b5b4c
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcExamineesServiceImpl.java
@@ -0,0 +1,33 @@
+package com.gkhy.exam.noncoalmine.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.noncoalmine.entity.NcExaminees;
+import com.gkhy.exam.noncoalmine.mapper.NcExamineesMapper;
+import com.gkhy.exam.noncoalmine.service.NcExamineesService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * (NcExaminees)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-09-18 10:01:22
+ */
+@Service("ncExamineesService")
+public class NcExamineesServiceImpl extends ServiceImpl<NcExamineesMapper, NcExaminees> implements NcExamineesService {
+
+	@Override
+	public List<NcExaminees> getByStaffid(Long stuffId) {
+		List<NcExaminees> examineesList = baseMapper.selectList(new LambdaQueryWrapper<NcExaminees>().eq(NcExaminees::getDelFlag, (byte) 0).eq(NcExaminees::getStaffId, stuffId));
+		return examineesList;
+	}
+
+	@Override
+	public List<NcExaminees> getByIdCard(String idCard) {
+		List<NcExaminees> examineesList = baseMapper.selectList(new LambdaQueryWrapper<NcExaminees>().eq(NcExaminees::getDelFlag, (byte) 0).eq(NcExaminees::getCardNum, idCard));
+		return examineesList;
+	}
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffResumeServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffResumeServiceImpl.java
new file mode 100644
index 0000000..f5e05ca
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffResumeServiceImpl.java
@@ -0,0 +1,30 @@
+package com.gkhy.exam.noncoalmine.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.noncoalmine.entity.NcStaffResume;
+import com.gkhy.exam.noncoalmine.mapper.NcStaffResumeMapper;
+import com.gkhy.exam.noncoalmine.service.NcStaffResumeService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * (NcStaffResume)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-09-18 14:06:43
+ */
+@Service("ncStaffResumeService")
+public class NcStaffResumeServiceImpl extends ServiceImpl<NcStaffResumeMapper, NcStaffResume> implements NcStaffResumeService {
+
+	@Override
+	public List<NcStaffResume> getByStaffId(Long stuffId) {
+		List<NcStaffResume> resumeList = baseMapper.selectList(new LambdaQueryWrapper<NcStaffResume>()
+				.eq(NcStaffResume::getDelFlag, (byte)0)
+				.eq(NcStaffResume::getStaffId, stuffId));
+
+		return resumeList;
+	}
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffServiceImpl.java
new file mode 100644
index 0000000..30cd40f
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffServiceImpl.java
@@ -0,0 +1,337 @@
+package com.gkhy.exam.noncoalmine.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.noncoalmine.entity.*;
+import com.gkhy.exam.noncoalmine.mapper.NcStaffMapper;
+import com.gkhy.exam.noncoalmine.model.addForm.NcExamineesAddForm;
+import com.gkhy.exam.noncoalmine.model.addForm.NcStaffAddForm;
+import com.gkhy.exam.noncoalmine.model.addForm.NcStaffResumeAddForm;
+import com.gkhy.exam.noncoalmine.model.addForm.NcStaffTrainAddForm;
+import com.gkhy.exam.noncoalmine.model.modForm.NcStaffModForm;
+import com.gkhy.exam.noncoalmine.model.query.NcStaffQuery;
+import com.gkhy.exam.noncoalmine.model.vo.NcStaffVO;
+import com.gkhy.exam.noncoalmine.model.vo.ViolationRegistrationVO;
+import com.gkhy.exam.noncoalmine.model.vo.WorkRegistrationVO;
+import com.gkhy.exam.noncoalmine.service.*;
+import com.ruoyi.common.exception.ServiceException;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * (NcStaff)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-09-18 09:59:58
+ */
+@Service("ncStaffService")
+public class NcStaffServiceImpl extends ServiceImpl<NcStaffMapper, NcStaff> implements NcStaffService {
+	@Autowired
+	private NcStaffMapper ncStaffMapper;
+	@Autowired
+	private NcStaffResumeService ncStaffResumeService;
+	@Autowired
+	private NcStaffTrainService ncStaffTrainService;
+	@Autowired
+	private NcExamineesService ncExamineesService;
+	@Autowired
+	private ViolationRegistrationService violationRegistrationService;
+	@Autowired
+	private WorkRegistrationService workRegistrationService;
+	@Autowired
+	private NcCertService ncCertService;
+	@Override
+	public List<NcStaffVO> selectStaffList(NcStaffQuery query) {
+		List<NcStaffVO> staffVOList = ncStaffMapper.getList(query);
+		for (NcStaffVO ncStaffVO : staffVOList) {
+			List<NcStaffResume> resumeList = ncStaffResumeService.getByStaffId(ncStaffVO.getId());
+			List<NcStaffTrain> trainList = ncStaffTrainService.getByStaffId(ncStaffVO.getId());
+			List<NcExaminees> examineesList = ncExamineesService.getByIdCard(ncStaffVO.getIdCardNum());
+			List<ViolationRegistrationVO> violationList = violationRegistrationService.getByIdCard(ncStaffVO.getIdCardNum(), (byte) 0);
+			List<WorkRegistrationVO> workList = workRegistrationService.getByIdCard(ncStaffVO.getIdCardNum(), (byte) 0);
+			List<NcCert> certList = ncCertService.getByIdCard(ncStaffVO.getIdCardNum());
+			ncStaffVO.setResumeList(resumeList);
+			ncStaffVO.setTrainList(trainList);
+			ncStaffVO.setExamineeList(examineesList);
+			ncStaffVO.setViolationList(violationList);
+			ncStaffVO.setWorkList(workList);
+			ncStaffVO.setCertList(certList);
+			ncStaffVO.setCertCount(certList.size());
+			ncStaffVO.setViolationCount(violationList.size());
+			ncStaffVO.setWorkCount(workList.size());
+		}
+		return staffVOList;
+	}
+
+	/**
+	 * 新增
+	 * @param addForm
+	 * @return
+	 */
+	@Transactional
+	@Override
+	public int add(NcStaffAddForm addForm) {
+		if(isExist(addForm.getIdCardNum(),null)){
+			throw new ServiceException("人员已存在");
+		}
+		NcStaff ncStaff = new NcStaff();
+		BeanUtils.copyProperties(addForm,ncStaff);
+		ncStaff.setDelFlag((byte) 0);
+		//插入人员
+		int i = ncStaffMapper.insert(ncStaff);
+		//插入个人履历
+		saveBatchResume(addForm.getResumeList(),ncStaff.getId());
+		//插入培训经历
+		saveBatchTrain(addForm.getTrainList(),ncStaff);
+		//考试经历
+		saveBatchExam(addForm.getExamineeList(),ncStaff);
+		return i;
+	}
+
+	/**
+	 * 修改
+	 * @param modForm
+	 */
+	@Transactional
+	@Override
+	public void mod(NcStaffModForm modForm) {
+		if(isExist(modForm.getIdCardNum(),modForm.getId())){
+			throw new ServiceException("人员已存在");
+		}
+		NcStaff ncStaff = new NcStaff();
+		BeanUtils.copyProperties(modForm,ncStaff);
+		//修改人员
+		ncStaffMapper.updateById(ncStaff);
+		//个人履历
+		updateBatchResume(modForm.getResumeList(),ncStaff);
+		//插入培训经历
+		updateBatchTrain(modForm.getTrainList(),ncStaff);
+		//考试经历
+		updateBatchExam(modForm.getExamineeList(),ncStaff);
+
+	}
+	private boolean isExist(String idCard,Long stuffId){
+		NcStaff ncStaff = baseMapper.selectOne(new LambdaQueryWrapper<NcStaff>()
+				.eq(NcStaff::getDelFlag, (byte) 0)
+				.eq(NcStaff::getIdCardNum, idCard)
+				.ne(stuffId != null,NcStaff::getId,stuffId));
+		if(ncStaff != null){
+			return true;
+		}
+		return false;
+
+	}
+
+	@Override
+	public NcStaff getByIdCard(String idCard) {
+		NcStaff ncStaff = baseMapper.selectOne(new LambdaQueryWrapper<NcStaff>()
+				.eq(NcStaff::getDelFlag, (byte) 0)
+				.eq(NcStaff::getIdCardNum, idCard));
+		return ncStaff;
+	}
+
+	@Override
+	public void delBatch(List<Long> staffIds) {
+		UpdateWrapper<NcStaff> updateWrapper = new UpdateWrapper<>();
+		updateWrapper.in("id",staffIds)
+				.set("del_flag",(byte)2);
+		this.update(updateWrapper);
+	}
+
+	//修改履历
+	public void updateBatchResume(List<NcStaffResumeAddForm> resumeFormList,NcStaff ncStaff){
+		if(!CollectionUtils.isEmpty(resumeFormList)){
+			//历史履历
+			List<NcStaffResume> oldResumeList = ncStaffResumeService.list(new LambdaQueryWrapper<NcStaffResume>()
+					.eq(NcStaffResume::getDelFlag, (byte) 0)
+					.eq(NcStaffResume::getStaffId, ncStaff.getId()));
+			if(CollectionUtils.isEmpty(oldResumeList)){
+				//新增
+				saveBatchResume(resumeFormList, ncStaff.getId());
+			}else {
+
+				//新增
+				List<NcStaffResumeAddForm> addResumeList = resumeFormList
+						.stream()
+						.filter(resume -> resume.getId() == null)
+						.collect(Collectors.toList());
+				saveBatchResume(addResumeList, ncStaff.getId());
+				//修改
+				List<NcStaffResumeAddForm> modResumeList = resumeFormList
+						.stream()
+						.filter(resume -> resume.getId() != null)
+						.collect(Collectors.toList());
+				if(!CollectionUtils.isEmpty(modResumeList)){
+					List<NcStaffResume> collect = modResumeList.stream().map(modResume -> {
+						NcStaffResume ncStaffResume = new NcStaffResume();
+						BeanUtils.copyProperties(modResume, ncStaffResume);
+						return ncStaffResume;
+					}).collect(Collectors.toList());
+					ncStaffResumeService.updateBatchById(collect);
+				}
+				//删除
+				for (NcStaffResume ncStaffResume : oldResumeList) {
+					List<NcStaffResumeAddForm> selectList = resumeFormList
+							.stream()
+							.filter(resumeAddForm -> resumeAddForm.getId() != null && resumeAddForm.getId().equals(ncStaffResume.getId()))
+							.collect(Collectors.toList());
+					if(selectList.size() == 0){
+						ncStaffResume.setDelFlag((byte) 2);
+						ncStaffResumeService.updateById(ncStaffResume);
+					}
+				}
+			}
+		}
+	}
+	//插入履历
+	private void saveBatchResume(List<NcStaffResumeAddForm> resumeAddFormList, Long stuffId) {
+		if(!CollectionUtils.isEmpty(resumeAddFormList)){
+			List<NcStaffResume> resumeList = resumeAddFormList.stream().map(resume -> {
+				NcStaffResume ncStaffResume = new NcStaffResume();
+				BeanUtils.copyProperties(resume, ncStaffResume);
+				ncStaffResume.setStaffId(stuffId);
+				ncStaffResume.setDelFlag((byte) 0);
+				return ncStaffResume;
+			}).collect(Collectors.toList());
+			ncStaffResumeService.saveBatch(resumeList);
+		}
+	}
+	//修改考试经历
+	public void updateBatchTrain(List<NcStaffTrainAddForm> trainFormList,NcStaff ncStaff){
+		if(!CollectionUtils.isEmpty(trainFormList)){
+			//历史履历
+			List<NcStaffTrain> oldList = ncStaffTrainService.list(new LambdaQueryWrapper<NcStaffTrain>()
+					.eq(NcStaffTrain::getDelFlag, (byte) 0)
+					.eq(NcStaffTrain::getStaffId, ncStaff.getId()));
+			if(CollectionUtils.isEmpty(oldList)){
+				//新增
+				saveBatchTrain(trainFormList, ncStaff);
+			}else {
+				//新增
+				List<NcStaffTrainAddForm> addList = trainFormList
+						.stream()
+						.filter(resume -> resume.getId() == null)
+						.collect(Collectors.toList());
+				saveBatchTrain(addList, ncStaff);
+				//修改
+				List<NcStaffTrainAddForm> modList = trainFormList
+						.stream()
+						.filter(resume -> resume.getId() != null)
+						.collect(Collectors.toList());
+				if(!CollectionUtils.isEmpty(modList)){
+					List<NcStaffTrain> collect = modList.stream().map(modTrain -> {
+						NcStaffTrain ncStaffTrain = new NcStaffTrain();
+						BeanUtils.copyProperties(modTrain, ncStaffTrain);
+						ncStaffTrain.setIdCardNum(ncStaff.getIdCardNum());
+						ncStaffTrain.setName(ncStaff.getName());
+						return ncStaffTrain;
+					}).collect(Collectors.toList());
+					ncStaffTrainService.updateBatchById(collect);
+				}
+				//删除
+				for (NcStaffTrain ncStaffTrain : oldList) {
+					List<NcStaffTrainAddForm> selectList = trainFormList
+							.stream()
+							.filter(trainForm -> trainForm.getId() != null && trainForm.getId().equals(ncStaffTrain.getId()))
+							.collect(Collectors.toList());
+					if(selectList.size() == 0){
+						ncStaffTrain.setDelFlag((byte) 2);
+						ncStaffTrainService.updateById(ncStaffTrain);
+					}
+				}
+			}
+		}
+	}
+
+	//插入考试经历
+	private void saveBatchTrain(List<NcStaffTrainAddForm> trainAddFormList, NcStaff ncStaff) {
+		if(!CollectionUtils.isEmpty(trainAddFormList)){
+			List<NcStaffTrain> trainList = trainAddFormList.stream().map(train -> {
+				NcStaffTrain ncStaffTrain = new NcStaffTrain();
+				BeanUtils.copyProperties(train, ncStaffTrain);
+				ncStaffTrain.setStaffId(ncStaff.getId());
+				ncStaffTrain.setIdCardNum(ncStaff.getIdCardNum());
+				ncStaffTrain.setName(ncStaff.getName());
+				ncStaffTrain.setDelFlag((byte) 0);
+				return ncStaffTrain;
+			}).collect(Collectors.toList());
+			ncStaffTrainService.saveBatch(trainList);
+		}
+	}
+	//修改培训经历
+	public void updateBatchExam(List<NcExamineesAddForm> examFormList,NcStaff ncStaff){
+		if(!CollectionUtils.isEmpty(examFormList)){
+			//历史履历
+			List<NcExaminees> oldList = ncExamineesService.list(new LambdaQueryWrapper<NcExaminees>()
+					.eq(NcExaminees::getDelFlag, (byte) 0)
+					.eq(NcExaminees::getStaffId, ncStaff.getId()));
+			if(CollectionUtils.isEmpty(oldList)){
+				//新增
+				saveBatchExam(examFormList, ncStaff);
+			}else {
+				//新增
+				List<NcExamineesAddForm> addList = examFormList
+						.stream()
+						.filter(resume -> resume.getId() == null)
+						.collect(Collectors.toList());
+				saveBatchExam(addList, ncStaff);
+				//修改
+				List<NcExamineesAddForm> modList = examFormList
+						.stream()
+						.filter(resume -> resume.getId() != null)
+						.collect(Collectors.toList());
+				if(!CollectionUtils.isEmpty(modList)){
+					List<NcExaminees> collect = modList.stream().map(modExam -> {
+						NcExaminees ncExaminees = new NcExaminees();
+						BeanUtils.copyProperties(modExam, ncExaminees);
+						ncExaminees.setStaffId(ncStaff.getId());
+						ncExaminees.setDelFlag((byte) 0);
+						ncExaminees.setCardNum(ncStaff.getIdCardNum());
+						ncExaminees.setCardName("身份证");
+						ncExaminees.setCardType("01");
+						return ncExaminees;
+					}).collect(Collectors.toList());
+					ncExamineesService.updateBatchById(collect);
+				}
+				//删除
+				for (NcExaminees ncExaminees : oldList) {
+					List<NcExamineesAddForm> selectList = examFormList
+							.stream()
+							.filter(examForm -> examForm.getId() != null && examForm.getId().equals(ncExaminees.getId()))
+							.collect(Collectors.toList());
+					if(selectList.size() == 0){
+						ncExaminees.setDelFlag((byte) 2);
+						ncExamineesService.updateById(ncExaminees);
+					}
+				}
+			}
+		}
+	}
+	//插入培训经历
+	private void saveBatchExam(List<NcExamineesAddForm> examineesAddFormList, NcStaff ncStaff) {
+		if(!CollectionUtils.isEmpty(examineesAddFormList)){
+			List<NcExaminees> examineesList = examineesAddFormList.stream().map(examinees -> {
+				NcExaminees ncExaminees = new NcExaminees();
+				BeanUtils.copyProperties(examinees, ncExaminees);
+				ncExaminees.setStaffId(ncStaff.getId());
+				ncExaminees.setDelFlag((byte) 0);
+				ncExaminees.setCardNum(ncStaff.getIdCardNum());
+				ncExaminees.setName(ncStaff.getName());
+				ncExaminees.setCardName("身份证");
+				ncExaminees.setCardType("01");
+				ncExaminees.setSex(ncStaff.getSex());
+				return ncExaminees;
+			}).collect(Collectors.toList());
+			ncExamineesService.saveBatch(examineesList);
+		}
+	}
+
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffTrainServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffTrainServiceImpl.java
new file mode 100644
index 0000000..953c2cf
--- /dev/null
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/NcStaffTrainServiceImpl.java
@@ -0,0 +1,29 @@
+package com.gkhy.exam.noncoalmine.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.gkhy.exam.noncoalmine.entity.NcStaffTrain;
+import com.gkhy.exam.noncoalmine.mapper.NcStaffTrainMapper;
+import com.gkhy.exam.noncoalmine.service.NcStaffTrainService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * (NcStaffTrain)表服务实现类
+ *
+ * @author makejava
+ * @since 2023-09-18 10:00:25
+ */
+@Service("ncStaffTrainService")
+public class NcStaffTrainServiceImpl extends ServiceImpl<NcStaffTrainMapper, NcStaffTrain> implements NcStaffTrainService {
+
+	@Override
+	public List<NcStaffTrain> getByStaffId(Long staffId) {
+		List<NcStaffTrain> trainList = baseMapper.selectList(new LambdaQueryWrapper<NcStaffTrain>()
+				.eq(NcStaffTrain::getDelFlag, (byte) 0)
+				.eq(NcStaffTrain::getStaffId, staffId));
+		return trainList;
+	}
+}
+
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/TrainingInstitutionServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/TrainingInstitutionServiceImpl.java
index 63da0fa..33526c0 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/TrainingInstitutionServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/TrainingInstitutionServiceImpl.java
@@ -1,7 +1,9 @@
 package com.gkhy.exam.noncoalmine.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.exam.noncoalmine.entity.TrainingInstitution;
+import com.gkhy.exam.noncoalmine.entity.ViolationRegistration;
 import com.gkhy.exam.noncoalmine.mapper.TrainingInstitutionMapper;
 import com.gkhy.exam.noncoalmine.model.addForm.TrainingInstitutionAddForm;
 import com.gkhy.exam.noncoalmine.model.modForm.TrainingInstitutionModForm;
@@ -70,5 +72,13 @@
 		return baseMapper.insert(trainingInstitution);
 	}
 
+	@Override
+	public void delBatch(List<Long> institutionIds) {
+		UpdateWrapper<TrainingInstitution> updateWrapper = new UpdateWrapper<>();
+		updateWrapper.in("institution_id",institutionIds)
+				.set("del_flag",(byte)2);
+		this.update(updateWrapper);
+	}
+
 }
 
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ViolationRegistrationServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ViolationRegistrationServiceImpl.java
index c851749..12f8231 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ViolationRegistrationServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/ViolationRegistrationServiceImpl.java
@@ -1,6 +1,7 @@
 package com.gkhy.exam.noncoalmine.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.exam.noncoalmine.entity.ViolationRegistration;
 import com.gkhy.exam.noncoalmine.entity.WorkRegistration;
@@ -61,7 +62,6 @@
 		}).collect(Collectors.toList());
 		return list;
 	}
-
 	/**
 	 * 新增
 	 * @param addForm
@@ -108,6 +108,14 @@
 		return list;
 	}
 
+	@Override
+	public void delBatch(List<Long> violationIds) {
+		UpdateWrapper<ViolationRegistration> updateWrapper = new UpdateWrapper<>();
+		updateWrapper.in("violation_id",violationIds)
+				.set("del_flag",(byte)2);
+		this.update(updateWrapper);
+	}
+
 
 	/**
 	 * 附件转换
diff --git a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/WorkRegistrationServiceImpl.java b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/WorkRegistrationServiceImpl.java
index 822f77c..a816ab8 100644
--- a/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/WorkRegistrationServiceImpl.java
+++ b/exam-system/src/main/java/com/gkhy/exam/noncoalmine/service/impl/WorkRegistrationServiceImpl.java
@@ -1,6 +1,9 @@
 package com.gkhy.exam.noncoalmine.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.extension.conditions.update.UpdateChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.gkhy.exam.noncoalmine.entity.WorkRegistration;
 import com.gkhy.exam.noncoalmine.mapper.WorkRegistrationMapper;
@@ -88,5 +91,13 @@
 		}).collect(Collectors.toList());
 		return list;
 	}
+
+	@Override
+	public void delBatch(List<Long> workIds) {
+		UpdateWrapper<WorkRegistration> updateWrapper = new UpdateWrapper<>();
+		updateWrapper.in("work_id",workIds)
+				.set("del_flag",(byte)2);
+		this.update(updateWrapper);
+	}
 }
 
diff --git a/exam-system/src/main/resources/mapper/noncoalmine/ExamSiteMapper.xml b/exam-system/src/main/resources/mapper/noncoalmine/ExamSiteMapper.xml
index 539a629..840abd6 100644
--- a/exam-system/src/main/resources/mapper/noncoalmine/ExamSiteMapper.xml
+++ b/exam-system/src/main/resources/mapper/noncoalmine/ExamSiteMapper.xml
@@ -12,13 +12,13 @@
         LEFT JOIN sys_district d ON d.id = s.district_id
         WHERE
         s.del_flag = 0
-        <if test="query.siteName != null and query.siteName = ''">
+        <if test="query.siteName != null and query.siteName != ''">
             and s.site_name like concat('%', #{query.siteName}, '%')
         </if>
-        <if test="query.districtCode != null and query.districtCode = ''">
+        <if test="query.districtCode != null and query.districtCode != ''">
             AND d.`code` LIKE concat(#{query.districtCode}, '%')
         </if>
-        <if test="query.isCm != null and query.isCm = ''">
+        <if test="query.isCm != null and query.isCm != ''">
             AND s.is_cm = #{query.isCm}
         </if>
         order by s.create_time desc
diff --git a/exam-system/src/main/resources/mapper/noncoalmine/NcExamPlanMapper.xml b/exam-system/src/main/resources/mapper/noncoalmine/NcExamPlanMapper.xml
new file mode 100644
index 0000000..85f2f17
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/noncoalmine/NcExamPlanMapper.xml
@@ -0,0 +1,17 @@
+<?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.noncoalmine.mapper.NcExamPlanMapper">
+    <select id="selectNcExamPlanList" resultType="com.gkhy.exam.noncoalmine.entity.NcExamPlan">
+        SELECT
+        *
+        FROM
+        nc_exam_plan
+        WHERE
+        del_flag = 0
+        <if test="query.examPlanName != null and query.examPlanName != ''">
+            and exam_plan_name like concat('%', #{query.examPlanName}, '%')
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/exam-system/src/main/resources/mapper/noncoalmine/NcStaffMapper.xml b/exam-system/src/main/resources/mapper/noncoalmine/NcStaffMapper.xml
new file mode 100644
index 0000000..d1b0468
--- /dev/null
+++ b/exam-system/src/main/resources/mapper/noncoalmine/NcStaffMapper.xml
@@ -0,0 +1,20 @@
+<?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.noncoalmine.mapper.NcStaffMapper">
+    <select id="getList" resultType="com.gkhy.exam.noncoalmine.model.vo.NcStaffVO">
+        SELECT
+        *
+        FROM
+        nc_staff
+        WHERE
+        del_flag = 0
+        <if test="query.name != null and query.name != ''">
+            and name like concat('%', #{query.name}, '%')
+        </if>
+        <if test="query.idCardNum != null and query.idCardNum != ''">
+            and name = #{query.idCardNum}
+        </if>
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/exam-system/src/main/resources/mapper/noncoalmine/TrainingInstitutionMapper.xml b/exam-system/src/main/resources/mapper/noncoalmine/TrainingInstitutionMapper.xml
index d62f18a..a1e06d8 100644
--- a/exam-system/src/main/resources/mapper/noncoalmine/TrainingInstitutionMapper.xml
+++ b/exam-system/src/main/resources/mapper/noncoalmine/TrainingInstitutionMapper.xml
@@ -12,13 +12,13 @@
         LEFT JOIN sys_district d ON d.id = t.district_id
         WHERE
         t.del_flag = 0
-        <if test="query.institutionName != null and query.institutionName = ''">
+        <if test="query.institutionName != null and query.institutionName != ''">
             and t.institution_name like concat('%', #{query.institutionName}, '%')
         </if>
-        <if test="query.districtCode != null and query.districtCode = ''">
+        <if test="query.districtCode != null and query.districtCode != ''">
             AND d.`code` LIKE concat(#{query.districtCode}, '%')
         </if>
-        <if test="query.isCm != null and query.isCm = ''">
+        <if test="query.isCm != null and query.isCm != ''">
             AND t.is_cm = #{query.isCm}
         </if>
         order by t.create_time desc
diff --git a/exam-system/src/main/resources/mapper/noncoalmine/ViolationRegistrationMapper.xml b/exam-system/src/main/resources/mapper/noncoalmine/ViolationRegistrationMapper.xml
index f4eb62c..b9020a9 100644
--- a/exam-system/src/main/resources/mapper/noncoalmine/ViolationRegistrationMapper.xml
+++ b/exam-system/src/main/resources/mapper/noncoalmine/ViolationRegistrationMapper.xml
@@ -23,13 +23,13 @@
         update_time
         from violation_registration
         where del_flag = 0
-        <if test="query.dept != null and query.dept = ''">
+        <if test="query.dept != null and query.dept != ''">
             and dept like concat('%', #{query.dept}, '%')
         </if>
-        <if test="query.name != null and query.name = ''">
+        <if test="query.name != null and query.name != ''">
             and name like concat('%', #{query.name}, '%')
         </if>
-        <if test="query.idCard != null and query.idCard = ''">
+        <if test="query.idCard != null and query.idCard != ''">
             and id_card like concat('%', #{query.idCard}, '%')
         </if>
         <if test="query.operateTypeId != null and query.operateTypeId != 0">
diff --git a/exam-system/src/main/resources/mapper/noncoalmine/WorkRegistrationMapper.xml b/exam-system/src/main/resources/mapper/noncoalmine/WorkRegistrationMapper.xml
index ab483aa..ed03271 100644
--- a/exam-system/src/main/resources/mapper/noncoalmine/WorkRegistrationMapper.xml
+++ b/exam-system/src/main/resources/mapper/noncoalmine/WorkRegistrationMapper.xml
@@ -22,20 +22,19 @@
             update_time
         from work_registration
         where del_flag = 0
-        <if test="query.dept != null and query.dept = ''">
+        <if test="query.dept != null and query.dept != ''">
             and dept like concat('%', #{query.dept}, '%')
         </if>
-        <if test="query.name != null and query.name = ''">
+        <if test="query.name != null and query.name != ''">
             and name like concat('%', #{query.name}, '%')
         </if>
-        <if test="query.idCard != null and query.idCard = ''">
+        <if test="query.idCard != null and query.idCard != ''">
             and id_card like concat('%', #{query.idCard}, '%')
         </if>
         <if test="query.operateTypeId != null and query.operateTypeId != 0">
             and (operate_type_id = #{query.operateTypeId} OR operate_type_id IN ( SELECT t.id FROM sys_operate_type t WHERE find_in_set(#{query.operateTypeId}, ancestors)))
         </if>
         order by create_time desc
-
     </select>
 
 </mapper>
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
index d959a17..9f4429c 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
@@ -2,6 +2,12 @@
 
 import java.util.List;
 import java.util.Set;
+
+import com.ruoyi.framework.web.domain.login.LoginVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -22,6 +28,7 @@
  * 
  * @author ruoyi
  */
+@Api(tags = "登录相关接口")
 @RestController
 public class SysLoginController
 {
@@ -50,6 +57,18 @@
         ajax.put(Constants.TOKEN, token);
         return ajax;
     }
+    @ApiOperation(value = "移动端登录接口")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "username", dataTypeClass = String.class,value = "用户名",required = true),
+            @ApiImplicitParam(name = "password", dataTypeClass = String.class,value = "密码",required = true),
+    })
+    @PostMapping("/login/move")
+    public AjaxResult loginMove(@RequestBody LoginBody loginBody)
+    {
+        // 生成令牌
+        LoginVo loginVo = loginService.loginMove(loginBody.getUsername(), loginBody.getPassword());
+        return AjaxResult.success(loginVo);
+    }
 
     /**
      * 获取用户信息
diff --git a/ruoyi-admin/src/main/resources/application-dev.yml b/ruoyi-admin/src/main/resources/application-dev.yml
index cdbcaa0..27c42ab 100644
--- a/ruoyi-admin/src/main/resources/application-dev.yml
+++ b/ruoyi-admin/src/main/resources/application-dev.yml
@@ -100,6 +100,10 @@
                 max-active: 8
                 # #连接池最大阻塞等待时间(使用负值表示没有限制)
                 max-wait: -1ms
+tripartite:
+    restSever: https://inspurtestcx.saws.org.cn/sjjh
+    appKey: hj92qe
+    appPwd: dxep6j
 
 #windous测试
 file:
@@ -109,4 +113,4 @@
         urlRootPath: /uploadfile/
         module:
             #用户模块
-            accountPath: /account/
\ No newline at end of file
+            accountPath: /account/
diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml
index 7d31efb..14b57bf 100644
--- a/ruoyi-admin/src/main/resources/application.yml
+++ b/ruoyi-admin/src/main/resources/application.yml
@@ -86,7 +86,7 @@
   # 是否开启swagger
   enabled: true
   # 请求前缀
-  pathMapping: /dev-api
+  pathMapping: /
 
 # 防止XSS攻击
 xss:
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/signature/NcCertQuery1.java b/ruoyi-common/src/main/java/com/ruoyi/common/signature/NcCertQuery1.java
new file mode 100644
index 0000000..d83a7a5
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/signature/NcCertQuery1.java
@@ -0,0 +1,21 @@
+package com.ruoyi.common.signature;
+
+import lombok.Data;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/15
+ * @time: 17:20
+ */
+@Data
+public class NcCertQuery1 {
+
+	private String name;
+
+	/** 证件类型代码 */
+	private String idcardTypeCode;
+
+	/** 身份证件号 */
+	private String idcardNum;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/signature/SignatureUtils.java b/ruoyi-common/src/main/java/com/ruoyi/common/signature/SignatureUtils.java
index 9a17e45..7fadc51 100644
--- a/ruoyi-common/src/main/java/com/ruoyi/common/signature/SignatureUtils.java
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/signature/SignatureUtils.java
@@ -1,6 +1,9 @@
 package com.ruoyi.common.signature;
 
 import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.ruoyi.common.enums.HttpMethod;
+import com.ruoyi.common.exception.ServiceException;
 import org.apache.commons.lang3.RandomStringUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.http.HttpStatus;
@@ -8,6 +11,8 @@
 import org.apache.http.client.config.RequestConfig;
 import org.apache.http.client.methods.CloseableHttpResponse;
 import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
 import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.util.EntityUtils;
 import org.slf4j.Logger;
@@ -39,10 +44,22 @@
 
 	/**
 	 * 获取数据接口
-	 * @param getQueryParam
+	 * @param queryParam
+	 * @param url
+	 * @param method
 	 * @return
 	 */
-	public static Object getObject(String getQueryParam,String url){
+	public static String getObject(String queryParam, String url, HttpMethod method){
+
+		if(method.equals(HttpMethod.GET)){
+			return getMethod(url, queryParam);
+		}
+		if(method.equals(HttpMethod.POST)){
+			return postMethod(url,queryParam);
+		}
+		return null;
+	}
+	private static String getMethod(String url,String queryParam){
 		// 时间戳
 		Long ts = Calendar.getInstance().getTime().getTime();
 		// 随机数
@@ -50,10 +67,10 @@
 		// 接口header 中的公共参数
 		String commonParamUrl = String.format("appKey=%s" + "&" + "ts=%s" + "&" + "once=%s" + "&" + "signMethod=%s", appKey, ts, once, signMethod);
 
-		String getFullUrl = restSever + url + "?" + getQueryParam;
+		String getFullUrl = restSever + url + "?" + queryParam;
 		HttpGet httpGet = new HttpGet(getFullUrl);
 		// get 请求查询参数, 用在 URL 上的, 这里若是通过 ID 查询的, 接口中 ID 是作为路径存在的, 所以需要将 ID 组成
-		String getAllParamUrl = commonParamUrl + "&" + getQueryParam;
+		String getAllParamUrl = commonParamUrl + "&" + queryParam;
 		// 创建 HttpClient 对象
 		CloseableHttpClient httpclient = (CloseableHttpClient) SkipHttpsUtils.wrapClient();
 		// 对参数签名, 并放入请求 header 中的 signData 参数中
@@ -66,12 +83,9 @@
 			httpGet.addHeader("ts", ts.toString());
 			httpGet.addHeader("once", once);
 			httpGet.addHeader("signMethod", signMethod);
-			System.out.println("once:" + once);
 			httpGet.addHeader("signData", signData);
-			System.out.println("headers:" + httpGet.getAllHeaders());
 			String urlStr = httpGet.getURI().toString();
 			// 公共参数 URL
-			System.out.println("commonParamter:" + urlStr);
 			if (StringUtils.endsWith(urlStr, "/")) {
 				urlStr = StringUtils.removeEnd(urlStr, "/");
 			}
@@ -79,7 +93,6 @@
 			RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(6000)
 					.setConnectionRequestTimeout(6000).setSocketTimeout(6000).build();
 			httpGet.setConfig(requestConfig);
-			System.out.println("urlStr in request:" + httpGet.getURI().toString());
 			// 执行请求
 			CloseableHttpResponse response = httpclient.execute(httpGet);
 			// 取响应的结果
@@ -87,13 +100,66 @@
 			// 打印响应结果
 			if (statusCode == HttpStatus.SC_OK) {
 				String resp = EntityUtils.toString(response.getEntity(), "utf-8");
-				System.out.println("status:" + statusCode);
-				Object object = JSON.parse(resp);
-				System.out.println("result:" + resp);
-				return object;
+				Object object = JSONObject.parseObject(resp);
 
+				return resp;
 			} else {
-				System.out.println(statusCode);
+				throw new ServiceException("同步数据异常");
+			}
+		} catch (URISyntaxException e) {
+			logger.error("签名失败: ", e);
+		} catch (ClientProtocolException e) {
+			e.printStackTrace();
+		} catch (IOException e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+	private static String postMethod(String url, String bodyParam){
+		// 时间戳
+		Long ts = Calendar.getInstance().getTime().getTime();
+		// 随机数
+		String once = RandomStringUtils.randomAlphanumeric(32);
+		// 接口header 中的公共参数
+		String commonParamUrl = String.format("appKey=%s" + "&" + "ts=%s" + "&" + "once=%s" + "&" + "signMethod=%s", appKey, ts, once, signMethod);
+
+		String postFullUrl = restSever + url;
+		HttpPost httpPost = new HttpPost(postFullUrl);
+		String postAllParamUrl = commonParamUrl + "&bodyData=" + bodyParam;
+		// 创建 HttpClient 对象
+		CloseableHttpClient httpclient = (CloseableHttpClient) SkipHttpsUtils.wrapClient();
+		StringEntity bodyData = new StringEntity(bodyParam.toString(), "UTF-8");
+		httpPost.setEntity(bodyData);
+		// 对参数签名, 并放入请求 header 中的 signData 参数中
+		try {
+			// 签名数据
+			String signData = TokenUtils.getSignature(appPwd, postAllParamUrl);
+			// 添加 header 参数 appCode、 timestamp、 signatureNonce、 signature
+			httpPost.addHeader("appKey", appKey);
+			httpPost.addHeader("ts", ts.toString());
+			httpPost.addHeader("once", once);
+			httpPost.addHeader("signMethod", signMethod);
+			httpPost.addHeader("signData", signData);
+			String urlStr = httpPost.getURI().toString();
+			// 公共参数 URL
+			if (StringUtils.endsWith(urlStr, "/")) {
+				urlStr = StringUtils.removeEnd(urlStr, "/");
+			}
+			httpPost.setURI(new URI(urlStr));
+			RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(6000)
+					.setConnectionRequestTimeout(6000).setSocketTimeout(6000).build();
+			httpPost.setConfig(requestConfig);
+			// 执行请求
+			CloseableHttpResponse response = httpclient.execute(httpPost);
+			// 取响应的结果
+			int statusCode = response.getStatusLine().getStatusCode();
+			// 打印响应结果
+			if (statusCode == HttpStatus.SC_OK) {
+				String resp = EntityUtils.toString(response.getEntity(), "utf-8");
+				Object object = JSON.parse(resp);
+				return resp;
+			} else {
+				throw new ServiceException("同步数据异常");
 			}
 		} catch (URISyntaxException e) {
 			logger.error("签名失败: ", e);
@@ -110,7 +176,7 @@
 		 * GET 查询接口演示代码
 		 */
 		String startTime = "2018-05-25 00:00:00";
-		String endTime = "2023-06-01 21:00:00";
+		String endTime = "2023-09-01 21:00:00";
 		try {
 			startTime = URLEncoder.encode(startTime, "UTF-8");
 			endTime = URLEncoder.encode(endTime, "UTF-8");
@@ -119,8 +185,16 @@
 		}
 		String getQueryParam = "startTime=" + startTime + "&endTime=" + endTime;
 		System.out.println(getQueryParam);
-		 Object obj = getObject(getQueryParam,"/api/v1/exam/plan/enroll/download");
+		Object obj = getObject(getQueryParam,"/api/v1/exam/plan/enroll/download",HttpMethod.GET);
 		System.out.println(obj);
+		System.out.println("********************************************************************************************************************************");
+		System.out.println("********************************************************************************************************************************");
+		NcCertQuery1 ncCertQuery1 = new NcCertQuery1();
+		ncCertQuery1.setIdcardTypeCode("01");
+		ncCertQuery1.setIdcardNum("362421197712217718");
+		String bodyParam = JSON.toJSONString(ncCertQuery1);
+		Object obj2 = getObject(bodyParam,"/api/v1/cert/query",HttpMethod.POST);
+		System.out.println(obj2);
 
 	}
 
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/controller/AttachmentController.java b/ruoyi-file/src/main/java/com/ruoyi/file/controller/AttachmentController.java
index 6d57562..3f61a78 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/controller/AttachmentController.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/controller/AttachmentController.java
@@ -4,6 +4,10 @@
 import com.ruoyi.common.core.domain.AjaxResult;
 import com.ruoyi.file.constants.FileProjectConstants;
 import com.ruoyi.file.service.AttachmentService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.multipart.MultipartFile;
@@ -17,6 +21,7 @@
  * @date: 2023/8/29
  * @time: 10:53
  */
+@Api(tags = "附件")
 @RestController
 @RequestMapping("attachment")
 public class AttachmentController extends BaseController {
@@ -30,7 +35,7 @@
      * @param key
      * @return
      */
-
+    @ApiOperation(value = "根据标识查询文件具体信息")
     @GetMapping("/get/key/{key}")
     public AjaxResult findByKey(@PathVariable String key) {
         return success(attachmentService.findByKey(key));
@@ -52,6 +57,7 @@
      * @param id
      * @return
      */
+    @ApiOperation(value = "删除文件数据")
     @GetMapping("/delete/{id}")
     public AjaxResult delete(@PathVariable Long id) {
         attachmentService.delete(id);
@@ -64,7 +70,11 @@
      * @Description 上传文件(返回文件标识)
      * @Param [file, module]
      **/
-
+    @ApiOperation(value = "上传文件(返回文件标识)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file", value = "文件",required = true),
+            @ApiImplicitParam(name = "module", dataTypeClass = String.class,value = "模块",required = true,example = "accountPath"),
+    })
     @PostMapping("/upload/key")
     public AjaxResult uploadReturnKey(@RequestParam("file") MultipartFile
                                        file, @RequestParam("module") String module) {
@@ -76,6 +86,11 @@
      * @Description 上传文件(返回文件信息)
      * @Param [file, module]
      **/
+    @ApiOperation(value = "上传文件(返回文件信息)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+            @ApiImplicitParam(name = "module", dataTypeClass = String.class,value = "模块",required = true,example = "accountPath"),
+    })
     @PostMapping("/upload/detail")
     public AjaxResult uploadReturnDetail(@RequestParam("file") MultipartFile
                                           file, @RequestParam("module") String module) {
@@ -87,6 +102,11 @@
      * @Date 2021/4/20 19:28
      * @Param [file, module]
      **/
+    @ApiOperation(value = "上传文件(返回访问路径)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file",value = "文件",required = true),
+            @ApiImplicitParam(name = "module", dataTypeClass = String.class,value = "模块",required = true,example = "accountPath"),
+    })
     @PostMapping("/upload/url")
     public AjaxResult uploadReturnUrl(@RequestParam("file") MultipartFile file, @RequestParam("module") String module) {
         return success(attachmentService.saveFileToPath(file, module, FileProjectConstants.ReturnType.URL));
@@ -97,6 +117,11 @@
      * @Description 上传文件(返回文件信息)
      * @Param [file, module]
      **/
+    @ApiOperation(value = "批量上传文件(返回文件信息)")
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "file", value = "文件",required = true),
+            @ApiImplicitParam(name = "module", dataTypeClass = String.class,value = "模块",required = true,example = "accountPath"),
+    })
     @PostMapping("/upload/batch/detail")
     public AjaxResult uploadBatchReturnDetail(@RequestParam("file") MultipartFile[]
                                                file, @RequestParam("module") String module) {
diff --git a/ruoyi-file/src/main/java/com/ruoyi/file/entity/AttachmentInfo.java b/ruoyi-file/src/main/java/com/ruoyi/file/entity/AttachmentInfo.java
index 8eb06f7..2f66974 100644
--- a/ruoyi-file/src/main/java/com/ruoyi/file/entity/AttachmentInfo.java
+++ b/ruoyi-file/src/main/java/com/ruoyi/file/entity/AttachmentInfo.java
@@ -1,11 +1,13 @@
 package com.ruoyi.file.entity;
 
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseEntity;
 import lombok.Data;
 import org.springframework.data.annotation.Id;
+
+import java.time.LocalDateTime;
+import java.util.Date;
 
 /**
  * @email 1603559716@qq.com
@@ -15,7 +17,7 @@
  */
 @Data
 @TableName("attachment")
-public class AttachmentInfo extends BaseEntity {
+public class AttachmentInfo {
     @Id
     @TableId(type = IdType.AUTO)
     private Long id;
@@ -42,4 +44,20 @@
     //业务id
     private Long businessId;
 
+    /** 创建者 */
+    private String createBy;
+
+    /** 创建时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date createTime;
+
+    /** 更新者 */
+    private String updateBy;
+
+    /** 更新时间 */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private Date updateTime;
+
+    private String remark;
+
 }
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
index 2125853..18e7ed3 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/config/SecurityConfig.java
@@ -111,7 +111,7 @@
                 // 过滤请求
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                .antMatchers("/login", "/register", "/captchaImage").permitAll()
+                .antMatchers("/login","/login/move", "/register", "/captchaImage","/uploadfile/**").permitAll()
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/login/LoginVo.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/login/LoginVo.java
new file mode 100644
index 0000000..09b98d9
--- /dev/null
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/domain/login/LoginVo.java
@@ -0,0 +1,31 @@
+package com.ruoyi.framework.web.domain.login;
+
+import com.ruoyi.common.core.domain.entity.SysUser;
+import lombok.Data;
+
+import java.util.Set;
+
+/**
+ * @email 1603559716@qq.com
+ * @author: zf
+ * @date: 2023/9/22
+ * @time: 10:38
+ */
+@Data
+public class LoginVo {
+
+	/**
+	 * 用户唯一标识
+	 */
+	private String token;
+
+	/**
+	 * 权限列表
+	 */
+	private Set<String> permissions;
+
+	/**
+	 * 用户信息
+	 */
+	private SysUser user;
+}
diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
index 67267b7..1f07b3e 100644
--- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
+++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -1,6 +1,9 @@
 package com.ruoyi.framework.web.service;
 
 import javax.annotation.Resource;
+
+import com.ruoyi.framework.web.domain.login.LoginVo;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.BadCredentialsException;
@@ -178,4 +181,43 @@
         sysUser.setLoginDate(DateUtils.getNowDate());
         userService.updateUserProfile(sysUser);
     }
+
+	public LoginVo loginMove(String username, String password) {
+        // 登录前置校验
+        loginPreCheck(username, password);
+        // 用户验证
+        Authentication authentication = null;
+        try
+        {
+            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
+            AuthenticationContextHolder.setContext(authenticationToken);
+            // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
+            authentication = authenticationManager.authenticate(authenticationToken);
+        }
+        catch (Exception e)
+        {
+            if (e instanceof BadCredentialsException)
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            }
+            else
+            {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
+                throw new ServiceException(e.getMessage());
+            }
+        }
+        finally
+        {
+            AuthenticationContextHolder.clearContext();
+        }
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        LoginUser loginUser = (LoginUser) authentication.getPrincipal();
+        recordLoginInfo(loginUser.getUserId());
+        // 生成token
+        LoginVo loginVo = new LoginVo();
+        BeanUtils.copyProperties(loginUser,loginVo);
+        loginVo.setToken(tokenService.createToken(loginUser));
+        return loginVo;
+	}
 }
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..acde677 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
@@ -85,7 +85,7 @@
     @Override
     public List<SysOperateType> selectOperateTypeList(OperateTypeListReqDTO reqDTO) {
         LambdaQueryWrapper<SysOperateType> wrapper = new LambdaQueryWrapper<>();
-        wrapper.eq(SysOperateType::getDelFlag, DeleteStatusEnum.YES.getStatus());
+        wrapper.eq(SysOperateType::getDelFlag, DeleteStatusEnum.NO.getStatus());
         if (reqDTO != null && !StringUtils.isBlank(reqDTO.getName())){
             wrapper.eq(SysOperateType::getName,reqDTO.getName());
         }

--
Gitblit v1.9.2