From fcedfb634d80f8d3a718649036156ae3b536ae7d Mon Sep 17 00:00:00 2001
From: zhuo <2089219845@qq.com>
Date: 星期一, 24 二月 2025 10:37:44 +0800
Subject: [PATCH] 人员任职授权, 培训记录移植

---
 cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml                             |   47 ++
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java                     |   61 ++
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingRecordController.java             |   59 ++
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java     |  113 ++++
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java              |   27 +
 cnas-personnel/src/main/resources/static/training-record.docx                                               |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java                    |   74 +++
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonJobResponsibilitiesDto.java                      |   16 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonRewardPunishmentRecordDto.java                   |   14 
 cnas-personnel/src/main/resources/static/person-training.docx                                               |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonRewardPunishmentRecordServiceImpl.java  |   36 +
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java                        |   78 +++
 cnas-personnel/src/main/resources/static/supervision-record.docx                                            |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonRewardPunishmentRecordExcel.java               |   34 +
 cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx                                  |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPersonnelCapacityService.java                |   34 +
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java             |   26 +
 cnas-personnel/src/main/resources/static/communication-deal.docx                                            |    0 
 cnas-personnel/src/main/resources/static/super-vise-plan.docx                                               |    0 
 cnas-personnel/src/main/resources/static/credentials-deal.docx                                              |    0 
 cnas-personnel/src/main/resources/static/person-basic-info.docx                                             |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java                          |  114 ++++
 cnas-personnel/src/main/resources/static/person-training-record.docx                                        |    0 
 cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml                                |   24 +
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonRewardPunishmentRecordService.java           |   31 +
 cnas-personnel/src/main/resources/static/supervision-control-sheet.docx                                     |    0 
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPersonnelCapacityController.java          |   94 ++++
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java        |   60 ++
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java            |   20 
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPostAuthorizationRecordController.java    |   66 ++
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPostAuthorizationRecordDto.java                  |   14 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java |  132 +++++
 cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.xml                            |   23 +
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPostAuthorizationRecordService.java          |   27 +
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java                |   20 
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonRewardPunishmentRecordController.java     |  100 ++++
 cnas-personnel/src/main/resources/static/explain-deal.docx                                                  |    0 
 cnas-personnel/src/main/resources/static/personnel-capacity.docx                                            |    0 
 38 files changed, 1,344 insertions(+), 0 deletions(-)

diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java
new file mode 100644
index 0000000..615af7b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonJobResponsibilitiesController.java
@@ -0,0 +1,60 @@
+package com.ruoyi.personnel.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto;
+import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
+import com.ruoyi.personnel.service.PersonJobResponsibilitiesService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 02:07:49
+ */
+@Api(tags = "浜哄憳 - 宀椾綅鑱岃矗")
+@RestController
+@RequestMapping("/personJobResponsibilities")
+public class PersonJobResponsibilitiesController {
+    @Autowired
+    private PersonJobResponsibilitiesService personJobResponsibilitiesService;
+
+    @ApiOperation(value = "鏂板/鏇存柊 宀椾綅鑱岃矗")
+    @PostMapping("/personJobResponsibilitiesSave")
+    public Result<?> personJobResponsibilitiesSave(@RequestBody PersonJobResponsibilities personJobResponsibilities) {
+        personJobResponsibilitiesService.saveOrUpdate(personJobResponsibilities);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鍒犻櫎 宀椾綅鑱岃矗")
+    @DeleteMapping("/personJobResponsibilitiesDelete")
+    public Result<?> personJobResponsibilitiesDelete(@RequestParam("id") Integer id) {
+        personJobResponsibilitiesService.removeById(id);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鏌ヨ 宀椾綅鑱岃矗")
+    @GetMapping("/personJobResponsibilitiesSelect")
+    public Result<IPage<PersonJobResponsibilitiesDto>> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName) {
+        IPage<PersonJobResponsibilitiesDto> iPage = personJobResponsibilitiesService.personJobResponsibilitiesSelect(page, userId, departmentId, userName);
+        return Result.success(iPage);
+    }
+
+
+    @ApiOperation(value = "瀵煎嚭浠昏亴宀椾綅璇存槑璇�")
+    @PostMapping("/exportPersonJobResponsibilities")
+    public void exportPersonJobResponsibilities(Integer id, HttpServletResponse response){
+        personJobResponsibilitiesService.exportPersonJobResponsibilities(id,response);
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPersonnelCapacityController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPersonnelCapacityController.java
new file mode 100644
index 0000000..b98f1de
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPersonnelCapacityController.java
@@ -0,0 +1,94 @@
+//package com.ruoyi.personnel.controller;
+//
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+//import com.yuanchu.mom.annotation.ValueAuth;
+//import com.yuanchu.mom.common.GetLook;
+//import com.yuanchu.mom.dto.PersonPersonnelCapacityDto;
+//import com.yuanchu.mom.pojo.PersonPersonnelCapacity;
+//import com.yuanchu.mom.service.PersonPersonnelCapacityService;
+//import com.yuanchu.mom.vo.Result;
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.web.bind.annotation.*;
+//
+//import javax.servlet.http.HttpServletResponse;
+//import java.time.LocalDateTime;
+//
+///**
+// * <p>
+// * 浜哄憳鑳藉姏 鍓嶇鎺у埗鍣�
+// * </p>
+// *
+// * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+// * @since 2024-10-10 11:26:18
+// */
+//@Api(tags = "浜哄憳 - 浜哄憳鑳藉姏")
+//@RestController
+//@RequestMapping("/personPersonnelCapacity")
+//public class PersonPersonnelCapacityController {
+//
+//    @Autowired
+//    private PersonPersonnelCapacityService personPersonnelCapacityService;
+//
+//
+//    @ApiOperation(value = "鏂板/鏇存柊 浜哄憳鑳藉姏")
+//    @PostMapping("addOrUpdatePersonPersonnelCapacity")
+//    public Result<?> addOrUpdatePersonPersonnelCapacity(@RequestBody PersonPersonnelCapacity personPersonnelCapacity) {
+//        personPersonnelCapacityService.saveOrUpdate(personPersonnelCapacity);
+//        return Result.success();
+//    }
+//
+//    @ApiOperation(value = "鍒犻櫎 浜哄憳鑳藉姏")
+//    @DeleteMapping("deletePersonPersonnelCapacity")
+//    public Result<?> deletePersonPersonnelCapacity(@RequestParam("id") Integer id) {
+//        // 鍒犻櫎鏁版嵁
+//        personPersonnelCapacityService.removeById(id);
+//        return Result.success();
+//    }
+//
+//    @ApiOperation(value = "鏌ヨ 浜哄憳鑳藉姏")
+//    @GetMapping("personPersonnelCapacityPage")
+//    public Result<IPage<PersonPersonnelCapacityDto>> personPersonnelCapacityPage(Page page,
+//                                                                                 Integer departmentId,
+//                                                                                 Integer userId,
+//                                                                                 String userName) {
+//        return Result.success(personPersonnelCapacityService.personPersonnelCapacityPage(page, departmentId, userId, userName));
+//    }
+//
+//    @ApiOperation(value = "纭 浜哄憳鑳藉姏")
+//    @GetMapping("confirmPersonnelCapability")
+//    public Result<?> confirmPersonnelCapability(@RequestParam("id") Integer id) {
+//        Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+//        personPersonnelCapacityService.update(Wrappers.<PersonPersonnelCapacity>lambdaUpdate()
+//                .eq(PersonPersonnelCapacity::getId, id)
+//                .set(PersonPersonnelCapacity::getConfirmOperatingPersonnelId, userId)
+//                .set(PersonPersonnelCapacity::getConfirmDate, LocalDateTime.now()));
+//        return Result.success();
+//    }
+//
+//    /**
+//     * 瀵煎嚭浜哄憳鑳藉姏
+//     * @return
+//     */
+//    @ValueAuth
+//    @ApiOperation(value = "瀵煎嚭浜哄憳鑳藉姏")
+//    @GetMapping("/exportPersonnelCapacity")
+//    public void exportPersonnelCapacity(Integer id, HttpServletResponse response){
+//        personPersonnelCapacityService.exportPersonnelCapacity(id, response);
+//    }
+//
+//    /**
+//     * 鎻愪氦纭浜哄憳鑳藉姏
+//     * @param personPersonnelCapacity
+//     * @return
+//     */
+//    @ApiOperation(value = "鎻愪氦")
+//    @PostMapping("submitConfirmPersonnelCapability")
+//    public Result<?> submitConfirmPersonnelCapability(@RequestBody PersonPersonnelCapacity personPersonnelCapacity) {
+//        personPersonnelCapacityService.submitConfirmPersonnelCapability(personPersonnelCapacity);
+//        return Result.success();
+//    }
+//}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPostAuthorizationRecordController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPostAuthorizationRecordController.java
new file mode 100644
index 0000000..c65f312
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonPostAuthorizationRecordController.java
@@ -0,0 +1,66 @@
+package com.ruoyi.personnel.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.common.utils.FileSaveUtil;
+import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
+import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
+import com.ruoyi.personnel.service.PersonPostAuthorizationRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 浠昏亴鎺堟潈璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 10:48:17
+ */
+@Api(tags = "浜哄憳 - 浠昏亴鎺堟潈璁板綍")
+@RestController
+@RequestMapping("/personPostAuthorizationRecord")
+public class PersonPostAuthorizationRecordController {
+
+    @Autowired
+    private PersonPostAuthorizationRecordService personPostAuthorizationRecordService;
+
+    @ApiOperation(value = "鏂板/鏇存柊 浠昏亴鎺堟潈璁板綍")
+    @PostMapping("/addOrUpdatePersonPostAuthorizationRecord")
+    public Result<?> addOrUpdatePersonPostAuthorizationRecord(@RequestBody PersonPostAuthorizationRecord personRewardPunishmentRecord) {
+        personPostAuthorizationRecordService.saveOrUpdate(personRewardPunishmentRecord);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎 浠昏亴鎺堟潈璁板綍")
+    @DeleteMapping("/deletePersonPostAuthorizationRecord")
+    public Result<?> deletePersonPostAuthorizationRecord(@RequestParam("id") Integer id) {
+        // 鍒犻櫎鏂囦欢
+        PersonPostAuthorizationRecord postAuthorizationRecord = personPostAuthorizationRecordService.getById(id);
+        FileSaveUtil.DeleteFile(postAuthorizationRecord.getSystemFileName());
+        // 鍒犻櫎鏁版嵁
+        personPostAuthorizationRecordService.removeById(id);
+        return Result.success();
+    }
+
+
+    @ApiOperation(value = "鏌ヨ 浠昏亴鎺堟潈璁板綍")
+    @GetMapping("/PersonPostAuthorizationRecordPage")
+    public Result<IPage<PersonPostAuthorizationRecordDto>> PersonPostAuthorizationRecordPage(Page page,
+                                                                                             Integer departLimsId,
+                                                                                             Integer userId,
+                                                                                             String userName) {
+        return Result.success(personPostAuthorizationRecordService.personPostAuthorizationRecordPage(page, departLimsId, userId, userName));
+    }
+
+    @ApiOperation(value = "瀵煎嚭宀椾綅鑱屼笟璧勬牸璇佷功")
+    @PostMapping("/exportPersonPostAuthorizationRecord")
+    public void exportPersonPostAuthorizationRecord(Integer id, HttpServletResponse response){
+        personPostAuthorizationRecordService.exportPersonPostAuthorizationRecord(id,response);
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonRewardPunishmentRecordController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonRewardPunishmentRecordController.java
new file mode 100644
index 0000000..72f4e43
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonRewardPunishmentRecordController.java
@@ -0,0 +1,100 @@
+package com.ruoyi.personnel.controller;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.personnel.dto.PersonRewardPunishmentRecordDto;
+import com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel;
+import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
+import com.ruoyi.personnel.service.PersonRewardPunishmentRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.SneakyThrows;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 濂栨儵璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-08 11:25:02
+ */
+@Api(tags = "浜哄憳 - 濂栨儵璁板綍")
+@RestController
+@RequestMapping("/personRewardPunishmentRecord")
+public class PersonRewardPunishmentRecordController {
+
+    @Autowired
+    private PersonRewardPunishmentRecordService personRewardPunishmentRecordService;
+
+    @ApiOperation(value = "鏂板/鏇存柊 濂栨儵璁板綍")
+    @PostMapping("/addOrUpdateRewardPunishment")
+    public Result<?> PersonTrainingSave(@RequestBody PersonRewardPunishmentRecord personRewardPunishmentRecord) {
+        personRewardPunishmentRecordService.saveOrUpdate(personRewardPunishmentRecord);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鍒犻櫎濂栨儵璁板綍")
+    @DeleteMapping("/deleteRewardPunishment")
+    public Result<?> deleteRewardPunishment(@RequestParam("id") Integer id) {
+        personRewardPunishmentRecordService.removeById(id);
+        return Result.success();
+    }
+
+    @ApiOperation(value = "鏌ヨ 濂栨儵璁板綍")
+    @GetMapping("/rewardPunishmentPage")
+    @SneakyThrows
+    public Result<IPage<PersonRewardPunishmentRecordDto>> rewardPunishmentPage(Page page,
+                                                                               Integer userId,
+                                                                               Integer departmentId,
+                                                                               String userName,
+                                                                               @RequestParam(value = "startTime",required = false) String startTimeStr,
+                                                                               @RequestParam(value = "endTime",required = false) String endTimeStr) {
+        Date startTime = null;
+        Date endTime = null;
+        if (StringUtils.isNotEmpty(startTimeStr) || StringUtils.isNotEmpty(endTimeStr)) {
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+            startTime = formatter.parse(startTimeStr);
+            endTime = formatter.parse(endTimeStr);
+        }
+        return Result.success(personRewardPunishmentRecordService.rewardPunishmentPage(page, userId, userName, startTime, endTime, departmentId));
+    }
+
+    @ApiOperation(value = "濂栨儵璁板綍瀵煎嚭")
+    @GetMapping("/rewardPunishmentExport")
+    public void rewardPunishmentExport(Integer userId,
+                                       Integer departmentId,
+                                       String userName,
+                                       @RequestParam(value = "startTime",required = false) String startTimeStr,
+                                       @RequestParam(value = "endTime",required = false) String endTimeStr,
+                                       HttpServletResponse response) throws Exception {
+        Date startTime = null;
+        Date endTime = null;
+        if (StringUtils.isNotEmpty(startTimeStr) || StringUtils.isNotEmpty(endTimeStr)) {
+            SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
+            startTime = formatter.parse(startTimeStr);
+            endTime = formatter.parse(endTimeStr);
+        }
+        List<PersonRewardPunishmentRecordExcel> data = personRewardPunishmentRecordService.rewardPunishmentExport(userId, departmentId, userName, startTime, endTime);
+        response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+        response.setHeader("requestType", "excel");
+        response.setHeader("Access-Control-Expose-Headers", "requestType");
+        // 璁剧疆鍗曞厓鏍兼牱寮�
+        // 淇濆瓨鍒扮涓�涓猻heet涓�
+        EasyExcel.write(response.getOutputStream())
+                .head(PersonRewardPunishmentRecordExcel.class)
+                .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+                .sheet()
+                .doWrite(data);
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingRecordController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingRecordController.java
new file mode 100644
index 0000000..5385869
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonTrainingRecordController.java
@@ -0,0 +1,59 @@
+package com.ruoyi.personnel.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.Result;
+import com.ruoyi.personnel.dto.PersonTrainingRecordListDto;
+import com.ruoyi.personnel.dto.TrainingRecordPersonDetailedDto;
+import com.ruoyi.personnel.service.PersonTrainingRecordService;
+import io.swagger.annotations.Api;
+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.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:11:49
+ */
+@Api(tags = "浜哄憳 - 鍩硅璁板綍")
+@RestController
+@RequestMapping("/personTrainingRecord")
+public class PersonTrainingRecordController {
+
+    @Autowired
+    private PersonTrainingRecordService personTrainingRecordService;
+
+    @ApiOperation(value = "鏌ヨ浜哄憳 鍩硅璁板綍")
+    @GetMapping("trainingSelectTrainingRecord")
+    public Result<IPage<PersonTrainingRecordListDto>> trainingSelectTrainingRecord(Page page, String userName, Integer userId, Integer departmentId) {
+        IPage<PersonTrainingRecordListDto> iPage = personTrainingRecordService.personnelTrainingPersonnel(page, userName, userId, departmentId);
+        return Result.success(iPage);
+    }
+
+
+    @ApiOperation(value = "鏌ヨ浜哄憳鏄庣粏 鍩硅璁板綍")
+    @GetMapping("queryPersonnelDetails")
+    public Result<IPage<TrainingRecordPersonDetailedDto>> queryPersonnelDetails(Page page, Integer userId, Integer trainingDate) {
+        IPage<TrainingRecordPersonDetailedDto> iPage = personTrainingRecordService.queryPersonnelDetailsOfUserIdAndYear(page, userId, trainingDate); // 鏂板鏍规嵁骞翠唤鏌ヨ
+        return Result.success(iPage);
+    }
+
+    /**
+     * 瀵煎嚭浜哄憳鍩硅璁板綍
+     * @return
+     */
+    @ApiOperation(value = "瀵煎嚭浜哄憳鍩硅璁板綍")
+    @GetMapping("/exportTrainingRecord")
+    public void exportTrainingRecord(Integer userId, Integer trainingDate, HttpServletResponse response){
+        personTrainingRecordService.exportTrainingRecordAddTrainingDate(userId, trainingDate, response);// 鏂板鏍规嵁骞翠唤鏌ヨ
+
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonJobResponsibilitiesDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonJobResponsibilitiesDto.java
new file mode 100644
index 0000000..096f8d3
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonJobResponsibilitiesDto.java
@@ -0,0 +1,16 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
+import lombok.Data;
+
+@Data
+public class PersonJobResponsibilitiesDto extends PersonJobResponsibilities {
+
+    private String incumbentName;
+
+    private String supervisorName;
+
+    private String departLimsName;
+
+    private String account;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPostAuthorizationRecordDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPostAuthorizationRecordDto.java
new file mode 100644
index 0000000..33dd76c
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonPostAuthorizationRecordDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
+import lombok.Data;
+
+@Data
+public class PersonPostAuthorizationRecordDto extends PersonPostAuthorizationRecord {
+
+    private String userName;
+
+    private String account;
+
+    private String createUserName;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonRewardPunishmentRecordDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonRewardPunishmentRecordDto.java
new file mode 100644
index 0000000..5be270b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonRewardPunishmentRecordDto.java
@@ -0,0 +1,14 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
+import lombok.Data;
+
+@Data
+public class PersonRewardPunishmentRecordDto extends PersonRewardPunishmentRecord {
+
+    private String userName;
+
+    private String account;
+
+    private String createUserName;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonRewardPunishmentRecordExcel.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonRewardPunishmentRecordExcel.java
new file mode 100644
index 0000000..84456f3
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/excel/PersonRewardPunishmentRecordExcel.java
@@ -0,0 +1,34 @@
+package com.ruoyi.personnel.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+@Data
+public class PersonRewardPunishmentRecordExcel {
+    @ExcelProperty("鍛樺伐缂栧彿")
+    private String account;
+
+    @ExcelProperty("濮撳悕")
+    private String userName;
+
+    @ExcelProperty("濂栨儵绾у埆")
+    private String rewardPunishLevel;
+
+    @ExcelProperty("濂栨儵鍚嶇О")
+    private String rewardPunishName;
+
+    @ExcelProperty("濂栨儵鏃堕棿")
+    private String rewardPunishTime;
+
+    @ExcelProperty("濂栨儵鍗曚綅")
+    private String rewardPunishWorkUnit;
+
+    @ExcelProperty("濂栨儵鍐呭")
+    private String rewardPunishContent;
+
+    @ExcelProperty("鍒涘缓鏃堕棿")
+    private String createTime;
+
+    @ExcelProperty("鍒涘缓浜�")
+    private String createUserName;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java
new file mode 100644
index 0000000..a46e3bf
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonJobResponsibilitiesMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.personnel.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto;
+import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 02:07:49
+ */
+public interface PersonJobResponsibilitiesMapper extends BaseMapper<PersonJobResponsibilities> {
+
+    IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java
new file mode 100644
index 0000000..1121811
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonPostAuthorizationRecordMapper.java
@@ -0,0 +1,20 @@
+package com.ruoyi.personnel.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
+import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
+
+/**
+ * <p>
+ * 浠昏亴鎺堟潈璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 10:48:17
+ */
+public interface PersonPostAuthorizationRecordMapper extends BaseMapper<PersonPostAuthorizationRecord> {
+
+    IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(Page page, Integer departLimsId, Integer userId, String userName);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java
new file mode 100644
index 0000000..a77cb79
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonRewardPunishmentRecordMapper.java
@@ -0,0 +1,26 @@
+package com.ruoyi.personnel.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.personnel.dto.PersonRewardPunishmentRecordDto;
+import com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel;
+import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 濂栨儵璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-08 11:25:02
+ */
+public interface PersonRewardPunishmentRecordMapper extends BaseMapper<PersonRewardPunishmentRecord> {
+
+    IPage<PersonRewardPunishmentRecordDto> rewardPunishmentPage(Page page, Integer userId, String userName, Date startTime, Date endTime, Integer departmentId);
+
+    List<PersonRewardPunishmentRecordExcel> rewardPunishmentExport(Integer userId, Integer departmentId, String userName, Date startTime, Date endTime);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java
new file mode 100644
index 0000000..55536fb
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonJobResponsibilities.java
@@ -0,0 +1,78 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 02:07:49
+ */
+@Getter
+@Setter
+@TableName("cnas_person_job_responsibilities")
+@ApiModel(value = "PersonJobResponsibilities瀵硅薄", description = "宀椾綅鑱岃矗")
+public class PersonJobResponsibilities implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("1宀椾綅鍚嶇О")
+    private String postName;
+
+    @ApiModelProperty("1宸ヤ綔鐩爣")
+    private String jobObjective;
+
+    @ApiModelProperty("1宀椾綅鑱岃矗")
+    private String jobResponsibilities;
+
+    @ApiModelProperty("1浠昏亴浜篿d")
+    private String incumbentId;
+
+    @ApiModelProperty("1 鎻愪氦鎿嶄綔浜�")
+    private String submittingOperator;
+
+    @ApiModelProperty("1鎻愪氦鏃ユ湡")
+    private LocalDateTime submittingDate;
+
+    @ApiModelProperty("2 浠昏亴浜� 涓荤id")
+    private Integer supervisorId;
+
+    @ApiModelProperty("2 浠昏亴浜� 鎿嶄綔浜�")
+    private String incumbentOperator;
+
+    @ApiModelProperty("2 浠昏亴浜� 鏃ユ湡")
+    private LocalDateTime incumbentDate;
+
+    @ApiModelProperty("3 涓荤 鎿嶄綔浜�")
+    private String supervisorOperator;
+
+    @ApiModelProperty("3 涓荤 鏃ユ湡")
+    private LocalDateTime supervisorDate;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("褰撳墠鐘舵��")
+    private String currentState;
+
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡 / 鎻愪氦鏃ユ湡", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("褰撳墠璐熻矗浜�")
+    private String currentResponsible;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java
new file mode 100644
index 0000000..b7103f0
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPersonnelCapacity.java
@@ -0,0 +1,114 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 浜哄憳鑳藉姏
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 11:26:18
+ */
+@Getter
+@Setter
+@TableName("cnas_person_personnel_capacity")
+@ApiModel(value = "PersonPersonnelCapacity瀵硅薄", description = "浜哄憳鑳藉姏")
+public class PersonPersonnelCapacity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("瀛﹀巻")
+    private String academicDegree;
+
+    @ApiModelProperty("瀛﹀巻 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer academicConformNot;
+
+    @ApiModelProperty("瀛﹀巻 澶囨敞")
+    private String academicRemarks;
+
+    @ApiModelProperty("鐩稿叧骞撮檺")
+    private String relatedYears;
+
+    @ApiModelProperty("鐩稿叧骞撮檺  绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer relatedYearsConformNot;
+
+    @ApiModelProperty("鐩稿叧骞撮檺 澶囨敞")
+    private String relatedYearsRemarks;
+
+    @ApiModelProperty("鐩稿叧鍩硅")
+    private String relatedTraining;
+
+    @ApiModelProperty("鐩稿叧鍩硅 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer relatedTrainingConformNot;
+
+    @ApiModelProperty("鐩稿叧鍩硅 澶囨敞")
+    private String relatedTrainingRemarks;
+
+    @ApiModelProperty("鐩稿叧缁忛獙")
+    private String relevantExperience;
+
+    @ApiModelProperty("鐩稿叧缁忛獙 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer relevantExperienceConformNot;
+
+    @ApiModelProperty("鐩稿叧缁忛獙 澶囨敞")
+    private String relevantExperienceRemarks;
+
+    @ApiModelProperty("涓婂矖璇�")
+    private String workLicense;
+
+    @ApiModelProperty("涓婂矖璇� 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer workLicenseConformNot;
+
+    @ApiModelProperty("涓婂矖璇� 澶囨敞")
+    private String workLicenseRemarks;
+
+    @ApiModelProperty("宀椾綅鑱岃矗")
+    private String jobResponsibilities;
+
+    @ApiModelProperty("宀椾綅鑱岃矗 绗﹀悎涓庡惁(1锛氱鍚堬紱2锛氫笉绗﹀悎锛�3锛氫笉閫傜敤)")
+    private Integer jobResponsibilitiesConformNot;
+
+    @ApiModelProperty("宀椾綅鑱岃矗 澶囨敞")
+    private String jobResponsibilitiesRemarks;
+
+    @ApiModelProperty("缁煎悎璇勪环")
+    private String comprehensiveAssessment;
+
+    @ApiModelProperty("2 纭浜� userId涓婚敭")
+    private Integer confirmOperatingPersonnelId;
+
+    @ApiModelProperty("2 纭浜� 鏃ユ湡")
+    private LocalDateTime confirmDate;
+
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡", hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鍒涘缓浜�", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty(value = "鏇存柊浜�", hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "浜哄憳濮撳悕 id")
+    private Integer userId;
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java
new file mode 100644
index 0000000..f341b83
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonPostAuthorizationRecord.java
@@ -0,0 +1,74 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 浠昏亴鎺堟潈璁板綍
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 10:48:17
+ */
+@Getter
+@Setter
+@TableName("cnas_person_post_authorization_record")
+@ApiModel(value = "PersonPostAuthorizationRecord瀵硅薄", description = "浠昏亴鎺堟潈璁板綍")
+public class PersonPostAuthorizationRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("璇佷功缂栧彿")
+    private String certificateNumber;
+
+    @ApiModelProperty("琚换鑱屼汉鍛榠d")
+    private String userId;
+
+    @ApiModelProperty("浠昏亴宀椾綅")
+    private String post;
+
+    @ApiModelProperty("鎿嶄綔绫诲瀷")
+    private String operationType;
+
+    @ApiModelProperty("鍘熸枃浠跺悕绉�")
+    private String fileName;
+
+    @ApiModelProperty("绯荤粺鐢熸垚鏂囦欢鍚嶇О")
+    private String systemFileName;
+
+    @ApiModelProperty("澶囨敞")
+    private String remarks;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鏇存柊浜篿d",hidden = true)
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty(value = "鍒涘缓浜篿d", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鐞嗚鐭ヨ瘑鑰冭瘯鎴愮哗")
+    private String num1;
+
+    @ApiModelProperty("鎿嶄綔鎶�鑳借�冭瘯鎴愮哗")
+    private String num2;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java
new file mode 100644
index 0000000..ab8bea1
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonRewardPunishmentRecord.java
@@ -0,0 +1,61 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 濂栨儵璁板綍
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-08 11:25:02
+ */
+@Getter
+@Setter
+@TableName("cnas_person_reward_punishment_record")
+@ApiModel(value = "PersonRewardPunishmentRecord瀵硅薄", description = "濂栨儵璁板綍")
+public class PersonRewardPunishmentRecord implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty("涓婚敭id")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("濂栨儵绾у埆")
+    private String rewardPunishLevel;
+
+    @ApiModelProperty("濂栨儵鍚嶇О")
+    private String rewardPunishName;
+
+    @ApiModelProperty("濂栨儵鏃堕棿")
+    private LocalDateTime rewardPunishTime;
+
+    @ApiModelProperty("濂栨儵鍗曚綅")
+    private String rewardPunishWorkUnit;
+
+    @ApiModelProperty("濂栨儵鍐呭")
+    private String rewardPunishContent;
+
+    @ApiModelProperty("鐢ㄦ埛id")
+    private Integer userId;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty(value = "鍒涘缓浜�", hidden = true)
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java
new file mode 100644
index 0000000..2afa074
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonJobResponsibilitiesService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.personnel.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto;
+import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 02:07:49
+ */
+public interface PersonJobResponsibilitiesService extends IService<PersonJobResponsibilities> {
+
+    IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page,
+                                                                        String userId,
+                                                                        String departmentId,
+                                                                        String userName);
+
+    void exportPersonJobResponsibilities(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPersonnelCapacityService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPersonnelCapacityService.java
new file mode 100644
index 0000000..44820ed
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPersonnelCapacityService.java
@@ -0,0 +1,34 @@
+//package com.ruoyi.personnel.service;
+//
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+//import com.baomidou.mybatisplus.extension.service.IService;
+//import com.ruoyi.personnel.pojo.PersonPersonnelCapacity;
+//
+//import javax.servlet.http.HttpServletResponse;
+//
+///**
+// * <p>
+// * 浜哄憳鑳藉姏 鏈嶅姟绫�
+// * </p>
+// *
+// * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+// * @since 2024-10-10 11:26:18
+// */
+//public interface PersonPersonnelCapacityService extends IService<PersonPersonnelCapacity> {
+//
+//    IPage<PersonPersonnelCapacityDto> personPersonnelCapacityPage(Page page, Integer departLimsId, Integer userId, String userName);
+//
+//    /**
+//     * 瀵煎嚭浜哄憳鑳藉姏
+//     * @param id
+//     * @param response
+//     */
+//    void exportPersonnelCapacity(Integer id, HttpServletResponse response);
+//
+//    /**
+//     * submitConfirmPersonnelCapability
+//     * @param personPersonnelCapacity
+//     */
+//    void submitConfirmPersonnelCapability(PersonPersonnelCapacity personPersonnelCapacity);
+//}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPostAuthorizationRecordService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPostAuthorizationRecordService.java
new file mode 100644
index 0000000..3c23bfe
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonPostAuthorizationRecordService.java
@@ -0,0 +1,27 @@
+package com.ruoyi.personnel.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
+import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 浠昏亴鎺堟潈璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 10:48:17
+ */
+public interface PersonPostAuthorizationRecordService extends IService<PersonPostAuthorizationRecord> {
+
+    IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(Page page,
+                                                                              Integer departLimsId,
+                                                                              Integer userId,
+                                                                              String userName);
+
+    void exportPersonPostAuthorizationRecord(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonRewardPunishmentRecordService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonRewardPunishmentRecordService.java
new file mode 100644
index 0000000..0f2dfdc
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonRewardPunishmentRecordService.java
@@ -0,0 +1,31 @@
+package com.ruoyi.personnel.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.personnel.dto.PersonRewardPunishmentRecordDto;
+import com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel;
+import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 濂栨儵璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-08 11:25:02
+ */
+public interface PersonRewardPunishmentRecordService extends IService<PersonRewardPunishmentRecord> {
+
+    IPage<PersonRewardPunishmentRecordDto> rewardPunishmentPage(Page page,
+                                                                Integer userId,
+                                                                String userName,
+                                                                Date startTime,
+                                                                Date endTime,
+                                                                Integer departmentId);
+
+    List<PersonRewardPunishmentRecordExcel> rewardPunishmentExport(Integer userId, Integer departmentId, String userName, Date startTime, Date endTime);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java
new file mode 100644
index 0000000..d55a3f0
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonJobResponsibilitiesServiceImpl.java
@@ -0,0 +1,113 @@
+package com.ruoyi.personnel.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto;
+import com.ruoyi.personnel.mapper.PersonJobResponsibilitiesMapper;
+import com.ruoyi.personnel.pojo.PersonJobResponsibilities;
+import com.ruoyi.personnel.service.PersonJobResponsibilitiesService;
+import com.ruoyi.system.mapper.UserMapper;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 02:07:49
+ */
+@Service
+@AllArgsConstructor
+public class PersonJobResponsibilitiesServiceImpl extends ServiceImpl<PersonJobResponsibilitiesMapper, PersonJobResponsibilities> implements PersonJobResponsibilitiesService {
+
+    @Resource
+    private UserMapper userMapper;
+
+
+    @Override
+    public IPage<PersonJobResponsibilitiesDto> personJobResponsibilitiesSelect(Page page, String userId, String departmentId, String userName) {
+        return baseMapper.personJobResponsibilitiesSelect(page, userId, departmentId, userName);
+    }
+
+    @Override
+    public void exportPersonJobResponsibilities(Integer id, HttpServletResponse response) {
+        PersonJobResponsibilities personJobResponsibilities = baseMapper.selectById(id);
+        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+        //宀椾綅鍚嶇О
+        String name = personJobResponsibilities.getPostName();
+        //鎵�灞為儴闂�
+        String departLims = userMapper.selectUserDepartmentLimsName(Integer.parseInt(personJobResponsibilities.getIncumbentId()));
+        //宸ヤ綔鐩爣
+        String objective = personJobResponsibilities.getJobObjective();
+        //宀椾綅鑱岃矗
+        String responsibilities = personJobResponsibilities.getJobResponsibilities();
+        //浠昏亴浜�
+        User user = userMapper.selectById(Integer.parseInt(personJobResponsibilities.getIncumbentId()));
+        String incumbent = user.getName();
+        //浠昏亴鏃堕棿
+        String incumbentDate = "";
+        if (ObjectUtils.isNotEmpty(personJobResponsibilities.getIncumbentDate())) {
+            incumbentDate = personJobResponsibilities.getIncumbentDate().format(formatter);
+        }
+        //涓荤
+        String supervisor = "";
+        if (ObjectUtils.isNotEmpty(personJobResponsibilities.getSupervisorId())) {
+            supervisor = userMapper.selectById(personJobResponsibilities.getSupervisorId()).getName();
+        }
+        //涓荤鏃堕棿
+        String supervisorDate = "";
+        if (ObjectUtils.isNotEmpty(personJobResponsibilities.getSupervisorDate())) {
+            supervisorDate = personJobResponsibilities.getSupervisorDate().format(formatter);
+        }
+
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/explain-deal.docx");
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        String finalIncumbentDate = incumbentDate;
+        String finalSupervisor = supervisor;
+        String finalSupervisorDate = supervisorDate;
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("name", name);
+                    put("account", user.getAccount());
+                    put("departLims", departLims);
+                    put("objective", objective);
+                    put("responsibilities", responsibilities);
+                    put("incumbent", incumbent);
+                    put("incumbentDate", finalIncumbentDate);
+                    put("supervisor", finalSupervisor);
+                    put("supervisorDate", finalSupervisorDate);
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    name + "鐨勪换鑱屽矖浣嶈鏄庝功", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java
new file mode 100644
index 0000000..68f2961
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonPostAuthorizationRecordServiceImpl.java
@@ -0,0 +1,132 @@
+package com.ruoyi.personnel.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.FilePictureRenderData;
+import com.ruoyi.common.core.domain.entity.User;
+import com.ruoyi.framework.exception.ErrorException;
+import com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto;
+import com.ruoyi.personnel.mapper.PersonPostAuthorizationRecordMapper;
+import com.ruoyi.personnel.pojo.PersonPostAuthorizationRecord;
+import com.ruoyi.personnel.service.PersonPostAuthorizationRecordService;
+import com.ruoyi.system.mapper.UserMapper;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 浠昏亴鎺堟潈璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 10:48:17
+ */
+@Service
+public class PersonPostAuthorizationRecordServiceImpl extends ServiceImpl<PersonPostAuthorizationRecordMapper, PersonPostAuthorizationRecord> implements PersonPostAuthorizationRecordService {
+
+    @Resource
+    private UserMapper userMapper;
+
+    @Value("${file.path}")
+    private String imgUrl;
+
+    @Override
+    public IPage<PersonPostAuthorizationRecordDto> personPostAuthorizationRecordPage(Page page, Integer departLimsId, Integer userId, String userName) {
+        return baseMapper.personPostAuthorizationRecordPage(page, departLimsId, userId, userName);
+    }
+
+    @Override
+    public void exportPersonPostAuthorizationRecord(Integer id, HttpServletResponse response) {
+        PersonPostAuthorizationRecord personPostAuthorizationRecord = baseMapper.selectById(id);
+        //濮撳悕
+        User user = userMapper.selectById(personPostAuthorizationRecord.getUserId());
+        String name = user.getName();
+        //todo: 浜哄憳浠昏亴鎺堟潈璁板綍濮撳悕鑻辨枃
+//        HanyuPinyinOutputFormat format = new HanyuPinyinOutputFormat();
+//        format.setCaseType(HanyuPinyinCaseType.LOWERCASE);
+//        format.setToneType(HanyuPinyinToneType.WITHOUT_TONE);
+//        StringBuilder pinyinBuilder = new StringBuilder();
+//        for (int i = 0; i < name.length(); i++) {
+//            char c = name.charAt(i);
+//            // 鍒ゆ柇鏄惁鏄眽瀛�
+//            if (Character.toString(c).matches("[\\u4E00-\\u9FFF]")) {
+//                // 鑾峰彇姹夊瓧鐨勬嫾闊虫暟缁�
+//                String[] pinyinArray = new String[0];
+//                try {
+//                    pinyinArray = PinyinHelper.toHanyuPinyinStringArray(c, format);
+//                } catch (BadHanyuPinyinOutputFormatCombination badHanyuPinyinOutputFormatCombination) {
+//
+//                }
+//                if (pinyinArray!= null && pinyinArray.length > 0) {
+//                    pinyinBuilder.append(pinyinArray[0]);
+//                }
+//            } else {
+//                pinyinBuilder.append(c);
+//            }
+//        }
+//        String nameEn = pinyinBuilder.toString();
+        String nameEn = user.getNameEn();
+        //鐞嗚鐭ヨ瘑鑰冭瘯鎴愮哗
+        String num1=personPostAuthorizationRecord.getNum1();
+        //鎿嶄綔鎶�鑳借�冭瘯鎴愮哗
+        String num2=personPostAuthorizationRecord.getNum2();
+        //璇佷功缂栧彿
+        String code = personPostAuthorizationRecord.getCertificateNumber();
+        //鍙戣瘉鏃堕棿
+        LocalDateTime createTime = personPostAuthorizationRecord.getCreateTime();
+        String year = createTime.getYear() + "";
+        String mon = createTime.getMonth().getValue() + "";
+        String day = createTime.getDayOfMonth() + "";
+        //涓汉鐓х墖
+        if (ObjectUtils.isEmpty(user.getPictureUrl())) {
+            throw new ErrorException(name+"鐨勪釜浜虹収鐗囨病鏈変笂浼�");
+        }
+        String pictureUrl = user.getPictureUrl();
+
+
+        InputStream inputStream = this.getClass().getResourceAsStream("/static/credentials-deal.docx");
+        ConfigureBuilder builder = Configure.builder();
+        builder.useSpringEL(true);
+        XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+                new HashMap<String, Object>() {{
+                    put("name", name);
+                    put("nameEn", nameEn);
+                    put("num1", num1);
+                    put("num2", num2);
+                    put("code", code);
+                    put("year", year);
+                    put("mon", mon);
+                    put("day", day);
+                    put("writeUrl", new FilePictureRenderData(100,50,imgUrl + "/" + pictureUrl));
+                }});
+
+        try {
+            response.setContentType("application/msword");
+            String fileName = URLEncoder.encode(
+                    name+"鐨勫矖浣嶈亴涓氳祫鏍兼寮�", "UTF-8");
+            response.setHeader("Content-disposition",
+                    "attachment;filename=" + fileName + ".docx");
+            OutputStream os = response.getOutputStream();
+            template.write(os);
+            os.flush();
+            os.close();
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new RuntimeException("瀵煎嚭澶辫触");
+        }
+
+    }
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonRewardPunishmentRecordServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonRewardPunishmentRecordServiceImpl.java
new file mode 100644
index 0000000..9393bbd
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonRewardPunishmentRecordServiceImpl.java
@@ -0,0 +1,36 @@
+package com.ruoyi.personnel.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.personnel.dto.PersonRewardPunishmentRecordDto;
+import com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel;
+import com.ruoyi.personnel.mapper.PersonRewardPunishmentRecordMapper;
+import com.ruoyi.personnel.pojo.PersonRewardPunishmentRecord;
+import com.ruoyi.personnel.service.PersonRewardPunishmentRecordService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 濂栨儵璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-08 11:25:02
+ */
+@Service
+public class PersonRewardPunishmentRecordServiceImpl extends ServiceImpl<PersonRewardPunishmentRecordMapper, PersonRewardPunishmentRecord> implements PersonRewardPunishmentRecordService {
+
+    @Override
+    public IPage<PersonRewardPunishmentRecordDto> rewardPunishmentPage(Page page, Integer userId, String userName, Date startTime, Date endTime, Integer departmentId) {
+        return baseMapper.rewardPunishmentPage(page, userId, userName, startTime, endTime, departmentId);
+    }
+
+    @Override
+    public List<PersonRewardPunishmentRecordExcel> rewardPunishmentExport(Integer userId, Integer departmentId, String userName, Date startTime, Date endTime) {
+        return baseMapper.rewardPunishmentExport(userId, departmentId, userName, startTime, endTime);
+    }
+}
diff --git a/cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml
new file mode 100644
index 0000000..ace613b
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.personnel.mapper.PersonJobResponsibilitiesMapper">
+
+
+    <select id="personJobResponsibilitiesSelect" resultType="com.ruoyi.personnel.dto.PersonJobResponsibilitiesDto">
+        select cpt.*, u.name incumbent_name, su.name supervisor_name, dl.name depart_lims_name, u.account
+        from cnas_person_job_responsibilities cpt
+        left join user u on cpt.incumbent_id = u.id
+        left join user su on cpt.supervisor_id = su.id
+        left join department_lims dl on dl.id = SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1)
+        <where>
+            <if test="userId != null and userId != ''">
+                and cpt.incumbent_id = #{userId}
+            </if>
+            <if test="departmentId != null and departmentId != ''">
+                and FIND_IN_SET(#{departmentId}, u.depart_lims_id)
+            </if>
+            <if test="userName != null and userName != ''">
+                and u.name like concat('%', #{userName}, '%')
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.xml
new file mode 100644
index 0000000..bb3ef16
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.personnel.mapper.PersonPostAuthorizationRecordMapper">
+
+
+    <select id="personPostAuthorizationRecordPage" resultType="com.ruoyi.personnel.dto.PersonPostAuthorizationRecordDto">
+        select cppar.*, us.name create_user_name, u.account account, u.name user_name
+        from cnas_person_post_authorization_record cppar
+        left join user u on cppar.user_id = u.id
+        left join user us on cppar.create_user = us.id
+        <where>
+            <if test="userId != null and userId != ''">
+                and cppar.user_id = #{userId}
+            </if>
+            <if test="departLimsId != null and departLimsId != ''">
+                and FIND_IN_SET(#{departLimsId},u.depart_lims_id)
+            </if>
+            <if test="userName != null and userName != ''">
+                and u.name like concat('%', #{userName}, '%')
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml
new file mode 100644
index 0000000..d92a163
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml
@@ -0,0 +1,47 @@
+<?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.ruoyi.personnel.mapper.PersonRewardPunishmentRecordMapper">
+
+
+    <select id="rewardPunishmentPage" resultType="com.ruoyi.personnel.dto.PersonRewardPunishmentRecordDto">
+        select cprpr.*, us.name create_user_name, u.account account, u.name user_name
+        from cnas_person_reward_punishment_record cprpr
+        left join user u on cprpr.user_id = u.id
+        left join user us on cprpr.create_user = us.id
+        <where>
+            <if test="userId != null and userId != ''">
+                and cprpr.user_id = #{userId}
+            </if>
+            <if test="userName != null and userName != ''">
+                and u.name like concat('%', #{userName}, '%')
+            </if>
+            <if test="startTime != null and endTime != null">
+                AND DATE(cprpr.reward_punish_time) BETWEEN #{startTime} AND #{endTime}
+            </if>
+            <if test="departmentId != null and departmentId != ''">
+                and FIND_IN_SET(#{departmentId}, u.depart_lims_id)
+            </if>
+        </where>
+    </select>
+
+    <select id="rewardPunishmentExport" resultType="com.ruoyi.personnel.excel.PersonRewardPunishmentRecordExcel">
+        select cprpr.*, us.name create_user_name, u.account account, u.name user_name
+        from cnas_person_reward_punishment_record cprpr
+        left join user u on cprpr.user_id = u.id
+        left join user us on cprpr.create_user = us.id
+        <where>
+            <if test="userId != null and userId != ''">
+                and cprpr.user_id = #{userId}
+            </if>
+            <if test="departmentId != null and departmentId != ''">
+                and FIND_IN_SET(#{departmentId},u.depart_lims_id)
+            </if>
+            <if test="userName != null and userName != ''">
+                and u.name like concat('%', #{userName}, '%')
+            </if>
+            <if test="startTime != null and endTime != null">
+                AND DATE(cprpr.reward_punish_time) BETWEEN #{startTime} AND #{endTime}
+            </if>
+        </where>
+    </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/static/communication-deal.docx b/cnas-personnel/src/main/resources/static/communication-deal.docx
new file mode 100644
index 0000000..9045072
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/communication-deal.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/credentials-deal.docx b/cnas-personnel/src/main/resources/static/credentials-deal.docx
new file mode 100644
index 0000000..2fda5fd
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/credentials-deal.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/explain-deal.docx b/cnas-personnel/src/main/resources/static/explain-deal.docx
new file mode 100644
index 0000000..7333bec
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/explain-deal.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/person-basic-info.docx b/cnas-personnel/src/main/resources/static/person-basic-info.docx
new file mode 100644
index 0000000..6d1739a
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/person-basic-info.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/person-training-record.docx b/cnas-personnel/src/main/resources/static/person-training-record.docx
new file mode 100644
index 0000000..3bbf0bc
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/person-training-record.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/person-training.docx b/cnas-personnel/src/main/resources/static/person-training.docx
new file mode 100644
index 0000000..0a6bf24
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/person-training.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/personnel-capacity.docx b/cnas-personnel/src/main/resources/static/personnel-capacity.docx
new file mode 100644
index 0000000..e7ad3b9
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/personnel-capacity.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/super-vise-plan.docx b/cnas-personnel/src/main/resources/static/super-vise-plan.docx
new file mode 100644
index 0000000..8e5a56f
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/super-vise-plan.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/supervision-control-sheet.docx b/cnas-personnel/src/main/resources/static/supervision-control-sheet.docx
new file mode 100644
index 0000000..dc398e3
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/supervision-control-sheet.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx b/cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx
new file mode 100644
index 0000000..16775b0
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/supervision-record.docx b/cnas-personnel/src/main/resources/static/supervision-record.docx
new file mode 100644
index 0000000..ede4555
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/supervision-record.docx
Binary files differ
diff --git a/cnas-personnel/src/main/resources/static/training-record.docx b/cnas-personnel/src/main/resources/static/training-record.docx
new file mode 100644
index 0000000..1e6955d
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/training-record.docx
Binary files differ

--
Gitblit v1.9.3