From dfb1cbb378cb4577b6ce68ed91fb2525bf968a27 Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期六, 21 十二月 2024 10:24:42 +0800
Subject: [PATCH] cnas人员模块(更新至3077bd)
---
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrackRecordMapper.java | 24
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisionProcessingSheetServiceImpl.java | 121
system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java | 2
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonPersonnelCapacityExportDto.java | 101
cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonSupervisePlanDetailsListener.java | 43
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonRewardPunishmentRecordMapper.java | 27
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrackRecord.java | 83
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTraining.java | 83
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisePlanServiceImpl.java | 160 +
cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml | 134
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonRewardPunishmentRecordServiceImpl.java | 38
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionControlSheetService.java | 24
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonCommunicationAbilityServiceImpl.java | 117
cnas-personnel/src/main/resources/static/supervision-record.docx | 0
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonRewardPunishmentRecord.java | 64
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordListDto.java | 37
cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonTrainingDetailedUpload.java | 37
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionRecordDto.java | 32
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionProcessingSheet.java | 87
cnas-personnel/src/main/resources/static/supervision-processing-sheet.docx | 0
cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonBasicInfoController.java | 146 +
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisePlanMapper.java | 21
cnas-personnel/src/main/resources/mapper/PersonSupervisionProcessingSheetMapper.xml | 28
cnas-personnel/src/main/resources/static/communication-deal.docx | 0
cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonPostAuthorizationRecordController.java | 70
cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonRewardPunishmentRecordExcel.java | 36
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordDto.java | 23
cnas-personnel/src/main/resources/static/supervision-control-sheet.docx | 0
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisePlanDetailsService.java | 28
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonBasicInfo.java | 251 +
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisePlanDetailsDto.java | 12
cnas-personnel/src/main/java/com/yuanchu/mom/schedule/PersonSchedule.java | 49
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordSubmitDto.java | 30
cnas-personnel/src/main/resources/static/explain-deal.docx | 0
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisePlanDetailsMapper.java | 25
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonBasicInfoDto.java | 51
cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrainingRecordController.java | 65
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonBasicInfoServiceImpl.java | 759 +++++
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrainingRecord.java | 40
framework/src/main/java/com/yuanchu/mom/numgen/SerializedLambda.java | 143
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonPostAuthorizationRecordServiceImpl.java | 136
cnas-personnel/src/main/resources/mapper/PersonTrainingMapper.xml | 65
cnas-personnel/src/main/java/com/yuanchu/mom/controller/SuperVisePlanController.java | 126
cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonTrainingDetailedListener.java | 42
cnas-personnel/src/main/resources/mapper/PersonSupervisionRecordMapper.xml | 77
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonJobResponsibilitiesMapper.java | 20
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/AnnexServiceImpl.java | 13
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonCommunicationAbilityDto.java | 16
cnas-personnel/pom.xml | 52
cnas-personnel/src/main/java/com/yuanchu/mom/service/AnnexService.java | 7
cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonSupervisionRecordController.java | 156 +
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonPostAuthorizationRecordService.java | 27
cnas-personnel/src/main/resources/static/credentials-deal.docx | 0
cnas-personnel/src/main/java/com/yuanchu/mom/dto/TrainingRecordPersonDetailedDto.java | 28
cnas-personnel/src/main/resources/static/person-training-record.docx | 0
cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml | 40
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionControlSheetMapper.java | 25
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionControlSheet.java | 112
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonPersonnelCapacityServiceImpl.java | 125
cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml | 101
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisePlanDto.java | 18
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingRecordServiceImpl.java | 224 +
cnas-personnel/src/main/resources/mapper/PersonTrainingDetailedMapper.xml | 71
cnas-personnel/src/main/resources/static/personnel-capacity.docx | 0
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonCommunicationAbilityService.java | 25
cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml | 58
cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrackRecordController.java | 97
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonPostAuthorizationRecordMapper.java | 20
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingServiceImpl.java | 312 ++
framework/src/main/java/com/yuanchu/mom/numgen/LambdaUtils.java | 127
cnas-personnel/src/main/resources/static/person-training.docx | 0
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingDetailedMapper.java | 45
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisePlanDetails.java | 77
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionRecord.java | 107
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionProcessingSheetMapper.java | 24
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/AnnexMapper.java | 9
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonJobResponsibilities.java | 78
cnas-personnel/src/main/resources/mapper/PersonPersonnelCapacityMapper.xml | 168 +
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrackRecordService.java | 23
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonPersonnelCapacityDto.java | 30
cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonCommunicationAbilityController.java | 61
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonCommunicationAbilityMapper.java | 21
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonPersonnelCapacityMapper.java | 29
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionProcessingSheetService.java | 24
framework/src/main/java/com/yuanchu/mom/numgen/NumberGeneratorModelHelper.java | 107
cnas-personnel/src/main/resources/static/person-deal.docx | 0
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionControlSheetExportDto.java | 76
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonJobResponsibilitiesServiceImpl.java | 118
cnas-personnel/src/main/java/com/yuanchu/mom/dto/TrainingRecordExportDto.java | 32
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonBasicInfoMapper.java | 37
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingDto.java | 23
framework/src/main/java/com/yuanchu/mom/numgen/NumberGenerator.java | 146 +
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisePlanService.java | 34
cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrainingController.java | 206 +
cnas-personnel/src/main/resources/mapper/PersonSupervisePlanMapper.xml | 33
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonPostAuthorizationRecord.java | 77
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonPersonnelCapacityService.java | 37
cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonRewardPunishmentRecordController.java | 100
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingDetailedDto.java | 31
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingService.java | 49
cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.xml | 40
cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonPersonnelCapacityController.java | 97
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingMapper.java | 20
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisionControlSheetServiceImpl.java | 155 +
cnas-personnel/src/main/resources/mapper/PersonTrackRecordMapper.xml | 47
cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonSupervisePlanDetailsUpload.java | 28
cnas-personnel/src/main/resources/static/training-record.docx | 0
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisionRecordServiceImpl.java | 126
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionRecordMapper.java | 27
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisePlanDetailsServiceImpl.java | 44
cnas-personnel/src/main/resources/mapper/PersonSupervisePlanDetailsMapper.xml | 31
cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonJobResponsibilitiesController.java | 63
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonCommunicationAbility.java | 66
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingDetailedServiceImpl.java | 109
framework/src/main/java/com/yuanchu/mom/numgen/NumberTableInfo.java | 16
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/Annex.java | 50
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonJobResponsibilitiesService.java | 30
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonRewardPunishmentRecordDto.java | 14
cnas-personnel/src/main/resources/mapper/PersonSupervisionControlSheetMapper.xml | 41
cnas-personnel/src/main/resources/static/super-vise-plan.docx | 0
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingUpdateDto.java | 17
framework/pom.xml | 12
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonBasicInfoDetailsDto.java | 65
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonPostAuthorizationRecordDto.java | 14
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrainingDetailed.java | 111
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionProcessingSheetDto.java | 39
cnas-personnel/src/main/resources/mapper/PersonCommunicationAbilityMapper.xml | 31
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingDetailedService.java | 32
cnas-server/src/main/java/com/yuanchu/mom/pojo/DepartmentLims.java | 4
cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonJobResponsibilitiesDto.java | 16
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionRecordService.java | 33
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingRecordService.java | 58
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonRewardPunishmentRecordService.java | 32
cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonBasicInfoService.java | 36
cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrackRecordServiceImpl.java | 33
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisePlan.java | 66
cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingRecordMapper.java | 67
system-run/pom.xml | 5
cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonPersonnelCapacity.java | 125
139 files changed, 8,713 insertions(+), 0 deletions(-)
diff --git a/cnas-personnel/pom.xml b/cnas-personnel/pom.xml
new file mode 100644
index 0000000..e33cdb0
--- /dev/null
+++ b/cnas-personnel/pom.xml
@@ -0,0 +1,52 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <artifactId>cnas-personnel</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <name>cnas-personnel</name>
+ <description>cnas-personnel</description>
+
+ <packaging>jar</packaging>
+
+ <parent>
+ <artifactId>mom</artifactId>
+ <groupId>com.yuanchu.mom</groupId>
+ <version>1.0.0</version>
+ </parent>
+
+ <dependencies>
+ <dependency>
+ <groupId>com.yuanchu.mom</groupId>
+ <artifactId>user-server</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.yuanchu.mom</groupId>
+ <artifactId>framework</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.yuanchu.mom</groupId>
+ <artifactId>cnas-server</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ <scope>compile</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>com.belerweb</groupId>
+ <artifactId>pinyin4j</artifactId>
+ <version>2.5.1</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.poi</groupId>
+ <artifactId>poi-ooxml-lite</artifactId>
+ <version>5.2.2</version>
+ <scope>compile</scope>
+ </dependency>
+ </dependencies>
+
+</project>
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonBasicInfoController.java b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonBasicInfoController.java
new file mode 100644
index 0000000..bc6b4a0
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonBasicInfoController.java
@@ -0,0 +1,146 @@
+package com.yuanchu.mom.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.annotation.CustomClazzName;
+import com.yuanchu.mom.annotation.ValueClassify;
+import com.yuanchu.mom.dto.DepartmentDto;
+import com.yuanchu.mom.dto.PersonBasicInfoDetailsDto;
+import com.yuanchu.mom.dto.PersonBasicInfoDto;
+import com.yuanchu.mom.dto.UserPageDto;
+import com.yuanchu.mom.pojo.Annex;
+import com.yuanchu.mom.service.AnnexService;
+import com.yuanchu.mom.service.PersonBasicInfoService;
+import com.yuanchu.mom.utils.FileSaveUtil;
+import com.yuanchu.mom.utils.JackSonUtil;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-08-30 09:19:57
+ */
+@Api(tags = "浜哄憳-浜哄憳鍩烘湰淇℃伅")
+@RestController
+@RequestMapping("/personBasicInfo")
+@CustomClazzName(name = "璧勬簮瑕佹眰",index = 8)
+public class PersonBasicInfoController {
+
+ @Resource
+ private PersonBasicInfoService personBasicInfoService;
+
+ @Resource
+ private AnnexService annexService;
+
+ @ValueClassify("浜哄憳鍩烘湰淇℃伅")
+ @ApiOperation(value = "鏌ヨCNAS浜哄憳渚ц竟鏍�")
+ @GetMapping("/selectCNSAPersonTree")
+ public Result<List<DepartmentDto>> selectCNSAPersonTree() {
+ return Result.success(personBasicInfoService.selectCNSAPersonTree());
+ }
+
+ @ValueClassify("浜哄憳鍩烘湰淇℃伅")
+ @ApiOperation(value = "鑾峰彇CNAS浜哄憳鍩烘湰淇℃伅")
+ @GetMapping("/getCNASPersonnelInfo")
+ public Result getCNASPersonnelInfo(Integer userId) {
+ return Result.success(personBasicInfoService.getCNASPersonnelInfo(userId));
+ }
+
+ @ValueClassify("浜哄憳鍩烘湰淇℃伅")
+ @ApiOperation(value = "淇濆瓨CNAS浜哄憳鍩烘湰淇℃伅")
+ @PostMapping("/saveCNASPersonnelInfo")
+ public Result saveCNASPersonnelInfo(@RequestBody PersonBasicInfoDto personBasicInfoDto) {
+ personBasicInfoService.saveCNASPersonnelInfo(personBasicInfoDto);
+ return Result.success();
+ }
+
+ @ApiOperation(value = "浜哄憳鏄庣粏鍒嗛〉鏌ヨ")
+ @ValueClassify("浜哄憳鍩烘湰淇℃伅")
+ @GetMapping("basicInformationOfPersonnelSelectPage")
+ public Result<IPage<Map<String, Object>>> basicInformationOfPersonnelSelectPage(Page<List<PersonBasicInfoDetailsDto>> page, String name, Integer departmentId) {
+ return Result.success(personBasicInfoService.basicInformationOfPersonnelSelectPage(page, name, departmentId));
+ }
+
+ // 涓婁紶鏂囦欢鎺ュ彛
+ @ApiOperation(value = "涓婁紶鏂囦欢鎺ュ彛")
+ @PostMapping("/saveCNASFile")
+ public Result saveFile(@RequestPart("file") MultipartFile file) {
+ String s = FileSaveUtil.StoreFile(file);
+ return Result.success("涓婁紶鎴愬姛", s);
+ }
+
+ @GetMapping("/getAnnexByUserId")
+ public Result<List<Annex>> getAnnexByUserId(Integer userId) {
+ List<Annex> list = annexService.list(new LambdaQueryWrapper<Annex>().eq(Annex::getUserId, userId));
+ return Result.success(list);
+ }
+
+ // 鍒犻櫎鏂囦欢
+ @DeleteMapping("/deleteCNASFile")
+ public Result saveFile(String fileName) {
+ String[] split = fileName.split(",");
+ for (String s : split) {
+ FileSaveUtil.DeleteFile(s);
+ }
+ return Result.success();
+
+ }
+
+ /**
+ * 浜哄憳鍩烘湰淇℃伅闄勪欢鏂板
+ */
+ @PostMapping("/addAnnex")
+ public Result addAnnex(@RequestBody Annex annex) {
+ annexService.save(annex);
+ return Result.success();
+ }
+
+ @GetMapping("/getAnnex")
+ public Result<Annex> getAnnex(Integer id) {
+ return Result.success(annexService.getById(id));
+ }
+ /**
+ * 浜哄憳鍩烘湰淇℃伅闄勪欢鍒犻櫎
+ */
+ @DeleteMapping("/deleteAnnex/{id}")
+ public Result deleteAnnex(@PathVariable("id") Integer id) {
+ annexService.removeById(id);
+ return Result.success();
+ }
+
+ /**
+ * 浜哄憳鍩烘湰淇℃伅闄勪欢淇敼
+ *
+ */
+ @PostMapping("/updateAnnex")
+ public Result updateAnnex(@RequestBody Annex annex) {
+ annexService.updateById(annex);
+ return Result.success();
+ }
+
+ @ApiOperation(value = "瀵煎嚭浜哄憳鍩烘湰淇℃伅")
+ @PostMapping("/exportPersonBasicInfo")
+ public void exportPersonBasicInfo(@RequestBody Map<String, Object> data, HttpServletResponse response) throws Exception {
+ UserPageDto userPageDto = JackSonUtil.unmarshal(JackSonUtil.marshal(data.get("entity")), UserPageDto.class);
+ personBasicInfoService.exportPersonBasicInfo(userPageDto,response);
+ }
+
+ @ApiOperation(value = "涓嬭浇浜哄憳妗f鍗�")
+ @PostMapping("/exportPersonBasicInfoById")
+ public Result exportPersonBasicInfoById(Integer id, HttpServletResponse response) {
+ return Result.success(personBasicInfoService.exportPersonBasicInfoById(id,response));
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonCommunicationAbilityController.java b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonCommunicationAbilityController.java
new file mode 100644
index 0000000..07bdaf5
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonCommunicationAbilityController.java
@@ -0,0 +1,61 @@
+package com.yuanchu.mom.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonCommunicationAbilityDto;
+import com.yuanchu.mom.pojo.PersonCommunicationAbility;
+import com.yuanchu.mom.service.PersonCommunicationAbilityService;
+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;
+
+/**
+ * <p>
+ * 娌熼�氳褰� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 12:00:57
+ */
+@Api(tags = "浜哄憳 - 娌熼�氳褰�")
+@RestController
+@RequestMapping("/personCommunicationAbility")
+public class PersonCommunicationAbilityController {
+
+ @Autowired
+ private PersonCommunicationAbilityService personCommunicationAbilityService;
+
+ @ApiOperation(value = "鏂板/鏇存柊 娌熼�氳褰�")
+ @PostMapping("addOrUpdatePersonCommunicationAbility")
+ public Result<?> addOrUpdatePersonCommunicationAbility(@RequestBody PersonCommunicationAbility personCommunicationAbility) {
+ personCommunicationAbilityService.saveOrUpdate(personCommunicationAbility);
+ return Result.success();
+ }
+
+ @ApiOperation(value = "鍒犻櫎 娌熼�氳褰�")
+ @DeleteMapping("deletePersonCommunicationAbility")
+ public Result<?> deletePersonCommunicationAbility(@RequestParam("id") Integer id) {
+ personCommunicationAbilityService.removeById(id);
+ return Result.success();
+ }
+
+
+ @ApiOperation(value = "鏌ヨ 娌熼�氳褰�")
+ @GetMapping("personPersonCommunicationAbilityPage")
+ public Result<IPage<PersonCommunicationAbilityDto>> personPersonCommunicationAbilityPage(Page page,
+ Integer departLimsId,
+ Integer userId,
+ String userName) {
+ return Result.success(personCommunicationAbilityService.personPersonCommunicationAbilityPage(page, departLimsId, userId, userName));
+ }
+
+ @ApiOperation(value = "瀵煎嚭娌熼�氳褰�")
+ @PostMapping("exportPersonCommunicationAbility")
+ public void exportPersonCommunicationAbility(Integer id, HttpServletResponse response) throws Exception{
+ personCommunicationAbilityService.exportPersonCommunicationAbility(id,response);
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonJobResponsibilitiesController.java b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonJobResponsibilitiesController.java
new file mode 100644
index 0000000..ecf526b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonJobResponsibilitiesController.java
@@ -0,0 +1,63 @@
+package com.yuanchu.mom.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.annotation.ValueClassify;
+import com.yuanchu.mom.dto.PersonJobResponsibilitiesDto;
+import com.yuanchu.mom.pojo.PersonJobResponsibilities;
+import com.yuanchu.mom.service.PersonJobResponsibilitiesService;
+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.util.Map;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 02:07:49
+ */
+@Api(tags = "浜哄憳 - 宀椾綅鑱岃矗")
+@RestController
+@RequestMapping("/personJobResponsibilities")
+public class PersonJobResponsibilitiesController {
+ @Autowired
+ private PersonJobResponsibilitiesService personJobResponsibilitiesService;
+
+ @ValueClassify("宀椾綅鑱岃矗")
+ @ApiOperation(value = "鏂板/鏇存柊 宀椾綅鑱岃矗")
+ @PostMapping("personJobResponsibilitiesSave")
+ public Result<?> personJobResponsibilitiesSave(@RequestBody PersonJobResponsibilities personJobResponsibilities) {
+ personJobResponsibilitiesService.saveOrUpdate(personJobResponsibilities);
+ return Result.success();
+ }
+
+ @ValueClassify("宀椾綅鑱岃矗")
+ @ApiOperation(value = "鍒犻櫎 宀椾綅鑱岃矗")
+ @DeleteMapping("personJobResponsibilitiesDelete")
+ public Result<?> personJobResponsibilitiesDelete(@RequestParam("id") Integer id) {
+ personJobResponsibilitiesService.removeById(id);
+ return Result.success();
+ }
+
+ @ValueClassify("宀椾綅鑱岃矗")
+ @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);
+ }
+
+ @ValueClassify("宀椾綅鑱岃矗")
+ @ApiOperation(value = "瀵煎嚭浠昏亴宀椾綅璇存槑璇�")
+ @PostMapping("/exportPersonJobResponsibilities")
+ public void exportPersonJobResponsibilities(Integer id, HttpServletResponse response){
+ personJobResponsibilitiesService.exportPersonJobResponsibilities(id,response);
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonPersonnelCapacityController.java b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonPersonnelCapacityController.java
new file mode 100644
index 0000000..f3e97c2
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonPersonnelCapacityController.java
@@ -0,0 +1,97 @@
+package com.yuanchu.mom.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.ApiModelProperty;
+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;
+
+ @Autowired
+ private GetLook getLook;
+
+ @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);
+ }
+
+ /**
+ * 浜哄憳鑳藉姏纭
+ * @return
+ */
+ @ValueAuth
+ @ApiOperation(value = "浜哄憳鑳藉姏纭")
+ @GetMapping("/confirmPersonnelCapacity")
+ public Result<?> confirmPersonnelCapacity(Integer id){
+ return Result.success(personPersonnelCapacityService.confirmPersonnelCapacity(id));
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonPostAuthorizationRecordController.java b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonPostAuthorizationRecordController.java
new file mode 100644
index 0000000..ca19034
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonPostAuthorizationRecordController.java
@@ -0,0 +1,70 @@
+package com.yuanchu.mom.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonPostAuthorizationRecordDto;
+import com.yuanchu.mom.pojo.PersonPostAuthorizationRecord;
+import com.yuanchu.mom.pojo.PersonRewardPunishmentRecord;
+import com.yuanchu.mom.service.PersonPostAuthorizationRecordService;
+import com.yuanchu.mom.utils.FileSaveUtil;
+import com.yuanchu.mom.utils.JackSonUtil;
+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.util.Date;
+import java.util.Map;
+
+/**
+ * <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/yuanchu/mom/controller/PersonRewardPunishmentRecordController.java b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonRewardPunishmentRecordController.java
new file mode 100644
index 0000000..10a1068
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonRewardPunishmentRecordController.java
@@ -0,0 +1,100 @@
+package com.yuanchu.mom.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.yuanchu.mom.dto.PersonRewardPunishmentRecordDto;
+import com.yuanchu.mom.excel.PersonRewardPunishmentRecordExcel;
+import com.yuanchu.mom.pojo.PersonRewardPunishmentRecord;
+import com.yuanchu.mom.service.PersonRewardPunishmentRecordService;
+import com.yuanchu.mom.vo.Result;
+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 = "濂栨儵璁板綍瀵煎嚭")
+ @PostMapping("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/yuanchu/mom/controller/PersonSupervisionRecordController.java b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonSupervisionRecordController.java
new file mode 100644
index 0000000..df803e9
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonSupervisionRecordController.java
@@ -0,0 +1,156 @@
+package com.yuanchu.mom.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+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.dto.PersonSupervisionRecordDto;
+import com.yuanchu.mom.pojo.PersonSupervisionControlSheet;
+import com.yuanchu.mom.pojo.PersonSupervisionProcessingSheet;
+import com.yuanchu.mom.pojo.PersonSupervisionRecord;
+import com.yuanchu.mom.service.PersonSupervisionControlSheetService;
+import com.yuanchu.mom.service.PersonSupervisionProcessingSheetService;
+import com.yuanchu.mom.service.PersonSupervisionRecordService;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.time.LocalDate;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 04:16:49
+ */
+@Api(tags = "浜哄憳 - 鐩戠潱璁板綍")
+@RestController
+@RequestMapping("/personSupervisionRecord")
+public class PersonSupervisionRecordController {
+
+ @Autowired
+ private PersonSupervisionRecordService personSupervisionRecordService;
+
+ @Autowired
+ private PersonSupervisionControlSheetService personSupervisionControlSheetService;
+
+ @Autowired
+ private PersonSupervisionProcessingSheetService personSupervisionProcessingSheetService;
+
+ @ApiOperation(value = "鏂板/鏇存柊 鐩戠潱璁板綍")
+ @PostMapping("addOrUpdatePersonSupervisionRecord")
+ public Result<?> addOrUpdatePersonSupervisionRecord(@RequestBody PersonSupervisionRecord personSupervisionRecord) {
+ personSupervisionRecordService.saveOrUpdate(personSupervisionRecord);
+ return Result.success();
+ }
+
+ @ApiOperation(value = "鎵归噺鍒犻櫎 鐩戠潱璁板綍")
+ @ApiImplicitParam(name = "ids", dataType = "array", allowMultiple = true, paramType = "query")
+ @DeleteMapping("deletePersonSupervisionRecord")
+ public Result<?> deletePersonSupervisionRecord(@RequestParam("ids") List<Integer> ids) {
+ personSupervisionRecordService.deletePersonSupervisionRecord(ids);
+ return Result.success();
+ }
+
+ @ApiOperation(value = "鏌ヨ 鐩戠潱璁板綍")
+ @GetMapping("personSupervisionRecordPage")
+ public Result<IPage<PersonSupervisionRecordDto>> personSupervisionRecordPage(Page page,
+ Integer userId,
+ Integer departLimsId,
+ String userName) {
+ return Result.success(personSupervisionRecordService.personSupervisionRecordPage(page, userId, userName, departLimsId));
+ }
+
+ @ApiOperation(value = "鏌ヨ 鐩戠潱璁板綍 - 鎺у埗鍗�")
+ @GetMapping("personSupervisionControlSheetPage")
+ public Result<?> personSupervisionControlSheetPage(Integer id) {
+ PersonSupervisionControlSheet byId = personSupervisionControlSheetService.getOne(Wrappers.<PersonSupervisionControlSheet>lambdaQuery()
+ .eq(PersonSupervisionControlSheet::getSupervisionRecordId, id));
+ if (ObjectUtils.isEmpty(byId)) {
+ return Result.fail(202);
+ } else {
+ return Result.success(byId);
+ }
+ }
+
+ @ApiOperation(value = "鏌ヨ 鐩戠潱璁板綍 - 澶勭悊鍗�")
+ @GetMapping("personSupervisionProcessingPage")
+ public Result<?> personSupervisionProcessingPage(Integer id) {
+ PersonSupervisionProcessingSheet byId = personSupervisionProcessingSheetService.getOne(Wrappers.<PersonSupervisionProcessingSheet>lambdaQuery()
+ .eq(PersonSupervisionProcessingSheet::getSupervisionRecordId, id));
+ if (ObjectUtils.isEmpty(byId)) {
+ return Result.fail(202);
+ } else {
+ return Result.success(byId);
+ }
+ }
+
+ @ApiOperation(value = "鏂板/鏇存柊 鐩戠潱璁板綍 - 鎺у埗鍗�")
+ @PostMapping("addOrUpdatePersonSupervisionControl")
+ public Result<?> addOrUpdatePersonSupervisionControl(@RequestBody PersonSupervisionControlSheet personSupervisionControlSheet) {
+ PersonSupervisionControlSheet supervisionControlSheet = personSupervisionControlSheetService.getOne(Wrappers.<PersonSupervisionControlSheet>lambdaQuery()
+ .eq(PersonSupervisionControlSheet::getSupervisionRecordId, personSupervisionControlSheet.getSupervisionRecordId()));
+ personSupervisionControlSheet.setCreateTime(LocalDate.now());
+ if (ObjectUtils.isEmpty(supervisionControlSheet)) {
+ personSupervisionControlSheetService.save(personSupervisionControlSheet);
+ } else {
+ personSupervisionControlSheetService.updateById(personSupervisionControlSheet);
+ }
+ return Result.success();
+ }
+
+ @ApiOperation(value = "鏂板/鏇存柊 鐩戠潱璁板綍 - 澶勭悊鍗�")
+ @PostMapping("addOrUpdatePersonnelServiceProcessing")
+ public Result<?> addOrUpdatePersonnelServiceProcessing(@RequestBody PersonSupervisionProcessingSheet personSupervisionProcessingSheet) {
+ PersonSupervisionProcessingSheet processingSheetServiceOne = personSupervisionProcessingSheetService.getOne(Wrappers.<PersonSupervisionProcessingSheet>lambdaQuery()
+ .eq(PersonSupervisionProcessingSheet::getSupervisionRecordId, personSupervisionProcessingSheet.getSupervisionRecordId()));
+ if (ObjectUtils.isEmpty(processingSheetServiceOne)) {
+ personSupervisionProcessingSheetService.save(personSupervisionProcessingSheet);
+ } else {
+ personSupervisionProcessingSheetService.updateById(personSupervisionProcessingSheet);
+ }
+ return Result.success();
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁板綍
+ * @return
+ */
+ @ValueAuth
+ @ApiOperation(value = "瀵煎嚭浜哄憳鐩戠潱璁板綍")
+ @GetMapping("/exportPersonSupervisionRecord")
+ public void exportPersonSupervisionRecord(Integer id, HttpServletResponse response){
+ personSupervisionRecordService.exportPersonSupervisionRecord(id, response);
+ }
+
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁板綍绾犳鎺у埗鍗�
+ * @return
+ */
+ @ValueAuth
+ @ApiOperation(value = "瀵煎嚭浜哄憳鐩戠潱璁板綍绾犳鎺у埗鍗�")
+ @GetMapping("/exportSupervisionControlSheet")
+ public void exportSupervisionControlSheet(Integer supervisionRecordId, HttpServletResponse response){
+ personSupervisionControlSheetService.exportSupervisionControlSheet(supervisionRecordId, response);
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁板綍绾犳澶勭悊鍗�
+ * @return
+ */
+ @ValueAuth
+ @ApiOperation(value = "瀵煎嚭浜哄憳鐩戠潱璁板綍绾犳澶勭悊鍗�")
+ @GetMapping("/exportSupervisionProcessingSheet")
+ public void exportSupervisionProcessingSheet(Integer supervisionRecordId, HttpServletResponse response){
+ personSupervisionProcessingSheetService.exportSupervisionProcessingSheet(supervisionRecordId, response);
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrackRecordController.java b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrackRecordController.java
new file mode 100644
index 0000000..85b650d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrackRecordController.java
@@ -0,0 +1,97 @@
+package com.yuanchu.mom.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.extension.plugins.pagination.Page;
+import com.yuanchu.mom.annotation.CustomClazzName;
+import com.yuanchu.mom.annotation.ValueClassify;
+import com.yuanchu.mom.common.GetLook;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.PersonTrackRecord;
+import com.yuanchu.mom.pojo.User;
+import com.yuanchu.mom.service.PersonTrackRecordService;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 宸ヤ綔灞ュ巻 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-02 03:13:03
+ */
+@Api(tags = "浜哄憳 - 宸ヤ綔灞ュ巻")
+@RestController
+@AllArgsConstructor
+@RequestMapping("/personTrackRecord")
+@CustomClazzName(name = "璧勬簮瑕佹眰",index = 8)
+public class PersonTrackRecordController {
+
+ @Autowired
+ private PersonTrackRecordService personTrackRecordService;
+
+ private GetLook getLook;
+
+ private UserMapper userMapper;
+
+ @ValueClassify("宸ヤ綔灞ュ巻")
+ @ApiOperation(value = "鏂板宸ヤ綔灞ュ巻")
+ @PostMapping("personTrackRecordSave")
+ public Result<?> personTrackRecordSave(@RequestBody PersonTrackRecord personTrackRecord) {
+ Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+ User user = userMapper.selectById(userId);
+ personTrackRecord.setCreateUser(user.getName());
+ personTrackRecordService.save(personTrackRecord);
+ return Result.success();
+ }
+
+ @ValueClassify("宸ヤ綔灞ュ巻")
+ @ApiOperation(value = "鍒犻櫎宸ヤ綔灞ュ巻")
+ @DeleteMapping("personTrackRecordDelete")
+ public Result<?> personTrackRecordDelete(@RequestParam("id") Integer id) {
+ personTrackRecordService.removeById(id);
+ return Result.success();
+ }
+
+ @ValueClassify("宸ヤ綔灞ュ巻")
+ @ApiOperation(value = "宸ヤ綔灞ュ巻鏇存柊")
+ @PutMapping("personTrackRecordUpdate")
+ public Result<?> personTrackRecordUpdate(@RequestBody PersonTrackRecord personTrackRecord) {
+ personTrackRecordService.updateById(personTrackRecord);
+ return Result.success();
+ }
+
+ @ValueClassify("宸ヤ綔灞ュ巻")
+ @ApiOperation(value = "鏌ヨ宸ヤ綔灞ュ巻")
+ @GetMapping("personTrackRecordSelect")
+ public Result<IPage<PersonTrackRecord>> personTrackRecordSelect(Page page, String userId, String departmentId) {
+ IPage<PersonTrackRecord> iPage = personTrackRecordService.personTrackRecordSelect(page, userId, departmentId);
+ return Result.success(iPage);
+ }
+
+ @ValueClassify("宸ヤ綔灞ュ巻")
+ @ApiOperation(value = "宸ヤ綔灞ュ巻瀵煎嚭")
+ @GetMapping("personTrackRecordExport")
+ public void personTrackRecordExport(HttpServletResponse response, String userId, String departmentId) throws Exception {
+ List<PersonTrackRecord> data = personTrackRecordService.personTrackRecordExport(userId, departmentId);
+ 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(PersonTrackRecord.class)
+ .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) // 鑷�傚簲鍒楀
+ .sheet()
+ .doWrite(data);
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrainingController.java b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrainingController.java
new file mode 100644
index 0000000..095cc94
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrainingController.java
@@ -0,0 +1,206 @@
+package com.yuanchu.mom.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+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.annotation.ValueClassify;
+import com.yuanchu.mom.dto.*;
+import com.yuanchu.mom.numgen.NumberGenerator;
+import com.yuanchu.mom.pojo.PersonTraining;
+import com.yuanchu.mom.pojo.PersonTrainingDetailed;
+import com.yuanchu.mom.pojo.PersonTrainingRecord;
+import com.yuanchu.mom.service.PersonTrainingDetailedService;
+import com.yuanchu.mom.service.PersonTrainingRecordService;
+import com.yuanchu.mom.service.PersonTrainingService;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:11:49
+ */
+@Api(tags = "浜哄憳 - 鍩硅璁″垝")
+@RestController
+@RequestMapping("/personTraining")
+public class PersonTrainingController {
+
+ @Autowired
+ private PersonTrainingService personTrainingService;
+
+ @Autowired
+ private PersonTrainingDetailedService personTrainingDetailedService;
+
+ @Autowired
+ private PersonTrainingRecordService personTrainingRecordService;
+
+ @Autowired
+ private NumberGenerator<PersonTrainingDetailed> numberGenerator;
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "鍩硅璁″垝 瀵煎叆")
+ @PostMapping("personTrainingImport")
+ public Result<?> personTrainingImport(@RequestPart("file") MultipartFile file) {
+ personTrainingService.personTrainingImport(file);
+ return Result.success();
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "鍩硅璁″垝 鍒犻櫎")
+ @DeleteMapping("personTrainingDelete")
+ public Result<?> personTrainingDelete(@RequestParam("id") Integer id) {
+ personTrainingService.personTrainingDelete(id);
+ return Result.success();
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "鍩硅璁″垝 鏌ヨ")
+ @GetMapping("personTrainingSelect")
+ public Result<IPage<PersonTrainingDto>> personTrainingSelect(Page page, String compilerName, String departmentId) {
+ IPage<PersonTrainingDto> iPage = personTrainingService.personTrainingSelect(page, compilerName, departmentId);
+ return Result.success(iPage);
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "骞村害鍩硅璁″垝 瀹℃牳")
+ @PostMapping("reviewAnnualPersonnelTraining")
+ public Result<?> reviewAnnualPersonnelTraining(@RequestBody PersonTrainingUpdateDto personTrainingUpdateDto) {
+ personTrainingService.reviewAnnualPersonnelTraining(personTrainingUpdateDto);
+ return Result.success();
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "鍩硅璁″垝 鎵瑰噯")
+ @PostMapping("approveAnnualPersonnelTraining")
+ public Result<?> approveAnnualPersonnelTraining(@RequestBody PersonTrainingUpdateDto personTrainingUpdateDto) {
+ personTrainingService.approveAnnualPersonnelTraining(personTrainingUpdateDto);
+ return Result.success();
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "骞村害璁″垝鏄庣粏琛� 鏂板/缂栬緫")
+ @PostMapping("addOrUpdatePersonTrainingDetailed")
+ public Result<?> addOrUpdatePersonTrainingDetailed(@RequestBody PersonTrainingDetailed personTrainingDetailed) {
+ if (ObjectUtils.isEmpty(personTrainingDetailed.getId())) {
+ personTrainingDetailed.setState(3);
+ String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
+ String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
+ String processNumber = numberGenerator.generateNumberWithPrefix(4, "KC" + month + "-" + year + month, PersonTrainingDetailed::getCourseCode);
+
+ personTrainingDetailed.setCourseCode(processNumber);
+ }
+ personTrainingDetailedService.saveOrUpdate(personTrainingDetailed);
+ return Result.success();
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "骞村害璁″垝鏄庣粏琛� 鎵归噺鍒犻櫎")
+ @PostMapping("deleteAnnualPlanDetailTable")
+ public Result<?> deleteAnnualPlanDetailTable(@RequestParam("ids") String ids) {
+ personTrainingDetailedService.deleteAnnualPlanDetailTable(ids);
+ return Result.success();
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "骞村害璁″垝鏄庣粏琛� 鏌ヨ")
+ @GetMapping("queryTheAnnualPlanDetailsTable")
+ public Result<IPage<PersonTrainingDetailedDto>> queryTheAnnualPlanDetailsTable(Page page,
+ String trainingLecturerName, String courseCode,
+ String trainingDate, Integer id, Integer userId) {
+ IPage<PersonTrainingDetailedDto> iPage = personTrainingDetailedService.queryTheAnnualPlanDetailsTable(page,
+ trainingLecturerName, courseCode, trainingDate, id, userId);
+ return Result.success(iPage);
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "鍩硅涓庤�冩牳璁板綍 鏌ヨ")
+ @GetMapping("trainingAndAssessmentRecordsPage")
+ public Result<List<PersonTrainingRecordDto>> trainingAndAssessmentRecordsPage(Integer trainingDetailedId,
+ String userName) {
+ List<PersonTrainingRecordDto> list = personTrainingRecordService.trainingAndAssessmentRecordsPage(trainingDetailedId, userName);
+ return Result.success(list);
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "鍩硅涓庤�冩牳璁板綍 鏂板浜哄憳")
+ @PostMapping("newPersonnelAddedToTrainingRecords")
+ public Result<?> newPersonnelAddedToTrainingRecords(@RequestBody List<PersonTrainingRecord> personTrainingRecord) {
+ personTrainingRecordService.saveBatch(personTrainingRecord);
+ return Result.success();
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "鍩硅涓庤�冩牳璁板綍 璁ら")
+ @PostMapping("claimOfTrainingAndAssessmentRecords")
+ public Result<?> claimOfTrainingAndAssessmentRecords(@RequestParam("claimAndClaim") Boolean claimAndClaim,
+ @RequestParam("courseId") Integer courseId) {
+ personTrainingRecordService.claimOfTrainingAndAssessmentRecords(claimAndClaim, courseId);
+ return Result.success();
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "鍩硅涓庤�冩牳璁板綍 鎻愪氦/鎾ら攢")
+ @PostMapping("trainingAndAssessmentRecordsAdded")
+ public Result<?> trainingAndAssessmentRecordsAdded(@RequestBody PersonTrainingRecordSubmitDto personTrainingRecordSubmitDto) {
+ personTrainingDetailedService.update(Wrappers.<PersonTrainingDetailed>lambdaUpdate()
+ .eq(PersonTrainingDetailed::getId, personTrainingRecordSubmitDto.getTrainingDetailedId())
+ .set(PersonTrainingDetailed::getAssessmentMethod, personTrainingRecordSubmitDto.getAssessmentMethod())
+ .set(PersonTrainingDetailed::getComprehensiveAssessment, personTrainingRecordSubmitDto.getComprehensiveAssessment())
+ .set(PersonTrainingDetailed::getAssessmentUserId, personTrainingRecordSubmitDto.getAssessmentUserId())
+ .set(PersonTrainingDetailed::getState, personTrainingRecordSubmitDto.getState()));
+ return Result.success();
+ }
+
+ @ValueClassify("鍩硅璁″垝")
+ @ApiOperation(value = "鍩硅涓庤�冩牳璁板綍 鍒犻櫎")
+ @PostMapping("deleteTrainingAndAssessmentRecords")
+ public Result<?> deleteTrainingAndAssessmentRecords(@RequestParam("ids") String ids) {
+ personTrainingRecordService.deleteTrainingAndAssessmentRecords(ids);
+ return Result.success();
+ }
+
+ @PostMapping("outOfFocusPreservation")
+ public Result<?> outOfFocusPreservation(@RequestBody PersonTrainingRecord personTrainingRecord) {
+ personTrainingRecordService.updateById(personTrainingRecord);
+ return Result.success();
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鍩硅璁″垝
+ * @return
+ */
+ @ValueAuth
+ @ApiOperation(value = "瀵煎嚭浜哄憳鍩硅璁″垝")
+ @GetMapping("/exportPersonTraining")
+ public void exportPersonTraining(Integer id, HttpServletResponse response){
+ personTrainingService.exportPersonTraining(id, response);
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鍩硅涓庤�冩牳璁板綍
+ * @return
+ */
+ @ValueAuth
+ @ApiOperation(value = "瀵煎嚭浜哄憳鍩硅涓庤�冩牳璁板綍")
+ @GetMapping("/exportPersonTrainingRecord")
+ public void exportPersonTrainingRecord(Integer id, HttpServletResponse response){
+ personTrainingService.exportPersonTrainingRecord(id, response);
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrainingRecordController.java b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrainingRecordController.java
new file mode 100644
index 0000000..6d1577b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/PersonTrainingRecordController.java
@@ -0,0 +1,65 @@
+package com.yuanchu.mom.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.annotation.ValueAuth;
+import com.yuanchu.mom.annotation.ValueClassify;
+import com.yuanchu.mom.dto.PersonTrainingRecordListDto;
+import com.yuanchu.mom.dto.TrainingRecordPersonDetailedDto;
+import com.yuanchu.mom.service.PersonTrainingRecordService;
+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.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;
+
+ @ValueClassify("鍩硅璁板綍")
+ @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);
+ }
+
+ @ValueClassify("鍩硅璁板綍")
+ @ApiOperation(value = "鏌ヨ浜哄憳鏄庣粏 鍩硅璁板綍")
+ @GetMapping("queryPersonnelDetails")
+ public Result<IPage<TrainingRecordPersonDetailedDto>> queryPersonnelDetails(Page page, Integer userId, Integer trainingDate) {
+// IPage<TrainingRecordPersonDetailedDto> iPage = personTrainingRecordService.queryPersonnelDetails(page, userId);
+ IPage<TrainingRecordPersonDetailedDto> iPage = personTrainingRecordService.queryPersonnelDetailsOfUserIdAndYear(page, userId, trainingDate); // 鏂板鏍规嵁骞翠唤鏌ヨ
+ return Result.success(iPage);
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鍩硅璁板綍
+ * @return
+ */
+ @ValueAuth
+ @ApiOperation(value = "瀵煎嚭浜哄憳鍩硅璁板綍")
+ @GetMapping("/exportTrainingRecord")
+ public void exportTrainingRecord(Integer userId, Integer trainingDate, HttpServletResponse response){
+// personTrainingRecordService.exportTrainingRecord(userId, response);
+ personTrainingRecordService.exportTrainingRecordAddTrainingDate(userId, trainingDate, response);// 鏂板鏍规嵁骞翠唤鏌ヨ
+
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/controller/SuperVisePlanController.java b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/SuperVisePlanController.java
new file mode 100644
index 0000000..488a19e
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/controller/SuperVisePlanController.java
@@ -0,0 +1,126 @@
+package com.yuanchu.mom.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.annotation.ValueClassify;
+import com.yuanchu.mom.common.GetLook;
+import com.yuanchu.mom.dto.PersonSupervisePlanDetailsDto;
+import com.yuanchu.mom.dto.PersonSupervisePlanDto;
+import com.yuanchu.mom.pojo.PersonSupervisePlan;
+import com.yuanchu.mom.pojo.PersonSupervisePlanDetails;
+import com.yuanchu.mom.service.*;
+import com.yuanchu.mom.vo.Result;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * <p>
+ * 鐩戠璁″垝 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author tangbowen
+ * @since 2024-09-29 11:13:25
+ */
+@Api(tags = "浜哄憳 - 鐩戠潱璁″垝")
+@AllArgsConstructor
+@RestController
+@RequestMapping("/superVisePlan")
+public class SuperVisePlanController {
+
+ private PersonSupervisePlanDetailsService personSupervisePlanDetailsService;
+
+ private PersonSupervisePlanService personSupervisePlanService;
+
+ private GetLook getLook;
+
+ @ValueClassify("鐩戠潱璁″垝")
+ @ApiOperation(value = "鏌ヨ 骞村害璁″垝")
+ @GetMapping("/yearPlanList")
+ public Result<IPage<PersonSupervisePlanDto>> yearPlanList(Integer size, Integer current, @RequestParam(value = "organizationPerson",required = false) String organizationPerson) {
+ return Result.success(personSupervisePlanService.yearPlanDtoIPage(new Page<>(current, size), organizationPerson));
+ }
+
+ @ValueClassify("鐩戠潱璁″垝")
+ @ApiOperation(value = "鎵瑰噯 骞村害璁″垝")
+ @GetMapping("/yearPlanDetailApproval")
+ public Result yearPlanDetailApproval(Integer id,Integer approvalStatus) {
+ personSupervisePlanService.update(Wrappers.<PersonSupervisePlan>lambdaUpdate()
+ .eq(PersonSupervisePlan::getId, id)
+ .set(PersonSupervisePlan::getApprovalStatus, approvalStatus)
+ .set(PersonSupervisePlan::getApprovalId,getLook.selectPowerByMethodAndUserId(null).get("userId"))
+ .set(PersonSupervisePlan::getApprovalDate, LocalDateTime.now()));
+ return Result.success("鏇存柊鎴愬姛");
+ }
+
+ @ValueClassify("鐩戠潱璁″垝")
+ @ApiOperation(value = "鍒犻櫎 骞村害璁″垝")
+ @DeleteMapping("/yearPlanDel")
+ public Result yearPlanDel(String id) {
+ personSupervisePlanService.removeById(id);
+ // 瀵瑰簲鐨勫勾搴﹁鍒掕鎯呬篃闇�鍒犻櫎
+ personSupervisePlanDetailsService.remove(Wrappers.<PersonSupervisePlanDetails>lambdaQuery()
+ .eq(PersonSupervisePlanDetails::getPlanId, id));
+ return Result.success();
+ }
+
+ @ValueClassify("鐩戠潱璁″垝")
+ @ApiOperation(value = "鏌ヨ 骞村害璁″垝璇︽儏")
+ @GetMapping("/yearPlanDetailList")
+ public Result<IPage<PersonSupervisePlanDetailsDto>> yearPlanDetailList(Page page,
+ Integer planId,
+ @RequestParam(value = "date",required = false) String date,
+ @RequestParam(value = "project",required = false) String project) {
+ return Result.success(personSupervisePlanDetailsService.yearPlanDetailPage(page, date,project, planId));
+ }
+
+ @ValueClassify("鐩戠潱璁″垝")
+ @ApiOperation(value = "瀵煎叆 骞村害璁″垝")
+ @PostMapping("/yearPlanDetailImport")
+ public Result yearPlanDetailImport(@RequestPart("file") MultipartFile file) {
+ personSupervisePlanService.yearPlanDetailImport(file);
+ return Result.success();
+ }
+
+ @ValueClassify("鐩戠潱璁″垝")
+ @ApiOperation(value = "鍒犻櫎 骞村害璁″垝璇︽儏")
+ @DeleteMapping("/yearPlanDetailDel")
+ public Result yearPlanDetailDel(String id) {
+ return Result.success(personSupervisePlanDetailsService.removeById(id));
+ }
+
+ @ValueClassify("鐩戠潱璁″垝")
+ @ApiOperation(value = "鏂板 骞村害璁″垝璇︽儏")
+ @PostMapping("/yearPlanDetailAdd")
+ public Result yearPlanDetailAdd(@RequestBody PersonSupervisePlanDetails personSupervisePlanDetails) {
+ personSupervisePlanDetailsService.save(personSupervisePlanDetails);
+ return Result.success();
+ }
+
+ @ValueClassify("鐩戠潱璁″垝")
+ @ApiOperation(value = "缂栬緫 骞村害璁″垝璇︽儏")
+ @PostMapping("/yearPlanDetailEdit")
+ public Result yearPlanDetailEdit(@RequestBody PersonSupervisePlanDetails personSupervisePlanDetails) {
+ personSupervisePlanDetailsService.updateById(personSupervisePlanDetails);
+ return Result.success("淇濆瓨鎴愬姛");
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁″垝
+ * @return
+ */
+ @ValueAuth
+ @ApiOperation(value = "瀵煎嚭浜哄憳鐩戠潱璁″垝")
+ @PostMapping("/exportSuperVisePlan")
+ public void exportSuperVisePlan(Integer id, HttpServletResponse response){
+ personSupervisePlanService.exportSuperVisePlan(id, response);
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonBasicInfoDetailsDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonBasicInfoDetailsDto.java
new file mode 100644
index 0000000..91a9603
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonBasicInfoDetailsDto.java
@@ -0,0 +1,65 @@
+package com.yuanchu.mom.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * Author: yuan
+ * Date: 2024-12-13 鏄熸湡浜� 13:52:52
+ * Description:
+ */
+@Data
+public class PersonBasicInfoDetailsDto {
+
+ @ApiModelProperty("鐢ㄦ埛id")
+ private Integer userId;
+
+ @ApiModelProperty("鐢ㄦ埛濮撳悕")
+ private String name;
+
+ @ApiModelProperty("鍏ヨ亴鏃堕棿")
+ private String entryTimeStr;
+
+ @ApiModelProperty("瀹為檯瀹炰範缁撴潫")
+ private String endPracticalPracticeStr;
+
+ @ApiModelProperty("绫嶈疮")
+ private String nativePlace;
+
+ @ApiModelProperty("韬唤璇佸彿")
+ private String identityCard;
+
+ @ApiModelProperty("韬唤璇佸湴鍧�")
+ private String idAddress;
+
+ @ApiModelProperty("鐢ㄦ埛鎵嬫満鍙�")
+ private String phone;
+
+ @ApiModelProperty("姣曚笟闄㈡牎")
+ private String graduatedInstitutions1;
+
+ @ApiModelProperty("涓撲笟")
+ private String major1;
+
+ @ApiModelProperty("姣曚笟鏃堕棿1")
+ private LocalDateTime graduationTime1;
+
+ @ApiModelProperty("鏈�楂樺鍘�")
+ private String officialAcademicRedentials;
+
+ @ApiModelProperty("鏈�楂樺浣�")
+ private String highestDegree;
+
+ @ApiModelProperty("鑱岀О")
+ private String professionalTitle;
+
+ // 鑱屼笟鑳藉姏
+
+ @ApiModelProperty("绱ф�ヨ仈绯讳汉")
+ private String emergencyContact;
+
+ @ApiModelProperty("绱ф�ヨ仈绯讳汉鐢佃瘽")
+ private String emergencyContactPhone;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonBasicInfoDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonBasicInfoDto.java
new file mode 100644
index 0000000..250e8c5
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonBasicInfoDto.java
@@ -0,0 +1,51 @@
+package com.yuanchu.mom.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.yuanchu.mom.pojo.Annex;
+import com.yuanchu.mom.pojo.PersonBasicInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import org.w3c.dom.stylesheets.LinkStyle;
+
+import java.util.List;
+
+@Data
+@JsonIgnoreProperties(ignoreUnknown = true)
+@ExcelIgnoreUnannotated
+public class PersonBasicInfoDto extends PersonBasicInfo {
+ @ApiModelProperty(value = "璐﹀彿")
+ @ExcelProperty("鍛樺伐缂栧彿")
+ private String account;
+
+ @ApiModelProperty(value = "濮撳悕")
+ @ExcelProperty("濮撳悕")
+ private String name;
+
+ @ApiModelProperty(value = "濮撳悕(鑻辨枃)")
+ private String nameEn;
+
+ @ApiModelProperty(value = "骞撮緞")
+ private Integer age;
+
+ @ApiModelProperty(value = "鐢佃瘽鍙风爜")
+ @ExcelProperty("鎵嬫満鍙�")
+ private String phone;
+
+ @ApiModelProperty(value = "閭")
+ private String email;
+
+ @ApiModelProperty(value = "閮ㄩ棬")
+ private String department;
+
+ @ApiModelProperty(value = "lims缁勭粐鏋舵瀯")
+ private String departLimsId;
+
+ @ApiModelProperty(value = "绛惧悕鐓х墖鍦板潃")
+ private String signatureUrl;
+
+ @ApiModelProperty(value = "鑷韩鐓х墖鍦板潃")
+ private String pictureUrl;
+
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonCommunicationAbilityDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonCommunicationAbilityDto.java
new file mode 100644
index 0000000..3945c35
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonCommunicationAbilityDto.java
@@ -0,0 +1,16 @@
+package com.yuanchu.mom.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.yuanchu.mom.pojo.PersonCommunicationAbility;
+import lombok.Data;
+
+@Data
+public class PersonCommunicationAbilityDto extends PersonCommunicationAbility {
+
+ private String userName;
+
+ private String account;
+
+ private String createUserName;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonJobResponsibilitiesDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonJobResponsibilitiesDto.java
new file mode 100644
index 0000000..57c58c0
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonJobResponsibilitiesDto.java
@@ -0,0 +1,16 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.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/yuanchu/mom/dto/PersonPersonnelCapacityDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonPersonnelCapacityDto.java
new file mode 100644
index 0000000..606cf63
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonPersonnelCapacityDto.java
@@ -0,0 +1,30 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.pojo.PersonPersonnelCapacity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class PersonPersonnelCapacityDto extends PersonPersonnelCapacity {
+
+ @ApiModelProperty("鎻愪氦浜哄鍚�")
+ private String submitOperatingPersonnelName;
+
+ @ApiModelProperty("鎿嶄綔浜哄鍚�")
+ private String confirmOperatingPersonnelName;
+
+ @ApiModelProperty("浜哄憳濮撳悕")
+ private String userName;
+
+ @ApiModelProperty("宀椾綅鍚嶇О")
+ private String postName;
+
+ @ApiModelProperty("宀椾綅鑱岃矗")
+ private String responsibilities;
+
+ @ApiModelProperty("宸ヤ綔缁忓巻")
+ private String placeWork;
+
+ @ApiModelProperty("涓撲笟")
+ private String major;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonPersonnelCapacityExportDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonPersonnelCapacityExportDto.java
new file mode 100644
index 0000000..3838bdb
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonPersonnelCapacityExportDto.java
@@ -0,0 +1,101 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.pojo.PersonPersonnelCapacity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/28
+ */
+@Data
+public class PersonPersonnelCapacityExportDto extends PersonPersonnelCapacity {
+
+ @ApiModelProperty("宀椾綅鍚嶇О")
+ private String postName;
+
+ @ApiModelProperty("浜哄憳濮撳悕")
+ private String userName;
+
+ @ApiModelProperty("瀛﹀巻")
+ private String officialAcademicRedentials;
+
+ @ApiModelProperty("涓撲笟")
+ private String major;
+
+ @ApiModelProperty("鑱岀О")
+ private String professionalTitle;
+
+ @ApiModelProperty("宸ヤ綔缁忓巻")
+ private String placeWork;
+
+ @ApiModelProperty("瀛﹀巻 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String academicConformNot1 = "鈻�";
+ @ApiModelProperty("瀛﹀巻 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String academicConformNot2 = "鈻�";
+ @ApiModelProperty("瀛﹀巻 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String academicConformNot3 = "鈻�";
+
+ @ApiModelProperty("鐩稿叧骞撮檺 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String relatedYearsConformNot1 = "鈻�";
+ @ApiModelProperty("鐩稿叧骞撮檺 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String relatedYearsConformNot2 = "鈻�";
+ @ApiModelProperty("鐩稿叧骞撮檺 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String relatedYearsConformNot3 = "鈻�";
+
+ @ApiModelProperty("鐩稿叧鍩硅 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String relatedTrainingConformNot1 = "鈻�";
+ @ApiModelProperty("鐩稿叧鍩硅 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String relatedTrainingConformNot2 = "鈻�";
+ @ApiModelProperty("鐩稿叧鍩硅 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String relatedTrainingConformNot3 = "鈻�";
+
+ @ApiModelProperty("鐩稿叧缁忛獙 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String relevantExperienceConformNot1 = "鈻�";
+ @ApiModelProperty("鐩稿叧缁忛獙 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String relevantExperienceConformNot2 = "鈻�";
+ @ApiModelProperty("鐩稿叧缁忛獙 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String relevantExperienceConformNot3 = "鈻�";
+
+ @ApiModelProperty("涓婂矖璇� 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String workLicenseConformNot1 = "鈻�";
+ @ApiModelProperty("涓婂矖璇� 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String workLicenseConformNot2 = "鈻�";
+ @ApiModelProperty("涓婂矖璇� 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String workLicenseConformNot3 = "鈻�";
+
+ @ApiModelProperty("宀椾綅鑱岃矗1(鐔熸倝鏈矖浣嶇殑浜у搧妫�娴嬫牱鍝佸埗澶囧拰鐩稿叧浜у搧鍩虹鐭ヨ瘑)")
+ private String jobResponsibilities1 = "鈻�";
+ @ApiModelProperty("宀椾綅鑱岃矗2(鐔熸倝鏈矖浣嶆牱鍝佹娴嬫祦绋�)")
+ private String jobResponsibilities2 = "鈻�";
+ @ApiModelProperty("宀椾綅鑱岃矗3(姝g‘鐔熺粌鎿嶄綔鏈矖浣嶄华琛ㄨ澶�)")
+ private String jobResponsibilities3 = "鈻�";
+ @ApiModelProperty("宀椾綅鑱岃矗4(鐔熸倝鏈矖浣嶇浉鍏虫娴嬫爣鍑�)")
+ private String jobResponsibilities4 = "鈻�";
+ @ApiModelProperty("宀椾綅鑱岃矗5(鐔熸倝鏈矖浣嶄骇鍝佹�ц兘鍙婄粨鏋滃垽鏂�佸垎鏋�)")
+ private String jobResponsibilities5 = "鈻�";
+ @ApiModelProperty("宀椾綅鑱岃矗6(瀹屾垚鐩稿簲鐨勫巶楠屻�佽璇�)")
+ private String jobResponsibilities6 = "鈻�";
+ @ApiModelProperty("宀椾綅鑱岃矗7(缂栧啓鐩稿叧妫�娴嬫墜椤�)")
+ private String jobResponsibilities7 = "鈻�";
+ @ApiModelProperty("宀椾綅鑱岃矗8(浜嗚В浠櫒璁惧鍩烘湰缁撴瀯涓庣畝鍗曠淮鎶や繚鍏�)")
+ private String jobResponsibilities8 = "鈻�";
+ @ApiModelProperty("宀椾綅鑱岃矗9(鍏峰鎶�鑳藉煿璁殑鑳藉姏)")
+ private String jobResponsibilities9 = "鈻�";
+ @ApiModelProperty("宀椾綅鑱岃矗10(鍏峰妫�娴嬩华鍣ㄦ敼閫犺兘鍔�)")
+ private String jobResponsibilities10 = "鈻�";
+
+ @ApiModelProperty("宀椾綅鑱岃矗 绗﹀悎涓庡惁(1锛氱鍚�)")
+ private String jobResponsibilitiesConformNot1 = "鈻�";
+ @ApiModelProperty("宀椾綅鑱岃矗 绗﹀悎涓庡惁(2锛氫笉绗﹀悎)")
+ private String jobResponsibilitiesConformNot2 = "鈻�";
+ @ApiModelProperty("宀椾綅鑱岃矗 绗﹀悎涓庡惁(3锛氫笉閫傜敤)")
+ private String jobResponsibilitiesConformNot3 = "鈻�";
+
+ @ApiModelProperty("缁煎悎璇勪环1(鍙儨浠昏宀椾綅)")
+ private String comprehensiveAssessment1 = "鈻�";
+ @ApiModelProperty("缁煎悎璇勪环2(鍙竟鍩硅杈逛笂宀�)")
+ private String comprehensiveAssessment2 = "鈻�";
+ @ApiModelProperty("缁煎悎璇勪环3(涓嶈儨浠昏宀椾綅)")
+ private String comprehensiveAssessment3 = "鈻�";
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonPostAuthorizationRecordDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonPostAuthorizationRecordDto.java
new file mode 100644
index 0000000..e91c2a1
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonPostAuthorizationRecordDto.java
@@ -0,0 +1,14 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.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/yuanchu/mom/dto/PersonRewardPunishmentRecordDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonRewardPunishmentRecordDto.java
new file mode 100644
index 0000000..c2d48df
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonRewardPunishmentRecordDto.java
@@ -0,0 +1,14 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.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/yuanchu/mom/dto/PersonSupervisePlanDetailsDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisePlanDetailsDto.java
new file mode 100644
index 0000000..85ae30e
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisePlanDetailsDto.java
@@ -0,0 +1,12 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.pojo.PersonSupervisePlanDetails;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class PersonSupervisePlanDetailsDto extends PersonSupervisePlanDetails {
+
+ @ApiModelProperty(value = "鍒涘缓浜�")
+ private String createBy;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisePlanDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisePlanDto.java
new file mode 100644
index 0000000..4d26a81
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisePlanDto.java
@@ -0,0 +1,18 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.pojo.PersonSupervisePlan;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class PersonSupervisePlanDto extends PersonSupervisePlan {
+
+ @ApiModelProperty(value = "瀹℃牳浜�")
+ private String approvalName;
+
+ @ApiModelProperty(value = "缂栧埗浜�")
+ private String organizationPersonName;
+
+ @ApiModelProperty(value = "缂栧埗浜�")
+ private String createName;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionControlSheetExportDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionControlSheetExportDto.java
new file mode 100644
index 0000000..4c1153e
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionControlSheetExportDto.java
@@ -0,0 +1,76 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.pojo.PersonSupervisionControlSheet;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/26
+ */
+@Data
+public class PersonSupervisionControlSheetExportDto extends PersonSupervisionControlSheet {
+
+ @ApiModelProperty("1鍙戠敓閮ㄩ棬")
+ private String occurrenceDepartmentString;
+
+ @ApiModelProperty("1閮ㄩ棬璐熻矗浜�")
+ private String departmentHead;
+
+ @ApiModelProperty("1鍙戠幇閮ㄩ棬")
+ private String discovererDepartment;
+
+ @ApiModelProperty("1鍙戠幇閮ㄩ棬-鏃ユ湡")
+ private String discovererDateString;
+
+ @ApiModelProperty("2琚洃鐫d汉")
+ private String supervisedPerson;
+
+ @ApiModelProperty("3璐d换閮ㄩ棬")
+ private String responsibleDepartment;
+
+ @ApiModelProperty("3璐d换閮ㄩ棬 鏃ユ湡")
+ private String responsibleDepartmentDateString;
+
+ @ApiModelProperty("4绾犳鎺柦 鏃ユ湡")
+ private String correctiveMeasureDateString;
+
+ @ApiModelProperty("5璐ㄩ噺璐熻矗浜烘棩鏈�")
+ private String qualitySupervisorDateString;
+
+ @ApiModelProperty("4绾犳鎺柦澶勭悊鍗曡窡韪�(鏄�)")
+ private String correctiveMeasureFollowTracksYes = "鈻�";
+ @ApiModelProperty("4绾犳鎺柦澶勭悊鍗曡窡韪�(鍚�)")
+ private String correctiveMeasureFollowTracksNo = "鈻�";
+
+
+ @ApiModelProperty("5鏄惁閫氱煡瀹㈡埛(鏄�)")
+ private String whetherInformCustomerYes = "鈻�";
+ @ApiModelProperty("5鏄惁閫氱煡瀹㈡埛(鍚�)")
+ private String whetherInformCustomerNo = "鈻�";
+
+
+ @ApiModelProperty("5鏄惁鎭㈠宸ヤ綔(1锛氭槸锛�2锛氬惁)")
+ private String whetherResumeWorkYes = "鈻�";
+ @ApiModelProperty("5鏄惁鎭㈠宸ヤ綔(1锛氭槸锛�2锛氬惁)")
+ private String whetherResumeWorkNo = "鈻�";
+
+ @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞0(绠$悊璇勫)")
+ private String discoveryApproach0 = "鈻�";
+ @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞1(鍐呴儴瀹℃牳)")
+ private String discoveryApproach1 = "鈻�";
+ @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞2(妫�娴嬭繃绋嬫帶鍒�)")
+ private String discoveryApproach2 = "鈻�";
+ @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞3(鍐呴儴璐ㄩ噺鎺у埗)")
+ private String discoveryApproach3 = "鈻�";
+ @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞4(鍐呴儴鐩戠潱)")
+ private String discoveryApproach4 = "鈻�";
+ @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞5(澶栭儴璇勫/妫�鏌�)")
+ private String discoveryApproach5 = "鈻�";
+ @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞6(椤惧鎶曡瘔/鎰忚鍙嶉)")
+ private String discoveryApproach6 = "鈻�";
+ @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞7(鍏朵粬)")
+ private String discoveryApproach7 = "鈻�";
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionProcessingSheetDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionProcessingSheetDto.java
new file mode 100644
index 0000000..74c8a4f
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionProcessingSheetDto.java
@@ -0,0 +1,39 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.pojo.PersonSupervisionProcessingSheet;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/26
+ */
+@Data
+public class PersonSupervisionProcessingSheetDto extends PersonSupervisionProcessingSheet {
+
+ @ApiModelProperty("1 鎻愬嚭閮ㄩ棬")
+ private String proposingDepartment;
+
+ @ApiModelProperty("1 鎻愬嚭閮ㄩ棬 鏃ユ湡")
+ private String proposingDepartmentDateString;
+
+ @ApiModelProperty("2 鍘熷洜鍒嗘瀽 閮ㄩ棬")
+ private String causeAnalysis;
+
+ @ApiModelProperty("2 鍘熷洜鍒嗘瀽 鏃ユ湡")
+ private String causeAnalysisDateString;
+
+ @ApiModelProperty("3 绾犳鎺柦")
+ private String correctiveAction;
+
+ @ApiModelProperty("3 绾犳鎺柦 鏃ユ湡")
+ private String correctiveActionDateString;
+
+ @ApiModelProperty("4 楠岃瘉閮ㄩ棬")
+ private String verificationDepartment;
+
+ @ApiModelProperty("4 楠岃瘉閮ㄩ棬 鏃ユ湡")
+ private String verificationDepartmentDateString;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionRecordDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionRecordDto.java
new file mode 100644
index 0000000..8264105
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonSupervisionRecordDto.java
@@ -0,0 +1,32 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.pojo.PersonSupervisionRecord;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class PersonSupervisionRecordDto extends PersonSupervisionRecord {
+
+ @ApiModelProperty("妫�娴嬩汉鍛樺鍚�")
+ private String testerName;
+
+ @ApiModelProperty("鐩戠潱鍛樺鍚�")
+ private String supervisorName;
+
+ @ApiModelProperty("浜哄憳list 濮撳悕id")
+ private String personnelName;
+
+ @ApiModelProperty("鎶�鏈礋璐d汉濮撳悕")
+ private String technicalDirectorName;
+
+ @ApiModelProperty("鎺у埗鍗曠姸鎬�")
+ private String currentStateControl;
+
+ @ApiModelProperty("澶勭悊鍗曠姸鎬�")
+ private String currentStateProcessing;
+
+ @ApiModelProperty("妫�娴嬫棩鏈�")
+ private String detectionDateString;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingDetailedDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingDetailedDto.java
new file mode 100644
index 0000000..49c66e0
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingDetailedDto.java
@@ -0,0 +1,31 @@
+package com.yuanchu.mom.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.yuanchu.mom.pojo.PersonTrainingDetailed;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class PersonTrainingDetailedDto extends PersonTrainingDetailed {
+
+ @ApiModelProperty("涓惧姙閮ㄩ棬鍚嶇О")
+ private String holdingDepartmentName;
+
+ @ApiModelProperty("鍩硅璁插笀鍚嶇О")
+ private String trainingLecturerName;
+
+ @ApiModelProperty("褰撳墠鐧诲綍浜烘槸鍚﹁棰�")
+ private Boolean whetherClaim;
+
+
+ @ApiModelProperty("鍩硅鏃ユ湡")
+ private String trainingDateString;
+
+ // 瀵煎嚭浣跨敤
+ @TableField(select = false, exist = false)
+ @ApiModelProperty("搴忓彿(瀵煎嚭浣跨敤)")
+ private Integer index;
+
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingDto.java
new file mode 100644
index 0000000..d6c6fed
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingDto.java
@@ -0,0 +1,23 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.pojo.PersonTraining;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "PersonTrainingDto瀵硅薄", description = "鍩硅璁″垝")
+public class PersonTrainingDto extends PersonTraining {
+
+ @ApiModelProperty("缂栧埗浜哄鍚�")
+ private String compilerName;
+
+ @ApiModelProperty("瀹℃牳浜哄鍚�")
+ private String reviewerName;
+
+ @ApiModelProperty("鎵瑰噯浜哄鍚�")
+ private String approverName;
+
+ @ApiModelProperty("鍒涘缓浜哄鍚�")
+ private String createUserName;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordDto.java
new file mode 100644
index 0000000..74978ad
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordDto.java
@@ -0,0 +1,23 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.pojo.PersonTrainingRecord;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class PersonTrainingRecordDto extends PersonTrainingRecord {
+ @ApiModelProperty(value = "濮撳悕")
+ private String userName;
+
+ @ApiModelProperty(value = "宸ュ彿")
+ private String account;
+
+ @ApiModelProperty(value = "瑙掕壊")
+ private String roleName;
+
+ @ApiModelProperty(value = "鐢佃瘽鍙风爜")
+ private String phone;
+
+ @ApiModelProperty(value = "閮ㄩ棬")
+ private String department;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordListDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordListDto.java
new file mode 100644
index 0000000..f48d038
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordListDto.java
@@ -0,0 +1,37 @@
+package com.yuanchu.mom.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class PersonTrainingRecordListDto {
+
+ @ApiModelProperty(value = "鐢ㄦ埛id")
+ private Integer userId;
+
+ @ApiModelProperty("鍛樺伐缂栧彿")
+ private String account;
+
+ @ApiModelProperty("鐢ㄦ埛濮撳悕")
+ private String name;
+
+ @ApiModelProperty("鎵�鍦ㄩ儴闂�")
+ private String departLimsName;
+
+ @ApiModelProperty("鑱岀О")
+ private String professionalTitle;
+
+ @ApiModelProperty("鏈�楂樺鍘�")
+ private String officialAcademicRedentials;
+
+ @ApiModelProperty("鍏ュ崟浣嶆椂闂�")
+ private LocalDateTime unitTime;
+
+ @ApiModelProperty("鍏ュ崟浣嶆椂闂�")
+ private String unitTimeSting;
+
+ @ApiModelProperty("涓撲笟")
+ private String major1;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordSubmitDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordSubmitDto.java
new file mode 100644
index 0000000..307b34d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingRecordSubmitDto.java
@@ -0,0 +1,30 @@
+package com.yuanchu.mom.dto;
+
+import com.yuanchu.mom.pojo.PersonTrainingRecord;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class PersonTrainingRecordSubmitDto{
+
+ @ApiModelProperty("骞村害璁″垝鏄庣粏ID")
+ private Integer trainingDetailedId;
+
+ @ApiModelProperty("鑰冩牳鏂瑰紡")
+ private String assessmentMethod;
+
+ @ApiModelProperty("鏈鍩硅缁煎悎璇勪环")
+ private String comprehensiveAssessment;
+
+ @ApiModelProperty("璇勪环浜�")
+ private Integer assessmentUserId;
+
+ private String state;
+
+ @ApiModelProperty("璇炬椂")
+ private Integer classHour;
+
+
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingUpdateDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingUpdateDto.java
new file mode 100644
index 0000000..f713889
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/PersonTrainingUpdateDto.java
@@ -0,0 +1,17 @@
+package com.yuanchu.mom.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class PersonTrainingUpdateDto {
+
+ @ApiModelProperty("涓婚敭id")
+ private Integer id;
+
+ @ApiModelProperty("瀹℃牳/鎵瑰噯 澶囨敞")
+ private String remarks;
+
+ @ApiModelProperty("瀹℃牳/鎵瑰噯 鐘舵��")
+ private Integer status;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/TrainingRecordExportDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/TrainingRecordExportDto.java
new file mode 100644
index 0000000..14c85e7
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/TrainingRecordExportDto.java
@@ -0,0 +1,32 @@
+package com.yuanchu.mom.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @Author zhuo
+ * @Date 2024/11/25
+ */
+@Data
+public class TrainingRecordExportDto {
+
+ @ApiModelProperty("鐢ㄦ埛鍚嶇О1")
+ private String userName1;
+
+ @ApiModelProperty("閮ㄩ棬1")
+ private String department1;
+
+ @ApiModelProperty("鑰冩牳缁撴灉1")
+ private String examinationResults1;
+
+ @ApiModelProperty("鐢ㄦ埛鍚嶇О2")
+ private String userName2;
+
+ @ApiModelProperty("閮ㄩ棬1")
+ private String department2;
+
+ @ApiModelProperty("鑰冩牳缁撴灉1")
+ private String examinationResults2;
+
+
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/dto/TrainingRecordPersonDetailedDto.java b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/TrainingRecordPersonDetailedDto.java
new file mode 100644
index 0000000..fc2b403
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/dto/TrainingRecordPersonDetailedDto.java
@@ -0,0 +1,28 @@
+package com.yuanchu.mom.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class TrainingRecordPersonDetailedDto {
+
+ @ApiModelProperty("鍩硅鏃ユ湡")
+ private String trainingDateString;
+
+ @ApiModelProperty("鍩硅鏃ユ湡")
+ private Date trainingDate;
+
+ @ApiModelProperty("鍩硅鍐呭")
+ private String trainingContent;
+
+ @ApiModelProperty("璇炬椂")
+ private Integer classHour;
+
+ @ApiModelProperty("鑰冩牳缁撴灉")
+ private String examinationResults;
+
+ @ApiModelProperty("澶囨敞")
+ private String remarks;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonRewardPunishmentRecordExcel.java b/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonRewardPunishmentRecordExcel.java
new file mode 100644
index 0000000..34da4cb
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonRewardPunishmentRecordExcel.java
@@ -0,0 +1,36 @@
+package com.yuanchu.mom.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@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/yuanchu/mom/excel/PersonSupervisePlanDetailsListener.java b/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonSupervisePlanDetailsListener.java
new file mode 100644
index 0000000..cd80c4d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonSupervisePlanDetailsListener.java
@@ -0,0 +1,43 @@
+package com.yuanchu.mom.excel;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.yuanchu.mom.service.PersonSupervisePlanDetailsService;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class PersonSupervisePlanDetailsListener extends AnalysisEventListener<PersonSupervisePlanDetailsUpload> {
+
+ private Integer planId;
+
+ private static final int BATCH_COUNT = 1000;
+ List<PersonSupervisePlanDetailsUpload> list = new ArrayList<>();
+
+ private PersonSupervisePlanDetailsService personSupervisePlanDetailsService;
+
+ public PersonSupervisePlanDetailsListener(PersonSupervisePlanDetailsService personSupervisePlanDetailsService) {
+ this.personSupervisePlanDetailsService = personSupervisePlanDetailsService;
+ }
+
+ @Override
+ public void invoke(PersonSupervisePlanDetailsUpload data, AnalysisContext context) {
+ list.add(data);
+ if (list.size() >= BATCH_COUNT) {
+ save();
+ list.clear();
+ }
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+ save();
+ }
+
+ private void save() {
+ personSupervisePlanDetailsService.importExcel(list, this.planId);
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonSupervisePlanDetailsUpload.java b/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonSupervisePlanDetailsUpload.java
new file mode 100644
index 0000000..084122e
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonSupervisePlanDetailsUpload.java
@@ -0,0 +1,28 @@
+package com.yuanchu.mom.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class PersonSupervisePlanDetailsUpload {
+
+ @ExcelProperty("鐩戠潱鏃ユ湡")
+ private LocalDateTime superviseDate;
+
+ @ExcelProperty("鐩戠潱鐩殑")
+ private String superviseDes;
+
+ @ExcelProperty("琚洃鐫d汉鍛�")
+ private String supervisePerson;
+
+ @ExcelProperty("澶囨敞")
+ private String remarks;
+
+ @ExcelProperty("鐩戠潱椤圭洰")
+ private String superviseProject;
+
+ @ExcelProperty("鐩戠潱鍘熷洜")
+ private String superviseReason;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonTrainingDetailedListener.java b/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonTrainingDetailedListener.java
new file mode 100644
index 0000000..02da65e
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonTrainingDetailedListener.java
@@ -0,0 +1,42 @@
+package com.yuanchu.mom.excel;
+
+import com.alibaba.excel.context.AnalysisContext;
+import com.alibaba.excel.event.AnalysisEventListener;
+import com.yuanchu.mom.service.PersonTrainingDetailedService;
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+public class PersonTrainingDetailedListener extends AnalysisEventListener<PersonTrainingDetailedUpload> {
+
+ private Integer planId;
+
+ private static final int BATCH_COUNT = 1000;
+ List<PersonTrainingDetailedUpload> list = new ArrayList<>();
+
+ private PersonTrainingDetailedService personTrainingDetailedService;
+
+ public PersonTrainingDetailedListener(PersonTrainingDetailedService personTrainingDetailedService) {
+ this.personTrainingDetailedService = personTrainingDetailedService;
+ }
+
+ @Override
+ public void invoke(PersonTrainingDetailedUpload data, AnalysisContext context) {
+ list.add(data);
+ if (list.size() >= BATCH_COUNT) {
+ save();
+ list.clear();
+ }
+ }
+
+ @Override
+ public void doAfterAllAnalysed(AnalysisContext analysisContext) {
+ save();
+ }
+
+ private void save() {
+ personTrainingDetailedService.importExcel(list, this.planId);
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonTrainingDetailedUpload.java b/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonTrainingDetailedUpload.java
new file mode 100644
index 0000000..3afed10
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/excel/PersonTrainingDetailedUpload.java
@@ -0,0 +1,37 @@
+package com.yuanchu.mom.excel;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.time.LocalDateTime;
+
+@Data
+public class PersonTrainingDetailedUpload {
+
+ @ExcelProperty("鍩硅鐩爣")
+ private String trainingObjectives;
+
+ @ExcelProperty("鍩硅鍐呭")
+ private String trainingContent;
+
+ @ExcelProperty("鍩硅鏂瑰紡")
+ private String trainingMode;
+
+ @ExcelProperty("鍙傚姞瀵硅薄")
+ private String participants;
+
+ @ExcelProperty("涓惧姙閮ㄩ棬")
+ private String holdingDepartment;
+
+ @ExcelProperty("鍩硅璁插笀")
+ private String trainingLecturerName;
+
+ @ExcelProperty("鍩硅鏃堕棿")
+ private LocalDateTime trainingDate;
+
+ @ExcelProperty("璇炬椂")
+ private Integer classHour;
+
+ @ExcelProperty("澶囨敞")
+ private String remarks;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/AnnexMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/AnnexMapper.java
new file mode 100644
index 0000000..51e7e49
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/AnnexMapper.java
@@ -0,0 +1,9 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yuanchu.mom.pojo.Annex;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AnnexMapper extends BaseMapper<Annex> {
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonBasicInfoMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonBasicInfoMapper.java
new file mode 100644
index 0000000..44b5ab9
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonBasicInfoMapper.java
@@ -0,0 +1,37 @@
+package com.yuanchu.mom.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.yuanchu.mom.dto.DepartmentDto;
+import com.yuanchu.mom.dto.PersonBasicInfoDto;
+import com.yuanchu.mom.pojo.PersonBasicInfo;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-08-30 09:19:57
+ */
+public interface PersonBasicInfoMapper extends BaseMapper<PersonBasicInfo> {
+
+ List<DepartmentDto> selectLimsUser();
+
+ PersonBasicInfoDto getCNASPersonnelInfo(Integer userId);
+
+ IPage<Map<String, Object>> basicInformationOfPersonnelSelectPage(Page page, Integer departmentId);
+
+ /**
+ * 浜哄憳鍩烘湰淇℃伅鍒嗛〉鏌ヨ
+ * @param page
+ * @param name
+ * @param departmentId
+ * @return
+ */
+ IPage<Map<String, Object>> selectPersonBasecInfoAndUser(Page page, String name, Integer departmentId);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonCommunicationAbilityMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonCommunicationAbilityMapper.java
new file mode 100644
index 0000000..d84aa36
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonCommunicationAbilityMapper.java
@@ -0,0 +1,21 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonCommunicationAbilityDto;
+import com.yuanchu.mom.pojo.PersonCommunicationAbility;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 娌熼�氳兘鍔� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 12:00:57
+ */
+public interface PersonCommunicationAbilityMapper extends BaseMapper<PersonCommunicationAbility> {
+
+ IPage<PersonCommunicationAbilityDto> personPersonCommunicationAbilityPage(Page page, @Param("departLimsId") Integer departLimsId, @Param("userId") Integer userId, @Param("userName") String userName);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonJobResponsibilitiesMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonJobResponsibilitiesMapper.java
new file mode 100644
index 0000000..67bf184
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonJobResponsibilitiesMapper.java
@@ -0,0 +1,20 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonJobResponsibilitiesDto;
+import com.yuanchu.mom.pojo.PersonJobResponsibilities;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <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/yuanchu/mom/mapper/PersonPersonnelCapacityMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonPersonnelCapacityMapper.java
new file mode 100644
index 0000000..4f97cb1
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonPersonnelCapacityMapper.java
@@ -0,0 +1,29 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonPersonnelCapacityDto;
+import com.yuanchu.mom.dto.PersonPersonnelCapacityExportDto;
+import com.yuanchu.mom.pojo.PersonPersonnelCapacity;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 浜哄憳鑳藉姏 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 11:26:18
+ */
+public interface PersonPersonnelCapacityMapper extends BaseMapper<PersonPersonnelCapacity> {
+
+ IPage<PersonPersonnelCapacityDto> personPersonnelCapacityPage(Page page, Integer departLimsId, Integer userId, String userName);
+
+ /**
+ * 鏌ヨ浜哄憳鑳藉姏鎺ュ彛
+ * @param id
+ * @return
+ */
+ PersonPersonnelCapacityExportDto selectExportPersonnelCapacity(@Param("id") Integer id);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonPostAuthorizationRecordMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonPostAuthorizationRecordMapper.java
new file mode 100644
index 0000000..6378e33
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonPostAuthorizationRecordMapper.java
@@ -0,0 +1,20 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonPostAuthorizationRecordDto;
+import com.yuanchu.mom.pojo.PersonPostAuthorizationRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <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/yuanchu/mom/mapper/PersonRewardPunishmentRecordMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonRewardPunishmentRecordMapper.java
new file mode 100644
index 0000000..603f04b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonRewardPunishmentRecordMapper.java
@@ -0,0 +1,27 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yuanchu.mom.dto.PersonRewardPunishmentRecordDto;
+import com.yuanchu.mom.excel.PersonRewardPunishmentRecordExcel;
+import com.yuanchu.mom.pojo.PersonRewardPunishmentRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.time.LocalDateTime;
+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/yuanchu/mom/mapper/PersonSupervisePlanDetailsMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisePlanDetailsMapper.java
new file mode 100644
index 0000000..a193a78
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisePlanDetailsMapper.java
@@ -0,0 +1,25 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonSupervisePlanDetailsDto;
+import com.yuanchu.mom.mybatis_config.MyBaseMapper;
+import com.yuanchu.mom.pojo.PersonSupervisePlanDetails;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+
+/**
+ * <p>
+ * 鐩戠潱璁″垝 - 瀛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 04:17:02
+ */
+public interface PersonSupervisePlanDetailsMapper extends MyBaseMapper<PersonSupervisePlanDetails> {
+
+ IPage<PersonSupervisePlanDetailsDto> pageByDate(Page page, String date, String project, Integer planId);
+
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisePlanMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisePlanMapper.java
new file mode 100644
index 0000000..1e86168
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisePlanMapper.java
@@ -0,0 +1,21 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonSupervisePlanDto;
+import com.yuanchu.mom.pojo.PersonSupervisePlan;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 鐩戠潱璁″垝 - 鐖� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 04:14:45
+ */
+public interface PersonSupervisePlanMapper extends BaseMapper<PersonSupervisePlan> {
+
+ IPage<PersonSupervisePlanDto> pageByPerson(Page page, String organizationPerson);
+
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionControlSheetMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionControlSheetMapper.java
new file mode 100644
index 0000000..f684fdc
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionControlSheetMapper.java
@@ -0,0 +1,25 @@
+package com.yuanchu.mom.mapper;
+
+import com.yuanchu.mom.dto.PersonSupervisionControlSheetExportDto;
+import com.yuanchu.mom.pojo.PersonSupervisionControlSheet;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 - 鎺у埗鍗� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 05:18:57
+ */
+public interface PersonSupervisionControlSheetMapper extends BaseMapper<PersonSupervisionControlSheet> {
+
+ /**
+ * 鏌ヨ鐩戠潱璁板綍鎺у埗鍗�
+ * @param supervisionRecordId
+ */
+ PersonSupervisionControlSheetExportDto selectSupervisionControl(@Param("supervisionRecordId") Integer supervisionRecordId);
+
+
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionProcessingSheetMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionProcessingSheetMapper.java
new file mode 100644
index 0000000..b2f103a
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionProcessingSheetMapper.java
@@ -0,0 +1,24 @@
+package com.yuanchu.mom.mapper;
+
+import com.yuanchu.mom.dto.PersonSupervisionProcessingSheetDto;
+import com.yuanchu.mom.pojo.PersonSupervisionProcessingSheet;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 - 澶勭悊鍗� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 05:35:58
+ */
+public interface PersonSupervisionProcessingSheetMapper extends BaseMapper<PersonSupervisionProcessingSheet> {
+
+ /**
+ * 鏌ヨ浜哄憳鐩戠潱璁板綍澶勭悊鍗�
+ * @param supervisionRecordId
+ * @return
+ */
+ PersonSupervisionProcessingSheetDto selectProcessingSheet(@Param("supervisionRecordId") Integer supervisionRecordId);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionRecordMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionRecordMapper.java
new file mode 100644
index 0000000..ec59a66
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonSupervisionRecordMapper.java
@@ -0,0 +1,27 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonSupervisionRecordDto;
+import com.yuanchu.mom.pojo.PersonSupervisionRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 04:16:49
+ */
+public interface PersonSupervisionRecordMapper extends BaseMapper<PersonSupervisionRecord> {
+
+ IPage<PersonSupervisionRecordDto> personSupervisionRecordPage(Page page, Integer userId, Integer departLimsId, String userName);
+
+ /**
+ * 鏌ヨ鐩戠潱璁板綍璇︽儏
+ * @param id
+ * @return
+ */
+ PersonSupervisionRecordDto selectPersonSupervisionRecord(Integer id);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrackRecordMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrackRecordMapper.java
new file mode 100644
index 0000000..7b5e990
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrackRecordMapper.java
@@ -0,0 +1,24 @@
+package com.yuanchu.mom.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.yuanchu.mom.pojo.PersonTrackRecord;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 宸ヤ綔灞ュ巻 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-02 03:13:03
+ */
+public interface PersonTrackRecordMapper extends BaseMapper<PersonTrackRecord> {
+
+ IPage<PersonTrackRecord> personTrackRecordSelect(Page page, String userId, String departLimsId);
+
+ List<PersonTrackRecord> personTrackRecordExport(String userId, String departLimsId);
+
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingDetailedMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingDetailedMapper.java
new file mode 100644
index 0000000..5748e58
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingDetailedMapper.java
@@ -0,0 +1,45 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonTrainingDetailedDto;
+import com.yuanchu.mom.dto.PersonTrainingRecordDto;
+import com.yuanchu.mom.mybatis_config.MyBaseMapper;
+import com.yuanchu.mom.pojo.PersonTrainingDetailed;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁″垝璇︽儏 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:46:27
+ */
+public interface PersonTrainingDetailedMapper extends MyBaseMapper<PersonTrainingDetailed> {
+
+ IPage<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page,
+ String trainingLecturerName,
+ String courseCode, String trainingDate,
+ Integer id,
+ Integer userId,
+ Integer loginUserId);
+
+ /**
+ * 鏍规嵁涓昏〃id鏌ヨ璇︽儏
+ * @param trainingId
+ * @return
+ */
+ List<PersonTrainingDetailedDto> selectTrainingList(@Param("trainingId") Integer trainingId);
+
+ /**
+ * 鏌ヨ璇︾粏
+ * @param id
+ * @return
+ */
+ PersonTrainingDetailedDto selectTrainingDetail(@Param("id") Integer id);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingMapper.java
new file mode 100644
index 0000000..cf69663
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingMapper.java
@@ -0,0 +1,20 @@
+package com.yuanchu.mom.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.yuanchu.mom.dto.PersonTrainingDto;
+import com.yuanchu.mom.pojo.PersonTraining;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:11:49
+ */
+public interface PersonTrainingMapper extends BaseMapper<PersonTraining> {
+
+ IPage<PersonTrainingDto> personTrainingSelect(Page page, String compilerName, String departLimsId);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingRecordMapper.java b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingRecordMapper.java
new file mode 100644
index 0000000..054279a
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/mapper/PersonTrainingRecordMapper.java
@@ -0,0 +1,67 @@
+package com.yuanchu.mom.mapper;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonTrainingRecordDto;
+import com.yuanchu.mom.dto.PersonTrainingRecordListDto;
+import com.yuanchu.mom.dto.TrainingRecordPersonDetailedDto;
+import com.yuanchu.mom.pojo.PersonTrainingRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁板綍 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-12 04:50:48
+ */
+public interface PersonTrainingRecordMapper extends BaseMapper<PersonTrainingRecord> {
+
+ List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName);
+
+ IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, String userName, Integer userId, Integer departLimsId);
+
+ IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetails(Page page, Integer userId);
+
+ /**
+ * 鏍规嵁璇︽儏id鏌ヨ鍩硅浜哄憳
+ * @param trainingDetailedId
+ * @return
+ */
+ List<PersonTrainingRecordDto> selectListByTrainingDetailedId(@Param("trainingDetailedId") Integer trainingDetailedId);
+
+ /**
+ * 鏌ヨ浜哄憳淇℃伅
+ * @param userId
+ * @return
+ */
+ PersonTrainingRecordListDto selectUserTraining(@Param("userId") Integer userId);
+
+ /**
+ * 鏍规嵁鐢ㄦ埛id鏌ヨ鍩硅璁板綍
+ * @param userId
+ * @return
+ */
+ List<TrainingRecordPersonDetailedDto> selectPersonDetailedDtos(Integer userId);
+
+ /**
+ * 鏍规嵁鐢ㄦ埛id鍜屽勾浠芥煡璇汉鍛樻槑缁� 鍩硅璁板綍
+ * @param page
+ * @param userId
+ * @param year
+ * @return
+ */
+ IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year);
+
+ /**
+ * 鏍规嵁鐢ㄦ埛id鍜屽勾浠芥煡璇汉鍛樻槑缁� 鍩硅璁板綍瀵煎嚭
+ * @param userId
+ * @param trainingDate
+ * @return
+ */
+ List<TrainingRecordPersonDetailedDto> selectPersonDetailedDtosByTrainingDate(Integer userId, Integer year);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/Annex.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/Annex.java
new file mode 100644
index 0000000..136dd53
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/Annex.java
@@ -0,0 +1,50 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.yuanchu.mom.common.OrderBy;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+@Data
+@TableName("cnas_annex")
+@ApiModel("浜哄憳鍩烘湰淇℃伅闄勪欢琛�")
+public class Annex implements Serializable {
+
+ @TableId(type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty(value = "user琛╥d")
+ private Integer userId;
+
+ @ApiModelProperty(value = "璇佷欢鍙�")
+ private String idNumber;
+
+ @ApiModelProperty(value = "鍙戣瘉鍗曚綅")
+ private String issueUnit;
+
+ @ApiModelProperty(value = "鏂囦欢鍚嶇О")
+ private String fileName;
+
+ @ApiModelProperty(value = "绾у埆")
+ private String level;
+
+ @ApiModelProperty(value = "鏈夋晥鏈�")
+ private String periodValidity;
+
+ @ApiModelProperty(value = "娣诲姞鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "澶嶅嵃浠�")
+ private String copy;
+
+ @ApiModelProperty(value = "鍘熶欢")
+ private String original;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonBasicInfo.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonBasicInfo.java
new file mode 100644
index 0000000..0dee8c4
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonBasicInfo.java
@@ -0,0 +1,251 @@
+package com.yuanchu.mom.pojo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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-08-30 09:19:57
+ */
+@Getter
+@Setter
+@TableName("cnas_person_basic_info")
+@ApiModel(value = "PersonBasicInfo瀵硅薄", description = "")
+public class PersonBasicInfo implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("褰撳墠鐘舵��")
+ private String currentState;
+
+ @ApiModelProperty("鍏ヨ亴鏃堕棿")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime entryTime;
+
+ @ApiModelProperty("褰撳墠鑱屽姟")
+ private String currentPosition;
+
+ @ApiModelProperty("宀椾綅")
+ private String post;
+
+ @ApiModelProperty("鑱岀О")
+ @ExcelProperty("鑱岀О")
+ private String professionalTitle;
+
+ @ApiModelProperty("鎬у埆")
+ private String sex;
+
+ @ApiModelProperty("浜哄憳鍒嗙被")
+ private String personnelClassification;
+
+ @ApiModelProperty("鍑虹敓鏃ユ湡")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime dateBirth;
+
+ @ApiModelProperty("韬唤璇佸彿")
+ @ExcelProperty("璇佷欢鍙风爜")
+ private String identityCard;
+
+ @ApiModelProperty("姘戞棌")
+ private String nation;
+
+ @ApiModelProperty("鏀挎不闈㈣矊")
+ private String politicalStatus;
+
+ @ApiModelProperty("鏈�楂樺鍘�")
+ @ExcelProperty("鏈�楂樺鍘�")
+ private String officialAcademicRedentials;
+
+ @ApiModelProperty("姣曚笟鏃堕棿1")
+ @ExcelProperty("姣曚笟鏃堕棿")
+ private LocalDateTime graduationTime1;
+
+ @ApiModelProperty("姣曚笟闄㈡牎1")
+ @ExcelProperty("姣曚笟闄㈡牎")
+ private String graduatedInstitutions1;
+
+ @ApiModelProperty("涓撲笟1")
+ @ExcelProperty("鎵�瀛︿笓涓�")
+ private String major1;
+
+ @ApiModelProperty("姣曚笟鏃堕棿2")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime graduationTime2;
+
+ @ApiModelProperty("姣曚笟闄㈡牎2")
+ private String graduatedInstitutions2;
+
+ @ApiModelProperty("涓撲笟2")
+ private String major2;
+
+ @ApiModelProperty("鎵嬫満鍙�")
+ private String telephone;
+
+ @ApiModelProperty("璁″垝瀹炰範缁撴潫")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime endPlannedInternship;
+
+ @ApiModelProperty("瀹為檯瀹炰範缁撴潫")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime endPracticalPractice;
+
+ @ApiModelProperty("绂昏亴鏃ユ湡")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime dateDeparture;
+
+ @ApiModelProperty("妗岄潰鍥剧墖")
+ private String desktopPicture;
+
+ @ApiModelProperty("闄勪欢璧勬枡")
+ private String attachmentInformation;
+
+ @ApiModelProperty("澶囨敞")
+ private String remarks;
+
+ @ApiModelProperty("鐢ㄦ埛琛紙user锛塱d")
+ private Integer userId;
+//
+ @ApiModelProperty("宸ュ彿")
+ private Integer jobNumber;
+
+ @ApiModelProperty("鍛樺伐瀛愮紪鍙�")
+ private String subordinateNumber;
+
+ @ApiModelProperty("鍏徃鍚嶇О")
+ private String corporateName;
+
+ @ApiModelProperty("宀椾綅绫诲埆")
+ private String postType;
+
+ @ApiModelProperty("宀椾綅缂栧彿")
+ private String postCode;
+
+ @ApiModelProperty("宀椾綅鍚嶇О")
+ private String postName;
+
+ @ApiModelProperty("鍏ラ泦鍥㈡椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ @ExcelProperty("鍏ラ泦鍥㈡椂闂�")
+ private LocalDateTime groupTime;
+
+ @ApiModelProperty("鍏ュ崟浣嶆椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ @ExcelProperty("鍏ュ崟浣嶆椂闂�")
+ private LocalDateTime unitTime;
+
+
+ @ApiModelProperty("鐩存帴涓婄骇")
+ private String reportingTo;
+
+
+ @ApiModelProperty("鍔冲姩鍏崇郴")
+ private Integer laborRelations;
+
+ @ApiModelProperty("璇曠敤寮�濮嬫椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime trialStartTime;
+
+ @ApiModelProperty("璇曠敤缁撴潫鏃堕棿")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime trialEndTime;
+
+ @ApiModelProperty("绫嶈疮")
+ @ExcelProperty("绫嶈疮")
+ private String nativePlace;
+
+ @ApiModelProperty("璇佷欢绫诲瀷")
+ private String idType;
+
+ @ApiModelProperty("璇佷欢鏈夋晥鏈�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime validityPeriod;
+
+ @ApiModelProperty("濠氬Щ鐘跺喌")
+ private Integer maritalStatus;
+
+ @ApiModelProperty("璇佷欢鍦板潃")
+ @ExcelProperty("璇佷欢鍦板潃")
+ private String idAddress;
+
+ @ApiModelProperty("璇佷欢璇︾粏鍦板潃")
+ private String idDetailAddress;
+
+ @ApiModelProperty("鐜板眳鍦板潃")
+ private String currentAddress;
+
+ @ApiModelProperty("鐜板眳璇︾粏鍦板潃")
+ private String currentDetailAddress;
+
+ @ApiModelProperty("閫佽揪鍦板潃")
+ private String serviceAddress;
+
+ @ApiModelProperty("閫佽揪璇︾粏鍦板潃")
+ private String serviceDetailAddress;
+
+ @ApiModelProperty("鏄惁閫�浼嶅啗浜�")
+ private Integer retiredSoldiers;
+
+ @ApiModelProperty("鍏ュ厷/鍥㈡椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+ private LocalDateTime dumplingTime;
+
+ @ApiModelProperty("鐭彿")
+ private String cornet;
+
+ @ApiModelProperty("鍔炲叕鐢佃瘽")
+ private String officePhone;
+
+ @ApiModelProperty("璁$畻鏈虹瓑绾�")
+ private String ncre;
+
+ @ApiModelProperty("鏈�楂樺浣�")
+ @ExcelProperty("鏈�楂樺浣�")
+ private String highestDegree;
+
+ @ApiModelProperty("鏄惁鍏ㄦ棩鍒�")
+ private Integer fullTime;
+
+ @ApiModelProperty("鏄惁灞炰簬涓ぉ")
+ private Integer enroll;
+
+ @ApiModelProperty("XX灞婂ぇ瀛︾敓")
+ private String collegeStudents;
+
+ @ApiModelProperty("绱ф�ヨ仈绯讳汉")
+ @ExcelProperty("绱ф�ヨ仈绯讳汉")
+ private String emergencyContact;
+
+ @ApiModelProperty("绱ф�ヨ仈绯讳汉鐢佃瘽")
+ @ExcelProperty("绱ф�ヨ仈绯讳汉鐢佃瘽")
+ private String emergencyContactPhone;
+
+ @ApiModelProperty("鏈�鍚庢洿鏂版椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime lastUpdateTime;
+
+
+
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonCommunicationAbility.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonCommunicationAbility.java
new file mode 100644
index 0000000..e1708bd
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonCommunicationAbility.java
@@ -0,0 +1,66 @@
+package com.yuanchu.mom.pojo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+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.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 娌熼�氳褰�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 12:00:57
+ */
+@Getter
+@Setter
+@TableName("cnas_person_communication_ability")
+@ApiModel(value = "PersonCommunicationAbility瀵硅薄", description = "娌熼�氳褰�")
+public class PersonCommunicationAbility implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("娌熼�氫汉id")
+ private String userId;
+
+ @ApiModelProperty("娌熼�氭椂闂�")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private LocalDateTime communicationTime;
+
+ @ApiModelProperty("娌熼�氬湴鐐�")
+ private String communicationPlace;
+
+ @ApiModelProperty("娌熼�氬唴瀹�")
+ private String communicationContent;
+
+ @ApiModelProperty("鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @ApiModelProperty(value = "鏇存柊浜篿d", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonJobResponsibilities.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonJobResponsibilities.java
new file mode 100644
index 0000000..3d2c47d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonJobResponsibilities.java
@@ -0,0 +1,78 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <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/yuanchu/mom/pojo/PersonPersonnelCapacity.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonPersonnelCapacity.java
new file mode 100644
index 0000000..3ba9a04
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonPersonnelCapacity.java
@@ -0,0 +1,125 @@
+package com.yuanchu.mom.pojo;
+
+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.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <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("1 鎻愪氦id 鎿嶄綔浜�")
+ private Integer submitOperatingPersonnelId;
+
+ @ApiModelProperty("1 鎻愪氦 鏃ユ湡")
+ private LocalDateTime submitDate;
+
+ @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;
+
+ @ApiModelProperty(value = "鑱岀О")
+ private String technicalPost;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonPostAuthorizationRecord.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonPostAuthorizationRecord.java
new file mode 100644
index 0000000..8be757a
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonPostAuthorizationRecord.java
@@ -0,0 +1,77 @@
+package com.yuanchu.mom.pojo;
+
+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.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <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/yuanchu/mom/pojo/PersonRewardPunishmentRecord.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonRewardPunishmentRecord.java
new file mode 100644
index 0000000..9bdb20d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonRewardPunishmentRecord.java
@@ -0,0 +1,64 @@
+package com.yuanchu.mom.pojo;
+
+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.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <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/yuanchu/mom/pojo/PersonSupervisePlan.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisePlan.java
new file mode 100644
index 0000000..35d662d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisePlan.java
@@ -0,0 +1,66 @@
+package com.yuanchu.mom.pojo;
+
+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.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * <p>
+ * 鐩戠潱璁″垝 - 鐖�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 04:14:45
+ */
+@Data
+@TableName("cnas_person_supervise_plan")
+@ApiModel(value = "PersonSupervisePlan瀵硅薄", description = "鐩戠潱璁″垝 - 鐖�")
+public class PersonSupervisePlan implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("鏂囦欢鍚嶇О")
+ private String fileName;
+
+ @ApiModelProperty("缂栧埗浜篿d")
+ private Integer organizationPersonId;
+
+ @ApiModelProperty("缂栧埗鏃ユ湡")
+ private LocalDateTime organizationDate;
+
+ @ApiModelProperty("鎵瑰噯浜篿d")
+ private Integer approvalId;
+
+ @ApiModelProperty("鎵瑰噯浜烘棩鏈�")
+ private LocalDateTime approvalDate;
+
+ @ApiModelProperty("鎵瑰噯鐘舵��(1閫氳繃/0涓嶉�氳繃)")
+ private Integer approvalStatus;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "鍒涘缓浜篿d", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @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;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisePlanDetails.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisePlanDetails.java
new file mode 100644
index 0000000..6cac12a
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisePlanDetails.java
@@ -0,0 +1,77 @@
+package com.yuanchu.mom.pojo;
+
+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.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 鐩戠潱璁″垝 - 瀛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 04:17:02
+ */
+@Getter
+@Setter
+@TableName("cnas_person_supervise_plan_details")
+@ApiModel(value = "PersonSupervisePlanDetails瀵硅薄", description = "鐩戠潱璁″垝 - 瀛�")
+public class PersonSupervisePlanDetails implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @JsonFormat(pattern = "yyyy-MM-dd")
+ @ApiModelProperty("鐩戠潱鏃ユ湡")
+ private Date superviseDate;
+
+ @ApiModelProperty("鐩戠潱鐩殑")
+ private String superviseDes;
+
+ @ApiModelProperty("琚洃鐫d汉鍛�")
+ private String supervisePerson;
+
+ @ApiModelProperty("澶囨敞")
+ private String remarks;
+
+ @ApiModelProperty("鐩戠潱椤圭洰")
+ private String superviseProject;
+
+ @ApiModelProperty("鐩戠潱鍘熷洜")
+ private String superviseReason;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "鍒涘缓浜�", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @ApiModelProperty("鐩戠潱璁″垝 - 鐖� id")
+ private Integer planId;
+
+ //搴忓彿, 瀵煎嚭浣跨敤
+ @TableField(select = false, exist = false)
+ private Integer index;
+
+ // 瀵煎嚭浣跨敤
+ @TableField(select = false, exist = false)
+ @ApiModelProperty("鐩戠潱鏃ユ湡")
+ private String superviseDateString;
+
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionControlSheet.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionControlSheet.java
new file mode 100644
index 0000000..8f7ce58
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionControlSheet.java
@@ -0,0 +1,112 @@
+package com.yuanchu.mom.pojo;
+
+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.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 - 鎺у埗鍗�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 05:18:57
+ */
+@Getter
+@Setter
+@TableName("cnas_person_supervision_control_sheet")
+@ApiModel(value = "PersonSupervisionControlSheet瀵硅薄", description = "鐩戠潱璁板綍 - 鎺у埗鍗�")
+public class PersonSupervisionControlSheet implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("1鍙戠敓閮ㄩ棬id")
+ private Integer occurrenceDepartment;
+
+ @ApiModelProperty("1閮ㄩ棬璐熻矗浜篿d")
+ private Integer departmentHeadId;
+
+ @ApiModelProperty("1涓嶇鍚堝伐浣滃彂鐜伴�斿緞瀛楀吀id")
+ private String discoveryApproach;
+
+ @ApiModelProperty("1涓嶇鍚堝伐浣滅殑璇︾粏璁板綍")
+ private String notConformDetails;
+
+ @ApiModelProperty("1涓嶇鍚堢殑渚濇嵁鍙婃潯娆惧彿")
+ private String nonConformityClause;
+
+ @ApiModelProperty("1鍙戠幇閮ㄩ棬 璐熻矗浜篿d")
+ private Integer discovererId;
+
+ @ApiModelProperty("1鍙戠幇閮ㄩ棬 - 鏃ユ湡")
+ private LocalDateTime discovererDate;
+
+ @ApiModelProperty("2琚洃鐫d汉id")
+ private Integer supervisedPersonId;
+
+ @ApiModelProperty("2琚洃鐫d汉 - 鏃ユ湡")
+ private String supervisedPersonDate;
+
+ @ApiModelProperty("3娑堥櫎涓嶇鍚堝伐浣滄墍閲囧彇鐨勬帾鏂�")
+ private String treatmentMeasures;
+
+ @ApiModelProperty("3璐d换閮ㄩ棬 璐熻矗浜篿d")
+ private Integer responsibleDepartmentPersonId;
+
+ @ApiModelProperty("3璐d换閮ㄩ棬 鏃ユ湡")
+ private LocalDateTime responsibleDepartmentDate;
+
+ @ApiModelProperty("4鏄惁闇�瑕侀噰鍙栫籂姝f帾鏂�")
+ private String correctiveMeasure;
+
+ @ApiModelProperty("4绾犳鎺柦澶勭悊鍗曡窡韪�")
+ private Integer correctiveMeasureFollowTracks;
+
+ @ApiModelProperty("4绾犳鎺柦 鎶�鏈礋璐d汉id")
+ private Integer correctiveMeasurePersonId;
+
+ @ApiModelProperty("4绾犳鎺柦 鏃ユ湡")
+ private LocalDateTime correctiveMeasureDate;
+
+ @ApiModelProperty("5鏄惁閫氱煡瀹㈡埛(1锛氭槸锛�2锛氬惁)")
+ private Integer whetherInformCustomer;
+
+ @ApiModelProperty("5鏄惁鎭㈠宸ヤ綔(1锛氭槸锛�2锛氬惁)")
+ private Integer whetherResumeWork;
+
+ @ApiModelProperty("5璐ㄩ噺璐熻矗浜篿d")
+ private Integer qualitySupervisorId;
+
+ @ApiModelProperty("5璐ㄩ噺璐熻矗浜烘棩鏈�")
+ private LocalDateTime qualitySupervisorDate;
+
+ @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 LocalDate createTime;
+
+ @ApiModelProperty("褰撳墠璐熻矗浜�")
+ private String currentResponsible;
+
+ @ApiModelProperty("鐩戠潱璁板綍id")
+ private Integer supervisionRecordId;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionProcessingSheet.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionProcessingSheet.java
new file mode 100644
index 0000000..4d12c5e
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionProcessingSheet.java
@@ -0,0 +1,87 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 - 澶勭悊鍗�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 05:35:58
+ */
+@Getter
+@Setter
+@TableName("cnas_person_supervision_processing_sheet")
+@ApiModel(value = "PersonSupervisionProcessingSheet瀵硅薄", description = "鐩戠潱璁板綍 - 澶勭悊鍗�")
+public class PersonSupervisionProcessingSheet implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("涓婚敭id")
+ @TableId(value = "processing_id", type = IdType.AUTO)
+ private Integer processingId;
+
+ @ApiModelProperty("1 涓嶇鍚堟垨鍋忕浜嬪疄鐨勬弿杩�")
+ private String descriptionNonconformity;
+
+ @ApiModelProperty("1 鎻愬嚭閮ㄩ棬 浜哄憳 id")
+ private Integer proposingDepartmentPersonId;
+
+ @ApiModelProperty("1 鎻愬嚭閮ㄩ棬 鏃ユ湡")
+ private LocalDateTime proposingDepartmentDate;
+
+ @ApiModelProperty("2 鍘熷洜鍒嗘瀽")
+ private String causeAnalysis;
+
+ @ApiModelProperty("2 鍘熷洜鍒嗘瀽 閮ㄩ棬 浜哄憳 id")
+ private Integer causeAnalysisPersonId;
+
+ @ApiModelProperty("2 鍘熷洜鍒嗘瀽 鏃ユ湡")
+ private LocalDateTime causeAnalysisDate;
+
+ @ApiModelProperty("3 绾犳鎺柦")
+ private String correctiveMeasure;
+
+ @ApiModelProperty("3 绾犳鎺柦 鎻愬嚭瑕佹眰閮ㄩ棬纭")
+ private String requestDepartmentConfirmation;
+
+ @ApiModelProperty("3 绾犳鎺柦 浜哄憳id")
+ private Integer correctiveActionId;
+
+ @ApiModelProperty("3 绾犳鎺柦 鏃ユ湡")
+ private LocalDateTime correctiveActionDate;
+
+ @ApiModelProperty("4 瀹炴柦楠岃瘉缁撴灉")
+ private String implementationVerificationResults;
+
+ @ApiModelProperty("4 楠岃瘉閮ㄩ棬 浜哄憳id")
+ private Integer verificationDepartmentPersonId;
+
+ @ApiModelProperty("4 楠岃瘉閮ㄩ棬 鏃ユ湡")
+ private LocalDateTime verificationDepartmentDate;
+
+ @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;
+
+ @ApiModelProperty("鐩戠潱璁板綍id")
+ private Integer supervisionRecordId;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionRecord.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionRecord.java
new file mode 100644
index 0000000..8dcfed5
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonSupervisionRecord.java
@@ -0,0 +1,107 @@
+package com.yuanchu.mom.pojo;
+
+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.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 04:16:49
+ */
+@Getter
+@Setter
+@TableName("cnas_person_supervision_record")
+@ApiModel(value = "PersonSupervisionRecord瀵硅薄", description = "鐩戠潱璁板綍")
+public class PersonSupervisionRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("妫�娴嬩汉鍛榠d")
+ private Integer testerId;
+
+ @ApiModelProperty("鐩戠潱鍛榠d")
+ private Integer supervisorId;
+
+ @ApiModelProperty("妫�娴嬮」鐩�")
+ private String testItem;
+
+ @ApiModelProperty("鏍峰搧缂栧彿")
+ private String sampleNumber;
+
+ @ApiModelProperty("妫�娴嬫柟娉�")
+ private String testMethod;
+
+ @ApiModelProperty("妫�娴嬭褰�")
+ private String testingRecords;
+
+ @ApiModelProperty("妫�娴嬫棩鏈�")
+ private LocalDateTime detectionDate;
+
+ @ApiModelProperty("浜哄憳id")
+ private String personnel;
+
+ @ApiModelProperty("浠櫒璁惧")
+ private String instrumentEquipment;
+
+ @ApiModelProperty("宸ヤ綔鐜")
+ private String workingEnvironment;
+
+ @ApiModelProperty("鏍峰搧閲囬泦")
+ private String sampleCollection;
+
+ @ApiModelProperty("鏍峰搧鐨勫噯澶�")
+ private String samplePreparation;
+
+ @ApiModelProperty("妫�娴嬫姤鍛�")
+ private String testReport;
+
+ @ApiModelProperty("鐩戠潱鎯呭喌璇勪环")
+ private String evaluationSupervisionSituation;
+
+ @ApiModelProperty("涓嶇鍚堝鐞嗘剰瑙�")
+ private String doNotMeetTheHandlingOpinions;
+
+ @ApiModelProperty("鎶�鏈礋璐d汉id")
+ private Integer technicalDirector;
+
+ @ApiModelProperty("鎶�鏈礋璐d汉瀹℃壒鏃ユ湡")
+ private LocalDateTime technicalDirectorDate;
+
+ @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)
+ private Integer createUser;
+
+ @ApiModelProperty(value = "鏇存柊浜篿d", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @ApiModelProperty("褰撳墠璐熻矗浜�")
+ private String currentResponsible;
+
+ @ApiModelProperty("褰撳墠鐘舵��")
+ private String currentState;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrackRecord.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrackRecord.java
new file mode 100644
index 0000000..6f946f1
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrackRecord.java
@@ -0,0 +1,83 @@
+package com.yuanchu.mom.pojo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ColumnWidth;
+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-09-02 03:13:03
+ */
+@Getter
+@Setter
+@TableName("cnas_person_track_record")
+@ApiModel(value = "PersonTrackRecord瀵硅薄", description = "宸ヤ綔灞ュ巻")
+@ExcelIgnoreUnannotated
+public class PersonTrackRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ExcelIgnore
+ @ApiModelProperty("涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ColumnWidth(value = 18)
+ @ExcelProperty(value = "璧峰鏃堕棿")
+ @ApiModelProperty("璧峰鏃堕棿")
+ private LocalDateTime startTime;
+
+ @ExcelProperty(value = "缁撴潫鏃堕棿")
+ @ColumnWidth(value = 18)
+ @ApiModelProperty("缁撴潫鏃堕棿")
+ private LocalDateTime endTime;
+
+ @ExcelProperty(value = "宸ヤ綔鍗曚綅")
+ @ApiModelProperty("宸ヤ綔鍗曚綅")
+ private String placeWork;
+
+ @ExcelProperty(value = "閮ㄩ棬")
+ @ApiModelProperty("閮ㄩ棬")
+ private String department;
+
+ @ExcelProperty(value = "鑱屽姟")
+ @ApiModelProperty("鑱屽姟")
+ private String post;
+
+ @ExcelProperty(value = "澶囨敞")
+ @ApiModelProperty("澶囨敞")
+ private String remarks;
+
+ @ColumnWidth(value = 18)
+ @ExcelProperty(value = "鍒涘缓鏃堕棿")
+ @ApiModelProperty("鍒涘缓鏃堕棿")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("鍒涘缓浜�")
+ @TableField(fill = FieldFill.INSERT)
+ private String createUser;
+
+ @ApiModelProperty("鐢ㄦ埛琛紙user锛塱d")
+ private Integer userId;
+
+ private String fileName;
+
+ @TableField(exist = false,select = false)
+ @ExcelProperty(value = "鐢ㄦ埛鍚嶇О")
+ @ApiModelProperty("鐢ㄦ埛鍚嶇О")
+ private String name;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTraining.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTraining.java
new file mode 100644
index 0000000..8eff270
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTraining.java
@@ -0,0 +1,83 @@
+package com.yuanchu.mom.pojo;
+
+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.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 鍩硅璁″垝
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:11:49
+ */
+@Getter
+@Setter
+@TableName("cnas_person_training")
+@ApiModel(value = "PersonTraining瀵硅薄", description = "鍩硅璁″垝")
+public class PersonTraining implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("涓婚敭id")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("鏂囦欢鍚嶇О")
+ private String fileName;
+
+ @ApiModelProperty("缂栧埗浜篿d")
+ private Integer compilerId;
+
+ @ApiModelProperty("缂栧埗鏃ユ湡")
+ private LocalDateTime compilationDate;
+
+ @ApiModelProperty("瀹℃牳浜篿d")
+ private Integer reviewerId;
+
+ @ApiModelProperty("瀹℃牳鏃ユ湡")
+ private LocalDateTime auditDate;
+
+ @ApiModelProperty("瀹℃牳鐘舵��")
+ private Integer reviewerStatus;
+
+ @ApiModelProperty("瀹℃牳澶囨敞")
+ private String auditRemarks;
+
+ @ApiModelProperty("鎵瑰噯浜篿d")
+ private Integer approverId;
+
+ @ApiModelProperty("鎵瑰噯澶囨敞")
+ private String approvalRemarks;
+
+ @ApiModelProperty("鎵瑰噯鐘舵��(1锛氭壒鍑嗭紱2锛氫笉鎵瑰噯)")
+ private Integer approvalStatus;
+
+ @ApiModelProperty("鎵瑰噯鏃ユ湡")
+ private LocalDateTime approvalDate;
+
+ @ApiModelProperty("鍒涘缓鏃ユ湡")
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty("鍒涘缓浜篿d")
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @ApiModelProperty("鏇存柊鏃堕棿")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("鏇存柊浜篿d")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrainingDetailed.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrainingDetailed.java
new file mode 100644
index 0000000..2f5b8b2
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrainingDetailed.java
@@ -0,0 +1,111 @@
+package com.yuanchu.mom.pojo;
+
+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.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.Date;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 鍩硅璁″垝璇︽儏
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:46:27
+ */
+@Getter
+@Setter
+@TableName("cnas_person_training_detailed")
+@ApiModel(value = "PersonTrainingDetailed瀵硅薄", description = "鍩硅璁″垝璇︽儏")
+public class PersonTrainingDetailed implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("鍩硅璁″垝")
+ @TableId(value = "id", type = IdType.AUTO)
+ private Integer id;
+
+ @ApiModelProperty("璇剧▼缂栧彿")
+ private String courseCode;
+
+ @ApiModelProperty("鍩硅鐩爣")
+ private String trainingObjectives;
+
+ @ApiModelProperty("鍩硅鍐呭")
+ private String trainingContent;
+
+ @ApiModelProperty("鍩硅鏂瑰紡")
+ private String trainingMode;
+
+ // 鏈紑濮� ==> 杩涜涓� ==> 宸茬粨鏉� ==> 宸插畬鎴�
+ @ApiModelProperty("鐘舵��(1锛氬凡瀹屾垚锛�2锛氳繘琛屼腑锛�3: 鏈紑濮嬶紱4锛氬凡缁撴潫)")
+ private Integer state;
+
+ @ApiModelProperty("鍙傚姞瀵硅薄")
+ private String participants;
+
+ @ApiModelProperty("涓惧姙閮ㄩ棬")
+ private Integer holdingDepartment;
+
+ @ApiModelProperty("鍩硅鍦扮偣")
+ private String placeTraining;
+
+ @ApiModelProperty("鍩硅璁插笀_id")
+ private Integer trainingLecturerId;
+
+ @ApiModelProperty("鍩硅鏃ユ湡")
+ private Date trainingDate;
+
+ @ApiModelProperty("寮�濮嬫椂闂�")
+ private String openingTime;
+
+ @ApiModelProperty("缁撴潫鏃堕棿")
+ private String endTime;
+
+ @ApiModelProperty("璇鹃瀛﹀垎")
+ private String projectCredits;
+
+ @ApiModelProperty("璇炬椂")
+ private Integer classHour;
+
+ @ApiModelProperty("澶囨敞")
+ private String remarks;
+
+ @ApiModelProperty("鍩硅璁″垝id")
+ private Integer planId;
+
+ @ApiModelProperty(value = "鍒涘缓鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private LocalDateTime createTime;
+
+ @ApiModelProperty(value = "鍒涘缓浜篿d", hidden = true)
+ @TableField(fill = FieldFill.INSERT)
+ private Integer createUser;
+
+ @ApiModelProperty(value = "鏇存柊浜篿d", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Integer updateUser;
+
+ @ApiModelProperty(value = "鏇存柊鏃堕棿", hidden = true)
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private LocalDateTime updateTime;
+
+ @ApiModelProperty("鑰冩牳鏂瑰紡")
+ private String assessmentMethod;
+
+ @ApiModelProperty("鏈鍩硅缁煎悎璇勪环")
+ private String comprehensiveAssessment;
+
+ @ApiModelProperty("璇勪环浜�")
+ private Integer assessmentUserId;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrainingRecord.java b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrainingRecord.java
new file mode 100644
index 0000000..944e116
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/pojo/PersonTrainingRecord.java
@@ -0,0 +1,40 @@
+package com.yuanchu.mom.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * <p>
+ * 鍩硅璁板綍
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-12 04:50:48
+ */
+@Getter
+@Setter
+@TableName("cnas_person_training_record")
+@ApiModel(value = "PersonTrainingRecord瀵硅薄", description = "鍩硅璁板綍")
+public class PersonTrainingRecord implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty("涓婚敭id")
+ @TableId(value = "training_record_id", type = IdType.AUTO)
+ private Integer trainingRecordId;
+
+ @ApiModelProperty("鐢ㄦ埛琛ㄦ牸锛坲ser锛変富閿�")
+ private Integer userId;
+
+ @ApiModelProperty("鍩硅璁″垝璇︽儏 - 瀛� id")
+ private Integer courseId;
+
+ @ApiModelProperty("鑰冩牳缁撴灉")
+ private String examinationResults;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/schedule/PersonSchedule.java b/cnas-personnel/src/main/java/com/yuanchu/mom/schedule/PersonSchedule.java
new file mode 100644
index 0000000..1285052
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/schedule/PersonSchedule.java
@@ -0,0 +1,49 @@
+package com.yuanchu.mom.schedule;
+
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.yuanchu.mom.pojo.PersonTrainingDetailed;
+import com.yuanchu.mom.service.PersonTrainingDetailedService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+
+@Component
+public class PersonSchedule {
+
+ @Autowired
+ private PersonTrainingDetailedService personTrainingDetailedService;
+
+ /**
+ * 褰撳墠璇剧▼灏忎簬褰撳墠鏃堕棿锛屽苟涓旂姸鎬佷负2锛氳繘琛屼腑锛�3: 鏈紑濮嬫洿鏂扮姸鎬佷负4锛氬凡缁撴潫
+ */
+ @Scheduled(cron = "0 0/15 * * * ?") //15鍒嗛挓鎵ц涓�娆�
+// @Scheduled(cron = "0/10 * * * * ?") //姣�10绉掓墽琛屼竴娆�
+ public void testScheduleTask() {
+ // 鑾峰彇褰撳ぉ鐨勬墍鏈夊煿璁绋�
+ Date date = new Date();
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat sdfWithTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ String newDate = sdf.format(date);
+ List<PersonTrainingDetailed> list = personTrainingDetailedService.list(Wrappers.<PersonTrainingDetailed>lambdaQuery()
+ .eq(PersonTrainingDetailed::getState, 2)
+ .or().eq(PersonTrainingDetailed::getState, 3)
+ .lt(PersonTrainingDetailed::getTrainingDate, newDate));
+ list.forEach(i -> {
+ String trainingDate = sdf.format(i.getTrainingDate());
+ String endTime = trainingDate + " " + i.getEndTime();
+ try {
+ Date endNewTime = sdfWithTime.parse(endTime);
+ // 鏃ユ湡瓒呭嚭
+ if (endNewTime.before(date)) {
+ i.setState(4);
+ personTrainingDetailedService.updateById(i);
+ }
+ } catch (ParseException e) {}
+ });
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/AnnexService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/AnnexService.java
new file mode 100644
index 0000000..384e1e4
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/AnnexService.java
@@ -0,0 +1,7 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.yuanchu.mom.pojo.Annex;
+
+public interface AnnexService extends IService<Annex> {
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonBasicInfoService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonBasicInfoService.java
new file mode 100644
index 0000000..2dcf298
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonBasicInfoService.java
@@ -0,0 +1,36 @@
+package com.yuanchu.mom.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.yuanchu.mom.dto.DepartmentDto;
+import com.yuanchu.mom.dto.PersonBasicInfoDto;
+import com.yuanchu.mom.dto.UserPageDto;
+import com.yuanchu.mom.pojo.PersonBasicInfo;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-08-30 09:19:57
+ */
+public interface PersonBasicInfoService extends IService<PersonBasicInfo> {
+
+ List<DepartmentDto> selectCNSAPersonTree();
+
+ Map<String,Object> getCNASPersonnelInfo(Integer userId);
+
+ void saveCNASPersonnelInfo(PersonBasicInfoDto personBasicInfoDto);
+
+ IPage<Map<String, Object>> basicInformationOfPersonnelSelectPage(Page page, String name, Integer departmentId);
+
+ void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception;
+
+ String exportPersonBasicInfoById(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonCommunicationAbilityService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonCommunicationAbilityService.java
new file mode 100644
index 0000000..b0a83bb
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonCommunicationAbilityService.java
@@ -0,0 +1,25 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonCommunicationAbilityDto;
+import com.yuanchu.mom.pojo.PersonCommunicationAbility;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 娌熼�氳兘鍔� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 12:00:57
+ */
+public interface PersonCommunicationAbilityService extends IService<PersonCommunicationAbility> {
+
+ IPage<PersonCommunicationAbilityDto> personPersonCommunicationAbilityPage(Page page,
+ Integer departLimsId, Integer userId, String userName);
+
+ void exportPersonCommunicationAbility(Integer id, HttpServletResponse response)throws Exception;
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonJobResponsibilitiesService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonJobResponsibilitiesService.java
new file mode 100644
index 0000000..f7c72fb
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonJobResponsibilitiesService.java
@@ -0,0 +1,30 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonJobResponsibilitiesDto;
+import com.yuanchu.mom.pojo.PersonJobResponsibilities;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import javax.servlet.http.HttpServletResponse;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Map;
+
+/**
+ * <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/yuanchu/mom/service/PersonPersonnelCapacityService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonPersonnelCapacityService.java
new file mode 100644
index 0000000..dd13415
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonPersonnelCapacityService.java
@@ -0,0 +1,37 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonPersonnelCapacityDto;
+import com.yuanchu.mom.pojo.PersonPersonnelCapacity;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+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);
+
+
+ /**
+ * 浜哄憳鑳藉姏纭
+ * @param id
+ * @return
+ */
+ boolean confirmPersonnelCapacity(Integer id);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonPostAuthorizationRecordService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonPostAuthorizationRecordService.java
new file mode 100644
index 0000000..21f415f
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonPostAuthorizationRecordService.java
@@ -0,0 +1,27 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonPostAuthorizationRecordDto;
+import com.yuanchu.mom.pojo.PersonPostAuthorizationRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+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/yuanchu/mom/service/PersonRewardPunishmentRecordService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonRewardPunishmentRecordService.java
new file mode 100644
index 0000000..ebd8009
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonRewardPunishmentRecordService.java
@@ -0,0 +1,32 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yuanchu.mom.dto.PersonRewardPunishmentRecordDto;
+import com.yuanchu.mom.excel.PersonRewardPunishmentRecordExcel;
+import com.yuanchu.mom.pojo.PersonRewardPunishmentRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.time.LocalDateTime;
+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/yuanchu/mom/service/PersonSupervisePlanDetailsService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisePlanDetailsService.java
new file mode 100644
index 0000000..17470d7
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisePlanDetailsService.java
@@ -0,0 +1,28 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonSupervisePlanDetailsDto;
+import com.yuanchu.mom.excel.PersonSupervisePlanDetailsUpload;
+import com.yuanchu.mom.pojo.PersonSupervisePlanDetails;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 鐩戠潱璁″垝 - 瀛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 04:17:02
+ */
+public interface PersonSupervisePlanDetailsService extends IService<PersonSupervisePlanDetails> {
+
+ IPage<PersonSupervisePlanDetailsDto> yearPlanDetailPage(Page page,
+ String date, String project, Integer planId);
+
+ void importExcel(List<PersonSupervisePlanDetailsUpload> list, Integer planId);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisePlanService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisePlanService.java
new file mode 100644
index 0000000..023c8c3
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisePlanService.java
@@ -0,0 +1,34 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonSupervisePlanDto;
+import com.yuanchu.mom.excel.PersonSupervisePlanDetailsUpload;
+import com.yuanchu.mom.pojo.PersonSupervisePlan;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鐩戠潱璁″垝 - 鐖� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 04:14:45
+ */
+public interface PersonSupervisePlanService extends IService<PersonSupervisePlan> {
+
+ IPage<PersonSupervisePlanDto> yearPlanDtoIPage(Page page, String organizationPerson);
+
+ void yearPlanDetailImport(MultipartFile file);
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁″垝
+ * @param id
+ * @param response
+ */
+ void exportSuperVisePlan(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionControlSheetService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionControlSheetService.java
new file mode 100644
index 0000000..999e7d9
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionControlSheetService.java
@@ -0,0 +1,24 @@
+package com.yuanchu.mom.service;
+
+import com.yuanchu.mom.pojo.PersonSupervisionControlSheet;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 - 鎺у埗鍗� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 05:18:57
+ */
+public interface PersonSupervisionControlSheetService extends IService<PersonSupervisionControlSheet> {
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁板綍绾犳鎺у埗鍗�
+ * @param supervisionRecordId
+ * @param response
+ */
+ void exportSupervisionControlSheet(Integer supervisionRecordId, HttpServletResponse response);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionProcessingSheetService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionProcessingSheetService.java
new file mode 100644
index 0000000..e6aba27
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionProcessingSheetService.java
@@ -0,0 +1,24 @@
+package com.yuanchu.mom.service;
+
+import com.yuanchu.mom.pojo.PersonSupervisionProcessingSheet;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import javax.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 - 澶勭悊鍗� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 05:35:58
+ */
+public interface PersonSupervisionProcessingSheetService extends IService<PersonSupervisionProcessingSheet> {
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁板綍绾犳澶勭悊鍗�
+ * @param supervisionRecordId
+ * @param response
+ */
+ void exportSupervisionProcessingSheet(Integer supervisionRecordId, HttpServletResponse response);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionRecordService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionRecordService.java
new file mode 100644
index 0000000..2896907
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonSupervisionRecordService.java
@@ -0,0 +1,33 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonSupervisionRecordDto;
+import com.yuanchu.mom.pojo.PersonSupervisionRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 04:16:49
+ */
+public interface PersonSupervisionRecordService extends IService<PersonSupervisionRecord> {
+
+ void deletePersonSupervisionRecord(List<Integer> ids);
+
+ IPage<PersonSupervisionRecordDto> personSupervisionRecordPage(Page page,
+ Integer userId, String userName, Integer departLimsId);
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁板綍
+ * @param id
+ * @param response
+ */
+ void exportPersonSupervisionRecord(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrackRecordService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrackRecordService.java
new file mode 100644
index 0000000..35eff56
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrackRecordService.java
@@ -0,0 +1,23 @@
+package com.yuanchu.mom.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.yuanchu.mom.pojo.PersonTrackRecord;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 宸ヤ綔灞ュ巻 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-02 03:13:03
+ */
+public interface PersonTrackRecordService extends IService<PersonTrackRecord> {
+
+ IPage<PersonTrackRecord> personTrackRecordSelect(Page page, String userId, String departmentId);
+
+ List<PersonTrackRecord> personTrackRecordExport(String userId, String departmentId);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingDetailedService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingDetailedService.java
new file mode 100644
index 0000000..722ed1b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingDetailedService.java
@@ -0,0 +1,32 @@
+package com.yuanchu.mom.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonTrainingDetailedDto;
+import com.yuanchu.mom.dto.PersonTrainingRecordDto;
+import com.yuanchu.mom.dto.PersonTrainingRecordSubmitDto;
+import com.yuanchu.mom.excel.PersonTrainingDetailedUpload;
+import com.yuanchu.mom.pojo.PersonTrainingDetailed;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁″垝璇︽儏 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:46:27
+ */
+public interface PersonTrainingDetailedService extends IService<PersonTrainingDetailed> {
+
+ void importExcel(List<PersonTrainingDetailedUpload> list, Integer planId);
+
+ void deleteAnnualPlanDetailTable(String ids);
+
+ IPage<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page,
+ String trainingLecturerName,
+ String courseCode, String trainingDate, Integer id, Integer userId);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingRecordService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingRecordService.java
new file mode 100644
index 0000000..6c34e4d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingRecordService.java
@@ -0,0 +1,58 @@
+package com.yuanchu.mom.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.yuanchu.mom.dto.PersonTrainingRecordDto;
+import com.yuanchu.mom.dto.PersonTrainingRecordListDto;
+import com.yuanchu.mom.dto.TrainingRecordPersonDetailedDto;
+import com.yuanchu.mom.pojo.PersonTrainingRecord;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * <p>
+ * 鍩硅璁板綍 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-12 04:50:48
+ */
+public interface PersonTrainingRecordService extends IService<PersonTrainingRecord> {
+
+ List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName);
+
+ void deleteTrainingAndAssessmentRecords(String ids);
+
+ IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page,
+ String userName, Integer userId, Integer departLimsId);
+
+ IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetails(Page page, Integer userId);
+
+ void claimOfTrainingAndAssessmentRecords(Boolean claimAndClaim, Integer courseId);
+
+ /**
+ * 瀵煎嚭浜哄憳鍩硅璁板綍
+ * @param userId
+ * @param response
+ */
+ void exportTrainingRecord(Integer userId, HttpServletResponse response);
+
+ /**
+ * 鏍规嵁鐢ㄦ埛id鍜屽勾浠芥煡璇汉鍛樻槑缁� 鍩硅璁板綍
+ * @param page
+ * @param userId
+ * @param year
+ * @return
+ */
+ IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year);
+
+ /**
+ * 瀵煎嚭浜哄憳鍩硅璁板綍
+ * @param userId
+ * @param trainingDate
+ * @param response
+ */
+ void exportTrainingRecordAddTrainingDate(Integer userId, Integer trainingDate, HttpServletResponse response);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingService.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingService.java
new file mode 100644
index 0000000..a7d6518
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/PersonTrainingService.java
@@ -0,0 +1,49 @@
+package com.yuanchu.mom.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.yuanchu.mom.dto.PersonTrainingDetailedDto;
+import com.yuanchu.mom.dto.PersonTrainingDto;
+import com.yuanchu.mom.dto.PersonTrainingUpdateDto;
+import com.yuanchu.mom.pojo.PersonTraining;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.util.Date;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:11:49
+ */
+public interface PersonTrainingService extends IService<PersonTraining> {
+
+ IPage<PersonTrainingDto> personTrainingSelect(Page page,
+ String compilerName, String departmentId);
+
+ void personTrainingImport(MultipartFile file);
+
+ void personTrainingDelete(Integer id);
+
+ void reviewAnnualPersonnelTraining(PersonTrainingUpdateDto personTrainingUpdateDto);
+
+ void approveAnnualPersonnelTraining(PersonTrainingUpdateDto personTrainingUpdateDto);
+
+ /**
+ * 瀵煎嚭浜哄憳鍩硅璁″垝
+ * @param id
+ * @param response
+ */
+ void exportPersonTraining(Integer id, HttpServletResponse response);
+
+ /**
+ * 瀵煎嚭浜哄憳鍩硅涓庤�冩牳璁板綍
+ * @param id
+ * @param response
+ */
+ void exportPersonTrainingRecord(Integer id, HttpServletResponse response);
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/AnnexServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/AnnexServiceImpl.java
new file mode 100644
index 0000000..9e6fd85
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/AnnexServiceImpl.java
@@ -0,0 +1,13 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.mapper.AnnexMapper;
+import com.yuanchu.mom.pojo.Annex;
+import com.yuanchu.mom.service.AnnexService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+
+@Service
+@AllArgsConstructor
+public class AnnexServiceImpl extends ServiceImpl<AnnexMapper, Annex> implements AnnexService {
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonBasicInfoServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonBasicInfoServiceImpl.java
new file mode 100644
index 0000000..b2a0c6d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonBasicInfoServiceImpl.java
@@ -0,0 +1,759 @@
+package com.yuanchu.mom.service.impl;
+
+import cn.hutool.core.lang.UUID;
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.*;
+import com.deepoove.poi.data.style.*;
+import com.yuanchu.mom.dto.DepartmentDto;
+import com.yuanchu.mom.dto.PersonBasicInfoDto;
+import com.yuanchu.mom.dto.UserPageDto;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.*;
+import com.yuanchu.mom.pojo.*;
+import com.yuanchu.mom.service.PersonBasicInfoService;
+import com.yuanchu.mom.utils.QueryWrappers;
+import org.apache.poi.openxml4j.util.ZipSecureFile;
+import org.apache.poi.xwpf.usermodel.*;
+import org.openxmlformats.schemas.wordprocessingml.x2006.main.STMerge;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.io.*;
+import java.net.URLEncoder;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-08-30 09:19:57
+ */
+
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class PersonBasicInfoServiceImpl extends ServiceImpl<PersonBasicInfoMapper, PersonBasicInfo> implements PersonBasicInfoService {
+
+ @Autowired
+ private DepartmentLimsMapper departmentMapper;
+
+
+ @Value("${wordUrl}")
+ private String wordUrl;
+ @Resource
+ private UserMapper userMapper;
+
+
+ @Resource
+ private AnnexMapper annexMapper;
+ @Resource
+ private PersonTrackRecordMapper personTrackRecordMapper;
+
+ @Override
+ public List<DepartmentDto> selectCNSAPersonTree() {
+ List<DepartmentDto> departments = departmentMapper.selectDepartment();
+ List<DepartmentDto> limsUser = baseMapper.selectLimsUser();
+ departments.addAll(limsUser);
+ //鑾峰彇鐖惰妭鐐�
+ return departments.stream().filter(m -> m.getFatherId() == null).peek(
+ (m) -> m.setChildren(getChildren(m, departments))
+ ).collect(Collectors.toList());
+ }
+
+ @Override
+ public Map<String,Object> getCNASPersonnelInfo(Integer userId) {
+ Map<String, Object> map = new HashMap<>();
+ Map<Integer,List<DepartmentLims>> childrenMap = new HashMap<>();
+ List<DepartmentLims> deptS = departmentMapper.selectList(null);
+ for (DepartmentLims dept : deptS) {
+ if(!Objects.isNull(dept.getFatherId())) {
+ if(!childrenMap.containsKey(dept.getFatherId())) {
+ childrenMap.put(dept.getFatherId(),new ArrayList<>());
+ }
+ childrenMap.get(dept.getFatherId()).add(dept);
+ }
+ }
+ // 鐖惰妭鐐�
+ List<DepartmentLims> deptF = new ArrayList<>();
+ for (DepartmentLims dept : deptS) {
+ if(Objects.isNull(dept.getFatherId())) {
+ deptF.add(buildTree(dept,childrenMap));
+ }
+ }
+ map.put("department",deptF);
+ map.put("PersonBasicInfoDto",baseMapper.getCNASPersonnelInfo(userId));
+ map.put("annexList",annexMapper.selectList(new LambdaQueryWrapper<Annex>().eq(Annex::getUserId,userId)));
+ return map;
+ }
+
+ private DepartmentLims buildTree(DepartmentLims departmentLims, Map<Integer,List<DepartmentLims>> childrenMap) {
+ if(childrenMap.containsKey(departmentLims.getId())) {
+ departmentLims.setChildren(childrenMap.get(departmentLims.getId()));
+ for (DepartmentLims departmentLims1 : departmentLims.getChildren()) {
+ buildTree(departmentLims1,childrenMap);
+ }
+ }
+ return departmentLims;
+ }
+
+ @Override
+ public void saveCNASPersonnelInfo(PersonBasicInfoDto personBasicInfoDto) {
+ User user = new User();
+ user.setId(personBasicInfoDto.getUserId());
+ user.setAccount(personBasicInfoDto.getAccount());
+ user.setName(personBasicInfoDto.getName());
+ user.setNameEn(personBasicInfoDto.getNameEn());
+ user.setAge(personBasicInfoDto.getAge());
+ user.setPhone(personBasicInfoDto.getPhone());
+ user.setEmail(personBasicInfoDto.getEmail());
+ user.setDepartment(personBasicInfoDto.getDepartment());
+ user.setSignatureUrl(personBasicInfoDto.getSignatureUrl());
+ user.setPictureUrl(personBasicInfoDto.getPictureUrl());
+ user.setDepartLimsId(personBasicInfoDto.getDepartLimsId());
+ userMapper.updateById(user);
+ PersonBasicInfo personBasicInfo = JSONObject.parseObject(JSON.toJSONString(personBasicInfoDto), PersonBasicInfo.class);
+ PersonBasicInfo one = baseMapper.selectOne(new LambdaQueryWrapper<PersonBasicInfo>()
+ .eq(PersonBasicInfo::getUserId, personBasicInfoDto.getUserId()));
+ if(Objects.isNull(one)) {
+ baseMapper.insert(personBasicInfo);
+ }else {
+ baseMapper.updateById(personBasicInfo);
+ }
+ }
+
+ @Override
+ public IPage<Map<String, Object>> basicInformationOfPersonnelSelectPage(Page page, String name, Integer departmentId) {
+ return baseMapper.selectPersonBasecInfoAndUser(page, name, departmentId);
+ }
+
+ @Override
+ public void exportPersonBasicInfo(UserPageDto userPageDto, HttpServletResponse response) throws Exception {
+ ArrayList<PersonBasicInfoDto> data = new ArrayList<>();
+ List<User> list = userMapper.selectUserDtoPageList(new Page(-1, -1), QueryWrappers.queryWrappers(userPageDto)).getRecords();
+ for (User user : list) {
+ PersonBasicInfoDto personBasicInfoDto = new PersonBasicInfoDto();
+ PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.<PersonBasicInfo>lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId()));
+ if (ObjectUtils.isNotEmpty(personBasicInfo)) {
+ BeanUtils.copyProperties(personBasicInfo, personBasicInfoDto);
+ }
+ personBasicInfoDto.setName(user.getName());
+ personBasicInfoDto.setAccount(user.getAccount());
+ personBasicInfoDto.setPhone(ObjectUtils.isNotEmpty(user.getPhone()) ? user.getPhone() : " ");
+ data.add(personBasicInfoDto);
+ }
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("UTF-8");
+ String fileName = URLEncoder.encode("浜哄憳鍩烘湰淇℃伅鍒楄〃瀵煎嚭", "UTF-8");
+ response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx");
+ try {
+ // 鏂板缓ExcelWriter
+ ExcelWriter excelWriter = EasyExcel.write(response.getOutputStream()).registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()).build();
+ WriteSheet mainSheet = EasyExcel.writerSheet(0, "浜哄憳鍩烘湰淇℃伅瀵煎嚭").head(PersonBasicInfoDto.class).build();
+ excelWriter.write(data, mainSheet);
+ // 鍏抽棴娴�
+ excelWriter.finish();
+ } catch (IOException e) {
+ throw new RuntimeException("瀵煎嚭澶辫触");
+ }
+ }
+
+ @Override
+ public String exportPersonBasicInfoById(Integer id, HttpServletResponse response) {
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+ User user = userMapper.selectById(id);
+ PersonBasicInfo personBasicInfo = baseMapper.selectOne(Wrappers.<PersonBasicInfo>lambdaQuery().eq(PersonBasicInfo::getUserId, user.getId()));
+ if (ObjectUtils.isEmpty(personBasicInfo)){
+ throw new ErrorException("璇ョ敤鎴风殑鍩烘湰淇℃伅娌℃湁褰曞叆,鏆傛棤娉曞鍑�");
+ }
+ //璇佷欢
+ List<Annex> annexList = annexMapper.selectList(Wrappers.<Annex>lambdaQuery().eq(Annex::getUserId, user.getId()));
+ //宸ヤ綔缁忓巻
+ List<PersonTrackRecord> personTrackRecordList = personTrackRecordMapper.selectList(Wrappers.<PersonTrackRecord>lambdaQuery().eq(PersonTrackRecord::getUserId, user.getId()));
+
+ List<RowRenderData> rows = new ArrayList<>();
+ //琛ㄦ牸琛屾暟
+ int hang = 10 + (Math.max(annexList.size() - 1, 0)) + (Math.max(personTrackRecordList.size()-1 , 0));
+ for (int i = 0; i < hang; i++) {
+ RowRenderData rowRenderData = new RowRenderData();
+ RowStyle rowStyle = new RowStyle();
+ rowStyle.setHeight(40);
+ rowRenderData.setRowStyle(rowStyle);
+ List<CellRenderData> cells = new ArrayList<>();
+ //琛ㄦ牸鍒楁暟
+ for (int j = 0; j < 6; j++) {
+ CellRenderData cellRenderData = new CellRenderData();
+ CellStyle cellStyle = new CellStyle();
+ cellStyle.setVertAlign(XWPFTableCell.XWPFVertAlign.CENTER);
+ cellRenderData.setCellStyle(cellStyle);
+ List<ParagraphRenderData> paragraphRenderDataList = new ArrayList<>();
+ ParagraphRenderData paragraphRenderData = new ParagraphRenderData();
+ ParagraphStyle paragraphStyle = new ParagraphStyle();
+ paragraphStyle.setAlign(ParagraphAlignment.CENTER);
+ paragraphRenderData.setParagraphStyle(paragraphStyle);
+ List<RenderData> renderData = new ArrayList<>();
+ TextRenderData textRenderData = new TextRenderData();
+ Style style = new Style();
+ style.setFontFamily("瀹嬩綋");
+ style.setColor("000000");
+ textRenderData.setStyle(style);
+ if (i==0) {
+ //绗竴琛�
+ if (j==0) {
+ //绗竴鍒�
+ textRenderData.setText("濮撳悕@Name");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==1) {
+ //绗簩鍒�
+ textRenderData.setText(user.getName());
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==2 || j==3) {
+ textRenderData.setText("鎬у埆@Gender 鈭�1");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else {
+ textRenderData.setText((ObjectUtils.isNotEmpty(personBasicInfo.getSex())?personBasicInfo.getSex():" ")+"鈭�2");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else if (i==1) {
+ //绗簩琛�
+ if (j==0) {
+ //绗竴鍒�
+ textRenderData.setText("骞撮緞@Age");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==1) {
+ //绗簩鍒�
+ textRenderData.setText(ObjectUtils.isNotEmpty(user.getAge())?user.getAge()+"":" ");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==2 || j==3) {
+ textRenderData.setText("宸ヤ綔鏃堕棿@Working time 鈭�3");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else {
+ textRenderData.setText((ObjectUtils.isNotEmpty(personBasicInfo.getEntryTime())?personBasicInfo.getEntryTime():" ")+"鈭�4");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else if (i==2) {
+ //绗笁琛�
+ if (j==0) {
+ //绗竴鍒�
+ textRenderData.setText("鎵�瀛︿笓涓欯Majors studied");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==1) {
+ //绗簩鍒�
+ textRenderData.setText(ObjectUtils.isNotEmpty(personBasicInfo.getMajor1())?personBasicInfo.getMajor1():" ");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==2 || j==3) {
+ textRenderData.setText("鏂囧寲绋嬪害@Education 鈭�5");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else {
+ textRenderData.setText((ObjectUtils.isNotEmpty(personBasicInfo.getOfficialAcademicRedentials())?personBasicInfo.getOfficialAcademicRedentials():" ")+"鈭�6");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else if (i==3) {
+ //绗洓琛�
+ if (j==0) {
+ //绗竴鍒�
+ textRenderData.setText("姣曚笟鏃堕棿@Graducation time");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==1) {
+ //绗簩鍒�
+ textRenderData.setText(ObjectUtils.isNotEmpty(personBasicInfo.getGraduationTime1())?personBasicInfo.getGraduationTime1()+"":" ");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==2 || j==3) {
+ textRenderData.setText("姣曚笟瀛︽牎@Graduation school 鈭�7");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else {
+ textRenderData.setText((ObjectUtils.isNotEmpty(personBasicInfo.getGraduatedInstitutions1())?personBasicInfo.getGraduatedInstitutions1():" ")+"鈭�8");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else if (i==4){
+ //绗簲琛�
+ if (j==0){
+ //绗竴鍒�
+ textRenderData.setText("宀椾綅@Position");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else {
+ textRenderData.setText((ObjectUtils.isNotEmpty(personBasicInfo.getPost())?personBasicInfo.getPost()+"":" " )+"鈭�9");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else if (i==5){
+ //绗叚琛�
+ textRenderData.setText("瀛﹀巻銆佹娴嬩笓涓氳祫鏍笺�佽亴绉拌瘉涔︾櫥璁拌〃@Education, testing professional qualifications, professional title certificate registration form 鈭�10");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (i==6){
+ if (j==0){
+ textRenderData.setText("璇佷欢鍙稝ID number");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==1){
+ textRenderData.setText("鍙戣瘉鍗曚綅@Issuing unit");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==2){
+ textRenderData.setText("绾у埆@Level");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==3){
+ textRenderData.setText("鏈夋晥鏈烜Expiration date");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else if (j==4){
+ textRenderData.setText("澶嶅嵃浠禓Copy");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else {
+ textRenderData.setText("鍘熶欢@Original");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else if (i==hang-1){
+ //鏈�鍚庝竴琛�
+ if (j==0){
+ textRenderData.setText("澶囨敞@Remark");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ else {
+ textRenderData.setText((ObjectUtils.isNotEmpty(personBasicInfo.getRemarks())?personBasicInfo.getRemarks()+"":" " )+"鈭�11");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ else {
+ if (annexList.size() == 0) {
+ if (i == 7) {
+ textRenderData.setText(" ");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ } else {
+ if (i >= 7 && i < 8 + (Math.max(annexList.size() - 1, 0))) {
+ if (j == 0) {
+ textRenderData.setText(ObjectUtils.isNotEmpty(annexList.get(i - 7).getIdNumber()) ? annexList.get(i - 7).getIdNumber() : " ");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 1) {
+ textRenderData.setText(ObjectUtils.isNotEmpty(annexList.get(i - 7).getIssueUnit()) ? annexList.get(i - 7).getIssueUnit() : " ");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 2) {
+ textRenderData.setText(ObjectUtils.isNotEmpty(annexList.get(i - 7).getLevel()) ? annexList.get(i - 7).getLevel() : " ");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 3) {
+ textRenderData.setText(ObjectUtils.isNotEmpty(annexList.get(i - 7).getPeriodValidity()) ? annexList.get(i - 7).getPeriodValidity() : " ");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else if (j == 4) {
+ textRenderData.setText(ObjectUtils.isNotEmpty(annexList.get(i - 7).getCopy()) ? annexList.get(i - 7).getCopy() : " ");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ textRenderData.setText(ObjectUtils.isNotEmpty(annexList.get(i - 7).getOriginal()) ? annexList.get(i - 7).getOriginal() : " ");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ }
+ if (personTrackRecordList.size() == 0) {
+ if (i == 8 + (Math.max(annexList.size() - 1, 0))) {
+ if (j == 0) {
+ textRenderData.setText("涓昏宸ヤ綔缁忓巻@Main work experience");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ textRenderData.setText(" 鈭�" + i + "5");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ } else {
+ if (i >= 8 + (Math.max(annexList.size() - 1, 0)) && i < hang - 1) {
+ if (j == 0) {
+ textRenderData.setText("涓昏宸ヤ綔缁忓巻@Main work experience 鈭�2"+j);
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ } else {
+ String startTime = personTrackRecordList.get(i - (8 + (Math.max(annexList.size() - 1, 0)))).getStartTime().format(formatter);
+ String endTime="/";
+ try{
+ endTime = personTrackRecordList.get(i - (8 + (Math.max(annexList.size() - 1, 0)))).getEndTime().format(formatter);
+ }catch (Exception e){
+ }
+ String placeWork = personTrackRecordList.get(i - (8 + (Math.max(annexList.size() - 1, 0)))).getPlaceWork();
+ String department = personTrackRecordList.get(i - (8 + (Math.max(annexList.size() - 1, 0)))).getDepartment();
+ String post = personTrackRecordList.get(i - (8 + (Math.max(annexList.size() - 1, 0)))).getPost();
+ textRenderData.setText(startTime+"锛�"+endTime+"锛�"+placeWork+"锛�"+department+"锛�"+post+"鈭�" + i + "5");
+ renderData.add(textRenderData);
+ paragraphRenderData.setContents(renderData);
+ paragraphRenderDataList.add(paragraphRenderData);
+ cellRenderData.setParagraphs(paragraphRenderDataList);
+ cells.add(cellRenderData);
+ }
+ }
+ }
+ }
+ }
+ rowRenderData.setCells(cells);
+ if (rowRenderData.getCells().size() != 0) {
+ rows.add(rowRenderData);
+ }
+ }
+ TableRenderData tableRenderData = new TableRenderData();
+ tableRenderData.setRows(rows);
+ int countSize = tableRenderData.getRows().get(0).getCells().size();
+ for (RowRenderData row : tableRenderData.getRows()) {
+ if (row.getCells().size() != countSize) {
+ throw new ErrorException("姣忚鍗曞厓鏍间笉鐩哥瓑");
+ }
+ }
+ TableStyle tableStyle = new TableStyle();
+ tableStyle.setWidth(XWPFTable.DEFAULT_PERCENTAGE_WIDTH);
+ tableStyle.setAlign(TableRowAlign.CENTER);
+ BorderStyle borderStyle = new BorderStyle();
+ borderStyle.setColor("000000");
+ borderStyle.setType(XWPFTable.XWPFBorderType.THICK);
+ borderStyle.setSize(14);
+ tableStyle.setLeftBorder(borderStyle);
+ tableStyle.setTopBorder(borderStyle);
+ tableStyle.setRightBorder(borderStyle);
+ tableStyle.setBottomBorder(borderStyle);
+ tableRenderData.setTableStyle(tableStyle);
+
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/person-deal.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("createTime", user.getCreateTime().format(formatter));
+ put("person", tableRenderData);
+ }});
+ String name = UUID.randomUUID()+ user.getName()+ "_浜哄憳妗f鍗�" + ".docx";
+ try {
+ template.writeAndClose(Files.newOutputStream(Paths.get(wordUrl + "/" + name)));
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ String path = wordUrl + "/" + name;
+ // 澶勭悊鍚堝苟鍗曞厓鏍肩殑闂
+ try {
+ ZipSecureFile.setMinInflateRatio(0.0001);
+ FileInputStream stream = new FileInputStream(path);
+ XWPFDocument document = new XWPFDocument(stream);
+ List<XWPFTable> xwpfTables = document.getTables();
+ for (int i = 0; i < xwpfTables.size(); i++) {
+ Set<String> set1 = new HashSet<>();
+ Map<String, Map<String, Integer>> maps = new HashMap<>();
+ for (int j = 0; j < xwpfTables.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().indexOf("鈭�") > -1) {
+ String[] split = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�");
+ if (set1.add(split[1])) {
+ Map<String, Integer> map = new HashMap<>();
+ map.put("sr", j);
+ map.put("sc", k);
+ map.put("er", j + 0);
+ map.put("ec", k + 0);
+ maps.put(split[1], map);
+ } else {
+ Map<String, Integer> map1 = maps.get(split[1]);
+ if (j == map1.get("sr")) {
+ map1.put("ec", map1.get("ec") + 1);
+ } else if (k == map1.get("sc")) {
+ map1.put("er", map1.get("er") + 1);
+ }
+ }
+ String str = xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getText().split("鈭�")[0];
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setText(str);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).setVerticalAlignment(XWPFTableCell.XWPFVertAlign.CENTER);
+ xwpfTables.get(i).getRows().get(j).getTableCells().get(k).getParagraphArray(0).setAlignment(org.apache.poi.xwpf.usermodel.ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ // 鍗曞厓鏍兼帓搴�, 閬垮厤鏍煎紡閿欎贡
+ List<Map.Entry<String, Map<String, Integer>>> entries = new ArrayList<>(maps.entrySet());
+ entries.sort((o1, o2) -> o1.getValue().get("sc") - o2.getValue().get("sc"));
+ // 鎸夌収椤哄簭娣诲姞杩涢泦鍚�
+ List<String> list = new ArrayList<>();
+ for (Map.Entry<String, Map<String, Integer>> entry : entries) {
+ list.add(entry.getKey());
+ }
+ for (int a = list.size() - 1; a >= 0; a--) {
+ Map<String, Integer> v = maps.get(list.get(a));
+ for (int j = 0; j < v.get("er") - v.get("sr") + 1; j++) {
+ if (v.get("ec") > v.get("sc")) {
+ try {
+ mergeCellsHorizontally(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+// TableTools.mergeCellsHorizonal(xwpfTables.get(i), v.get("sr") + j, v.get("sc"), v.get("ec"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ if (v.get("er") > v.get("sr")) {
+ try {
+ mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+// TableTools.mergeCellsVertically(xwpfTables.get(i), v.get("sc"), v.get("sr"), v.get("er"));
+ } catch (Exception e) {
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream = new FileOutputStream(path);
+ document.write(fileOutputStream);
+ fileOutputStream.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ //澶勭悊涓嫳鏂囨崲琛岀殑闂
+ try {
+ FileInputStream stream1 = new FileInputStream(path);
+ XWPFDocument document1 = new XWPFDocument(stream1);
+ List<XWPFTable> xwpfTables1 = document1.getTables();
+ for (int i = 0; i < xwpfTables1.size(); i++) {
+ for (int j = 0; j < xwpfTables1.get(i).getRows().size(); j++) {
+ for (int k = 0; k < xwpfTables1.get(i).getRows().get(j).getTableCells().size(); k++) {
+ if (xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText().contains("@")) {
+ String text = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).getText();
+ String[] split = text.split("@");
+ xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).removeParagraph(0);
+ XWPFParagraph xwpfParagraph = xwpfTables1.get(i).getRows().get(j).getTableCells().get(k).addParagraph();
+ XWPFRun run = xwpfParagraph.createRun();
+ run.setText(split[0]);
+ if (ObjectUtils.isNotNull(split[1])) {
+ run.addBreak();
+ run.setText(split[1]);
+ }
+ xwpfParagraph.setAlignment(ParagraphAlignment.CENTER);
+ }
+ }
+ }
+ }
+ FileOutputStream fileOutputStream1 = new FileOutputStream(path);
+ document1.write(fileOutputStream1);
+ fileOutputStream1.close();
+ } catch (FileNotFoundException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ return name;
+ }
+
+ /**
+ * 閫掑綊鏌ヨ瀛愯妭鐐�
+ * @param root 鏍硅妭鐐�
+ * @param all 鎵�鏈夎妭鐐�
+ * @return 鏍硅妭鐐逛俊鎭�
+ */
+ private List<DepartmentDto> getChildren(DepartmentDto root, List<DepartmentDto> all) {
+ if (ObjectUtils.isNotEmpty(root.getId())) {
+ return all.stream().filter(m -> Objects.equals(m.getFatherId(), root.getId())).peek(
+ (m) -> m.setChildren(getChildren(m, all))
+ ).collect(Collectors.toList());
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
+ // 姘村钩鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsHorizontally(XWPFTable table, int row, int fromCol, int toCol) {
+ for (int i = fromCol; i <= toCol; i++) {
+ if (i == fromCol) {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(row).getCell(i).getCTTc().addNewTcPr().addNewHMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+
+ // 鍨傜洿鍚堝苟鍗曞厓鏍�
+ private static void mergeCellsVertically(XWPFTable table, int col, int fromRow, int toRow) {
+ for (int i = fromRow; i <= toRow; i++) {
+ if (i == fromRow) {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.RESTART);
+ } else {
+ table.getRow(i).getCell(col).getCTTc().addNewTcPr().addNewVMerge().setVal(STMerge.CONTINUE);
+ }
+ }
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonCommunicationAbilityServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonCommunicationAbilityServiceImpl.java
new file mode 100644
index 0000000..431a13d
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonCommunicationAbilityServiceImpl.java
@@ -0,0 +1,117 @@
+package com.yuanchu.mom.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.yuanchu.mom.dto.PersonCommunicationAbilityDto;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.PersonCommunicationAbility;
+import com.yuanchu.mom.mapper.PersonCommunicationAbilityMapper;
+import com.yuanchu.mom.pojo.User;
+import com.yuanchu.mom.service.PersonCommunicationAbilityService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 娌熼�氳兘鍔� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 12:00:57
+ */
+@Service
+public class PersonCommunicationAbilityServiceImpl extends ServiceImpl<PersonCommunicationAbilityMapper, PersonCommunicationAbility> implements PersonCommunicationAbilityService {
+
+ @Resource
+ UserMapper userMapper;
+
+ @Override
+ public IPage<PersonCommunicationAbilityDto> personPersonCommunicationAbilityPage(Page page, Integer departLimsId, Integer userId, String userName) {
+ IPage<PersonCommunicationAbilityDto> personCommunicationAbilityDtoIPage = baseMapper.personPersonCommunicationAbilityPage(page, departLimsId, userId, userName);
+ List<PersonCommunicationAbilityDto> collect = personCommunicationAbilityDtoIPage.getRecords().stream().map(personCommunicationAbilityDto -> {
+ if (ObjectUtils.isNotEmpty(personCommunicationAbilityDto.getUserId())) {
+ List<String> account = new ArrayList<>();
+ List<String> name = new ArrayList<>();
+ for (String s : personCommunicationAbilityDto.getUserId().split(",")) {
+ User user = userMapper.selectById(Integer.parseInt(s));
+ account.add(user.getAccount());
+ name.add(user.getName());
+ }
+ personCommunicationAbilityDto.setAccount(account.stream().collect(Collectors.joining(",")));
+ personCommunicationAbilityDto.setUserName(name.stream().collect(Collectors.joining(",")));
+ }
+ return personCommunicationAbilityDto; // 杩欓噷鍙互瀵硅繑鍥炵殑鏁版嵁杩涜澶勭悊锛屽娣诲姞涓�浜涙柊鐨勫睘鎬ф垨杞崲绛夈��
+ }).collect(Collectors.toList());
+ personCommunicationAbilityDtoIPage.setRecords(collect);
+ return personCommunicationAbilityDtoIPage;
+ }
+
+ @Override
+ public void exportPersonCommunicationAbility(Integer id, HttpServletResponse response) throws Exception {
+ PersonCommunicationAbility personCommunicationAbility = baseMapper.selectById(id);
+ //娌熼�氫汉
+ String collect = " ";
+ if (ObjectUtils.isNotEmpty(personCommunicationAbility.getUserId())) {
+ List<String> name = new ArrayList<>();
+ for (String s : personCommunicationAbility.getUserId().split(",")) {
+ User user = userMapper.selectById(Integer.parseInt(s));
+ name.add(user.getName());
+ }
+ collect = name.stream().collect(Collectors.joining(","));
+ }
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy骞碝M鏈坉d鏃�");
+
+ //鏃堕棿
+ String communicationTime = "";
+ if (ObjectUtils.isNotEmpty(personCommunicationAbility.getCommunicationTime())) {
+ communicationTime = personCommunicationAbility.getCommunicationTime().format(formatter);
+ }
+
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/communication-deal.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ String finalCollect = collect;
+ String finalCommunicationTime = communicationTime;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("userName", finalCollect);
+ put("communicationTime", finalCommunicationTime);
+ put("communicationPlace", personCommunicationAbility.getCommunicationPlace());
+ put("communicationContent", personCommunicationAbility.getCommunicationContent());
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "娌熼�氳褰�", "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/yuanchu/mom/service/impl/PersonJobResponsibilitiesServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonJobResponsibilitiesServiceImpl.java
new file mode 100644
index 0000000..cb087e1
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonJobResponsibilitiesServiceImpl.java
@@ -0,0 +1,118 @@
+package com.yuanchu.mom.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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.yuanchu.mom.dto.PersonJobResponsibilitiesDto;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.PersonJobResponsibilities;
+import com.yuanchu.mom.mapper.PersonJobResponsibilitiesMapper;
+import com.yuanchu.mom.pojo.User;
+import com.yuanchu.mom.service.PersonJobResponsibilitiesService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.HashMap;
+
+import java.util.Map;
+
+/**
+ * <p>
+ * 宀椾綅鑱岃矗 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 02:07:49
+ */
+@Service
+@AllArgsConstructor
+public class PersonJobResponsibilitiesServiceImpl extends ServiceImpl<PersonJobResponsibilitiesMapper, PersonJobResponsibilities> implements PersonJobResponsibilitiesService {
+
+ @Resource
+ 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/yuanchu/mom/service/impl/PersonPersonnelCapacityServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonPersonnelCapacityServiceImpl.java
new file mode 100644
index 0000000..b167554
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonPersonnelCapacityServiceImpl.java
@@ -0,0 +1,125 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.Pictures;
+import com.yuanchu.mom.common.GetLook;
+import com.yuanchu.mom.dto.PersonPersonnelCapacityDto;
+import com.yuanchu.mom.dto.PersonPersonnelCapacityExportDto;
+import com.yuanchu.mom.dto.PersonSupervisionControlSheetExportDto;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.PersonPersonnelCapacity;
+import com.yuanchu.mom.mapper.PersonPersonnelCapacityMapper;
+import com.yuanchu.mom.service.PersonPersonnelCapacityService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.utils.DateImageUtil;
+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-10 11:26:18
+ */
+@Service
+public class PersonPersonnelCapacityServiceImpl extends ServiceImpl<PersonPersonnelCapacityMapper, PersonPersonnelCapacity> implements PersonPersonnelCapacityService {
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Resource
+ private GetLook getLook;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Override
+ public IPage<PersonPersonnelCapacityDto> personPersonnelCapacityPage(Page page, Integer departLimsId, Integer userId, String userName) {
+ return baseMapper.personPersonnelCapacityPage(page, departLimsId, userId, userName);
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鑳藉姏
+ * @param id
+ * @param response
+ */
+ @Override
+ public void exportPersonnelCapacity(Integer id, HttpServletResponse response) {
+ PersonPersonnelCapacityExportDto capacityExportDto = baseMapper.selectExportPersonnelCapacity(id);
+
+ // 纭浜�
+ String confirmUrl = null;
+ if (capacityExportDto.getConfirmOperatingPersonnelId() != null) {
+ confirmUrl = userMapper.selectById(capacityExportDto.getConfirmOperatingPersonnelId()).getSignatureUrl();
+ if (StringUtils.isBlank(confirmUrl)) {
+ throw new ErrorException("纭浜�");
+ }
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/personnel-capacity.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ String finalConfirmUrl = confirmUrl;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("capacity", capacityExportDto);
+ put("confirmUrl", StringUtils.isNotBlank(finalConfirmUrl) ? Pictures.ofLocal(imgUrl + "/" + finalConfirmUrl).create() : null);
+ put("confirmDateUrl", capacityExportDto.getConfirmDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(capacityExportDto.getConfirmDate())).create() : null);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "浜哄憳鑳藉姏", "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("瀵煎嚭澶辫触");
+ }
+ }
+
+ /**
+ * 浜哄憳鑳藉姏纭
+ * @param id
+ * @return
+ */
+ @Override
+ public boolean confirmPersonnelCapacity(Integer id) {
+ // 鏌ヨ浜哄憳鑳藉姏
+ PersonPersonnelCapacity personPersonnelCapacity = baseMapper.selectById(id);
+ if (personPersonnelCapacity.getConfirmOperatingPersonnelId() != null) {
+ throw new ErrorException("璇ヤ汉鍛樿兘鍔涘凡纭杩�, 鏃犻渶閲嶅纭");
+ }
+ Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+ baseMapper.update(null, Wrappers.<PersonPersonnelCapacity>lambdaUpdate()
+ .eq(PersonPersonnelCapacity::getId, id)
+ .set(PersonPersonnelCapacity::getConfirmOperatingPersonnelId, userId)
+ .set(PersonPersonnelCapacity::getConfirmDate, LocalDateTime.now()));
+
+ return true;
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonPostAuthorizationRecordServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonPostAuthorizationRecordServiceImpl.java
new file mode 100644
index 0000000..8b934e5
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonPostAuthorizationRecordServiceImpl.java
@@ -0,0 +1,136 @@
+package com.yuanchu.mom.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.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.FilePictureRenderData;
+import com.yuanchu.mom.dto.PersonPostAuthorizationRecordDto;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.PersonPostAuthorizationRecord;
+import com.yuanchu.mom.mapper.PersonPostAuthorizationRecordMapper;
+import com.yuanchu.mom.pojo.User;
+import com.yuanchu.mom.service.PersonPostAuthorizationRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import net.sourceforge.pinyin4j.PinyinHelper;
+import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType;
+import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat;
+import net.sourceforge.pinyin4j.format.HanyuPinyinToneType;
+import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination;
+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
+ 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();
+ //濮撳悕鑻辨枃
+ 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 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/yuanchu/mom/service/impl/PersonRewardPunishmentRecordServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonRewardPunishmentRecordServiceImpl.java
new file mode 100644
index 0000000..aa71b34
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonRewardPunishmentRecordServiceImpl.java
@@ -0,0 +1,38 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.yuanchu.mom.dto.PersonRewardPunishmentRecordDto;
+import com.yuanchu.mom.excel.PersonRewardPunishmentRecordExcel;
+import com.yuanchu.mom.pojo.PersonRewardPunishmentRecord;
+import com.yuanchu.mom.mapper.PersonRewardPunishmentRecordMapper;
+import com.yuanchu.mom.service.PersonRewardPunishmentRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+import java.time.LocalDateTime;
+import java.util.Collections;
+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/java/com/yuanchu/mom/service/impl/PersonSupervisePlanDetailsServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisePlanDetailsServiceImpl.java
new file mode 100644
index 0000000..0422342
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisePlanDetailsServiceImpl.java
@@ -0,0 +1,44 @@
+package com.yuanchu.mom.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.dto.PersonSupervisePlanDetailsDto;
+import com.yuanchu.mom.excel.PersonSupervisePlanDetailsUpload;
+import com.yuanchu.mom.pojo.PersonSupervisePlanDetails;
+import com.yuanchu.mom.mapper.PersonSupervisePlanDetailsMapper;
+import com.yuanchu.mom.service.PersonSupervisePlanDetailsService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ * 鐩戠潱璁″垝 - 瀛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 04:17:02
+ */
+@Service
+public class PersonSupervisePlanDetailsServiceImpl extends ServiceImpl<PersonSupervisePlanDetailsMapper, PersonSupervisePlanDetails> implements PersonSupervisePlanDetailsService {
+
+ public IPage<PersonSupervisePlanDetailsDto> yearPlanDetailPage(Page page, String date, String project, Integer planId) {
+ return baseMapper.pageByDate(page,date,project, planId);
+ }
+
+ @Override
+ public void importExcel(List<PersonSupervisePlanDetailsUpload> list, Integer planId) {
+ List<PersonSupervisePlanDetails> personSupervisePlanDetailsList = JSON.parseArray(JSON.toJSONString(list), PersonSupervisePlanDetails.class);
+ personSupervisePlanDetailsList.forEach(i -> i.setPlanId(planId));
+ if (CollectionUtils.isNotEmpty(personSupervisePlanDetailsList)) {
+ baseMapper.insertBatchSomeColumn(personSupervisePlanDetailsList);
+ }
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisePlanServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisePlanServiceImpl.java
new file mode 100644
index 0000000..b280e35
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisePlanServiceImpl.java
@@ -0,0 +1,160 @@
+package com.yuanchu.mom.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.data.Pictures;
+import com.yuanchu.mom.common.GetLook;
+import com.yuanchu.mom.dto.PersonSupervisePlanDto;
+import com.yuanchu.mom.dto.PersonTrainingDetailedDto;
+import com.yuanchu.mom.excel.PersonSupervisePlanDetailsListener;
+import com.yuanchu.mom.excel.PersonSupervisePlanDetailsUpload;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.PersonSupervisePlan;
+import com.yuanchu.mom.mapper.PersonSupervisePlanMapper;
+import com.yuanchu.mom.pojo.PersonSupervisePlanDetails;
+import com.yuanchu.mom.pojo.PersonTraining;
+import com.yuanchu.mom.service.PersonSupervisePlanDetailsService;
+import com.yuanchu.mom.service.PersonSupervisePlanService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.utils.HackLoopTableRenderPolicy;
+import com.yuanchu.mom.utils.DateImageUtil;
+import com.yuanchu.mom.utils.Jwt;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鐩戠潱璁″垝 - 鐖� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-09 04:14:45
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class PersonSupervisePlanServiceImpl extends ServiceImpl<PersonSupervisePlanMapper, PersonSupervisePlan> implements PersonSupervisePlanService {
+
+ @Autowired
+ private PersonSupervisePlanDetailsService personSupervisePlanDetailsService;
+
+ @Autowired
+ private GetLook getLook;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Autowired
+ private UserMapper userMapper;
+
+ public IPage<PersonSupervisePlanDto> yearPlanDtoIPage(Page page, String organizationPerson) {
+ return baseMapper.pageByPerson(page, organizationPerson);
+ }
+
+ @Override
+ public void yearPlanDetailImport(MultipartFile file) {
+ Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
+ // 骞村害璁″垝鐖剁骇鏂板鏁版嵁
+ PersonSupervisePlan personSupervisePlan = new PersonSupervisePlan();
+ String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
+ personSupervisePlan.setFileName(fileName);
+ personSupervisePlan.setOrganizationPersonId(map1.get("userId"));
+ personSupervisePlan.setOrganizationDate(LocalDateTime.now());
+ baseMapper.insert(personSupervisePlan);
+ // 骞村害璁″垝璇︽儏 鏂板
+ try {
+ PersonSupervisePlanDetailsListener personSupervisePlanDetailsListener = new PersonSupervisePlanDetailsListener(personSupervisePlanDetailsService);
+ personSupervisePlanDetailsListener.setPlanId(personSupervisePlan.getId());
+ EasyExcel.read(file.getInputStream(), PersonSupervisePlanDetailsUpload.class, personSupervisePlanDetailsListener).sheet().doRead();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁″垝
+ * @param id
+ * @param response
+ */
+ @Override
+ public void exportSuperVisePlan(Integer id, HttpServletResponse response) {
+ // 鏌ヨ璇︽儏
+ PersonSupervisePlan personSupervisePlan = baseMapper.selectById(id);
+
+ //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+ String organizationUrl = userMapper.selectById(personSupervisePlan.getOrganizationPersonId()).getSignatureUrl();
+ if (StringUtils.isBlank(organizationUrl)) {
+ throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+ }
+
+ //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+ String approvalUrl = null;
+ if (personSupervisePlan.getApprovalId() != null) {
+ approvalUrl = userMapper.selectById(personSupervisePlan.getApprovalId()).getSignatureUrl();
+ if (StringUtils.isBlank(approvalUrl)) {
+ throw new ErrorException("鎵句笉鍒版壒鍑嗕汉鐨勭鍚�");
+ }
+ }
+
+ // 鏌ヨ璇︽儏
+ List<PersonSupervisePlanDetails> detailedDtos = personSupervisePlanDetailsService.list(Wrappers.<PersonSupervisePlanDetails>lambdaQuery()
+ .eq(PersonSupervisePlanDetails::getPlanId, id));
+
+ int index = 1;
+ for (PersonSupervisePlanDetails detailedDto : detailedDtos) {
+ detailedDto.setIndex(index);
+ index++;
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/super-vise-plan.docx");
+ Configure configure = Configure.builder()
+ .bind("supervisePlanDetailsList", new HackLoopTableRenderPolicy())
+ .build();
+ String finalApprovalUrl = approvalUrl;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("supervisePlanDetailsList", detailedDtos);
+ put("organizationUrl", StringUtils.isNotBlank(organizationUrl) ? Pictures.ofLocal(imgUrl + "/" + organizationUrl).create() : null);
+ put("approvalUrl", StringUtils.isNotBlank(finalApprovalUrl) ? Pictures.ofLocal(imgUrl + "/" + finalApprovalUrl).create() : null);
+ put("writeDateUrl", personSupervisePlan.getOrganizationDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(personSupervisePlan.getOrganizationDate())).create() : null);
+ put("ratifyDateUrl", personSupervisePlan.getApprovalDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(personSupervisePlan.getApprovalDate())).create() : null);
+ }});
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "浜哄憳鐩戠潱璁″垝瀵煎嚭", "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/yuanchu/mom/service/impl/PersonSupervisionControlSheetServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisionControlSheetServiceImpl.java
new file mode 100644
index 0000000..4280cef
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisionControlSheetServiceImpl.java
@@ -0,0 +1,155 @@
+package com.yuanchu.mom.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.Pictures;
+import com.yuanchu.mom.dto.PersonSupervisionControlSheetExportDto;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.PersonSupervisionControlSheet;
+import com.yuanchu.mom.mapper.PersonSupervisionControlSheetMapper;
+import com.yuanchu.mom.service.PersonSupervisionControlSheetService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+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.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 - 鎺у埗鍗� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 05:18:57
+ */
+@Service
+public class PersonSupervisionControlSheetServiceImpl extends ServiceImpl<PersonSupervisionControlSheetMapper, PersonSupervisionControlSheet> implements PersonSupervisionControlSheetService {
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁板綍绾犳鎺у埗鍗�
+ * @param supervisionRecordId
+ * @param response
+ */
+ @Override
+ public void exportSupervisionControlSheet(Integer supervisionRecordId, HttpServletResponse response) {
+ PersonSupervisionControlSheetExportDto controlSheetExportDto = baseMapper.selectSupervisionControl(supervisionRecordId);
+
+ // 鍒ゆ柇涓嶇鍚堝伐浣滃彂鐜伴�斿緞鏄惁涓虹┖
+ if (StringUtils.isNotBlank(controlSheetExportDto.getDiscoveryApproach())) {
+ List<String> splitList = StrUtil.split(controlSheetExportDto.getDiscoveryApproach(), ',');
+ for (String s : splitList) {
+ switch (s) {
+ case "0":
+ controlSheetExportDto.setDiscoveryApproach0("鈽�");
+ break;
+ case "1":
+ controlSheetExportDto.setDiscoveryApproach1("鈽�");
+ break;
+ case "2":
+ controlSheetExportDto.setDiscoveryApproach2("鈽�");
+ break;
+ case "3":
+ controlSheetExportDto.setDiscoveryApproach3("鈽�");
+ break;
+ case "4":
+ controlSheetExportDto.setDiscoveryApproach4("鈽�");
+ break;
+ case "5":
+ controlSheetExportDto.setDiscoveryApproach5("鈽�");
+ break;
+ case "6":
+ controlSheetExportDto.setDiscoveryApproach6("鈽�");
+ break;
+ case "7":
+ controlSheetExportDto.setDiscoveryApproach7("鈽�");
+ break;
+ }
+ }
+ }
+ // 鍙戠幇閮ㄩ棬
+ String discovererUrl = null;
+ if (controlSheetExportDto.getDepartmentHeadId() != null) {
+ discovererUrl = userMapper.selectById(controlSheetExportDto.getDepartmentHeadId()).getSignatureUrl();
+ if (StringUtils.isBlank(discovererUrl)) {
+ throw new ErrorException("鎵句笉鍒板彂鐜伴儴闂ㄤ汉鐨勭鍚�");
+ }
+ }
+
+ // 澶勭悊鎺柦璐熻矗浜�
+ String responsibleUrl = null;
+ if (controlSheetExportDto.getResponsibleDepartmentPersonId() != null) {
+ responsibleUrl = userMapper.selectById(controlSheetExportDto.getResponsibleDepartmentPersonId()).getSignatureUrl();
+ if (StringUtils.isBlank(responsibleUrl)) {
+ throw new ErrorException("鎵句笉鍒板鐞嗘帾鏂借礋璐d汉鐨勭鍚�");
+ }
+ }
+
+ // 鎶�鏈礋璐d汉
+ String correctiveUrl = null;
+ if (controlSheetExportDto.getResponsibleDepartmentPersonId() != null) {
+ correctiveUrl = userMapper.selectById(controlSheetExportDto.getResponsibleDepartmentPersonId()).getSignatureUrl();
+ if (StringUtils.isBlank(correctiveUrl)) {
+ throw new ErrorException("鎵句笉鍒版妧鏈礋璐d汉鐨勭鍚�");
+ }
+ }
+
+ // 璐ㄩ噺璐熻矗浜�
+ String qualityUrl = null;
+ if (controlSheetExportDto.getQualitySupervisorId() != null) {
+ qualityUrl = userMapper.selectById(controlSheetExportDto.getQualitySupervisorId()).getSignatureUrl();
+ if (StringUtils.isBlank(qualityUrl)) {
+ throw new ErrorException("鎵句笉鍒拌川閲忚礋璐d汉鐨勭鍚�");
+ }
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-control-sheet.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ String finalDiscovererUrl = discovererUrl;
+ String finalResponsibleUrl = responsibleUrl;
+ String finalCorrectiveUrl = correctiveUrl;
+ String finalQualityUrl = qualityUrl;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("control", controlSheetExportDto);
+ put("discovererUrl", StringUtils.isNotBlank(finalDiscovererUrl) ? Pictures.ofLocal(imgUrl + "/" + finalDiscovererUrl).create() : null);
+ put("responsibleUrl", StringUtils.isNotBlank(finalResponsibleUrl) ? Pictures.ofLocal(imgUrl + "/" + finalResponsibleUrl).create() : null);
+ put("correctiveUrl", StringUtils.isNotBlank(finalCorrectiveUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCorrectiveUrl).create() : null);
+ put("qualityUrl", StringUtils.isNotBlank(finalQualityUrl) ? Pictures.ofLocal(imgUrl + "/" + finalQualityUrl).create() : null);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "浜哄憳鐩戠潱璁板綍鎺у埗鍗�", "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/yuanchu/mom/service/impl/PersonSupervisionProcessingSheetServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisionProcessingSheetServiceImpl.java
new file mode 100644
index 0000000..4bdf85c
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisionProcessingSheetServiceImpl.java
@@ -0,0 +1,121 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.Pictures;
+import com.yuanchu.mom.dto.PersonSupervisionProcessingSheetDto;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.PersonSupervisionProcessingSheet;
+import com.yuanchu.mom.mapper.PersonSupervisionProcessingSheetMapper;
+import com.yuanchu.mom.service.PersonSupervisionProcessingSheetService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.BeanUtils;
+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.format.DateTimeFormatter;
+import java.util.HashMap;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 - 澶勭悊鍗� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 05:35:58
+ */
+@Service
+public class PersonSupervisionProcessingSheetServiceImpl extends ServiceImpl<PersonSupervisionProcessingSheetMapper, PersonSupervisionProcessingSheet> implements PersonSupervisionProcessingSheetService {
+
+ @Resource
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁板綍绾犳澶勭悊鍗�
+ * @param supervisionRecordId
+ * @param response
+ */
+ @Override
+ public void exportSupervisionProcessingSheet(Integer supervisionRecordId, HttpServletResponse response) {
+ PersonSupervisionProcessingSheetDto processingSheetDto = baseMapper.selectProcessingSheet(supervisionRecordId);
+
+ // 鎻愬嚭浜虹鍚�
+ String raiseUrl = null;
+ if (processingSheetDto.getProposingDepartmentPersonId() != null) {
+ raiseUrl = userMapper.selectById(processingSheetDto.getProposingDepartmentPersonId()).getSignatureUrl();
+ if (StringUtils.isBlank(raiseUrl)) {
+ throw new ErrorException("鎵句笉鍒版彁鍑轰汉鐨勭鍚�");
+ }
+ }
+
+ // 鍘熷洜鍒嗘瀽浜�
+ String causeUrl = null;
+ if (processingSheetDto.getCauseAnalysisPersonId() != null) {
+ causeUrl = userMapper.selectById(processingSheetDto.getCauseAnalysisPersonId()).getSignatureUrl();
+ if (StringUtils.isBlank(causeUrl)) {
+ throw new ErrorException("鎵句笉鍒板師鍥犲垎鏋愪汉鐨勭鍚�");
+ }
+ }
+
+ // 绾犳浜�
+ String correctUrl = null;
+ if (processingSheetDto.getCorrectiveActionId() != null) {
+ correctUrl = userMapper.selectById(processingSheetDto.getCorrectiveActionId()).getSignatureUrl();
+ if (StringUtils.isBlank(correctUrl)) {
+ throw new ErrorException("鎵句笉鍒扮籂姝d汉鐨勭鍚�");
+ }
+ }
+
+ // 楠岃瘉浜�
+ String validationUrl = null;
+ if (processingSheetDto.getVerificationDepartmentPersonId() != null) {
+ validationUrl = userMapper.selectById(processingSheetDto.getVerificationDepartmentPersonId()).getSignatureUrl();
+ if (StringUtils.isBlank(validationUrl)) {
+ throw new ErrorException("鎵句笉鍒伴獙璇佷汉鐨勭鍚�");
+ }
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-processing-sheet.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ String finalRaiseUrl = raiseUrl;
+ String finalCauseUrl = causeUrl;
+ String finalCorrectUrl = correctUrl;
+ String finalValidationUrl = validationUrl;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("processing", processingSheetDto);
+ put("raiseUrl", StringUtils.isNotBlank(finalRaiseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRaiseUrl).create() : null);
+ put("causeUrl", StringUtils.isNotBlank(finalCauseUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCauseUrl).create() : null);
+ put("correctUrl", StringUtils.isNotBlank(finalCorrectUrl) ? Pictures.ofLocal(imgUrl + "/" + finalCorrectUrl).create() : null);
+ put("validationUrl", StringUtils.isNotBlank(finalValidationUrl) ? Pictures.ofLocal(imgUrl + "/" + finalValidationUrl).create() : null);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "浜哄憳鐩戠潱璁板綍绾犳澶勭悊鍗�", "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/yuanchu/mom/service/impl/PersonSupervisionRecordServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisionRecordServiceImpl.java
new file mode 100644
index 0000000..8966036
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonSupervisionRecordServiceImpl.java
@@ -0,0 +1,126 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.deepoove.poi.XWPFTemplate;
+import com.deepoove.poi.config.Configure;
+import com.deepoove.poi.config.ConfigureBuilder;
+import com.deepoove.poi.data.Pictures;
+import com.yuanchu.mom.dto.PersonSupervisionRecordDto;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.PersonSupervisionControlSheet;
+import com.yuanchu.mom.pojo.PersonSupervisionProcessingSheet;
+import com.yuanchu.mom.pojo.PersonSupervisionRecord;
+import com.yuanchu.mom.mapper.PersonSupervisionRecordMapper;
+import com.yuanchu.mom.service.PersonSupervisionControlSheetService;
+import com.yuanchu.mom.service.PersonSupervisionProcessingSheetService;
+import com.yuanchu.mom.service.PersonSupervisionRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.utils.DateImageUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * <p>
+ * 鐩戠潱璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-10 04:16:49
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class PersonSupervisionRecordServiceImpl extends ServiceImpl<PersonSupervisionRecordMapper, PersonSupervisionRecord> implements PersonSupervisionRecordService {
+
+ @Autowired
+ private PersonSupervisionControlSheetService personSupervisionControlSheetService;
+
+ @Autowired
+ private PersonSupervisionProcessingSheetService personSupervisionProcessingSheetService;
+
+ @Autowired
+ private UserMapper userMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Override
+ public void deletePersonSupervisionRecord(List<Integer> ids) {
+ if (CollectionUtils.isNotEmpty(ids)) {
+ ids.forEach(id -> {
+ personSupervisionControlSheetService.remove(Wrappers.<PersonSupervisionControlSheet>lambdaQuery()
+ .eq(PersonSupervisionControlSheet::getSupervisionRecordId, id));
+ personSupervisionProcessingSheetService.remove(Wrappers.<PersonSupervisionProcessingSheet>lambdaQuery()
+ .eq(PersonSupervisionProcessingSheet::getSupervisionRecordId, id));
+ baseMapper.deleteById(id);
+ });
+ }
+ }
+
+ @Override
+ public IPage<PersonSupervisionRecordDto> personSupervisionRecordPage(Page page, Integer userId, String userName, Integer departLimsId) {
+ return baseMapper.personSupervisionRecordPage(page, userId, departLimsId, userName);
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鐩戠潱璁板綍
+ * @param id
+ * @param response
+ */
+ @Override
+ public void exportPersonSupervisionRecord(Integer id, HttpServletResponse response) {
+ PersonSupervisionRecordDto recordDto = baseMapper.selectPersonSupervisionRecord(id);
+
+ //鑾峰彇鎶�鏈礋璐d汉鐨勭鍚嶅湴鍧�
+ String ratifyUrl = null;
+ if (recordDto.getTechnicalDirector() != null) {
+ ratifyUrl = userMapper.selectById(recordDto.getTechnicalDirector()).getSignatureUrl();
+ if (StringUtils.isBlank(ratifyUrl)) {
+ throw new ErrorException("鎵句笉鍒版妧鏈礋璐d汉鐨勭鍚�");
+ }
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/supervision-record.docx");
+ ConfigureBuilder builder = Configure.builder();
+ builder.useSpringEL(true);
+ String finalRatifyUrl = ratifyUrl;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, builder.build()).render(
+ new HashMap<String, Object>() {{
+ put("supervision", recordDto);
+ put("technicalDirectorUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+ put("technicalDirectorDateUrl", recordDto.getTechnicalDirectorDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(recordDto.getTechnicalDirectorDate())).create() : null);
+ }});
+
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "浜哄憳鐩戠潱璁板綍", "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/yuanchu/mom/service/impl/PersonTrackRecordServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrackRecordServiceImpl.java
new file mode 100644
index 0000000..9489f45
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrackRecordServiceImpl.java
@@ -0,0 +1,33 @@
+package com.yuanchu.mom.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.yuanchu.mom.mapper.PersonTrackRecordMapper;
+import com.yuanchu.mom.pojo.PersonTrackRecord;
+import com.yuanchu.mom.service.PersonTrackRecordService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 宸ヤ綔灞ュ巻 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2024-09-02 03:13:03
+ */
+@Service
+public class PersonTrackRecordServiceImpl extends ServiceImpl<PersonTrackRecordMapper, PersonTrackRecord> implements PersonTrackRecordService {
+
+ @Override
+ public IPage<PersonTrackRecord> personTrackRecordSelect(Page page, String userId, String departmentId) {
+ return baseMapper.personTrackRecordSelect(page, userId, departmentId);
+ }
+
+ @Override
+ public List<PersonTrackRecord> personTrackRecordExport(String userId, String departmentId) {
+ return baseMapper.personTrackRecordExport(userId, departmentId);
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingDetailedServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingDetailedServiceImpl.java
new file mode 100644
index 0000000..577aca6
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingDetailedServiceImpl.java
@@ -0,0 +1,109 @@
+package com.yuanchu.mom.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yuanchu.mom.common.GetLook;
+import com.yuanchu.mom.dto.PersonTrainingDetailedDto;
+import com.yuanchu.mom.dto.PersonTrainingRecordDto;
+import com.yuanchu.mom.dto.PersonTrainingRecordSubmitDto;
+import com.yuanchu.mom.excel.PersonTrainingDetailedUpload;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.numgen.NumberGenerator;
+import com.yuanchu.mom.pojo.*;
+import com.yuanchu.mom.mapper.PersonTrainingDetailedMapper;
+import com.yuanchu.mom.service.DepartmentLimsService;
+import com.yuanchu.mom.service.PersonTrainingDetailedService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yuanchu.mom.service.PersonTrainingRecordService;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+
+/**
+ * <p>
+ * 鍩硅璁″垝璇︽儏 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:46:27
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+@AllArgsConstructor
+public class PersonTrainingDetailedServiceImpl extends ServiceImpl<PersonTrainingDetailedMapper, PersonTrainingDetailed> implements PersonTrainingDetailedService {
+
+ private DepartmentLimsService departmentLimsService;
+
+ private UserMapper userMapper;
+
+ @Autowired
+ private GetLook getLook;
+
+ @Autowired
+ private NumberGenerator<PersonTrainingDetailed> numberGenerator;
+
+ @Override
+ public void importExcel(List<PersonTrainingDetailedUpload> list, Integer planId) {
+ List<PersonTrainingDetailed> personTrainingDetailedList = new ArrayList<>();
+ list.forEach(i -> {
+ PersonTrainingDetailed personTrainingDetailed = new PersonTrainingDetailed();
+ BeanUtils.copyProperties(i, personTrainingDetailed);
+
+ // 鍖归厤涓惧姙閮ㄩ棬
+ DepartmentLims departmentLims = departmentLimsService.getOne(Wrappers.<DepartmentLims>lambdaQuery()
+ .eq(DepartmentLims::getName, i.getHoldingDepartment()));
+ if (ObjectUtils.isEmpty(departmentLims)) {
+ throw new ErrorException("鏈尮閰嶅埌涓惧姙閮ㄩ棬锛�" + i.getHoldingDepartment());
+ }
+ personTrainingDetailed.setHoldingDepartment(departmentLims.getId());
+
+ // 鍖归厤璁插笀
+ User user = userMapper.selectOne(Wrappers.<User>lambdaQuery()
+ .eq(User::getName, i.getTrainingLecturerName()));
+ if (ObjectUtils.isEmpty(user)) {
+ throw new ErrorException("鏈壘鍒拌璁插笀锛�" + i.getTrainingLecturerName());
+ }
+ personTrainingDetailed.setTrainingLecturerId(user.getId());
+ personTrainingDetailed.setPlanId(planId);
+ personTrainingDetailed.setState(3);
+
+ String year = new SimpleDateFormat("yy", Locale.CHINESE).format(new Date());
+ String month = new SimpleDateFormat("MM", Locale.CHINESE).format(new Date());
+ String processNumber = numberGenerator.generateNumberWithPrefix(4, "KC" + month + "-" + year + month, PersonTrainingDetailed::getCourseCode);
+
+ personTrainingDetailed.setCourseCode(processNumber);
+
+ personTrainingDetailedList.add(personTrainingDetailed);
+ });
+ // 鎵归噺鏂板
+ if (CollectionUtils.isNotEmpty(personTrainingDetailedList)) {
+ baseMapper.insertBatchSomeColumn(personTrainingDetailedList);
+ }
+ }
+
+ @Override
+ public void deleteAnnualPlanDetailTable(String ids) {
+ String[] split = ids.split(",");
+ if (split.length > 0) {
+ for (String s : split) {
+ baseMapper.deleteById(s);
+ }
+ }
+ }
+
+ @Override
+ public IPage<PersonTrainingDetailedDto> queryTheAnnualPlanDetailsTable(Page page, String trainingLecturerName, String courseCode, String trainingDate, Integer id, Integer userId) {
+ Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
+ return baseMapper.queryTheAnnualPlanDetailsTable(page, trainingLecturerName, courseCode, trainingDate, id, userId, map1.get("userId"));
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingRecordServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingRecordServiceImpl.java
new file mode 100644
index 0000000..ddef47e
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingRecordServiceImpl.java
@@ -0,0 +1,224 @@
+package com.yuanchu.mom.service.impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.yuanchu.mom.common.GetLook;
+import com.yuanchu.mom.dto.PersonTrainingRecordDto;
+import com.yuanchu.mom.dto.PersonTrainingRecordListDto;
+import com.yuanchu.mom.dto.TrainingRecordPersonDetailedDto;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.PersonTrainingRecordMapper;
+import com.yuanchu.mom.pojo.PersonTrainingDetailed;
+import com.yuanchu.mom.pojo.PersonTrainingRecord;
+import com.yuanchu.mom.service.PersonTrainingDetailedService;
+import com.yuanchu.mom.service.PersonTrainingRecordService;
+import com.yuanchu.mom.utils.HackLoopTableRenderPolicy;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 鍩硅璁板綍 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-12 04:50:48
+ */
+@Transactional(rollbackFor = Exception.class)
+@Service
+public class PersonTrainingRecordServiceImpl extends ServiceImpl<PersonTrainingRecordMapper, PersonTrainingRecord> implements PersonTrainingRecordService {
+
+ @Autowired
+ private GetLook getLook;
+
+ @Autowired
+ private PersonTrainingDetailedService personTrainingDetailedService;
+
+ @Override
+ public List<PersonTrainingRecordDto> trainingAndAssessmentRecordsPage(Integer trainingDetailedId, String userName) {
+ return baseMapper.trainingAndAssessmentRecordsPage(trainingDetailedId, userName);
+ }
+
+ @Override
+ public void deleteTrainingAndAssessmentRecords(String ids) {
+ String[] split = ids.split(",");
+ if (split.length > 0) {
+ for (String s : split) {
+ baseMapper.deleteById(s);
+ }
+ }
+ }
+
+ @Override
+ public IPage<PersonTrainingRecordListDto> personnelTrainingPersonnel(Page page, String userName, Integer userId, Integer departLimsId) {
+ return baseMapper.personnelTrainingPersonnel(page, userName, userId, departLimsId);
+ }
+
+ @Override
+ public IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetails(Page page, Integer userId) {
+ return baseMapper.queryPersonnelDetails(page, userId);
+ }
+
+ @Override
+ public void claimOfTrainingAndAssessmentRecords(Boolean claimAndClaim, Integer courseId) {
+ Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
+ // 1銆佹煡璇㈠煿璁绋嬶紝鍙栧煿璁棩鏈熶笌寮�濮嬫棩鏈燂紝涓庡綋鍓嶆椂闂存瘮杈冿紝鍒ゆ柇鏄惁瓒呭嚭锛屽鏋滆秴鍑轰笉鍏佽璁ら
+ Boolean doesItExceedState = doesItExceed(courseId);
+ if (!doesItExceedState) {
+ throw new ErrorException("褰撳墠璇剧▼鐘舵�佹棤娉曡棰嗭紒");
+ }
+ // 2銆佸垽鏂槸鍚﹂噸澶�
+ PersonTrainingRecord personTrainingRecord1 = baseMapper.selectOne(Wrappers.<PersonTrainingRecord>lambdaQuery()
+ .eq(PersonTrainingRecord::getCourseId, courseId)
+ .eq(PersonTrainingRecord::getUserId, map1.get("userId")));
+ if (ObjectUtils.isNotEmpty(personTrainingRecord1)) {
+ throw new ErrorException("璇峰嬁閲嶅璁ら锛�");
+ }
+ // 3銆佸鏋滄湭閲嶅鏂板鍩硅璁板綍
+ // true 璁ら
+ if (claimAndClaim) {
+ PersonTrainingRecord personTrainingRecord = new PersonTrainingRecord();
+ personTrainingRecord.setUserId(map1.get("userId"));
+ personTrainingRecord.setCourseId(courseId);
+ baseMapper.insert(personTrainingRecord);
+ // 鍙栨秷璁ら
+ } else {
+ baseMapper.delete(Wrappers.<PersonTrainingRecord>lambdaQuery()
+ .eq(PersonTrainingRecord::getUserId, map1.get("userId"))
+ .eq(PersonTrainingRecord::getCourseId, courseId));
+ }
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鍩硅璁板綍
+ * @param userId
+ * @param response
+ */
+ @Override
+ public void exportTrainingRecord(Integer userId, HttpServletResponse response) {
+ // 鏌ヨ浜哄憳浜轰俊鎭�
+ PersonTrainingRecordListDto trainingRecordListDto = baseMapper.selectUserTraining(userId);
+
+ // 鏌ヨ鍩硅璁板綍
+ List<TrainingRecordPersonDetailedDto> personDetailedDtos = baseMapper.selectPersonDetailedDtos(userId);
+
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/training-record.docx");
+ Configure configure = Configure.builder()
+ .bind("personnelDetailsLisat", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("traning", trainingRecordListDto);
+ put("personnelDetailsLisat", personDetailedDtos);
+ }});
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "浜哄憳鍩硅璁板綍瀵煎嚭", "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("瀵煎嚭澶辫触");
+ }
+
+
+ }
+
+ @Override
+ public IPage<TrainingRecordPersonDetailedDto> queryPersonnelDetailsOfUserIdAndYear(Page page, Integer userId, Integer year) {
+ return baseMapper.queryPersonnelDetailsOfUserIdAndYear(page, userId, year);
+ }
+
+ @Override
+ public void exportTrainingRecordAddTrainingDate(Integer userId, Integer trainingDate, HttpServletResponse response) {
+ // 鏌ヨ浜哄憳浜轰俊鎭�
+ PersonTrainingRecordListDto trainingRecordListDto = baseMapper.selectUserTraining(userId);
+
+ // 鏌ヨ鍩硅璁板綍
+ List<TrainingRecordPersonDetailedDto> personDetailedDtos = baseMapper.selectPersonDetailedDtosByTrainingDate(userId, trainingDate);
+
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/training-record.docx");
+ Configure configure = Configure.builder()
+ .bind("personnelDetailsLisat", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("traning", trainingRecordListDto);
+ put("personnelDetailsLisat", personDetailedDtos);
+ }});
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "浜哄憳鍩硅璁板綍瀵煎嚭", "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("瀵煎嚭澶辫触");
+ }
+ }
+
+ /**
+ * 妫�楠岃鍩硅璇剧▼鏄惁鍏佽璁ら
+ * @param courseId 璇ヨ绋嬬殑id
+ * @return
+ */
+ public Boolean doesItExceed(Integer courseId) {
+ PersonTrainingDetailed personTrainingDetailed = personTrainingDetailedService.getById(courseId);
+ // 鍙湁鐘舵�佷负3鍙互璁ら
+ if (!personTrainingDetailed.getState().equals(3)) {
+ return false;
+ }
+ SimpleDateFormat sdfWithoutTime = new SimpleDateFormat("yyyy-MM-dd");
+ String originalDateStr = sdfWithoutTime.format(personTrainingDetailed.getTrainingDate());
+ SimpleDateFormat sdfWithTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ try {
+ // 娣诲姞鏃跺垎绉掑悗鐨勬棩鏈�
+ Date addedDate = sdfWithTime.parse(originalDateStr + " " + personTrainingDetailed.getOpeningTime());
+ // 鑾峰彇褰撳墠鏃堕棿
+ Date currentDate = new Date();
+ // 鏃ユ湡鏈秴鍑哄綋鍓嶆椂闂淬��
+ if (addedDate.after(currentDate) || addedDate.equals(currentDate)) {
+ return true;
+ // 鏃ユ湡宸茶秴鍑哄綋鍓嶆椂闂�
+ } else {
+ // 濡傛灉鏃ユ湡瓒呭嚭 鏇存柊璇剧▼鐘舵�佷负宸茬粨鏉�
+ personTrainingDetailedService.update(Wrappers.<PersonTrainingDetailed>lambdaUpdate()
+ .eq(PersonTrainingDetailed::getId, courseId)
+ .set(PersonTrainingDetailed::getState, 2));
+ return false;
+ }
+ } catch (Exception e) {
+ throw new ErrorException("鏃堕棿鏍煎紡閿欒锛�");
+ }
+ }
+}
diff --git a/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingServiceImpl.java b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingServiceImpl.java
new file mode 100644
index 0000000..0b32955
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/yuanchu/mom/service/impl/PersonTrainingServiceImpl.java
@@ -0,0 +1,312 @@
+package com.yuanchu.mom.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+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.data.Pictures;
+import com.yuanchu.mom.common.GetLook;
+import com.yuanchu.mom.dto.*;
+import com.yuanchu.mom.excel.PersonSupervisePlanDetailsUpload;
+import com.yuanchu.mom.excel.PersonTrainingDetailedListener;
+import com.yuanchu.mom.excel.PersonTrainingDetailedUpload;
+import com.yuanchu.mom.exception.ErrorException;
+import com.yuanchu.mom.mapper.PersonTrainingDetailedMapper;
+import com.yuanchu.mom.mapper.PersonTrainingMapper;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.mapper.PersonTrainingRecordMapper;
+import com.yuanchu.mom.mapper.UserMapper;
+import com.yuanchu.mom.pojo.PersonTraining;
+import com.yuanchu.mom.pojo.User;
+import com.yuanchu.mom.pojo.PersonTrainingDetailed;
+import com.yuanchu.mom.service.PersonTrainingDetailedService;
+import com.yuanchu.mom.service.PersonTrainingService;
+import com.yuanchu.mom.utils.HackLoopTableRenderPolicy;
+import com.yuanchu.mom.utils.XWPFDocumentUtils;
+import com.yuanchu.mom.utils.DateImageUtil;
+import lombok.AllArgsConstructor;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URLEncoder;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.atomic.AtomicInteger;
+import java.util.stream.Collectors;
+import java.util.Optional;
+
+/**
+ * <p>
+ * 鍩硅璁″垝 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2024-10-11 01:11:49
+ */
+@Service
+@Transactional(rollbackFor = Exception.class)
+public class PersonTrainingServiceImpl extends ServiceImpl<PersonTrainingMapper, PersonTraining> implements PersonTrainingService {
+
+ @Autowired
+ private GetLook getLook;
+
+ @Autowired
+ private PersonTrainingDetailedService personTrainingDetailedService;
+
+ @Autowired
+ private UserMapper userMapper;
+
+
+ @Autowired
+ private PersonTrainingDetailedMapper personTrainingDetailedMapper;
+
+ @Autowired
+ private PersonTrainingRecordMapper personTrainingRecordMapper;
+
+ @Value("${file.path}")
+ private String imgUrl;
+
+ @Override
+ public IPage<PersonTrainingDto> personTrainingSelect(Page page, String compilerName, String departmentId) {
+ Integer userId = getLook.selectPowerByMethodAndUserId(null).get("userId");
+ User user = Optional.ofNullable(userMapper.selectById(userId)).orElse(new User());
+ if(3==user.getRoleId()){
+ departmentId=null;
+ }
+ return baseMapper.personTrainingSelect(page, compilerName, departmentId);
+ }
+
+ @Override
+ public void personTrainingImport(MultipartFile file) {
+ Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
+ // 骞村害璁″垝鐖剁骇鏂板鏁版嵁
+ PersonTraining personSupervisePlan = new PersonTraining();
+ String fileName = file.getOriginalFilename().substring(0, file.getOriginalFilename().lastIndexOf("."));
+ personSupervisePlan.setFileName(fileName);
+ personSupervisePlan.setCompilerId(map1.get("userId"));
+ personSupervisePlan.setCompilationDate(LocalDateTime.now());
+ baseMapper.insert(personSupervisePlan);
+ // 骞村害璁″垝璇︽儏 鏂板
+ try {
+ PersonTrainingDetailedListener personSupervisePlanDetailsListener = new PersonTrainingDetailedListener(personTrainingDetailedService);
+ personSupervisePlanDetailsListener.setPlanId(personSupervisePlan.getId());
+ EasyExcel.read(file.getInputStream(), PersonTrainingDetailedUpload.class, personSupervisePlanDetailsListener).sheet().doRead();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ @Override
+ public void personTrainingDelete(Integer id) {
+ personTrainingDetailedService.removeById(id);
+ baseMapper.deleteById(id);
+ }
+
+ @Override
+ public void reviewAnnualPersonnelTraining(PersonTrainingUpdateDto personTrainingUpdateDto) {
+ Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
+ PersonTraining personTraining = new PersonTraining();
+ personTraining.setId(personTrainingUpdateDto.getId());
+ personTraining.setReviewerId(map1.get("userId"));
+ personTraining.setAuditDate(LocalDateTime.now());
+ personTraining.setAuditRemarks(personTrainingUpdateDto.getRemarks());
+ personTraining.setReviewerStatus(personTrainingUpdateDto.getStatus());
+ baseMapper.updateById(personTraining);
+ }
+
+ @Override
+ public void approveAnnualPersonnelTraining(PersonTrainingUpdateDto personTrainingUpdateDto) {
+ Map<String, Integer> map1 = getLook.selectPowerByMethodAndUserId("selectInsOrderParameter");
+ LambdaUpdateWrapper<PersonTraining> wrapper = Wrappers.<PersonTraining>lambdaUpdate()
+ .eq(PersonTraining::getId, personTrainingUpdateDto.getId())
+ .set(PersonTraining::getApproverId, map1.get("userId"))
+ .set(PersonTraining::getApprovalDate, LocalDateTime.now())
+ .set(PersonTraining::getApprovalRemarks, personTrainingUpdateDto.getRemarks())
+ .set(PersonTraining::getApprovalStatus, personTrainingUpdateDto.getStatus());
+ if (personTrainingUpdateDto.getStatus().equals(2)) {
+ wrapper.set(PersonTraining::getReviewerStatus, null);
+ }
+ baseMapper.update(new PersonTraining(), wrapper);
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鍩硅璁″垝
+ * @param id
+ * @param response
+ */
+ @Override
+ public void exportPersonTraining(Integer id, HttpServletResponse response) {
+
+ // 鏌ヨ璇︽儏
+ PersonTraining personTraining = baseMapper.selectById(id);
+
+ //鑾峰彇鎻愪氦浜虹殑绛惧悕鍦板潃
+ String writeUrl = userMapper.selectById(personTraining.getCompilerId()).getSignatureUrl();
+ if (ObjectUtils.isEmpty(writeUrl) || writeUrl.equals("")) {
+ throw new ErrorException("鎵句笉鍒版楠屼汉鐨勭鍚�");
+ }
+
+ //鑾峰彇澶嶆牳浜虹殑绛惧悕鍦板潃
+ String examineUrl = null;
+ if (personTraining.getReviewerId() != null) {
+ examineUrl = userMapper.selectById(personTraining.getReviewerId()).getSignatureUrl();
+ if (StringUtils.isBlank(examineUrl)) {
+ throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+ }
+ }
+
+ //鑾峰彇鎵瑰噯浜虹殑绛惧悕鍦板潃
+ String ratifyUrl = null;
+ if (personTraining.getApproverId() != null) {
+ ratifyUrl = userMapper.selectById(personTraining.getApproverId()).getSignatureUrl();
+ if (StringUtils.isBlank(ratifyUrl)) {
+ throw new ErrorException("鎵句笉鍒板鏍镐汉鐨勭鍚�");
+ }
+ }
+
+ // 鏌ヨ璇︽儏
+ List<PersonTrainingDetailedDto> detailedDtos = personTrainingDetailedMapper.selectTrainingList(id);
+
+ int index = 1;
+ for (PersonTrainingDetailedDto detailedDto : detailedDtos) {
+ if (detailedDto.getTrainingDate() != null) {
+ SimpleDateFormat sdfWithoutTime = new SimpleDateFormat("yyyy-MM-dd");
+ detailedDto.setTrainingDateString(sdfWithoutTime.format(detailedDto.getTrainingDate()));
+ }
+
+ detailedDto.setIndex(index);
+ index++;
+ }
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/person-training.docx");
+ String finalExamineUrl = examineUrl;
+ String finalRatifyUrl = ratifyUrl;
+ Configure configure = Configure.builder()
+ .bind("trainingDetailedList", new HackLoopTableRenderPolicy())
+ .build();
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("year", personTraining.getCreateTime().getYear());
+ put("trainingDetailedList", detailedDtos);
+ put("writeUrl", StringUtils.isNotBlank(writeUrl) ? Pictures.ofLocal(imgUrl + "/" + writeUrl).create() : null);
+ put("examineUrl", StringUtils.isNotBlank(finalExamineUrl) ? Pictures.ofLocal(imgUrl + "/" + finalExamineUrl).create() : null);
+ put("ratifyUrl", StringUtils.isNotBlank(finalRatifyUrl) ? Pictures.ofLocal(imgUrl + "/" + finalRatifyUrl).create() : null);
+ put("writeDateUrl", personTraining.getCompilationDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getCompilationDate())).create() : null);
+ put("examineDateUrl", personTraining.getAuditDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getAuditDate())).create() : null);
+ put("ratifyDateUrl", personTraining.getApprovalDate() != null ?
+ Pictures.ofStream(DateImageUtil.createDateImage(personTraining.getApprovalDate())).create() : null);
+ }});
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "浜哄憳鍩硅璁″垝瀵煎嚭", "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("瀵煎嚭澶辫触");
+ }
+
+ }
+
+ /**
+ * 瀵煎嚭浜哄憳鍩硅涓庤�冩牳璁板綍
+ * @param id
+ * @param response
+ */
+ @Override
+ public void exportPersonTrainingRecord(Integer id, HttpServletResponse response) {
+ // 鏌ヨ浜哄憳鍩硅鏄庣粏
+ PersonTrainingDetailedDto detailedDto = personTrainingDetailedMapper.selectTrainingDetail(id);
+
+ // 鏌ヨ鍩硅鐨勪汉鍛�
+ List<PersonTrainingRecordDto> recordDtos = personTrainingRecordMapper.selectListByTrainingDetailedId(id);
+
+ List<TrainingRecordExportDto> exportDtoList = new ArrayList<>();
+ TrainingRecordExportDto exportDto = new TrainingRecordExportDto();
+
+ int count = 0;
+ for (PersonTrainingRecordDto recordDto : recordDtos) {
+ switch (count) {
+ case 0:
+ exportDto.setUserName1(recordDto.getUserName());
+ exportDto.setDepartment1(recordDto.getDepartment());
+ exportDto.setExaminationResults1(recordDto.getExaminationResults());
+ count ++;
+ break;
+ case 1:
+ exportDto.setUserName2(recordDto.getUserName());
+ exportDto.setDepartment2(recordDto.getDepartment());
+ exportDto.setExaminationResults2(recordDto.getExaminationResults());
+ exportDtoList.add(exportDto);
+ exportDto = new TrainingRecordExportDto();
+ count = 0;
+ break;
+ }
+ }
+ exportDtoList.add(exportDto);
+
+ // 璐ㄩ噺璐熻矗浜�
+ String assessmentUserUrl = null;
+ if (detailedDto.getAssessmentUserId() != null) {
+ assessmentUserUrl = userMapper.selectById(detailedDto.getAssessmentUserId()).getSignatureUrl();
+ if (StringUtils.isBlank(assessmentUserUrl)) {
+ throw new ErrorException("鎵句笉鍒拌瘎浠蜂汉鐨勭鍚�");
+ }
+ }
+
+
+ // 鑾峰彇璺緞
+ InputStream inputStream = this.getClass().getResourceAsStream("/static/person-training-record.docx");
+ Configure configure = Configure.builder()
+ .bind("trainingRecordsList", new HackLoopTableRenderPolicy())
+ .build();
+ String finalAssessmentUserUrl = assessmentUserUrl;
+ XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+ new HashMap<String, Object>() {{
+ put("trainingDetail", detailedDto);
+ put("trainingRecordsList", exportDtoList);
+ put("assessmentUserUrl", StringUtils.isNotBlank(finalAssessmentUserUrl) ? Pictures.ofLocal(imgUrl + "/" + finalAssessmentUserUrl).create() : null);
+ }});
+ try {
+ response.setContentType("application/msword");
+ String fileName = URLEncoder.encode(
+ "鍩硅涓庤�冩牳璁板綍瀵煎嚭", "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/resources/mapper/PersonBasicInfoMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml
new file mode 100644
index 0000000..fa7a67f
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonBasicInfoMapper.xml
@@ -0,0 +1,101 @@
+<?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.yuanchu.mom.mapper.PersonBasicInfoMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonBasicInfo">
+ <id column="id" property="id" />
+ <result column="current_state" property="currentState" />
+ <result column="entry_time" property="entryTime" />
+ <result column="post" property="post" />
+ <result column="professional_title" property="professionalTitle" />
+ <result column="sex" property="sex" />
+ <result column="personnel_classification" property="personnelClassification" />
+ <result column="date_birth" property="dateBirth" />
+ <result column="identity_card" property="identityCard" />
+ <result column="nation" property="nation" />
+ <result column="political_status" property="politicalStatus" />
+ <result column="official_academic_redentials" property="officialAcademicRedentials" />
+ <result column="graduation_time1" property="graduationTime1" />
+ <result column="graduated_institutions1" property="graduatedInstitutions1" />
+ <result column="major1" property="major1" />
+ <result column="graduation_time2" property="graduationTime2" />
+ <result column="graduated_institutions2" property="graduatedInstitutions2" />
+ <result column="major2" property="major2" />
+ <result column="telephone" property="telephone" />
+ <result column="end_planned_internship" property="endPlannedInternship" />
+ <result column="end_practical_practice" property="endPracticalPractice" />
+ <result column="date_departure" property="dateDeparture" />
+ <result column="desktop_picture" property="desktopPicture" />
+ <result column="attachment_information" property="attachmentInformation" />
+ <result column="remarks" property="remarks" />
+ <result column="user_id" property="userId" />
+ <result column="current_position" property="currentPosition" />
+ </resultMap>
+
+ <select id="selectLimsUser" resultType="com.yuanchu.mom.dto.DepartmentDto">
+ SELECT u.id userId, u.name, SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1) AS fatherId
+ FROM user u
+ where u.is_custom = 0
+ and u.depart_lims_id is not null
+ and u.depart_lims_id != ''
+ </select>
+
+ <select id="getCNASPersonnelInfo" resultType="com.yuanchu.mom.dto.PersonBasicInfoDto">
+ SELECT *
+ FROM user u
+ left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
+ where u.id = #{userId}
+ </select>
+
+ <select id="basicInformationOfPersonnelSelectPage" resultType="java.util.Map">
+ select
+ u.id,
+ u.name,
+ u.account,
+ cpbi.sex,
+ cpbi.date_birth,
+ u.age,
+ cpbi.entry_time,
+ cpbi.personnel_classification,
+ cpbi.official_academic_redentials,
+ cpbi.current_position,
+ u.phone,
+ cpbi.date_departure,
+ cpbi.current_state,
+ u1.name createUser
+ from user u
+ left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
+ left join user u1 on u1.id = u.create_user
+ where FIND_IN_SET(#{departmentId},u.depart_lims_id)
+ </select>
+ <select id="selectPersonBasecInfoAndUser" resultType="java.util.Map">
+ select
+ u.id userId,
+ u.`name` name,
+ u.account account,
+ DATE_FORMAT(cpbi.entry_time, '%Y-%m-%d') groupTime,
+ DATE_FORMAT(cpbi.end_practical_practice, '%Y-%m-%d') endPracticalPracticeStr,
+ cpbi.native_place nativePlace,
+ cpbi.identity_card identityCard,
+ cpbi.id_address idAddress,
+ u.phone telephone,
+ cpbi.graduated_institutions1 graduatedInstitutions1,
+ cpbi.major1 major1,
+ DATE_FORMAT(cpbi.graduation_time1, '%Y-%m-%d') graduationTime1,
+ cpbi.official_academic_redentials officialAcademicRedentials,
+ cpbi.highest_degree highestDegree,
+ cpbi.professional_title professionalTitle,
+ cpbi.emergency_contact emergencyContact,
+ cpbi.emergency_contact_phone emergencyContactPhone
+ from user u
+ left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
+ left join user u1 on u1.id = u.create_user
+ <where>
+ FIND_IN_SET(#{departmentId},u.depart_lims_id)
+ <if test="name != null and name != ''">
+ and u.name like concat('%',#{name},'%')
+ </if>
+ </where>
+ </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonCommunicationAbilityMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonCommunicationAbilityMapper.xml
new file mode 100644
index 0000000..e86ad74
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonCommunicationAbilityMapper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yuanchu.mom.mapper.PersonCommunicationAbilityMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonCommunicationAbility">
+ <id column="id" property="id" />
+ <result column="user_id" property="userId" />
+ <result column="communication_time" property="communicationTime" />
+ <result column="communication_place" property="communicationPlace" />
+ <result column="communication_content" property="communicationContent" />
+ <result column="create_user" property="createUser" />
+ <result column="update_user" property="updateUser" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+
+ <select id="personPersonCommunicationAbilityPage" resultType="com.yuanchu.mom.dto.PersonCommunicationAbilityDto">
+ select cpca.*, us.name create_user_name
+ from cnas_person_communication_ability cpca
+ left join user us on cpca.create_user = us.id
+ <where>
+ <if test="userId != null and userId != ''">
+ and FIND_IN_SET(#{userId},cpca.user_id)
+ </if>
+ <if test="departLimsId != null and departLimsId != ''">
+ and FIND_IN_SET(#{departLimsId},us.depart_lims_id)
+ </if>
+ </where>
+ </select>
+</mapper>
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..a74fcd8
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonJobResponsibilitiesMapper.xml
@@ -0,0 +1,40 @@
+<?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.yuanchu.mom.mapper.PersonJobResponsibilitiesMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonJobResponsibilities">
+ <id column="id" property="id" />
+ <result column="post_name" property="postName" />
+ <result column="affiliated_function_id" property="affiliatedFunctionId" />
+ <result column="job_objective" property="jobObjective" />
+ <result column="job_responsibilities" property="jobResponsibilities" />
+ <result column="incumbent_id" property="incumbentId" />
+ <result column="submitting_operator" property="submittingOperator" />
+ <result column="submitting_date" property="submittingDate" />
+ <result column="supervisor_id" property="supervisorId" />
+ <result column="incumbent_operator" property="incumbentOperator" />
+ <result column="incumbent_date" property="incumbentDate" />
+ <result column="supervisor_operator" property="supervisorOperator" />
+ <result column="supervisor_date" property="supervisorDate" />
+ </resultMap>
+
+ <select id="personJobResponsibilitiesSelect" resultType="com.yuanchu.mom.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/PersonPersonnelCapacityMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonPersonnelCapacityMapper.xml
new file mode 100644
index 0000000..52d1009
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonPersonnelCapacityMapper.xml
@@ -0,0 +1,168 @@
+<?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.yuanchu.mom.mapper.PersonPersonnelCapacityMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonPersonnelCapacity">
+ <id column="id" property="id" />
+ <result column="academic_degree" property="academicDegree" />
+ <result column="academic_conform_not" property="academicConformNot" />
+ <result column="academic_remarks" property="academicRemarks" />
+ <result column="related_years" property="relatedYears" />
+ <result column="related_years_conform_not" property="relatedYearsConformNot" />
+ <result column="related_years_remarks" property="relatedYearsRemarks" />
+ <result column="related_training" property="relatedTraining" />
+ <result column="related_training_conform_not" property="relatedTrainingConformNot" />
+ <result column="related_training_remarks" property="relatedTrainingRemarks" />
+ <result column="relevant_experience" property="relevantExperience" />
+ <result column="relevant_experience_conform_not" property="relevantExperienceConformNot" />
+ <result column="relevant_experience_remarks" property="relevantExperienceRemarks" />
+ <result column="work_license" property="workLicense" />
+ <result column="work_license_conform_not" property="workLicenseConformNot" />
+ <result column="work_license_remarks" property="workLicenseRemarks" />
+ <result column="job_responsibilities" property="jobResponsibilities" />
+ <result column="job_responsibilities_conform_not" property="jobResponsibilitiesConformNot" />
+ <result column="job_responsibilities_remarks" property="jobResponsibilitiesRemarks" />
+ <result column="comprehensive_assessment" property="comprehensiveAssessment" />
+ <result column="submit_operating_personnel_id" property="submitOperatingPersonnelId" />
+ <result column="submit_date" property="submitDate" />
+ <result column="confirm_operating_personnel_id" property="confirmOperatingPersonnelId" />
+ <result column="confirm_date" property="confirmDate" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ <result column="create_user" property="createUser" />
+ <result column="update_user" property="updateUser" />
+ <result column="user_id" property="userId" />
+ </resultMap>
+
+ <resultMap id="BaseResultMapDto" type="com.yuanchu.mom.dto.PersonPersonnelCapacityDto" extends="BaseResultMap">
+ <result column="submit_operating_personnel_name" property="submitOperatingPersonnelName" />
+ <result column="confirm_operating_personnel_name" property="confirmOperatingPersonnelName" />
+ <result column="user_name" property="userName" />
+ <result column="place_work" property="placeWork" />
+ <result column="post_name" property="postName" />
+ <result column="responsibilities" property="responsibilities" />
+ <result column="major" property="major" />
+ </resultMap>
+
+ <select id="personPersonnelCapacityPage" resultMap="BaseResultMapDto">
+ select cppc.*,
+ u1.name submit_operating_personnel_name,
+ u2.name confirm_operating_personnel_name,
+ u3.name user_name,
+ cpbi.post_name,
+ p.place_work,
+ ecp.responsibilities,
+ TRIM(',' FROM CONCAT(cpbi.major1, ',', cpbi.major2)) AS major
+ from cnas_person_personnel_capacity cppc
+ left join user u1 on cppc.submit_operating_personnel_id = u1.id
+ left join user u2 on cppc.confirm_operating_personnel_id = u2.id
+ left join user u3 on cppc.user_id = u3.id
+ -- 鍙栧矖浣�
+ left join cnas_person_basic_info cpbi on cpbi.user_id = cppc.user_id
+ -- 鍙栦汉鍛樿兘鍔涚殑宸ヤ綔缁忓巻
+ left join (select GROUP_CONCAT(cptr.place_work) place_work, cptr.user_id from cnas_person_track_record cptr
+ where cptr.place_work like concat('%' ,'涓ぉ', '%')
+ GROUP BY cptr.user_id) p on u3.id = p.user_id
+ -- 鍙栦汉鍛樿兘鍔涚殑宀椾綅鑱岃矗
+ left join (SELECT GROUP_CONCAT(e.label) responsibilities, cppc.id
+ from cnas_person_personnel_capacity cppc
+ left join enums e on FIND_IN_SET(e.value, cppc.job_responsibilities)
+ where e.category = '宀椾綅鑱岃矗'
+ GROUP BY cppc.id) ecp on ecp.id = cppc.id
+ <where>
+ <if test="userId != null and userId != ''">
+ and cppc.user_id = #{userId}
+ </if>
+ <if test="departLimsId != null and departLimsId != ''">
+ and FIND_IN_SET(#{departLimsId}, u3.depart_lims_id)
+ </if>
+ <if test="userName != null and userName != ''">
+ and u3.name like concat('%', #{userName}, '%')
+ </if>
+ </where>
+ </select>
+
+ <!-- 鏌ヨ浜哄憳鑳藉姏鎺ュ彛 -->
+ <select id="selectExportPersonnelCapacity"
+ resultType="com.yuanchu.mom.dto.PersonPersonnelCapacityExportDto">
+ select cppc.*,
+ cpbi.post postName,
+ u1.name userName,
+ cpbi.official_academic_redentials,
+ cpbi.major1,
+ cpbi.professional_title,
+ p.place_work,
+ TRIM(',' FROM CONCAT(cpbi.major1, ',', cpbi.major2)) AS major,
+ case when cppc.academic_conform_not = 1 then '鈽�'
+ else '鈻�' end academicConformNot1,-- 瀛﹀巻
+ case when cppc.academic_conform_not = 2 then '鈽�'
+ else '鈻�' end academicConformNot2,
+ case when cppc.academic_conform_not = 3 then '鈽�'
+ else '鈻�' end academicConformNot3,
+ case when cppc.related_years_conform_not = 1 then '鈽�'
+ else '鈻�' end relatedYearsConformNot1,-- 鐩稿叧骞撮檺
+ case when cppc.related_years_conform_not = 2 then '鈽�'
+ else '鈻�' end relatedYearsConformNot2,
+ case when cppc.related_years_conform_not = 3 then '鈽�'
+ else '鈻�' end relatedYearsConformNot3,
+ case when cppc.related_training_conform_not = 1 then '鈽�'
+ else '鈻�' end relatedTrainingConformNot1,-- 鐩稿叧鍩硅
+ case when cppc.related_training_conform_not = 2 then '鈽�'
+ else '鈻�' end relatedTrainingConformNot2,
+ case when cppc.related_training_conform_not = 3 then '鈽�'
+ else '鈻�' end relatedTrainingConformNot3,
+ case when cppc.relevant_experience_conform_not = 1 then '鈽�'
+ else '鈻�' end relevantExperienceConformNot1,-- 鐩稿叧缁忛獙
+ case when cppc.relevant_experience_conform_not = 2 then '鈽�'
+ else '鈻�' end relevantExperienceConformNot2,
+ case when cppc.relevant_experience_conform_not = 3 then '鈽�'
+ else '鈻�' end relevantExperienceConformNot3,
+ case when cppc.work_license_conform_not = 1 then '鈽�'
+ else '鈻�' end workLicenseConformNot1,-- 涓婂矖璇�
+ case when cppc.work_license_conform_not = 2 then '鈽�'
+ else '鈻�' end workLicenseConformNot2,
+ case when cppc.work_license_conform_not = 3 then '鈽�'
+ else '鈻�' end workLicenseConformNot3,
+ case when cppc.job_responsibilities_conform_not = 1 then '鈽�'
+ else '鈻�' end jobResponsibilitiesConformNot1,-- 宀椾綅鑱岃矗
+ case when cppc.job_responsibilities_conform_not = 2 then '鈽�'
+ else '鈻�' end jobResponsibilitiesConformNot2,
+ case when cppc.job_responsibilities_conform_not = 3 then '鈽�'
+ else '鈻�' end jobResponsibilitiesConformNot3,
+ case when cppc.comprehensive_assessment = 'Qualified this position' then '鈽�'
+ else '鈻�' end comprehensiveAssessment1,-- 缁煎悎璇勪环
+ case when cppc.comprehensive_assessment = 'You can work while training' then '鈽�'
+ else '鈻�' end comprehensiveAssessment2,
+ case when cppc.comprehensive_assessment = 'Iconpetent for the position' then '鈽�'
+ else '鈻�' end comprehensiveAssessment3,
+ case when find_in_set(1, cppc.job_responsibilities) then '鈽�'
+ else '鈻�' end jobResponsibilities1,
+ case when find_in_set(2, cppc.job_responsibilities) then '鈽�'
+ else '鈻�' end jobResponsibilities2,
+ case when find_in_set(3, cppc.job_responsibilities) then '鈽�'
+ else '鈻�' end jobResponsibilities3,
+ case when find_in_set(4, cppc.job_responsibilities) then '鈽�'
+ else '鈻�' end jobResponsibilities4,
+ case when find_in_set(5, cppc.job_responsibilities) then '鈽�'
+ else '鈻�' end jobResponsibilities5,
+ case when find_in_set(6, cppc.job_responsibilities) then '鈽�'
+ else '鈻�' end jobResponsibilities6,
+ case when find_in_set(7, cppc.job_responsibilities) then '鈽�'
+ else '鈻�' end jobResponsibilities7,
+ case when find_in_set(8, cppc.job_responsibilities) then '鈽�'
+ else '鈻�' end jobResponsibilities8,
+ case when find_in_set(9, cppc.job_responsibilities) then '鈽�'
+ else '鈻�' end jobResponsibilities9,
+ case when find_in_set(10, cppc.job_responsibilities) then '鈽�'
+ else '鈻�' end jobResponsibilities10
+ from cnas_person_personnel_capacity cppc
+ left join user u1 on cppc.user_id = u1.id
+ left join cnas_person_basic_info cpbi on cpbi.user_id = cppc.user_id
+ left join (select GROUP_CONCAT(cptr.place_work) place_work, cptr.user_id
+ from cnas_person_track_record cptr
+ where cptr.place_work like concat('%', '涓ぉ', '%')
+ GROUP BY cptr.user_id) p on u1.id = p.user_id
+ where cppc.id = #{id}
+ </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..437ea86
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonPostAuthorizationRecordMapper.xml
@@ -0,0 +1,40 @@
+<?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.yuanchu.mom.mapper.PersonPostAuthorizationRecordMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonPostAuthorizationRecord">
+ <id column="id" property="id" />
+ <result column="certificate_number" property="certificateNumber" />
+ <result column="user_id" property="userId" />
+ <result column="post" property="post" />
+ <result column="operation_type" property="operationType" />
+ <result column="file_name" property="fileName" />
+ <result column="system_file_name" property="systemFileName" />
+ <result column="remarks" property="remarks" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_user" property="updateUser" />
+ <result column="create_user" property="createUser" />
+ <result column="num1" property="num1" />
+ <result column="num2" property="num2" />
+ </resultMap>
+
+ <select id="personPostAuthorizationRecordPage" resultType="com.yuanchu.mom.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..508c947
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonRewardPunishmentRecordMapper.xml
@@ -0,0 +1,58 @@
+<?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.yuanchu.mom.mapper.PersonRewardPunishmentRecordMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonRewardPunishmentRecord">
+ <id column="id" property="id" />
+ <result column="reward_punish_level" property="rewardPunishLevel" />
+ <result column="reward_punish_name" property="rewardPunishName" />
+ <result column="reward_punish_time" property="rewardPunishTime" />
+ <result column="reward_punish_work_unit" property="rewardPunishWorkUnit" />
+ <result column="reward_punish_content" property="rewardPunishContent" />
+ <result column="user_id" property="userId" />
+ <result column="create_user" property="createUser" />
+ </resultMap>
+
+ <select id="rewardPunishmentPage" resultType="com.yuanchu.mom.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.yuanchu.mom.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/mapper/PersonSupervisePlanDetailsMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonSupervisePlanDetailsMapper.xml
new file mode 100644
index 0000000..55a1246
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonSupervisePlanDetailsMapper.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.yuanchu.mom.mapper.PersonSupervisePlanDetailsMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonSupervisePlanDetails">
+ <id column="id" property="id" />
+ <result column="supervise_date" property="superviseDate" />
+ <result column="supervise_des" property="superviseDes" />
+ <result column="supervise_person" property="supervisePerson" />
+ <result column="remarks" property="remarks" />
+ <result column="create_time" property="createTime" />
+ <result column="create_user" property="createUser" />
+ <result column="supervise_project" property="superviseProject" />
+ <result column="supervise_reason" property="superviseReason" />
+ </resultMap>
+
+ <select id="pageByDate" resultType="com.yuanchu.mom.dto.PersonSupervisePlanDetailsDto">
+ select cpspd.*, u.name create_by
+ from cnas_person_supervise_plan_details cpspd
+ left join user u on u.id = cpspd.create_user
+ where cpspd.plan_id = #{planId}
+ <if test="date != null and date != ''">
+ and date_format(cpspd.supervise_date,'%Y-%m-%d') = #{date}
+ </if>
+ <if test="project != null and project != ''">
+ and cpspd.supervise_project like concat('%', #{project}, '%')
+ </if>
+ order by create_time desc
+ </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonSupervisePlanMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonSupervisePlanMapper.xml
new file mode 100644
index 0000000..02435b4
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonSupervisePlanMapper.xml
@@ -0,0 +1,33 @@
+<?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.yuanchu.mom.mapper.PersonSupervisePlanMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonSupervisePlan">
+ <id column="id" property="id" />
+ <result column="file_name" property="fileName" />
+ <result column="organization_person_id" property="organizationPersonId" />
+ <result column="organization_date" property="organizationDate" />
+ <result column="approval_id" property="approvalId" />
+ <result column="approval_date" property="approvalDate" />
+ <result column="approval_status" property="approvalStatus" />
+ <result column="create_time" property="createTime" />
+ <result column="create_user" property="createUser" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_user" property="updateUser" />
+ </resultMap>
+
+ <select id="pageByPerson" resultType="com.yuanchu.mom.dto.PersonSupervisePlanDto">
+ select cpsp.*, u1.name organization_person_name, u2.name approval_name, u3.name create_name
+ from cnas_person_supervise_plan cpsp
+ left join user u1 on cpsp.organization_person_id = u1.id
+ left join user u2 on cpsp.approval_id = u2.id
+ left join user u3 on cpsp.create_user = u3.id
+ <where>
+ <if test="organizationPerson != null and organizationPerson != ''">
+ and u1.name =#{organizationPerson}
+ </if>
+ </where>
+ order by create_time desc
+ </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonSupervisionControlSheetMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonSupervisionControlSheetMapper.xml
new file mode 100644
index 0000000..00d7a5a
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonSupervisionControlSheetMapper.xml
@@ -0,0 +1,41 @@
+<?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.yuanchu.mom.mapper.PersonSupervisionControlSheetMapper">
+
+ <!-- 鏌ヨ鐩戠潱璁板綍鎺у埗鍗� -->
+
+ <select id="selectSupervisionControl"
+ resultType="com.yuanchu.mom.dto.PersonSupervisionControlSheetExportDto">
+ select scs.*,
+ dl1.name occurrenceDepartmentString,
+ u1.name departmentHead,
+ dl2.name discovererDepartment,
+ DATE_FORMAT(scs.discoverer_date, '%Y-%m-%d') discovererDateString,
+ u3.name supervisedPerson,
+ dl4.name responsibleDepartment,
+ DATE_FORMAT(scs.responsible_department_date, '%Y-%m-%d') responsibleDepartmentDateString,
+ DATE_FORMAT(scs.corrective_measure_date, '%Y-%m-%d') correctiveMeasureDateString,
+ DATE_FORMAT(scs.quality_supervisor_date, '%Y-%m-%d') qualitySupervisorDateString,
+ case when scs.corrective_measure_follow_tracks = 1 then '鈽�'
+ else '鈻�' end correctiveMeasureFollowTracksYes,
+ case when scs.corrective_measure_follow_tracks = 2 then '鈽�'
+ else '鈻�' end correctiveMeasureFollowTracksNo,
+ case when scs.whether_inform_customer = 1 then '鈽�'
+ else '鈻�' end whetherInformCustomerYes,
+ case when scs.whether_inform_customer = 2 then '鈽�'
+ else '鈻�' end whetherInformCustomerNo,
+ case when scs.whether_resume_work = 1 then '鈽�'
+ else '鈻�' end whetherResumeWorkYes,
+ case when scs.whether_resume_work = 2 then '鈽�'
+ else '鈻�' end whetherResumeWorkNo
+ from cnas_person_supervision_control_sheet scs
+ left join user u1 on u1.id = scs.department_head_id -- 閮ㄩ棬璐熻矗浜�
+ left join department_lims dl1 on find_in_set(dl1.id, u1.depart_lims_id) and dl1.id != 1
+ left join user u2 on u2.id = scs.discoverer_id -- 鍙戠幇閮ㄩ棬
+ left join department_lims dl2 on find_in_set(dl2.id, u2.depart_lims_id) and dl2.id != 1
+ left join user u3 on u3.id = scs.supervised_person_id -- 琚洃鐫d汉
+ left join user u4 on u4.id = scs.responsible_department_person_id -- 璐d换閮ㄩ棬
+ left join department_lims dl4 on find_in_set(dl4.id, u4.depart_lims_id) and dl4.id != 1
+ where scs.supervision_record_id = #{supervisionRecordId}
+ </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonSupervisionProcessingSheetMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonSupervisionProcessingSheetMapper.xml
new file mode 100644
index 0000000..65c0a0c
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonSupervisionProcessingSheetMapper.xml
@@ -0,0 +1,28 @@
+<?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.yuanchu.mom.mapper.PersonSupervisionProcessingSheetMapper">
+
+ <!-- 鏌ヨ浜哄憳鐩戠潱璁板綍澶勭悊鍗� -->
+ <select id="selectProcessingSheet" resultType="com.yuanchu.mom.dto.PersonSupervisionProcessingSheetDto">
+ select sps.*,
+ dl1.name proposing_department,
+ dl2.name cause_analysis,
+ dl3.name corrective_action,
+ dl4.name verification_department,
+ DATE_FORMAT(sps.proposing_department_date, '%Y-%m-%d') AS proposing_department_date_string,
+ DATE_FORMAT(sps.cause_analysis_date, '%Y-%m-%d') AS cause_analysis_date_string,
+ DATE_FORMAT(sps.corrective_action_date, '%Y-%m-%d') AS corrective_action_date_string,
+ DATE_FORMAT(sps.verification_department_date, '%Y-%m-%d') AS verification_department_date_string
+ from cnas_person_supervision_processing_sheet sps
+ left join user u1 on u1.id = sps.proposing_department_person_id
+ left join user u2 on u2.id = sps.cause_analysis_person_id
+ left join user u3 on u3.id = sps.corrective_action_id
+ left join user u4 on u4.id = sps.verification_department_person_id
+ left join department_lims dl1 on find_in_set(dl1.id, u1.depart_lims_id) and dl1.id != 1
+ left join department_lims dl2 on find_in_set(dl2.id, u2.depart_lims_id) and dl2.id != 1
+ left join department_lims dl3 on find_in_set(dl3.id, u3.depart_lims_id) and dl3.id != 1
+ left join department_lims dl4 on find_in_set(dl4.id, u4.depart_lims_id) and dl4.id != 1
+ where sps.supervision_record_id = #{supervisionRecordId}
+ </select>
+
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonSupervisionRecordMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonSupervisionRecordMapper.xml
new file mode 100644
index 0000000..121c234
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonSupervisionRecordMapper.xml
@@ -0,0 +1,77 @@
+<?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.yuanchu.mom.mapper.PersonSupervisionRecordMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonSupervisionRecord">
+ <id column="id" property="id" />
+ <result column="tester_id" property="testerId" />
+ <result column="supervisor_id" property="supervisorId" />
+ <result column="test_item" property="testItem" />
+ <result column="sample_number" property="sampleNumber" />
+ <result column="detection_date" property="detectionDate" />
+ <result column="personnel" property="personnel" />
+ <result column="instrument_equipment" property="instrumentEquipment" />
+ <result column="working_environment" property="workingEnvironment" />
+ <result column="sample_collection" property="sampleCollection" />
+ <result column="sample_preparation" property="samplePreparation" />
+ <result column="test_method" property="testMethod" />
+ <result column="test_report" property="testReport" />
+ <result column="evaluation_supervision_situation" property="evaluationSupervisionSituation" />
+ <result column="do_not_meet_the_handling_opinions" property="doNotMeetTheHandlingOpinions" />
+ <result column="technical_director" property="technicalDirector" />
+ <result column="technical_director_date" property="technicalDirectorDate" />
+ <result column="create_time" property="createTime" />
+ <result column="update_time" property="updateTime" />
+ <result column="create_user" property="createUser" />
+ <result column="update_user" property="updateUser" />
+ </resultMap>
+
+ <select id="personSupervisionRecordPage" resultType="com.yuanchu.mom.dto.PersonSupervisionRecordDto">
+ select cpsr.*, u1.name tester_name, u2.name supervisor_name, u3.name technical_director_name,
+ cp.personnel_name, cpscs.current_state current_state_control, cpsps.current_state current_state_processing
+ from cnas_person_supervision_record cpsr
+ left join user u1 on cpsr.tester_id = u1.id
+ left join user u2 on cpsr.supervisor_id = u2.id
+ left join user u3 on cpsr.technical_director = u3.id
+ left join (
+ select GROUP_CONCAT(u.name) personnel_name, cp.id
+ from cnas_person_supervision_record cp
+ left join user u on FIND_IN_SET(u.id, cp.personnel)
+ GROUP BY cp.id
+ ) cp on cp.id = cpsr.id
+ left join cnas_person_supervision_control_sheet cpscs on cpscs.supervision_record_id = cpsr.id
+ left join cnas_person_supervision_processing_sheet cpsps on cpsps.supervision_record_id = cpsr.id
+ <where>
+ <if test="userId != null and userId != ''">
+ and cpsr.supervisor_id = #{userId}
+ </if>
+ <if test="departLimsId != null and departLimsId != ''">
+ and FIND_IN_SET(#{departLimsId}, u2.depart_lims_id)
+ </if>
+ <if test="userName != null and userName != ''">
+ and u2.name like concat('%', #{userName}, '%')
+ </if>
+ </where>
+ order by cpsr.id desc
+ </select>
+
+ <!-- 鏌ヨ鐩戠潱璁板綍璇︽儏 -->
+ <select id="selectPersonSupervisionRecord" resultType="com.yuanchu.mom.dto.PersonSupervisionRecordDto">
+ select cpsr.*, u1.name tester_name, u2.name supervisor_name, u3.name technical_director_name,
+ cp.personnel_name, cpscs.current_state current_state_control, cpsps.current_state current_state_processing
+ from cnas_person_supervision_record cpsr
+ left join user u1 on cpsr.tester_id = u1.id
+ left join user u2 on cpsr.supervisor_id = u2.id
+ left join user u3 on cpsr.technical_director = u3.id
+ left join (
+ select GROUP_CONCAT(u.name) personnel_name, cp.id
+ from cnas_person_supervision_record cp
+ left join user u on FIND_IN_SET(u.id, cp.personnel)
+ GROUP BY cp.id
+ ) cp on cp.id = cpsr.id
+ left join cnas_person_supervision_control_sheet cpscs on cpscs.supervision_record_id = cpsr.id
+ left join cnas_person_supervision_processing_sheet cpsps on cpsps.supervision_record_id = cpsr.id
+ where cpsr.id = #{id}
+ </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonTrackRecordMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonTrackRecordMapper.xml
new file mode 100644
index 0000000..5ff64f2
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonTrackRecordMapper.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.yuanchu.mom.mapper.PersonTrackRecordMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonTrackRecord">
+ <id column="id" property="id" />
+ <result column="start_time" property="startTime" />
+ <result column="end_time" property="endTime" />
+ <result column="place_work" property="placeWork" />
+ <result column="department" property="department" />
+ <result column="post" property="post" />
+ <result column="remarks" property="remarks" />
+ <result column="create_time" property="createTime" />
+ <result column="create_user" property="createUser" />
+ <result column="user_id" property="userId" />
+ <result column="file_name" property="fileName" />
+ </resultMap>
+
+ <select id="personTrackRecordSelect" resultType="com.yuanchu.mom.pojo.PersonTrackRecord">
+ select cpt.*
+ from cnas_person_track_record cpt
+ left join user u on cpt.user_id = u.id
+ <where>
+ <if test="userId != null and userId != '' and userId != 'null'">
+ and cpt.user_id = #{userId}
+ </if>
+ <if test="departLimsId != null and departLimsId != '' and departLimsId != 'null'">
+ and FIND_IN_SET(#{departLimsId},u.depart_lims_id)
+ </if>
+ </where>
+ </select>
+
+ <select id="personTrackRecordExport" resultMap="BaseResultMap">
+ select *
+ from cnas_person_track_record cpt
+ left join user u on cpt.user_id = u.id
+ <where>
+ <if test="userId != null and userId != '' and userId != 'null'">
+ and cpt.user_id = #{userId}
+ </if>
+ <if test="departLimsId != null and departLimsId != '' and departLimsId != 'null'">
+ and FIND_IN_SET(#{departLimsId},u.depart_lims_id)
+ </if>
+ </where>
+ </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonTrainingDetailedMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonTrainingDetailedMapper.xml
new file mode 100644
index 0000000..aaa318d
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonTrainingDetailedMapper.xml
@@ -0,0 +1,71 @@
+<?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.yuanchu.mom.mapper.PersonTrainingDetailedMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonTrainingDetailed">
+ <id column="id" property="id" />
+ <result column="course_code" property="courseCode" />
+ <result column="training_objectives" property="trainingObjectives" />
+ <result column="training_content" property="trainingContent" />
+ <result column="training_mode" property="trainingMode" />
+ <result column="state" property="state" />
+ <result column="participants" property="participants" />
+ <result column="holding_department" property="holdingDepartment" />
+ <result column="place_training" property="placeTraining" />
+ <result column="training_lecturer_id" property="trainingLecturerId" />
+ <result column="training_date" property="trainingDate" />
+ <result column="opening_time" property="openingTime" />
+ <result column="class_hour" property="classHour" />
+ <result column="remarks" property="remarks" />
+ <result column="create_time" property="createTime" />
+ <result column="create_user" property="createUser" />
+ <result column="update_user" property="updateUser" />
+ <result column="update_time" property="updateTime" />
+ </resultMap>
+
+ <select id="queryTheAnnualPlanDetailsTable" resultType="com.yuanchu.mom.dto.PersonTrainingDetailedDto">
+ SELECT cptd.*,
+ u1.name training_lecturer_name,
+ dl.name holding_department_name, !isnull(cptr.training_record_id) whether_claim
+ FROM cnas_person_training_detailed cptd
+ left join user u1 on cptd.training_lecturer_id = u1.id
+ left join department_lims dl on dl.id = cptd.holding_department
+ left join cnas_person_training_record cptr on cptr.user_id = #{loginUserId} and cptr.course_id = cptd.id
+ <where>
+ <if test="id != null">
+ and cptd.plan_id = #{id}
+ </if>
+ <if test="userId != null">
+ and u1.id = #{userId}
+ </if>
+ <if test="courseCode != null and courseCode != ''">
+ and cptd.course_code like concat('%', #{courseCode}, '%')
+ </if>
+ <if test="trainingLecturerName != null and trainingLecturerName != ''">
+ and u1.name like concat('%', #{trainingLecturerName}, '%')
+ </if>
+ <if test="trainingDate != null and trainingDate != ''">
+ and date_format(cptd.training_date,'%Y-%m-%d') = #{trainingDate}
+ </if>
+ </where>
+ </select>
+
+ <!-- 鏍规嵁涓昏〃id鏌ヨ璇︽儏 -->
+ <select id="selectTrainingList" resultType="com.yuanchu.mom.dto.PersonTrainingDetailedDto">
+ SELECT cptd.*,
+ u1.name training_lecturer_name
+ FROM cnas_person_training_detailed cptd
+ left join user u1 on cptd.training_lecturer_id = u1.id
+ where cptd.plan_id = #{trainingId}
+ </select>
+
+ <!-- 鏌ヨ璇︾粏 -->
+ <select id="selectTrainingDetail" resultType="com.yuanchu.mom.dto.PersonTrainingDetailedDto">
+ SELECT cptd.*,
+ u1.name training_lecturer_name
+ FROM cnas_person_training_detailed cptd
+ left join user u1 on cptd.training_lecturer_id = u1.id
+ where cptd.id = #{id}
+ </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonTrainingMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonTrainingMapper.xml
new file mode 100644
index 0000000..8c7cd23
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonTrainingMapper.xml
@@ -0,0 +1,65 @@
+<?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.yuanchu.mom.mapper.PersonTrainingMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonTraining">
+ <id column="id" property="id" />
+ <result column="file_name" property="fileName" />
+ <result column="compiler_id" property="compilerId" />
+ <result column="compilation_date" property="compilationDate" />
+ <result column="reviewer_id" property="reviewerId" />
+ <result column="audit_date" property="auditDate" />
+ <result column="audit_remarks" property="auditRemarks" />
+ <result column="approver_id" property="approverId" />
+ <result column="approval_remarks" property="approvalRemarks" />
+ <result column="approval_status" property="approvalStatus" />
+ <result column="approval_date" property="approvalDate" />
+ <result column="create_time" property="createTime" />
+ <result column="create_user" property="createUser" />
+ <result column="update_time" property="updateTime" />
+ <result column="update_user" property="updateUser" />
+ </resultMap>
+
+ <!-- 鏍规嵁鍒涘缓浜虹殑閮ㄩ棬绛涢�夋暟鎹紝鍙槸鍒涘缓浜哄彲鑳芥湭鍒嗛厤閮ㄩ棬涔熼渶瑕佹煡鐪� -->
+ <select id="personTrainingSelect" resultType="com.yuanchu.mom.dto.PersonTrainingDto">
+ SELECT
+ cpt.*,
+ u1.name compiler_name,
+ u2.name reviewer_name,
+ u3.name approver_name,
+ u4.name create_user_name
+ FROM
+ cnas_person_training cpt
+ LEFT JOIN user u1 ON cpt.compiler_id = u1.id
+ LEFT JOIN user u2 ON cpt.reviewer_id = u2.id
+ LEFT JOIN user u3 ON cpt.approver_id = u3.id
+ LEFT JOIN user u4 ON cpt.create_user = u4.id
+ <where>
+ <if test="departLimsId != null and departLimsId != ''">
+ and FIND_IN_SET(#{departLimsId}, u4.depart_lims_id)
+ </if>
+ <if test="compilerName != null and compilerName != ''">
+ and u4.name like concat('%', #{compilerName}, '%')
+ </if>
+ </where>
+ union
+ SELECT
+ cpt.*,
+ u1.name compiler_name,
+ u2.name reviewer_name,
+ u3.name approver_name,
+ u4.name create_user_name
+ FROM
+ cnas_person_training cpt
+ LEFT JOIN user u1 ON cpt.compiler_id = u1.id
+ LEFT JOIN user u2 ON cpt.reviewer_id = u2.id
+ LEFT JOIN user u3 ON cpt.approver_id = u3.id
+ LEFT JOIN user u4 ON cpt.create_user = u4.id
+ WHERE
+ u4.depart_lims_id is not null and length(u4.depart_lims_id) = 0
+ <if test="compilerName != null and compilerName != ''">
+ and u4.name like concat('%', #{compilerName}, '%')
+ </if>
+ </select>
+</mapper>
diff --git a/cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml b/cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml
new file mode 100644
index 0000000..724635c
--- /dev/null
+++ b/cnas-personnel/src/main/resources/mapper/PersonTrainingRecordMapper.xml
@@ -0,0 +1,134 @@
+<?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.yuanchu.mom.mapper.PersonTrainingRecordMapper">
+
+ <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+ <resultMap id="BaseResultMap" type="com.yuanchu.mom.pojo.PersonTrainingRecord">
+ <id column="training_record_id" property="trainingRecordId" />
+ <result column="user_id" property="userId" />
+ <result column="course_id" property="courseId" />
+ <result column="examination_results" property="examinationResults" />
+ </resultMap>
+
+ <select id="trainingAndAssessmentRecordsPage" resultType="com.yuanchu.mom.dto.PersonTrainingRecordDto">
+ select cptr.*, u.account, u.name user_name, u.phone, r.name role_name
+ from cnas_person_training_record cptr
+ left join user u on u.id = cptr.user_id
+ left join role r on r.id = u.role_id
+ where cptr.course_id = #{trainingDetailedId}
+ <if test="userName != null and userName != ''">
+ and u.name like concat('%', #{userName}, '%')
+ </if>
+ </select>
+
+ <select id="personnelTrainingPersonnel" resultType="com.yuanchu.mom.dto.PersonTrainingRecordListDto">
+ select u.name, u.account, dl.name depart_lims_name, cpbi.professional_title,
+ cpbi.official_academic_redentials, cpbi.unit_time, u.id user_id
+ from user u
+ left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
+ left join department_lims dl on dl.id = SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1)
+ where u.is_custom = 0
+ <if test="userName != '' and userName != null and userName != 'null'">
+ and u.name like concat('%', #{userName}, '%')
+ </if>
+ <if test="userId != null and userId != ''">
+ and u.id = #{userId}
+ </if>
+ <if test="departLimsId != null and departLimsId != ''">
+ and FIND_IN_SET(#{departLimsId}, u.depart_lims_id)
+ </if>
+ </select>
+
+ <select id="queryPersonnelDetails" resultType="com.yuanchu.mom.dto.TrainingRecordPersonDetailedDto">
+ select cptd.training_date, cptd.training_content, cptd.class_hour, cptr.examination_results, cptd.remarks
+ from cnas_person_training_record cptr
+ inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
+ <where>
+ <if test="userId != null and userId != ''">
+ and cptr.user_id = #{userId}
+ </if>
+ </where>
+ </select>
+
+ <!-- 鏍规嵁璇︽儏id鏌ヨ鍩硅淇℃伅 -->
+ <select id="selectListByTrainingDetailedId" resultType="com.yuanchu.mom.dto.PersonTrainingRecordDto">
+ select cptr.*,
+ u.name userName,
+ dl.name department
+ from cnas_person_training_record cptr
+ left join user u on u.id = cptr.user_id
+ left join department_lims dl on find_in_set(dl.id, u.depart_lims_id) and dl.id != 1
+ where cptr.course_id = #{trainingDetailedId}
+ </select>
+
+ <!-- 鏍规嵁id鏌ヨ浜哄憳淇℃伅 -->
+ <select id="selectUserTraining" resultType="com.yuanchu.mom.dto.PersonTrainingRecordListDto">
+ select u.name,
+ u.account,
+ dl.name depart_lims_name,
+ cpbi.professional_title,
+ cpbi.official_academic_redentials,
+ cpbi.unit_time,
+ cpbi.major1,
+ u.id user_id,
+ DATE_FORMAT(cpbi.unit_time, '%Y-%m-%d') AS unitTimeSting
+ from user u
+ left join cnas_person_basic_info cpbi on cpbi.user_id = u.id
+ left join department_lims dl on dl.id = SUBSTRING_INDEX(SUBSTRING_INDEX(u.depart_lims_id, ',', -2), ',', 1)
+ where u.is_custom = 0
+ and u.id = #{userId}
+ </select>
+
+ <!-- 鏍规嵁鐢ㄦ埛id鏌ヨ浜哄憳璁板綍 -->
+ <select id="selectPersonDetailedDtos" resultType="com.yuanchu.mom.dto.TrainingRecordPersonDetailedDto">
+ select cptd.training_date,
+ cptd.training_content,
+ cptd.class_hour,
+ cptr.examination_results,
+ cptd.remarks,
+ DATE_FORMAT(cptd.training_date, '%Y-%m-%d') AS trainingDateString
+ from cnas_person_training_record cptr
+ inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
+ and cptr.user_id = #{userId}
+ <where>
+ <if test="year!= null and year!= ''">
+ and YEAR(cptd.training_date) = ${year}
+ </if>
+ </where>
+ </select>
+
+ <!--鏍规嵁鐢ㄦ埛id鍜屽勾浠芥煡璇汉鍛樻槑缁� 鍩硅璁板綍-->
+ <select id="queryPersonnelDetailsOfUserIdAndYear"
+ resultType="com.yuanchu.mom.dto.TrainingRecordPersonDetailedDto">
+ select cptd.training_date, cptd.training_content, cptd.class_hour, cptr.examination_results, cptd.remarks
+ from cnas_person_training_record cptr
+ inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
+ <where>
+ <if test="userId != null and userId != ''">
+ and cptr.user_id = #{userId}
+ </if>
+ <if test="year!= null and year!= ''">
+ and YEAR(cptd.training_date) = ${year}
+ </if>
+ </where>
+ </select>
+
+ <!-- 鏍规嵁鐢ㄦ埛id鍜屽勾浠芥煡璇汉鍛樻槑缁� 鍩硅璁板綍瀵煎嚭 -->
+ <select id="selectPersonDetailedDtosByTrainingDate"
+ resultType="com.yuanchu.mom.dto.TrainingRecordPersonDetailedDto">
+ select cptd.training_date,
+ cptd.training_content,
+ cptd.class_hour,
+ cptr.examination_results,
+ cptd.remarks,
+ DATE_FORMAT(cptd.training_date, '%Y-%m-%d') AS trainingDateString
+ from cnas_person_training_record cptr
+ inner join cnas_person_training_detailed cptd on cptd.id = cptr.course_id
+ and cptr.user_id = #{userId}
+ <where>
+ <if test="year!= null and year!= ''">
+ and YEAR(cptd.training_date) = ${year}
+ </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-deal.docx b/cnas-personnel/src/main/resources/static/person-deal.docx
new file mode 100644
index 0000000..5535a00
--- /dev/null
+++ b/cnas-personnel/src/main/resources/static/person-deal.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..8ce7a06
--- /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..82e4ddf
--- /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..8a5a41f
--- /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
diff --git a/cnas-server/src/main/java/com/yuanchu/mom/pojo/DepartmentLims.java b/cnas-server/src/main/java/com/yuanchu/mom/pojo/DepartmentLims.java
index a44d27b..8b7ab79 100644
--- a/cnas-server/src/main/java/com/yuanchu/mom/pojo/DepartmentLims.java
+++ b/cnas-server/src/main/java/com/yuanchu/mom/pojo/DepartmentLims.java
@@ -6,6 +6,7 @@
import java.io.Serializable;
import java.time.LocalDateTime;
+import java.util.List;
/**
* 閮ㄩ棬鏄庣粏
@@ -35,4 +36,7 @@
@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;
+
+ @TableField(exist = false)
+ private List<DepartmentLims> children;
}
\ No newline at end of file
diff --git a/framework/pom.xml b/framework/pom.xml
index c56bafc..0c01a6a 100644
--- a/framework/pom.xml
+++ b/framework/pom.xml
@@ -45,5 +45,17 @@
<version>3.3.3</version>
</dependency>
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-text</artifactId>
+ <version>1.3</version>
+ </dependency>
+
+ <dependency>
+ <groupId>com.google.guava</groupId>
+ <artifactId>guava</artifactId>
+ <version>29.0-android</version> <!-- 璇锋牴鎹渶瑕侀�夋嫨鍚堥�傜殑鐗堟湰 -->
+ </dependency>
+
</dependencies>
</project>
diff --git a/framework/src/main/java/com/yuanchu/mom/numgen/LambdaUtils.java b/framework/src/main/java/com/yuanchu/mom/numgen/LambdaUtils.java
new file mode 100644
index 0000000..7f71990
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/numgen/LambdaUtils.java
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * https://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.yuanchu.mom.numgen;
+
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.core.toolkit.support.ColumnCache;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+
+import java.lang.ref.WeakReference;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static java.util.Locale.ENGLISH;
+
+/**
+ * Lambda 瑙f瀽宸ュ叿绫�
+ *
+ * @author HCL, MieMie
+ * @since 2018-05-10
+ */
+public final class LambdaUtils {
+
+ /**
+ * 瀛楁鏄犲皠
+ */
+ private static final Map<String, Map<String, ColumnCache>> COLUMN_CACHE_MAP = new ConcurrentHashMap<>();
+
+ /**
+ * SerializedLambda 鍙嶅簭鍒楀寲缂撳瓨
+ */
+ private static final Map<String, WeakReference<SerializedLambda>> FUNC_CACHE = new ConcurrentHashMap<>();
+
+ /**
+ * 瑙f瀽 lambda 琛ㄨ揪寮�, 璇ユ柟娉曞彧鏄皟鐢ㄤ簡 {@link SerializedLambda#resolve(SFunction)} 涓殑鏂规硶锛屽湪姝ゅ熀纭�涓婂姞浜嗙紦瀛樸��
+ * 璇ョ紦瀛樺彲鑳戒細鍦ㄤ换鎰忎笉瀹氱殑鏃堕棿琚竻闄�
+ *
+ * @param func 闇�瑕佽В鏋愮殑 lambda 瀵硅薄
+ * @param <T> 绫诲瀷锛岃璋冪敤鐨� Function 瀵硅薄鐨勭洰鏍囩被鍨�
+ * @return 杩斿洖瑙f瀽鍚庣殑缁撴灉
+ * @see SerializedLambda#resolve(SFunction)
+ */
+ public static <T> SerializedLambda resolve(SFunction<T, ?> func) {
+ Class<?> clazz = func.getClass();
+ String canonicalName = clazz.getCanonicalName();
+ return Optional.ofNullable(FUNC_CACHE.get(canonicalName))
+ .map(WeakReference::get)
+ .orElseGet(() -> {
+ SerializedLambda lambda = SerializedLambda.resolve(func);
+ FUNC_CACHE.put(canonicalName, new WeakReference<>(lambda));
+ return lambda;
+ });
+ }
+
+ /**
+ * 鏍煎紡鍖� key 灏嗕紶鍏ョ殑 key 鍙樻洿涓哄ぇ鍐欐牸寮�
+ *
+ * <pre>
+ * Assert.assertEquals("USERID", formatKey("userId"))
+ * </pre>
+ *
+ * @param key key
+ * @return 澶у啓鐨� key
+ */
+ public static String formatKey(String key) {
+ return key.toUpperCase(ENGLISH);
+ }
+
+ /**
+ * 灏嗕紶鍏ョ殑琛ㄤ俊鎭姞鍏ョ紦瀛�
+ *
+ * @param tableInfo 琛ㄤ俊鎭�
+ */
+ public static void installCache(TableInfo tableInfo) {
+ COLUMN_CACHE_MAP.put(tableInfo.getEntityType().getName(), createColumnCacheMap(tableInfo));
+ }
+
+ /**
+ * 缂撳瓨瀹炰綋瀛楁 MAP 淇℃伅
+ *
+ * @param info 琛ㄤ俊鎭�
+ * @return 缂撳瓨 map
+ */
+ private static Map<String, ColumnCache> createColumnCacheMap(TableInfo info) {
+ Map<String, ColumnCache> map = new HashMap<>();
+
+ String kp = info.getKeyProperty();
+ if (StringUtils.isNotBlank(kp)) {
+ map.put(formatKey(kp), new ColumnCache(info.getKeyColumn(), info.getKeySqlSelect()));
+ }
+
+ info.getFieldList().forEach(i ->
+ map.put(formatKey(i.getProperty()), new ColumnCache(i.getColumn(), i.getSqlSelect()))
+ );
+ return map;
+ }
+
+ /**
+ * 鑾峰彇瀹炰綋瀵瑰簲瀛楁 MAP
+ *
+ * @param clazz 瀹炰綋绫�
+ * @return 缂撳瓨 map
+ */
+ public static Map<String, ColumnCache> getColumnMap(Class<?> clazz) {
+ return COLUMN_CACHE_MAP.computeIfAbsent(clazz.getName(), key -> {
+ TableInfo info = TableInfoHelper.getTableInfo(clazz);
+ return info == null ? null : createColumnCacheMap(info);
+ });
+ }
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/numgen/NumberGenerator.java b/framework/src/main/java/com/yuanchu/mom/numgen/NumberGenerator.java
new file mode 100644
index 0000000..c2d0b68
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/numgen/NumberGenerator.java
@@ -0,0 +1,146 @@
+package com.yuanchu.mom.numgen;
+
+import com.baomidou.mybatisplus.core.metadata.TableFieldInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfo;
+import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+import lombok.AllArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.ibatis.reflection.property.PropertyNamer;
+import org.springframework.stereotype.Service;
+
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+/**
+ * 缂栧彿鐢熸垚鍣�
+ *
+ * @Author: zhangxy
+ * @Date: 2020-09-08 16:31
+ */
+@Slf4j
+@Service
+@AllArgsConstructor
+public class NumberGenerator<T> {
+
+ private static Pattern NUMBER_PATTERN = Pattern.compile("(.+)\\((\\d+)\\)");
+
+ private NumberGeneratorModelHelper numberGeneratorModelHelper;
+
+
+ public String getCopyValueOfUniqueField(final String value, SFunction<T, ?> column) {
+ if (value == null) {
+ return null;
+ } else {
+ Matcher matcher = NUMBER_PATTERN.matcher(value);
+ String oldValue = value;
+ int index = 1;
+ if (matcher.matches()) {
+ oldValue = matcher.group(1);
+ index = Integer.valueOf(matcher.group(2)) + 1;
+ }
+
+ NumberTableInfo info = initDbInfo(column);
+ while (true) {
+ String newValue = oldValue + "(" + (index++) + ")";
+ boolean exist = numberGeneratorModelHelper.numberExist(newValue, info);
+ if (!exist) {
+ return newValue;
+ }
+ }
+ }
+ }
+
+
+ /**
+ * 鐢熸垚缂栧彿
+ *
+ * @param numOfDigits
+ * @param column
+ * @return
+ */
+ public String generateNumber(final int numOfDigits, SFunction<T, ?> column) {
+ return generateNumberWithPrefix(numOfDigits, null, column);
+ }
+
+ /**
+ * 鐢熸垚甯﹀墠缂�鐨勭紪鍙�
+ *
+ * @param numOfDigits
+ * @param prefix
+ * @param column
+ * @return
+ */
+ public String generateNumberWithPrefix(final int numOfDigits, final String prefix, SFunction<T, ?> column) {
+ NumberTableInfo info = initDbInfo(column);
+ String generatedNumber = generateNumberWithExtension(info, numOfDigits, prefix, "");
+ return prependPrefix(prefix, generatedNumber);
+ }
+
+
+ /**
+ * 鐢熸垚甯﹀悗缂�鐨勭紪鍙�
+ *
+ * @param numOfDigits
+ * @param suffix
+ * @param column
+ * @return
+ */
+ public String generateNumberWithSuffix(final int numOfDigits, final String suffix, SFunction<T, ?> column) {
+ NumberTableInfo info = initDbInfo(column);
+ String generatedNumber = generateNumberWithExtension(info, numOfDigits, "", suffix);
+ return appendSuffix(suffix, generatedNumber);
+ }
+
+ /**
+ * 鍒濆鍖栨暟鎹簱琛ㄥ悕銆佸瓧娈靛悕
+ *
+ * @param column
+ * @return
+ */
+ private NumberTableInfo initDbInfo(SFunction<T, ?> column) {
+ SerializedLambda ld = LambdaUtils.resolve(column);
+ TableInfo tableInfo = TableInfoHelper.getTableInfo(ld.getImplClass());
+ String fieldName = PropertyNamer.methodToProperty(ld.getImplMethodName());
+ Optional<TableFieldInfo> op = tableInfo.getFieldList().stream().filter(f -> fieldName.equals(f.getProperty())).findFirst();
+ if (!op.isPresent()) {
+ throw new RuntimeException("鑾峰彇鏁版嵁搴撳瓧娈靛嚭閿欙紝璇锋鏌ユ槧灏�");
+ }
+ TableFieldInfo fieldInfo = op.get();
+
+ NumberTableInfo info = new NumberTableInfo();
+ info.setLogicDelete(tableInfo.isLogicDelete());
+ info.setNumberFieldName(fieldInfo.getColumn());
+ info.setTableName(tableInfo.getTableName());
+ return info;
+ }
+
+
+ private String generateNumberWithExtension(NumberTableInfo numberTableInfo, int numOfDigits, String prefix, String suffix) {
+ Long dbMax = numberGeneratorModelHelper.getNumbersProjection(numberTableInfo, prefix, suffix);
+ Long greatestNumber = 0L;
+ if (dbMax != null) {
+ greatestNumber = dbMax;
+ }
+ return String.format("%0" + numOfDigits + "d", greatestNumber + 1);
+ }
+
+ private String prependPrefix(final String prefix, final String generatedNumber) {
+ if (prefix == null) {
+ return generatedNumber;
+ }
+ return prefix + generatedNumber;
+ }
+
+
+ private String appendSuffix(final String suffix, final String generatedNumber) {
+ if (suffix == null) {
+ return generatedNumber;
+ }
+ return generatedNumber + suffix;
+ }
+
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/numgen/NumberGeneratorModelHelper.java b/framework/src/main/java/com/yuanchu/mom/numgen/NumberGeneratorModelHelper.java
new file mode 100644
index 0000000..30fa404
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/numgen/NumberGeneratorModelHelper.java
@@ -0,0 +1,107 @@
+/**
+ * ***************************************************************************
+ * Copyright (c) 2010 Qcadoo Limited
+ * Project: Qcadoo Framework
+ * Version: 1.4
+ * <p>
+ * This file is part of Qcadoo.
+ * <p>
+ * Qcadoo is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation; either version 3 of the License,
+ * or (at your option) any later version.
+ * <p>
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU Affero General Public License for more details.
+ * <p>
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ * ***************************************************************************
+ */
+package com.yuanchu.mom.numgen;
+
+import com.google.common.collect.Maps;
+import lombok.AllArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.text.StringSubstitutor;
+import org.springframework.jdbc.core.JdbcTemplate;
+import org.springframework.stereotype.Service;
+
+import java.util.Map;
+
+/**
+ * @author zhangxy
+ */
+@AllArgsConstructor
+@Service
+public class NumberGeneratorModelHelper {
+
+ private JdbcTemplate jdbcTemplate;
+
+
+ private static final String NUMBER_EXIST_QUERY_TEMPLATE = "select count(*) from ${TABLE_NAME} where ${NUMBER_FIELD}='${VALUE}'";
+
+
+ private static final String GET_NUMBERS_QUERY_TEMPLATE = "select MAX( CAST( "
+ + " coalesce(TRIM(LEADING '0' from ${NUMBER_FIELD}), '0') "
+ + " AS UNSIGNED ) ) "
+ + "from ${TABLE_NAME} where 1=1";
+
+ private static final String GET_PREFIX_AWARE_NUMBERS_QUERY_TEMPLATE = "select MAX( CAST( "
+ + " TRIM(LEADING '0' from SUBSTRING(${NUMBER_FIELD}, ${NUMBER_STARTS_AT})) "
+ + " AS UNSIGNED ) ) "
+ + "from ${TABLE_NAME} where ${NUMBER_FIELD} like '${PREFIX}%'";
+
+ private static final String GET_SUFFIX_AWARE_NUMBERS_QUERY_TEMPLATE = "select MAX( CAST( "
+ + " TRIM(LEADING '0' from SUBSTRING(${NUMBER_FIELD}, 1, POSITION('${SUFFIX}' IN ${NUMBER_FIELD}) - 1)) "
+ + " AS UNSIGNED )) "
+ + "from ${TABLE_NAME} where ${NUMBER_FIELD} like '%${SUFFIX}'";
+
+
+ public boolean numberExist(final String value, final NumberTableInfo numberTableInfo) {
+ Map<String, String> placeholderValues = Maps.newHashMap();
+
+ placeholderValues.put("TABLE_NAME", numberTableInfo.getTableName());
+ placeholderValues.put("NUMBER_FIELD", numberTableInfo.getNumberFieldName());
+ placeholderValues.put("VALUE", value);
+ String query = new StringSubstitutor(placeholderValues, "${", "}").replace(NUMBER_EXIST_QUERY_TEMPLATE);
+ Long count = jdbcTemplate.queryForObject(query, Long.class);
+ return count > 0;
+ }
+
+ public Long getNumbersProjection(final NumberTableInfo numberTableInfo, final String prefix, final String suffix) {
+ String sqlQuery = buildQuery(numberTableInfo, prefix, suffix);
+ return jdbcTemplate.queryForObject(sqlQuery, Long.class);
+ }
+
+ private String buildQuery(final NumberTableInfo numberTableInfo,
+ final String prefix, final String suffix) {
+ Map<String, String> placeholderValues = Maps.newHashMap();
+
+ placeholderValues.put("TABLE_NAME", numberTableInfo.getTableName());
+ placeholderValues.put("NUMBER_FIELD", numberTableInfo.getNumberFieldName());
+
+ String query;
+ if (StringUtils.isNotEmpty(prefix)) {
+ placeholderValues.put("PREFIX", prefix);
+ int prefixLength = StringUtils.length(prefix);
+ placeholderValues.put("NUMBER_STARTS_AT", String.valueOf(prefixLength + 1));
+ query = GET_PREFIX_AWARE_NUMBERS_QUERY_TEMPLATE;
+ } else if (StringUtils.isNotEmpty(suffix)) {
+ placeholderValues.put("SUFFIX", suffix);
+ query = GET_SUFFIX_AWARE_NUMBERS_QUERY_TEMPLATE;
+ } else {
+ query = GET_NUMBERS_QUERY_TEMPLATE;
+ }
+
+ if(numberTableInfo.isLogicDelete()){
+ query += " and active=true";
+ }
+ StringSubstitutor substitutor = new StringSubstitutor(placeholderValues, "${", "}");
+ return substitutor.replace(query);
+ }
+
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/numgen/NumberTableInfo.java b/framework/src/main/java/com/yuanchu/mom/numgen/NumberTableInfo.java
new file mode 100644
index 0000000..5b2c95a
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/numgen/NumberTableInfo.java
@@ -0,0 +1,16 @@
+package com.yuanchu.mom.numgen;
+
+import lombok.Data;
+
+/**
+ * @Author: zhangxy
+ * @Date: 2020-09-11 16:48
+ */
+@Data
+public class NumberTableInfo {
+
+ private String tableName;
+ private String numberFieldName;
+
+ private boolean logicDelete;
+}
diff --git a/framework/src/main/java/com/yuanchu/mom/numgen/SerializedLambda.java b/framework/src/main/java/com/yuanchu/mom/numgen/SerializedLambda.java
new file mode 100644
index 0000000..05faa0e
--- /dev/null
+++ b/framework/src/main/java/com/yuanchu/mom/numgen/SerializedLambda.java
@@ -0,0 +1,143 @@
+/*
+ * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * https://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.yuanchu.mom.numgen;
+
+import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
+import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
+import com.baomidou.mybatisplus.core.toolkit.SerializationUtils;
+import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
+
+import java.io.*;
+
+/**
+ * 杩欎釜绫绘槸浠� {@link java.lang.invoke.SerializedLambda} 閲岄潰 copy 杩囨潵鐨勶紝
+ * 瀛楁淇℃伅瀹屽叏涓�鏍�
+ * <p>璐熻矗灏嗕竴涓敮鎸佸簭鍒楃殑 Function 搴忓垪鍖栦负 SerializedLambda</p>
+ *
+ * @author HCL
+ * @since 2018/05/10
+ */
+public class SerializedLambda implements Serializable {
+
+ private static final long serialVersionUID = 8025925345765570181L;
+
+ private Class<?> capturingClass;
+ private String functionalInterfaceClass;
+ private String functionalInterfaceMethodName;
+ private String functionalInterfaceMethodSignature;
+ private String implClass;
+ private String implMethodName;
+ private String implMethodSignature;
+ private int implMethodKind;
+ private String instantiatedMethodType;
+ private Object[] capturedArgs;
+
+ /**
+ * 閫氳繃鍙嶅簭鍒楀寲杞崲 lambda 琛ㄨ揪寮忥紝璇ユ柟娉曞彧鑳藉簭鍒楀寲 lambda 琛ㄨ揪寮忥紝涓嶈兘搴忓垪鍖栨帴鍙e疄鐜版垨鑰呮甯搁潪 lambda 鍐欐硶鐨勫璞�
+ *
+ * @param lambda lambda瀵硅薄
+ * @return 杩斿洖瑙f瀽鍚庣殑 SerializedLambda
+ */
+ public static SerializedLambda resolve(SFunction<?, ?> lambda) {
+ if (!lambda.getClass().isSynthetic()) {
+ throw ExceptionUtils.mpe("璇ユ柟娉曚粎鑳戒紶鍏� lambda 琛ㄨ揪寮忎骇鐢熺殑鍚堟垚绫�");
+ }
+ try (ObjectInputStream objIn = new ObjectInputStream(new ByteArrayInputStream(SerializationUtils.serialize(lambda))) {
+ @Override
+ protected Class<?> resolveClass(ObjectStreamClass objectStreamClass) throws IOException, ClassNotFoundException {
+ Class<?> clazz;
+ try {
+ clazz = ClassUtils.toClassConfident(objectStreamClass.getName());
+ } catch (Exception ex) {
+ clazz = super.resolveClass(objectStreamClass);
+ }
+ return clazz == java.lang.invoke.SerializedLambda.class ? SerializedLambda.class : clazz;
+ }
+ }) {
+ return (SerializedLambda) objIn.readObject();
+ } catch (ClassNotFoundException | IOException e) {
+ throw ExceptionUtils.mpe("This is impossible to happen", e);
+ }
+ }
+
+ /**
+ * 鑾峰彇鎺ュ彛 class
+ *
+ * @return 杩斿洖 class 鍚嶇О
+ */
+ public String getFunctionalInterfaceClassName() {
+ return normalizedName(functionalInterfaceClass);
+ }
+
+ /**
+ * 鑾峰彇瀹炵幇鐨� class
+ *
+ * @return 瀹炵幇绫�
+ */
+ public Class<?> getImplClass() {
+ return ClassUtils.toClassConfident(getImplClassName());
+ }
+
+ /**
+ * 鑾峰彇 class 鐨勫悕绉�
+ *
+ * @return 绫诲悕
+ */
+ public String getImplClassName() {
+ return normalizedName(implClass);
+ }
+
+ /**
+ * 鑾峰彇瀹炵幇鑰呯殑鏂规硶鍚嶇О
+ *
+ * @return 鏂规硶鍚嶇О
+ */
+ public String getImplMethodName() {
+ return implMethodName;
+ }
+
+ /**
+ * 姝e父鍖栫被鍚嶇О锛屽皢绫诲悕绉颁腑鐨� / 鏇挎崲涓� .
+ *
+ * @param name 鍚嶇О
+ * @return 姝e父鐨勭被鍚�
+ */
+ private String normalizedName(String name) {
+ return name.replace('/', '.');
+ }
+
+ /**
+ * @return 鑾峰彇瀹炰緥鍖栨柟娉曠殑绫诲瀷
+ */
+ public Class<?> getInstantiatedType() {
+ String instantiatedTypeName = normalizedName(instantiatedMethodType.substring(2, instantiatedMethodType.indexOf(';')));
+ return ClassUtils.toClassConfident(instantiatedTypeName);
+ }
+
+ /**
+ * @return 瀛楃涓插舰寮�
+ */
+ @Override
+ public String toString() {
+ String interfaceName = getFunctionalInterfaceClassName();
+ String implName = getImplClassName();
+ return String.format("%s -> %s::%s",
+ interfaceName.substring(interfaceName.lastIndexOf('.') + 1),
+ implName.substring(implName.lastIndexOf('.') + 1),
+ implMethodName);
+ }
+
+}
diff --git a/system-run/pom.xml b/system-run/pom.xml
index 4813ffe..935008a 100644
--- a/system-run/pom.xml
+++ b/system-run/pom.xml
@@ -68,6 +68,11 @@
<artifactId>cnas-resource-require</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
+ <dependency>
+ <groupId>com.yuanchu.mom</groupId>
+ <artifactId>cnas-personnel</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </dependency>
<!--druid-->
<dependency>
diff --git a/system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java b/system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java
index afeeb17..f2b8521 100644
--- a/system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java
+++ b/system-run/src/main/java/com/yuanchu/mom/SystemRunApplication.java
@@ -3,8 +3,10 @@
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.transaction.annotation.EnableTransactionManagement;
+@EnableScheduling
@SpringBootApplication
@MapperScan("com.yuanchu.mom.mapper")// 鎵弿Mybatis涓殑mapper鍖�
@EnableTransactionManagement
--
Gitblit v1.9.3