From b620ed21a126a5a138685e51056b4b8f679bd372 Mon Sep 17 00:00:00 2001
From: zhuo <2089219845@qq.com>
Date: 星期六, 22 二月 2025 20:08:00 +0800
Subject: [PATCH] 人员移植

---
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentLims.java                |   42 +
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java                                  |   48 ++
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/AnnexServiceImpl.java               |   13 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoWorkService.java          |   16 
 pom.xml                                                                                           |    8 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDto.java                      |   47 ++
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/AnnexService.java                        |    7 
 cnas-personnel/src/main/java/com/ruoyi/personnel/dto/UserPageDto.java                             |   24 +
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoFileService.java          |   16 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java     |  336 ++++++++++++++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java                      |   27 +
 ruoyi-system/src/main/resources/mapper/system/DepartmentLimsMapper.xml                            |   25 +
 cnas-personnel/pom.xml                                                                            |   46 ++
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java                    |   53 ++
 cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java        |  225 +++++++++
 ruoyi-admin/pom.xml                                                                               |   12 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoFileMapper.java            |   16 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoFileServiceImpl.java |   20 
 ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentDto.java                 |   23 +
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoWorkMapper.java            |   16 
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoWorkServiceImpl.java |   20 
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfo.java                        |  156 ++++++
 cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java              |   45 +
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/AnnexMapper.java                          |    9 
 cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java                |   42 +
 cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoFile.java                    |   58 ++
 26 files changed, 1,350 insertions(+), 0 deletions(-)

diff --git a/cnas-personnel/pom.xml b/cnas-personnel/pom.xml
new file mode 100644
index 0000000..689a7a9
--- /dev/null
+++ b/cnas-personnel/pom.xml
@@ -0,0 +1,46 @@
+<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.ruoyi</groupId>
+        <artifactId>ruoyi</artifactId>
+        <version>3.8.9</version>
+    </parent>
+
+    <artifactId>cnas-personnel</artifactId>
+
+    <dependencies>
+        <!-- 閫氱敤宸ュ叿-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-common</artifactId>
+        </dependency>
+
+        <!-- 鏍稿績妯″潡-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-framework</artifactId>
+        </dependency>
+
+        <!-- 绯荤粺妯″潡-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>ruoyi-system</artifactId>
+        </dependency>
+
+        <!-- 绯荤粺妯″潡-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>inspect-server</artifactId>
+        </dependency>
+    </dependencies>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+</project>
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java
new file mode 100644
index 0000000..32b9224
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/controller/PersonBasicInfoController.java
@@ -0,0 +1,225 @@
+//package com.ruoyi.personnel.controller;
+//
+//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+//import com.baomidou.mybatisplus.core.metadata.IPage;
+//import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+//import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+//import com.ruoyi.personnel.service.AnnexService;
+//import com.ruoyi.personnel.service.PersonBasicInfoFileService;
+//import com.ruoyi.personnel.service.PersonBasicInfoService;
+//import com.ruoyi.personnel.service.PersonBasicInfoWorkService;
+//import io.swagger.annotations.Api;
+//import io.swagger.annotations.ApiOperation;
+//import org.springframework.web.bind.annotation.RequestMapping;
+//import org.springframework.web.bind.annotation.RestController;
+//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")
+//public class PersonBasicInfoController {
+//
+//    @Resource
+//    private PersonBasicInfoService personBasicInfoService;
+//
+//    @Resource
+//    private PersonBasicInfoFileService personBasicInfoFileService;
+//    @Resource
+//    private PersonBasicInfoWorkService personBasicInfoWorkService;
+//
+//    @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.uploadWordFile(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鍗�")
+//    @GetMapping("/exportPersonBasicInfoById")
+//    public Result exportPersonBasicInfoById(Integer id, HttpServletResponse response) {
+//        return Result.success(personBasicInfoService.exportPersonBasicInfoById(id,response));
+//    }
+//
+//    /**
+//     * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鏂板
+//     * @param userId
+//     * @param file
+//     * @return
+//     */
+//    @ApiOperation(value = "浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鏂板")
+//    @PostMapping("/uploadBasicInfoFile")
+//    public Result<?> uploadBasicInfoFile(Integer userId, MultipartFile file) {
+//        return Result.success(personBasicInfoService.uploadBasicInfoFile(userId, file));
+//    }
+//
+//
+//    /**
+//     * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒楄〃
+//     * @return
+//     */
+//    @ApiOperation(value = "浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒楄〃")
+//    @GetMapping("/getBasicInfoFileList")
+//    public Result<List<PersonBasicInfoFile>> getBasicInfoFileList(Integer userId){
+//        return Result.success(personBasicInfoFileService.list(Wrappers.<PersonBasicInfoFile>lambdaQuery()
+//                .eq(PersonBasicInfoFile::getUserId, userId)));
+//    }
+//
+//    /**
+//     * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒犻櫎
+//     * @return
+//     */
+//    @ApiOperation(value = "浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鍒犻櫎")
+//    @GetMapping("/delBasicInfoFileList")
+//    public Result delBasicInfoFileList(Integer basicInfoFileId){
+//        return Result.success(personBasicInfoFileService.removeById(basicInfoFileId));
+//    }
+//
+//    /**
+//     * 浜哄憳鍩硅鍩烘湰淇℃伅宸ヤ綔缁忓巻鏂板
+//     * @return
+//     */
+//    @ApiOperation(value = "浜哄憳鍩硅鍩烘湰淇℃伅宸ヤ綔缁忓巻鏂板")
+//    @PostMapping("/addBasicInfoWork")
+//    public Result<?> addBasicInfoWork(@RequestBody PersonBasicInfoWork basicInfoWork) {
+//        if (basicInfoWork.getUserId() == null) {
+//            throw new ErrorException("缂哄皯浜哄憳id");
+//        }
+//        basicInfoWork.setUserId(basicInfoWork.getUserId());
+//        return Result.success(personBasicInfoWorkService.save(basicInfoWork));
+//    }
+//
+//
+//    /**
+//     * 浜哄憳宸ヤ綔缁忓巻鍒楄〃
+//     * @return
+//     */
+//    @ApiOperation(value = "浜哄憳宸ヤ綔缁忓巻鍒楄〃")
+//    @GetMapping("/getBasicInfoWorkList")
+//    public Result<List<PersonBasicInfoWork>> getBasicInfoWorkList(Integer userId){
+//        return Result.success(personBasicInfoWorkService.list(Wrappers.<PersonBasicInfoWork>lambdaQuery()
+//                .eq(PersonBasicInfoWork::getUserId, userId)));
+//    }
+//
+//    /**
+//     * 浜哄憳宸ヤ綔缁忓巻鍒犻櫎
+//     * @return
+//     */
+//    @ApiOperation(value = "浜哄憳宸ヤ綔缁忓巻鍒犻櫎")
+//    @GetMapping("/delBasicInfoWorkList")
+//    public Result delBasicInfoWorkList(Integer basicInfoWorkId){
+//        return Result.success(personBasicInfoWorkService.removeById(basicInfoWorkId));
+//    }
+//
+//    /**
+//     * 浜哄憳鍩烘湰淇℃伅闄勪欢鍒犻櫎
+//     * @return
+//     */
+//    @ApiOperation(value = "浜哄憳宸ヤ綔缁忓巻淇敼")
+//    @PostMapping("/updateBasicInfoWorkList")
+//    public Result updateBasicInfoWorkList(@RequestBody PersonBasicInfoWork basicInfoWork){
+//        return Result.success(personBasicInfoWorkService.updateById(basicInfoWork));
+//    }
+//}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDto.java
new file mode 100644
index 0000000..b5cd643
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/PersonBasicInfoDto.java
@@ -0,0 +1,47 @@
+package com.ruoyi.personnel.dto;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.ruoyi.personnel.pojo.PersonBasicInfo;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@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/ruoyi/personnel/dto/UserPageDto.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/UserPageDto.java
new file mode 100644
index 0000000..856b6f4
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/dto/UserPageDto.java
@@ -0,0 +1,24 @@
+package com.ruoyi.personnel.dto;
+
+import com.ruoyi.common.core.domain.entity.User;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserPageDto extends User {
+
+    @ApiModelProperty(value = "鍒涘缓鐢ㄦ埛")
+    private String createUserName;
+
+    @ApiModelProperty(value = "鏇存柊鐢ㄦ埛")
+    private String updateUserName;
+
+    @ApiModelProperty(value = "瑙掕壊")
+    private String roleName;
+
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/AnnexMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/AnnexMapper.java
new file mode 100644
index 0000000..9fee604
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/AnnexMapper.java
@@ -0,0 +1,9 @@
+package com.ruoyi.personnel.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.personnel.pojo.Annex;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface AnnexMapper extends BaseMapper<Annex> {
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoFileMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoFileMapper.java
new file mode 100644
index 0000000..fb0e2f5
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoFileMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.personnel.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.personnel.pojo.PersonBasicInfoFile;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅闄勪欢 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:28:55
+ */
+public interface PersonBasicInfoFileMapper extends BaseMapper<PersonBasicInfoFile> {
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java
new file mode 100644
index 0000000..f23ba5f
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoMapper.java
@@ -0,0 +1,42 @@
+package com.ruoyi.personnel.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.common.core.domain.entity.DepartmentDto;
+import com.ruoyi.personnel.dto.PersonBasicInfoDto;
+import com.ruoyi.personnel.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);
+
+    /**
+     * 浜哄憳鍩烘湰淇℃伅鍒嗛〉鏌ヨ
+     * @param page
+     * @param name
+     * @param departmentId
+     * @return
+     */
+    IPage<Map<String, Object>> selectPersonBasecInfoAndUser(Page page, String name, Integer departmentId);
+
+    /**
+     * 瀵煎嚭鏌ヨ浜哄憳淇℃伅
+     * @param userId
+     * @return
+     */
+    Map<String, Object> selectexportPersonBasic(Integer userId);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoWorkMapper.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoWorkMapper.java
new file mode 100644
index 0000000..df8d2d4
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/mapper/PersonBasicInfoWorkMapper.java
@@ -0,0 +1,16 @@
+package com.ruoyi.personnel.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:45:04
+ */
+public interface PersonBasicInfoWorkMapper extends BaseMapper<PersonBasicInfoWork> {
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java
new file mode 100644
index 0000000..bbf2017
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/Annex.java
@@ -0,0 +1,48 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+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/ruoyi/personnel/pojo/PersonBasicInfo.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfo.java
new file mode 100644
index 0000000..abf3880
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfo.java
@@ -0,0 +1,156 @@
+package com.ruoyi.personnel.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("鑱岀О")
+    @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("澶囨敞")
+    private String remarks;
+
+    @ApiModelProperty("鐢ㄦ埛琛紙user锛塱d")
+    private Integer userId;
+
+    @ApiModelProperty("鍏徃鍚嶇О")
+    private String corporateName;
+
+    @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("鍔冲姩鍏崇郴")
+    private Integer laborRelations;
+
+    @ApiModelProperty("宸ヤ綔鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+    private LocalDateTime workingTime;
+
+    @ApiModelProperty("鍚堝悓鏈夋晥鏈�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+    private LocalDateTime contractLifeTime;
+
+    @ApiModelProperty("绫嶈疮")
+    @ExcelProperty("绫嶈疮")
+    private String nativePlace;
+
+    @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("鍏ュ厷/鍥㈡椂闂�")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @TableField(updateStrategy = FieldStrategy.IGNORED) // 涓虹┖鍙互鏇存柊
+    private LocalDateTime dumplingTime;
+
+    @ApiModelProperty("鏈�楂樺浣�")
+    @ExcelProperty("鏈�楂樺浣�")
+    private String highestDegree;
+
+    @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/ruoyi/personnel/pojo/PersonBasicInfoFile.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoFile.java
new file mode 100644
index 0000000..0b366f8
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoFile.java
@@ -0,0 +1,58 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅闄勪欢
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:28:55
+ */
+@Getter
+@Setter
+@TableName("cnas_person_basic_info_file")
+@ApiModel(value = "PersonBasicInfoFile瀵硅薄", description = "浜哄憳鍩烘湰淇℃伅闄勪欢")
+public class PersonBasicInfoFile implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "basic_info_file_id", type = IdType.AUTO)
+    private Integer basicInfoFileId;
+
+    @ApiModelProperty("浜哄憳鍩烘湰淇℃伅id")
+    private Integer userId;
+
+    @ApiModelProperty("绫诲瀷:1鍥剧墖/2鏂囦欢")
+    private Integer type;
+
+    @ApiModelProperty("闄勪欢璺緞")
+    private String fileUrl;
+
+    @ApiModelProperty("闄勪欢鍚嶇О")
+    private String fileName;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java
new file mode 100644
index 0000000..2d15afa
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/pojo/PersonBasicInfoWork.java
@@ -0,0 +1,53 @@
+package com.ruoyi.personnel.pojo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:45:04
+ */
+@Getter
+@Setter
+@TableName("cnas_person_basic_info_work")
+@ApiModel(value = "PersonBasicInfoWork瀵硅薄", description = "浜哄憳鍩烘湰淇℃伅")
+public class PersonBasicInfoWork implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "basic_info_work_id", type = IdType.AUTO)
+    private Integer basicInfoWorkId;
+
+    @ApiModelProperty("浜哄憳id")
+    private Integer userId;
+
+    @ApiModelProperty("宸ヤ綔缁忓巻")
+    private String workExperience;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/AnnexService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/AnnexService.java
new file mode 100644
index 0000000..8de7b15
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/AnnexService.java
@@ -0,0 +1,7 @@
+package com.ruoyi.personnel.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.personnel.pojo.Annex;
+
+public interface AnnexService extends IService<Annex> {
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoFileService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoFileService.java
new file mode 100644
index 0000000..1fb5ba6
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoFileService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.personnel.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.personnel.pojo.PersonBasicInfoFile;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅闄勪欢 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:28:55
+ */
+public interface PersonBasicInfoFileService extends IService<PersonBasicInfoFile> {
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java
new file mode 100644
index 0000000..fcc4d69
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoService.java
@@ -0,0 +1,45 @@
+package com.ruoyi.personnel.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.common.core.domain.entity.DepartmentDto;
+import com.ruoyi.personnel.dto.PersonBasicInfoDto;
+import com.ruoyi.personnel.dto.UserPageDto;
+import com.ruoyi.personnel.pojo.PersonBasicInfo;
+import org.springframework.web.multipart.MultipartFile;
+
+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);
+
+    /**
+     * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鏂板
+     * @param basicInfoId
+     * @param file
+     * @return
+     */
+    boolean uploadBasicInfoFile(Integer basicInfoId, MultipartFile file);
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoWorkService.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoWorkService.java
new file mode 100644
index 0000000..cfd944f
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/PersonBasicInfoWorkService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.personnel.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:45:04
+ */
+public interface PersonBasicInfoWorkService extends IService<PersonBasicInfoWork> {
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/AnnexServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/AnnexServiceImpl.java
new file mode 100644
index 0000000..d944b3b
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/AnnexServiceImpl.java
@@ -0,0 +1,13 @@
+package com.ruoyi.personnel.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.personnel.mapper.AnnexMapper;
+import com.ruoyi.personnel.pojo.Annex;
+import com.ruoyi.personnel.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/ruoyi/personnel/service/impl/PersonBasicInfoFileServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoFileServiceImpl.java
new file mode 100644
index 0000000..a70f196
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoFileServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.personnel.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.personnel.mapper.PersonBasicInfoFileMapper;
+import com.ruoyi.personnel.pojo.PersonBasicInfoFile;
+import com.ruoyi.personnel.service.PersonBasicInfoFileService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅闄勪欢 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:28:55
+ */
+@Service
+public class PersonBasicInfoFileServiceImpl extends ServiceImpl<PersonBasicInfoFileMapper, PersonBasicInfoFile> implements PersonBasicInfoFileService {
+
+}
diff --git a/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java
new file mode 100644
index 0000000..7d0e695
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoServiceImpl.java
@@ -0,0 +1,336 @@
+//package com.ruoyi.personnel.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.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.ruoyi.common.core.domain.entity.DepartmentDto;
+//import com.ruoyi.common.core.domain.entity.DepartmentLims;
+//import com.ruoyi.common.core.domain.entity.User;
+//import com.ruoyi.common.utils.QueryWrappers;
+//import com.ruoyi.framework.exception.ErrorException;
+//import com.ruoyi.personnel.dto.PersonBasicInfoDto;
+//import com.ruoyi.personnel.dto.UserPageDto;
+//import com.ruoyi.personnel.mapper.AnnexMapper;
+//import com.ruoyi.personnel.mapper.PersonBasicInfoFileMapper;
+//import com.ruoyi.personnel.mapper.PersonBasicInfoMapper;
+//import com.ruoyi.personnel.mapper.PersonBasicInfoWorkMapper;
+//import com.ruoyi.personnel.pojo.Annex;
+//import com.ruoyi.personnel.pojo.PersonBasicInfo;
+//import com.ruoyi.personnel.pojo.PersonBasicInfoFile;
+//import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
+//import com.ruoyi.personnel.service.PersonBasicInfoService;
+//import com.ruoyi.system.mapper.DepartmentLimsMapper;
+//import com.ruoyi.system.mapper.UserMapper;
+//import org.apache.poi.xwpf.usermodel.XWPFTable;
+//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 org.springframework.web.multipart.MultipartFile;
+//
+//import javax.annotation.Resource;
+//import javax.servlet.http.HttpServletResponse;
+//import java.io.File;
+//import java.io.IOException;
+//import java.io.InputStream;
+//import java.io.OutputStream;
+//import java.net.URLEncoder;
+//import java.time.LocalDateTime;
+//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("${file.path}")
+//    private String imgUrl;
+//    @Value("${wordUrl}")
+//    private String wordUrl;
+//    @Resource
+//    private UserMapper userMapper;
+//    @Resource
+//    private AnnexMapper annexMapper;
+//    @Resource
+//    private PersonBasicInfoFileMapper personBasicInfoFileMapper;
+//    @Resource
+//    private PersonBasicInfoWorkMapper personBasicInfoWorkMapper;
+//
+//    @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.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) {
+//        Map<String, Object> userMap = baseMapper.selectexportPersonBasic(id);
+//        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, id));
+//        // 宸ヤ綔缁忓巻
+//        List<PersonBasicInfoWork> personBasicInfoWorks = personBasicInfoWorkMapper.selectList(Wrappers.<PersonBasicInfoWork>lambdaQuery()
+//                .eq(PersonBasicInfoWork::getUserId, id));
+//
+//        List<PersonBasicInfoWorkDto> workList = personBasicInfoWorks.stream().map(basicInfoWork -> {
+//            PersonBasicInfoWorkDto personBasicInfoWorkDto = new PersonBasicInfoWorkDto();
+//            personBasicInfoWorkDto.setWorkExperience(basicInfoWork.getWorkExperience());
+//            personBasicInfoWorkDto.setFill("涓昏宸ヤ綔缁忓巻\nMain work experience鈭�1");
+//            return personBasicInfoWorkDto;
+//        }).collect(Collectors.toList());
+//
+//        // 妫�鏌ュ垪琛ㄩ暱搴﹀苟濉厖绌哄璞�
+//        while (annexList.size() < 10) {
+//            annexList.add(new Annex());
+//        }
+//
+//        // 妫�鏌ュ垪琛ㄩ暱搴﹀苟濉厖绌哄璞�
+//        while (workList.size() < 4) {
+//            workList.add(new PersonBasicInfoWorkDto());
+//        }
+//
+//        // 鑾峰彇璺緞
+//        InputStream inputStream = this.getClass().getResourceAsStream("/static/person-basic-info.docx");
+//        Configure configure = Configure.builder()
+//                .bind("annexList", new HackLoopTableRenderPolicy())
+//                .bind("workList", new HackLoopTableRenderPolicy())
+//                .build();
+//        XWPFTemplate template = XWPFTemplate.compile(inputStream, configure).render(
+//                new HashMap<String, Object>() {{
+//                    put("user", userMap);
+//                    put("annexList", annexList);
+//                    put("workList", workList);
+//                }});
+//
+//        try {
+//            response.setContentType("application/msword");
+//            String fileName = URLEncoder.encode(
+//                    userMap.get("name") + "浜哄憳妗f", "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("瀵煎嚭澶辫触");
+//        }
+//
+//        return null;
+//    }
+//
+//    /**
+//     * 浜哄憳鍩硅鍩烘湰淇℃伅闄勪欢鏂板
+//     * @param userId
+//     * @param file
+//     * @return
+//     */
+//    @Override
+//    public boolean uploadBasicInfoFile(Integer userId, MultipartFile file) {
+//        if (userId == null) {
+//            throw new ErrorException("缂哄皯浜哄憳id");
+//        }
+//
+//        String urlString;
+//        String pathName;
+//        String path;
+//        String filename = file.getOriginalFilename();
+//        String contentType = file.getContentType();
+//        PersonBasicInfoFile personBasicInfoFile = new PersonBasicInfoFile();
+//        personBasicInfoFile.setUserId(userId);
+//        personBasicInfoFile.setFileName(filename);
+//        if (contentType != null && contentType.startsWith("image/")) {
+//            // 鏄浘鐗�
+//            path = imgUrl;
+//            personBasicInfoFile.setType(1);
+//        } else {
+//            // 鏄枃浠�
+//            path = wordUrl;
+//            personBasicInfoFile.setType(2);
+//        }
+//        try {
+//            File realpath = new File(path);
+//            if (!realpath.exists()) {
+//                realpath.mkdirs();
+//            }
+//            pathName = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyMMddHHmmss")) + "_" + file.getOriginalFilename();
+//            urlString = realpath + "/" + pathName;
+//            file.transferTo(new File(urlString));
+//            personBasicInfoFile.setFileUrl(pathName);
+//            personBasicInfoFileMapper.insert(personBasicInfoFile);
+//            return true;
+//        } catch (Exception e) {
+//            e.printStackTrace();
+//            System.err.println("闄勪欢涓婁紶閿欒");
+//            return false;
+//        }
+//    }
+//
+//    /**
+//     * 閫掑綊鏌ヨ瀛愯妭鐐�
+//     * @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/ruoyi/personnel/service/impl/PersonBasicInfoWorkServiceImpl.java b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoWorkServiceImpl.java
new file mode 100644
index 0000000..3ed8882
--- /dev/null
+++ b/cnas-personnel/src/main/java/com/ruoyi/personnel/service/impl/PersonBasicInfoWorkServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.personnel.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.personnel.mapper.PersonBasicInfoWorkMapper;
+import com.ruoyi.personnel.pojo.PersonBasicInfoWork;
+import com.ruoyi.personnel.service.PersonBasicInfoWorkService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 浜哄憳鍩烘湰淇℃伅 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 姹熻嫃榈烽洀缃戠粶绉戞妧鏈夐檺鍏徃
+ * @since 2025-01-09 05:45:04
+ */
+@Service
+public class PersonBasicInfoWorkServiceImpl extends ServiceImpl<PersonBasicInfoWorkMapper, PersonBasicInfoWork> implements PersonBasicInfoWorkService {
+
+}
diff --git a/pom.xml b/pom.xml
index 9d36e98..0dbf825 100644
--- a/pom.xml
+++ b/pom.xml
@@ -278,6 +278,13 @@
                 <version>${ruoyi.version}</version>
             </dependency>
 
+            <!--cnas浜哄憳-->
+            <dependency>
+                <groupId>com.ruoyi</groupId>
+                <artifactId>cnas-personnel</artifactId>
+                <version>${ruoyi.version}</version>
+            </dependency>
+
             <!-- minio -->
             <dependency>
                 <groupId>io.minio</groupId>
@@ -392,6 +399,7 @@
         <module>cnas-manage</module>
         <module>cnas-device</module>
         <module>cnas-process</module>
+        <module>cnas-personnel</module>
     </modules>
     <packaging>pom</packaging>
 
diff --git a/ruoyi-admin/pom.xml b/ruoyi-admin/pom.xml
index 7dd0fdb..485e28d 100644
--- a/ruoyi-admin/pom.xml
+++ b/ruoyi-admin/pom.xml
@@ -97,6 +97,18 @@
             <artifactId>cnas-device</artifactId>
         </dependency>
 
+        <!--cnas璧勬簮瑕佹眰-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>cnas-process</artifactId>
+        </dependency>
+
+        <!--cnas浜哄憳-->
+        <dependency>
+            <groupId>com.ruoyi</groupId>
+            <artifactId>cnas-personnel</artifactId>
+        </dependency>
+
 
     </dependencies>
 
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentDto.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentDto.java
new file mode 100644
index 0000000..9fa947a
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentDto.java
@@ -0,0 +1,23 @@
+package com.ruoyi.common.core.domain.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DepartmentDto {
+
+    private Integer id;
+
+    private String name;
+
+    private Integer userId;
+
+    private Integer fatherId;
+
+    private List<DepartmentDto> children;
+}
diff --git a/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentLims.java b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentLims.java
new file mode 100644
index 0000000..4ec52e2
--- /dev/null
+++ b/ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/DepartmentLims.java
@@ -0,0 +1,42 @@
+package com.ruoyi.common.core.domain.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 閮ㄩ棬鏄庣粏
+ * @TableName department_lims
+ */
+@TableName(value ="department_lims")
+@Data
+public class DepartmentLims implements Serializable {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("鍚嶇О")
+    private String name;
+
+    @ApiModelProperty("鐖剁骇id")
+    private Integer fatherId;
+
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @TableField(exist = false)
+    private List<DepartmentLims> children;
+}
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java
new file mode 100644
index 0000000..3e2a51e
--- /dev/null
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/DepartmentLimsMapper.java
@@ -0,0 +1,27 @@
+package com.ruoyi.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.common.core.domain.entity.DepartmentDto;
+import com.ruoyi.common.core.domain.entity.DepartmentLims;
+
+import java.util.List;
+
+/**
+* @author z1292
+* @description 閽堝琛ㄣ�恉epartment_lims(閮ㄩ棬鏄庣粏)銆戠殑鏁版嵁搴撴搷浣淢apper
+* @createDate 2024-05-22 14:08:17
+* @Entity com.yuanchu.mom.pojo.DepartmentLims
+*/
+public interface DepartmentLimsMapper extends BaseMapper<DepartmentLims> {
+
+    //鑾峰彇閮ㄩ棬鏍�
+    List<DepartmentDto> selectDepartment();
+
+    //鏍规嵁閮ㄩ棬id,鏌ヨ浠栫殑鎵�鏈夊瓙绫籭d
+    List<Integer> selectSonById(Integer id);
+
+}
+
+
+
+
diff --git a/ruoyi-system/src/main/resources/mapper/system/DepartmentLimsMapper.xml b/ruoyi-system/src/main/resources/mapper/system/DepartmentLimsMapper.xml
new file mode 100644
index 0000000..48c7d39
--- /dev/null
+++ b/ruoyi-system/src/main/resources/mapper/system/DepartmentLimsMapper.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.system.mapper.DepartmentLimsMapper">
+
+
+    <select id="selectDepartment" resultType="com.ruoyi.common.core.domain.entity.DepartmentDto">
+        SELECT id, name, father_id
+        FROM department_lims
+    </select>
+
+    <select id="selectSonById" resultType="java.lang.Integer">
+        SELECT au.id
+        FROM (SELECT * FROM department_lims WHERE father_id IS NOT NULL) au,
+             (SELECT @father_id := #{id}) pd
+        WHERE FIND_IN_SET(father_id, @father_id) > 0
+                  AND @father_id := concat(@father_id, ',', id)
+        UNION
+        SELECT id
+        FROM department_lims
+        WHERE id = #{id}
+        ORDER BY id
+    </select>
+</mapper>

--
Gitblit v1.9.3