zhaopeiqing 7 місяців тому
батько
коміт
db1f75884b
43 змінених файлів з 1928 додано та 564 видалено
  1. 2 0
      yudao-module-personnel/pom.xml
  2. 1 1
      yudao-module-personnel/yudao-module-employee-api/src/main/java/cn/iocoder/yudao/module/employee/api/EmployeeApi.java
  3. 4 3
      yudao-module-personnel/yudao-module-employee-api/src/main/java/cn/iocoder/yudao/module/employee/enums/ErrorCodeConstants.java
  4. 6 6
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/api/employeeinfo/EmployeeApiImpl.java
  5. 0 59
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeContractInfoRespVO.java
  6. 0 49
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeContractInfoSaveReqVO.java
  7. 4 4
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/EmployeeInfoController.java
  8. 98 0
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/info/EmployeeInfoHistoryController.java
  9. 166 0
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/info/vo/EmployeeInfoHistoryPageReqVO.java
  10. 204 0
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/info/vo/EmployeeInfoHistoryRespVO.java
  11. 160 0
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/info/vo/EmployeeInfoHistorySaveReqVO.java
  12. 54 41
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeInfoPageReqVO.java
  13. 1 1
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeInfoQueryReqVO.java
  14. 74 58
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeInfoRespVO.java
  15. 58 45
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeInfoSaveReqVO.java
  16. 53 37
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/dataobject/employeeinfo/EmployeeInfoDO.java
  17. 212 0
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/dataobject/info/EmployeeInfoHistoryDO.java
  18. 0 33
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/mysql/employeeinfo/EmployeeContractInfoMapper.java
  19. 69 0
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/mysql/info/EmployeeInfoHistoryMapper.java
  20. 20 15
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/mysql/employeeinfo/EmployeeInfoMapper.java
  21. 0 56
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/employeeinfo/EmployeeContractInfoService.java
  22. 0 71
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/employeeinfo/EmployeeContractInfoServiceImpl.java
  23. 56 0
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/info/EmployeeInfoHistoryService.java
  24. 80 0
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/info/EmployeeInfoHistoryServiceImpl.java
  25. 4 4
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/employeeinfo/EmployeeInfoService.java
  26. 20 5
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/employeeinfo/EmployeeInfoServiceImpl.java
  27. 1 1
      yudao-module-personnel/yudao-module-employee-biz/src/main/resources/mapper/employeeinfo/EmployeeInfoMapper.xml
  28. 4 16
      yudao-module-personnel/yudao-module-employee-biz/src/test/java/cn/iocoder/yudao/module/employee/service/employeeinfo/EmployeeInfoServiceImplTest.java
  29. 34 0
      yudao-module-personnel/yudao-module-relations-api/pom.xml
  30. 11 0
      yudao-module-personnel/yudao-module-relations-api/src/main/java/cn/iocoder/yudao/module/relations/api/RelationsApi.java
  31. 16 0
      yudao-module-personnel/yudao-module-relations-api/src/main/java/cn/iocoder/yudao/module/relations/enums/ErrorCodeConstants.java
  32. 96 0
      yudao-module-personnel/yudao-module-relations-biz/pom.xml
  33. 15 0
      yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/api/contractinfo/RelationsApiImpl.java
  34. 29 28
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/EmployeeContractInfoController.java
  35. 25 13
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeContractInfoPageReqVO.java
  36. 78 0
      yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/controller/admin/contractinfo/vo/RelationsContractInfoRespVO.java
  37. 62 0
      yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/controller/admin/contractinfo/vo/RelationsContractInfoSaveReqVO.java
  38. 32 16
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/dataobject/employeeinfo/EmployeeContractInfoDO.java
  39. 39 0
      yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/dal/mysql/contractinfo/RelationsContractInfoMapper.java
  40. 56 0
      yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/service/contractinfo/RelationsContractInfoService.java
  41. 71 0
      yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/service/contractinfo/RelationsContractInfoServiceImpl.java
  42. 12 0
      yudao-module-personnel/yudao-module-relations-biz/src/main/resources/mapper/contractinfo/RelationsContractInfoMapper.xml
  43. 1 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java

+ 2 - 0
yudao-module-personnel/pom.xml

@@ -20,6 +20,8 @@
     <modules>
         <module>yudao-module-employee-api</module>
         <module>yudao-module-employee-biz</module>
+        <module>yudao-module-relations-api</module>
+        <module>yudao-module-relations-biz</module>
     </modules>
 
 </project>

+ 1 - 1
yudao-module-personnel/yudao-module-employee-api/src/main/java/cn/iocoder/yudao/module/employee/api/EmployeeApi.java

@@ -9,7 +9,7 @@ import javax.validation.Valid;
 /**
  * 员工 API 接口
  *
- * @author 芋道源码
+ * @author zhaopq
  */
 public interface EmployeeApi {
 

+ 4 - 3
yudao-module-personnel/yudao-module-employee-api/src/main/java/cn/iocoder/yudao/module/employee/enums/ErrorCodeConstants.java

@@ -3,15 +3,16 @@ package cn.iocoder.yudao.module.employee.enums;
 import cn.iocoder.yudao.framework.common.exception.ErrorCode;
 
 /**
- * System 错误码枚举类
+ * Employee 错误码枚举类
  *
- * system 系统,使用 1-002-000-000 段
+ * employee 系统,使用 1-010-000-000 段
  */
 public interface ErrorCodeConstants {
 
     // ========== 员工模块 1-002-000-000 ==========
     ErrorCode EMPLOYEE_INFO_NOT_EXISTS = new ErrorCode(1_010_000_000, "员工信息不存在");
     ErrorCode EMPLOYEE_INFO_EXISTS = new ErrorCode(1_010_000_001, "员工信息已存在");
-    ErrorCode EMPLOYEE_CONTRACT_INFO_NOT_EXISTS = new ErrorCode(1_010_000_002, "员工合同信息不存在");
+    ErrorCode EMPLOYEE_INFO_HISTORY_NOT_EXISTS = new ErrorCode(1_010_000_002, "员工信息历史不存在");
+    ErrorCode EMPLOYEE_CONTRACT_INFO_NOT_EXISTS = new ErrorCode(1_010_000_003, "员工合同信息不存在");
 
 }

+ 6 - 6
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/api/employeeinfo/EmployeeApiImpl.java

@@ -1,14 +1,14 @@
-package cn.iocoder.yudao.module.employee.api.employeeinfo;
+package cn.iocoder.yudao.module.employee.api.info;
 
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.module.employee.api.EmployeeApi;
 import cn.iocoder.yudao.module.employee.api.dto.EmployeeCreateReqDTO;
 import cn.iocoder.yudao.module.employee.api.dto.EmployeeQueryReqDTO;
 import cn.iocoder.yudao.module.employee.api.dto.EmployeeRespDTO;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.EmployeeInfoQueryReqVO;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.EmployeeInfoSaveReqVO;
-import cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo.EmployeeInfoDO;
-import cn.iocoder.yudao.module.employee.service.employeeinfo.EmployeeInfoService;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoQueryReqVO;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoSaveReqVO;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
+import cn.iocoder.yudao.module.employee.service.info.EmployeeInfoService;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -16,7 +16,7 @@ import javax.annotation.Resource;
 /**
  * 员工 API 实现类
  *
- * @author 芋道源码
+ * @author zhaopq
  */
 @Service
 public class EmployeeApiImpl implements EmployeeApi {

+ 0 - 59
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeContractInfoRespVO.java

@@ -1,59 +0,0 @@
-package cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
-import java.time.LocalDate;
-import java.time.LocalDateTime;
-import com.alibaba.excel.annotation.*;
-
-@Schema(description = "管理后台 - 员工合同信息 Response VO")
-@Data
-@ExcelIgnoreUnannotated
-public class EmployeeContractInfoRespVO {
-
-    @Schema(description = "合同ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4905")
-    @ExcelProperty("合同ID")
-    private Long id;
-
-    @Schema(description = "业务UUID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8684")
-    @ExcelProperty("业务UUID")
-    private String infoId;
-
-    @Schema(description = "合同编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED)
-    @ExcelProperty("合同编号,唯一")
-    private String contractNumber;
-
-    @Schema(description = "员工ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19556")
-    @ExcelProperty("员工ID")
-    private String employeeId;
-
-    @Schema(description = "合同开始日期", requiredMode = Schema.RequiredMode.REQUIRED)
-    @ExcelProperty("合同开始日期")
-    private LocalDate contractStartDate;
-
-    @Schema(description = "合同结束日期")
-    @ExcelProperty("合同结束日期")
-    private LocalDate contractEndDate;
-
-    @Schema(description = "工作内容")
-    @ExcelProperty("工作内容")
-    private String jobContent;
-
-    @Schema(description = "合同状态", example = "1")
-    @ExcelProperty("合同状态")
-    private String contractStatus;
-
-    @Schema(description = "备注信息")
-    @ExcelProperty("备注信息")
-    private String remarks;
-
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
-    @ExcelProperty("状态")
-    private Integer status;
-
-    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
-    @ExcelProperty("创建时间")
-    private LocalDateTime createTime;
-
-}

+ 0 - 49
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeContractInfoSaveReqVO.java

@@ -1,49 +0,0 @@
-package cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo;
-
-import io.swagger.v3.oas.annotations.media.Schema;
-import lombok.*;
-
-import javax.validation.constraints.NotEmpty;
-import javax.validation.constraints.NotNull;
-import java.time.LocalDate;
-
-@Schema(description = "管理后台 - 员工合同信息新增/修改 Request VO")
-@Data
-public class EmployeeContractInfoSaveReqVO {
-
-    @Schema(description = "合同ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4905")
-    private Long id;
-
-    @Schema(description = "业务UUID", requiredMode = Schema.RequiredMode.REQUIRED, example = "8684")
-    @NotEmpty(message = "业务UUID不能为空")
-    private String infoId;
-
-    @Schema(description = "合同编号,唯一", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotEmpty(message = "合同编号,唯一不能为空")
-    private String contractNumber;
-
-    @Schema(description = "员工ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19556")
-    @NotEmpty(message = "员工ID不能为空")
-    private String employeeId;
-
-    @Schema(description = "合同开始日期", requiredMode = Schema.RequiredMode.REQUIRED)
-    @NotNull(message = "合同开始日期不能为空")
-    private LocalDate contractStartDate;
-
-    @Schema(description = "合同结束日期")
-    private LocalDate contractEndDate;
-
-    @Schema(description = "工作内容")
-    private String jobContent;
-
-    @Schema(description = "合同状态", example = "1")
-    private String contractStatus;
-
-    @Schema(description = "备注信息")
-    private String remarks;
-
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
-    @NotNull(message = "状态不能为空")
-    private Integer status;
-
-}

+ 4 - 4
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/EmployeeInfoController.java

@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.employee.controller.admin.employeeinfo;
+package cn.iocoder.yudao.module.employee.controller.admin.info;
 
 
 import java.util.*;
@@ -11,9 +11,9 @@ import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.*;
-import cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo.EmployeeInfoDO;
-import cn.iocoder.yudao.module.employee.service.employeeinfo.EmployeeInfoService;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.*;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
+import cn.iocoder.yudao.module.employee.service.info.EmployeeInfoService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;

+ 98 - 0
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/info/EmployeeInfoHistoryController.java

@@ -0,0 +1,98 @@
+package cn.iocoder.yudao.module.employee.controller.admin.info;
+
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoHistoryPageReqVO;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoHistoryRespVO;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoHistorySaveReqVO;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoHistoryDO;
+import cn.iocoder.yudao.module.employee.service.info.EmployeeInfoHistoryService;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.security.access.prepost.PreAuthorize;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.Operation;
+
+import java.util.*;
+import java.io.IOException;
+
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
+
+import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+
+import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+
+import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
+
+
+@Tag(name = "管理后台 - 员工信息历史")
+@RestController
+@RequestMapping("/presonnel/employee-history")
+@Validated
+public class EmployeeInfoHistoryController {
+
+    @Resource
+    private EmployeeInfoHistoryService infoHistoryService;
+
+    @PostMapping("/create")
+    @Operation(summary = "创建员工信息历史")
+    @PreAuthorize("@ss.hasPermission('employee:info-history:create')")
+    public CommonResult<Long> createInfoHistory(@Valid @RequestBody EmployeeInfoHistorySaveReqVO createReqVO) {
+        return success(infoHistoryService.createInfoHistory(createReqVO));
+    }
+
+    @PutMapping("/update")
+    @Operation(summary = "更新员工信息历史")
+    @PreAuthorize("@ss.hasPermission('employee:info-history:update')")
+    public CommonResult<Boolean> updateInfoHistory(@Valid @RequestBody EmployeeInfoHistorySaveReqVO updateReqVO) {
+        infoHistoryService.updateInfoHistory(updateReqVO);
+        return success(true);
+    }
+
+    @DeleteMapping("/delete")
+    @Operation(summary = "删除员工信息历史")
+    @Parameter(name = "id", description = "编号", required = true)
+    @PreAuthorize("@ss.hasPermission('employee:info-history:delete')")
+    public CommonResult<Boolean> deleteInfoHistory(@RequestParam("id") Long id) {
+        infoHistoryService.deleteInfoHistory(id);
+        return success(true);
+    }
+
+    @GetMapping("/get")
+    @Operation(summary = "获得员工信息历史")
+    @Parameter(name = "id", description = "编号", required = true, example = "1024")
+    @PreAuthorize("@ss.hasPermission('employee:info-history:query')")
+    public CommonResult<EmployeeInfoHistoryRespVO> getInfoHistory(@RequestParam("id") Long id) {
+        EmployeeInfoHistoryDO infoHistory = infoHistoryService.getInfoHistory(id);
+        return success(BeanUtils.toBean(infoHistory, EmployeeInfoHistoryRespVO.class));
+    }
+
+    @GetMapping("/page")
+    @Operation(summary = "获得员工信息历史分页")
+    @PreAuthorize("@ss.hasPermission('employee:info-history:query')")
+    public CommonResult<PageResult<EmployeeInfoHistoryRespVO>> getInfoHistoryPage(@Valid EmployeeInfoHistoryPageReqVO pageReqVO) {
+        PageResult<EmployeeInfoHistoryDO> pageResult = infoHistoryService.getInfoHistoryPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, EmployeeInfoHistoryRespVO.class));
+    }
+
+    @GetMapping("/export-excel")
+    @Operation(summary = "导出员工信息历史 Excel")
+    @PreAuthorize("@ss.hasPermission('employee:info-history:export')")
+    @ApiAccessLog(operateType = EXPORT)
+    public void exportInfoHistoryExcel(@Valid EmployeeInfoHistoryPageReqVO pageReqVO,
+              HttpServletResponse response) throws IOException {
+        pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
+        List<EmployeeInfoHistoryDO> list = infoHistoryService.getInfoHistoryPage(pageReqVO).getList();
+        // 导出 Excel
+        ExcelUtils.write(response, "员工信息历史.xls", "数据", EmployeeInfoHistoryRespVO.class,
+                        BeanUtils.toBean(list, EmployeeInfoHistoryRespVO.class));
+    }
+
+}

+ 166 - 0
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/info/vo/EmployeeInfoHistoryPageReqVO.java

@@ -0,0 +1,166 @@
+package cn.iocoder.yudao.module.employee.controller.admin.info.vo;
+
+import lombok.*;
+
+import java.time.LocalDate;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import cn.iocoder.yudao.framework.common.pojo.PageParam;
+import java.math.BigDecimal;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+
+import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
+
+@Schema(description = "管理后台 - 员工信息历史分页 Request VO")
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+public class EmployeeInfoHistoryPageReqVO extends PageParam {
+
+    @Schema(description = "业务UUID", example = "4007")
+    private String infoId;
+
+    @Schema(description = "姓名", example = "李四")
+    private String name;
+
+    @Schema(description = "部门ID", example = "18657")
+    private Long deptId;
+
+    @Schema(description = "部门名称", example = "李四")
+    private String deptName;
+
+    @Schema(description = "职位编号", example = "1434")
+    private Long postId;
+
+    @Schema(description = "职位名称")
+    private String position;
+
+    @Schema(description = "员工编号")
+    private String employeeNumber;
+
+    @Schema(description = "入职时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] entryDate;
+
+    @Schema(description = "试用期到期时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] probationEndDate;
+
+    @Schema(description = "离职时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] departureDate;
+
+    @Schema(description = "离职原因", example = "不喜欢")
+    private String resignationReason;
+
+    @Schema(description = "员工状态", example = "2")
+    private String employeeStatus;
+
+    @Schema(description = "性别")
+    private String gender;
+
+    @Schema(description = "电子邮箱")
+    private String email;
+
+    @Schema(description = "手机号")
+    private String phone;
+
+    @Schema(description = "身份证号")
+    private String idCardNumber;
+
+    @Schema(description = "身份证地址")
+    private String idCardAddress;
+
+    @Schema(description = "户口类型", example = "1")
+    private String householdType;
+
+    @Schema(description = "户口所在地")
+    private String householdLocation;
+
+    @Schema(description = "最高学历")
+    private String educationLevel;
+
+    @Schema(description = "毕业院校")
+    private String graduationSchool;
+
+    @Schema(description = "毕业时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] graduationDate;
+
+    @Schema(description = "银行卡名称", example = "张三")
+    private String bankCardName;
+
+    @Schema(description = "银行卡卡号")
+    private String bankCardNumber;
+
+    @Schema(description = "年假基准天数")
+    private Integer baseAnnualLeave;
+
+    @Schema(description = "剩余年假天数")
+    private Integer remainingAnnualLeave;
+
+    @Schema(description = "出生日期")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] birthDate;
+
+    @Schema(description = "婚姻状况", example = "1")
+    private String marriageStatus;
+
+    @Schema(description = "工作地点")
+    private String workLocation;
+
+    @Schema(description = "专业")
+    private String major;
+
+    @Schema(description = "参加工作时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] workStartDate;
+
+    @Schema(description = "薪酬")
+    private BigDecimal salary;
+
+    @Schema(description = "岗位薪资")
+    private BigDecimal positionSalary;
+
+    @Schema(description = "项目津贴")
+    private BigDecimal projectAllowance;
+
+    @Schema(description = "特殊岗位津贴")
+    private BigDecimal specialPositionAllowance;
+
+    @Schema(description = "外籍津贴")
+    private BigDecimal foreignAllowance;
+
+    @Schema(description = "午餐补助")
+    private BigDecimal lunchSubsidy;
+
+    @Schema(description = "特别津贴")
+    private BigDecimal specialAllowance;
+
+    @Schema(description = "补贴")
+    private BigDecimal subsidy;
+
+    @Schema(description = "年终奖")
+    private BigDecimal yearEndBonus;
+
+    @Schema(description = "头像地址")
+    private String avatar;
+
+    @Schema(description = "状态", example = "2")
+    private Integer status;
+
+    @Schema(description = "创建时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDateTime[] createTime;
+
+    @Schema(description = "租户编号", example = "10115")
+    private Long tenantId;
+
+    @Schema(description = "用户ID", example = "4877")
+    private Long userId;
+
+    @Schema(description = "关联员工ID", example = "4352")
+    private Long employeeId;
+
+}

+ 204 - 0
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/info/vo/EmployeeInfoHistoryRespVO.java

@@ -0,0 +1,204 @@
+package cn.iocoder.yudao.module.employee.controller.admin.info.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.time.LocalDate;
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 员工信息历史 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class EmployeeInfoHistoryRespVO {
+
+    @Schema(description = "自增ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14132")
+    @ExcelProperty("自增ID")
+    private Long id;
+
+    @Schema(description = "业务UUID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4007")
+    @ExcelProperty("业务UUID")
+    private String infoId;
+
+    @Schema(description = "姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @ExcelProperty("姓名")
+    private String name;
+
+    @Schema(description = "部门ID", example = "18657")
+    @ExcelProperty("部门ID")
+    private Long deptId;
+
+    @Schema(description = "部门名称", example = "李四")
+    @ExcelProperty("部门名称")
+    private String deptName;
+
+    @Schema(description = "职位编号", example = "1434")
+    @ExcelProperty("职位编号")
+    private Long postId;
+
+    @Schema(description = "职位名称")
+    @ExcelProperty("职位名称")
+    private String position;
+
+    @Schema(description = "员工编号")
+    @ExcelProperty("员工编号")
+    private String employeeNumber;
+
+    @Schema(description = "入职时间")
+    @ExcelProperty("入职时间")
+    private LocalDate entryDate;
+
+    @Schema(description = "试用期到期时间")
+    @ExcelProperty("试用期到期时间")
+    private LocalDate probationEndDate;
+
+    @Schema(description = "离职时间")
+    @ExcelProperty("离职时间")
+    private LocalDate departureDate;
+
+    @Schema(description = "离职原因", example = "不喜欢")
+    @ExcelProperty("离职原因")
+    private String resignationReason;
+
+    @Schema(description = "员工状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("员工状态")
+    private String employeeStatus;
+
+    @Schema(description = "性别")
+    @ExcelProperty("性别")
+    private String gender;
+
+    @Schema(description = "电子邮箱")
+    @ExcelProperty("电子邮箱")
+    private String email;
+
+    @Schema(description = "手机号")
+    @ExcelProperty("手机号")
+    private String phone;
+
+    @Schema(description = "身份证号")
+    @ExcelProperty("身份证号")
+    private String idCardNumber;
+
+    @Schema(description = "身份证地址")
+    @ExcelProperty("身份证地址")
+    private String idCardAddress;
+
+    @Schema(description = "户口类型", example = "1")
+    @ExcelProperty("户口类型")
+    private String householdType;
+
+    @Schema(description = "户口所在地")
+    @ExcelProperty("户口所在地")
+    private String householdLocation;
+
+    @Schema(description = "最高学历")
+    @ExcelProperty("最高学历")
+    private String educationLevel;
+
+    @Schema(description = "毕业院校")
+    @ExcelProperty("毕业院校")
+    private String graduationSchool;
+
+    @Schema(description = "毕业时间")
+    @ExcelProperty("毕业时间")
+    private LocalDate graduationDate;
+
+    @Schema(description = "银行卡名称", example = "张三")
+    @ExcelProperty("银行卡名称")
+    private String bankCardName;
+
+    @Schema(description = "银行卡卡号")
+    @ExcelProperty("银行卡卡号")
+    private String bankCardNumber;
+
+    @Schema(description = "年假基准天数")
+    @ExcelProperty("年假基准天数")
+    private Integer baseAnnualLeave;
+
+    @Schema(description = "剩余年假天数")
+    @ExcelProperty("剩余年假天数")
+    private Integer remainingAnnualLeave;
+
+    @Schema(description = "出生日期")
+    @ExcelProperty("出生日期")
+    private LocalDate birthDate;
+
+    @Schema(description = "婚姻状况", example = "1")
+    @ExcelProperty("婚姻状况")
+    private String marriageStatus;
+
+    @Schema(description = "工作地点")
+    @ExcelProperty("工作地点")
+    private String workLocation;
+
+    @Schema(description = "专业")
+    @ExcelProperty("专业")
+    private String major;
+
+    @Schema(description = "参加工作时间")
+    @ExcelProperty("参加工作时间")
+    private LocalDate workStartDate;
+
+    @Schema(description = "薪酬")
+    @ExcelProperty("薪酬")
+    private BigDecimal salary;
+
+    @Schema(description = "岗位薪资")
+    @ExcelProperty("岗位薪资")
+    private BigDecimal positionSalary;
+
+    @Schema(description = "项目津贴")
+    @ExcelProperty("项目津贴")
+    private BigDecimal projectAllowance;
+
+    @Schema(description = "特殊岗位津贴")
+    @ExcelProperty("特殊岗位津贴")
+    private BigDecimal specialPositionAllowance;
+
+    @Schema(description = "外籍津贴")
+    @ExcelProperty("外籍津贴")
+    private BigDecimal foreignAllowance;
+
+    @Schema(description = "午餐补助")
+    @ExcelProperty("午餐补助")
+    private BigDecimal lunchSubsidy;
+
+    @Schema(description = "特别津贴")
+    @ExcelProperty("特别津贴")
+    private BigDecimal specialAllowance;
+
+    @Schema(description = "补贴")
+    @ExcelProperty("补贴")
+    private BigDecimal subsidy;
+
+    @Schema(description = "年终奖")
+    @ExcelProperty("年终奖")
+    private BigDecimal yearEndBonus;
+
+    @Schema(description = "头像地址")
+    @ExcelProperty("头像地址")
+    private String avatar;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @ExcelProperty("状态")
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "租户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10115")
+    @ExcelProperty("租户编号")
+    private Long tenantId;
+
+    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4877")
+    @ExcelProperty("用户ID")
+    private Long userId;
+
+    @Schema(description = "关联员工ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4352")
+    @ExcelProperty("关联员工ID")
+    private Long employeeId;
+
+}

+ 160 - 0
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/info/vo/EmployeeInfoHistorySaveReqVO.java

@@ -0,0 +1,160 @@
+package cn.iocoder.yudao.module.employee.controller.admin.info.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.time.LocalDate;
+
+@Schema(description = "管理后台 - 员工信息历史新增/修改 Request VO")
+@Data
+public class EmployeeInfoHistorySaveReqVO {
+
+    @Schema(description = "自增ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14132")
+    private Long id;
+
+    @Schema(description = "业务UUID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4007")
+    @NotEmpty(message = "业务UUID不能为空")
+    private String infoId;
+
+    @Schema(description = "姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @NotEmpty(message = "姓名不能为空")
+    private String name;
+
+    @Schema(description = "部门ID", example = "18657")
+    private Long deptId;
+
+    @Schema(description = "部门名称", example = "李四")
+    private String deptName;
+
+    @Schema(description = "职位编号", example = "1434")
+    private Long postId;
+
+    @Schema(description = "职位名称")
+    private String position;
+
+    @Schema(description = "员工编号")
+    private String employeeNumber;
+
+    @Schema(description = "入职时间")
+    private LocalDate entryDate;
+
+    @Schema(description = "试用期到期时间")
+    private LocalDate probationEndDate;
+
+    @Schema(description = "离职时间")
+    private LocalDate departureDate;
+
+    @Schema(description = "离职原因", example = "不喜欢")
+    private String resignationReason;
+
+    @Schema(description = "员工状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotEmpty(message = "员工状态不能为空")
+    private String employeeStatus;
+
+    @Schema(description = "性别")
+    private String gender;
+
+    @Schema(description = "电子邮箱")
+    private String email;
+
+    @Schema(description = "手机号")
+    private String phone;
+
+    @Schema(description = "身份证号")
+    private String idCardNumber;
+
+    @Schema(description = "身份证地址")
+    private String idCardAddress;
+
+    @Schema(description = "户口类型", example = "1")
+    private String householdType;
+
+    @Schema(description = "户口所在地")
+    private String householdLocation;
+
+    @Schema(description = "最高学历")
+    private String educationLevel;
+
+    @Schema(description = "毕业院校")
+    private String graduationSchool;
+
+    @Schema(description = "毕业时间")
+    private LocalDate graduationDate;
+
+    @Schema(description = "银行卡名称", example = "张三")
+    private String bankCardName;
+
+    @Schema(description = "银行卡卡号")
+    private String bankCardNumber;
+
+    @Schema(description = "年假基准天数")
+    private Integer baseAnnualLeave;
+
+    @Schema(description = "剩余年假天数")
+    private Integer remainingAnnualLeave;
+
+    @Schema(description = "出生日期")
+    private LocalDate birthDate;
+
+    @Schema(description = "婚姻状况", example = "1")
+    private String marriageStatus;
+
+    @Schema(description = "工作地点")
+    private String workLocation;
+
+    @Schema(description = "专业")
+    private String major;
+
+    @Schema(description = "参加工作时间")
+    private LocalDate workStartDate;
+
+    @Schema(description = "薪酬")
+    private BigDecimal salary;
+
+    @Schema(description = "岗位薪资")
+    private BigDecimal positionSalary;
+
+    @Schema(description = "项目津贴")
+    private BigDecimal projectAllowance;
+
+    @Schema(description = "特殊岗位津贴")
+    private BigDecimal specialPositionAllowance;
+
+    @Schema(description = "外籍津贴")
+    private BigDecimal foreignAllowance;
+
+    @Schema(description = "午餐补助")
+    private BigDecimal lunchSubsidy;
+
+    @Schema(description = "特别津贴")
+    private BigDecimal specialAllowance;
+
+    @Schema(description = "补贴")
+    private BigDecimal subsidy;
+
+    @Schema(description = "年终奖")
+    private BigDecimal yearEndBonus;
+
+    @Schema(description = "头像地址")
+    private String avatar;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+    @Schema(description = "租户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "10115")
+    @NotNull(message = "租户编号不能为空")
+    private Long tenantId;
+
+    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4877")
+    @NotNull(message = "用户ID不能为空")
+    private Long userId;
+
+    @Schema(description = "关联员工ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "4352")
+    @NotNull(message = "关联员工ID不能为空")
+    private Long employeeId;
+
+}

+ 54 - 41
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeInfoPageReqVO.java

@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo;
+package cn.iocoder.yudao.module.employee.controller.admin.info.vo;
 
 import lombok.*;
 
@@ -17,32 +17,26 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @ToString(callSuper = true)
 public class EmployeeInfoPageReqVO extends PageParam {
 
-    @Schema(description = "业务UUID", example = "19517")
+    @Schema(description = "业务UUID", example = "1987")
     private String infoId;
 
-    @Schema(description = "员工编号")
-    private String employeeNumber;
-
-    @Schema(description = "姓名", example = "李四")
+    @Schema(description = "姓名", example = "赵六")
     private String name;
 
-    @Schema(description = "部门ID", example = "17351")
+    @Schema(description = "部门ID", example = "22378")
     private Long deptId;
 
-    @Schema(description = "手机号")
-    private String phone;
+    @Schema(description = "部门名称", example = "芋艿")
+    private String deptName;
 
-    @Schema(description = "头像地址")
-    private String avatar;
-
-    @Schema(description = "电子邮箱")
-    private String email;
+    @Schema(description = "职位编号", example = "1056")
+    private Long postId;
 
-    @Schema(description = "职位")
+    @Schema(description = "职位名称")
     private String position;
 
-    @Schema(description = "职位编号", example = "7080")
-    private Long postId;
+    @Schema(description = "员工编号")
+    private String employeeNumber;
 
     @Schema(description = "入职时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@@ -52,21 +46,24 @@ public class EmployeeInfoPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDate[] probationEndDate;
 
-    @Schema(description = "工作地点")
-    private String workLocation;
+    @Schema(description = "离职时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] departureDate;
+
+    @Schema(description = "离职原因", example = "不香")
+    private String resignationReason;
 
     @Schema(description = "员工状态", example = "2")
-    private Integer employeeStatus;
+    private String employeeStatus;
 
     @Schema(description = "性别")
     private String gender;
 
-    @Schema(description = "出生日期")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDate[] birthDate;
+    @Schema(description = "电子邮箱")
+    private String email;
 
-    @Schema(description = "婚姻状况", example = "1")
-    private String marriageStatus;
+    @Schema(description = "手机号")
+    private String phone;
 
     @Schema(description = "身份证号")
     private String idCardNumber;
@@ -74,18 +71,15 @@ public class EmployeeInfoPageReqVO extends PageParam {
     @Schema(description = "身份证地址")
     private String idCardAddress;
 
-    @Schema(description = "户口类型", example = "1")
+    @Schema(description = "户口类型", example = "2")
     private String householdType;
 
     @Schema(description = "户口所在地")
     private String householdLocation;
 
-    @Schema(description = "学历")
+    @Schema(description = "最高学历")
     private String educationLevel;
 
-    @Schema(description = "专业")
-    private String major;
-
     @Schema(description = "毕业院校")
     private String graduationSchool;
 
@@ -93,18 +87,34 @@ public class EmployeeInfoPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDate[] graduationDate;
 
-    @Schema(description = "参加工作时间")
+    @Schema(description = "银行卡名称", example = "张三")
+    private String bankCardName;
+
+    @Schema(description = "银行卡卡号")
+    private String bankCardNumber;
+
+    @Schema(description = "年假基准天数")
+    private Integer baseAnnualLeave;
+
+    @Schema(description = "剩余年假天数")
+    private Integer remainingAnnualLeave;
+
+    @Schema(description = "出生日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDate[] workStartDate;
+    private LocalDate[] birthDate;
 
-    @Schema(description = "年假天数")
-    private Integer annualLeaveDays;
+    @Schema(description = "婚姻状况", example = "2")
+    private String marriageStatus;
+
+    @Schema(description = "工作地点")
+    private String workLocation;
 
-    @Schema(description = "工资卡银行")
-    private String salaryBank;
+    @Schema(description = "专业")
+    private String major;
 
-    @Schema(description = "工资卡号")
-    private String salaryCardNumber;
+    @Schema(description = "参加工作时间")
+    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
+    private LocalDate[] workStartDate;
 
     @Schema(description = "薪酬")
     private BigDecimal salary;
@@ -133,17 +143,20 @@ public class EmployeeInfoPageReqVO extends PageParam {
     @Schema(description = "年终奖")
     private BigDecimal yearEndBonus;
 
-    @Schema(description = "状态", example = "1")
+    @Schema(description = "头像地址")
+    private String avatar;
+
+    @Schema(description = "状态", example = "2")
     private Integer status;
 
     @Schema(description = "创建时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
-    @Schema(description = "租户编码", example = "14244")
+    @Schema(description = "租户编号", example = "27933")
     private Long tenantId;
 
-    @Schema(description = "用户ID", example = "14244")
+    @Schema(description = "用户ID", example = "12259")
     private Long userId;
 
 }

+ 1 - 1
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeInfoQueryReqVO.java

@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo;
+package cn.iocoder.yudao.module.employee.controller.admin.info.vo;
 
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import io.swagger.v3.oas.annotations.media.Schema;

+ 74 - 58
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeInfoRespVO.java

@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo;
+package cn.iocoder.yudao.module.employee.controller.admin.info.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
@@ -12,47 +12,39 @@ import com.alibaba.excel.annotation.*;
 @ExcelIgnoreUnannotated
 public class EmployeeInfoRespVO {
 
-    @Schema(description = "员工ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20870")
+    @Schema(description = "员工ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10984")
     @ExcelProperty("员工ID")
     private Long id;
 
-    @Schema(description = "业务UUID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19517")
+    @Schema(description = "业务UUID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1987")
     @ExcelProperty("业务UUID")
     private String infoId;
 
-    @Schema(description = "员工编号", requiredMode = Schema.RequiredMode.REQUIRED)
-    @ExcelProperty("员工编号")
-    private String employeeNumber;
-
-    @Schema(description = "姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @Schema(description = "姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
     @ExcelProperty("姓名")
     private String name;
 
-    @Schema(description = "部门ID", example = "17351")
+    @Schema(description = "部门ID", example = "22378")
     @ExcelProperty("部门ID")
     private Long deptId;
 
-    @Schema(description = "手机号")
-    @ExcelProperty("手机号")
-    private String phone;
-
-    @Schema(description = "头像地址")
-    @ExcelProperty("头像地址")
-    private String avatar;
+    @Schema(description = "部门名称", example = "芋艿")
+    @ExcelProperty("部门名称")
+    private String deptName;
 
-    @Schema(description = "电子邮箱")
-    @ExcelProperty("电子邮箱")
-    private String email;
+    @Schema(description = "职位编号", example = "1056")
+    @ExcelProperty("职位编号")
+    private Long postId;
 
-    @Schema(description = "职位")
-    @ExcelProperty("职位")
+    @Schema(description = "职位名称")
+    @ExcelProperty("职位名称")
     private String position;
 
-    @Schema(description = "职位编号", example = "7080")
-    @ExcelProperty("职位编号")
-    private Long postId;
+    @Schema(description = "员工编号")
+    @ExcelProperty("员工编号")
+    private String employeeNumber;
 
-    @Schema(description = "入职时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "入职时间")
     @ExcelProperty("入职时间")
     private LocalDate entryDate;
 
@@ -60,25 +52,29 @@ public class EmployeeInfoRespVO {
     @ExcelProperty("试用期到期时间")
     private LocalDate probationEndDate;
 
-    @Schema(description = "工作地点")
-    @ExcelProperty("工作地点")
-    private String workLocation;
+    @Schema(description = "离职时间")
+    @ExcelProperty("离职时间")
+    private LocalDate departureDate;
+
+    @Schema(description = "离职原因", example = "不香")
+    @ExcelProperty("离职原因")
+    private String resignationReason;
 
     @Schema(description = "员工状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
     @ExcelProperty("员工状态")
-    private Integer employeeStatus;
+    private String employeeStatus;
 
     @Schema(description = "性别")
     @ExcelProperty("性别")
     private String gender;
 
-    @Schema(description = "出生日期")
-    @ExcelProperty("出生日期")
-    private LocalDate birthDate;
+    @Schema(description = "电子邮箱")
+    @ExcelProperty("电子邮箱")
+    private String email;
 
-    @Schema(description = "婚姻状况", example = "1")
-    @ExcelProperty("婚姻状况")
-    private String marriageStatus;
+    @Schema(description = "手机号")
+    @ExcelProperty("手机号")
+    private String phone;
 
     @Schema(description = "身份证号")
     @ExcelProperty("身份证号")
@@ -88,7 +84,7 @@ public class EmployeeInfoRespVO {
     @ExcelProperty("身份证地址")
     private String idCardAddress;
 
-    @Schema(description = "户口类型", example = "1")
+    @Schema(description = "户口类型", example = "2")
     @ExcelProperty("户口类型")
     private String householdType;
 
@@ -96,14 +92,10 @@ public class EmployeeInfoRespVO {
     @ExcelProperty("户口所在地")
     private String householdLocation;
 
-    @Schema(description = "学历")
-    @ExcelProperty("学历")
+    @Schema(description = "最高学历")
+    @ExcelProperty("最高学历")
     private String educationLevel;
 
-    @Schema(description = "专业")
-    @ExcelProperty("专业")
-    private String major;
-
     @Schema(description = "毕业院校")
     @ExcelProperty("毕业院校")
     private String graduationSchool;
@@ -112,21 +104,41 @@ public class EmployeeInfoRespVO {
     @ExcelProperty("毕业时间")
     private LocalDate graduationDate;
 
-    @Schema(description = "参加工作时间")
-    @ExcelProperty("参加工作时间")
-    private LocalDate workStartDate;
+    @Schema(description = "银行卡名称", example = "张三")
+    @ExcelProperty("银行卡名称")
+    private String bankCardName;
+
+    @Schema(description = "银行卡卡号")
+    @ExcelProperty("银行卡卡号")
+    private String bankCardNumber;
+
+    @Schema(description = "年假基准天数")
+    @ExcelProperty("年假基准天数")
+    private Integer baseAnnualLeave;
+
+    @Schema(description = "剩余年假天数")
+    @ExcelProperty("剩余年假天数")
+    private Integer remainingAnnualLeave;
+
+    @Schema(description = "出生日期")
+    @ExcelProperty("出生日期")
+    private LocalDate birthDate;
 
-    @Schema(description = "年假天数")
-    @ExcelProperty("年假天数")
-    private Integer annualLeaveDays;
+    @Schema(description = "婚姻状况", example = "2")
+    @ExcelProperty("婚姻状况")
+    private String marriageStatus;
+
+    @Schema(description = "工作地点")
+    @ExcelProperty("工作地点")
+    private String workLocation;
 
-    @Schema(description = "工资卡银行")
-    @ExcelProperty("工资卡银行")
-    private String salaryBank;
+    @Schema(description = "专业")
+    @ExcelProperty("专业")
+    private String major;
 
-    @Schema(description = "工资卡号")
-    @ExcelProperty("工资卡号")
-    private String salaryCardNumber;
+    @Schema(description = "参加工作时间")
+    @ExcelProperty("参加工作时间")
+    private LocalDate workStartDate;
 
     @Schema(description = "薪酬")
     @ExcelProperty("薪酬")
@@ -164,7 +176,11 @@ public class EmployeeInfoRespVO {
     @ExcelProperty("年终奖")
     private BigDecimal yearEndBonus;
 
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @Schema(description = "头像地址")
+    @ExcelProperty("头像地址")
+    private String avatar;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
     @ExcelProperty("状态")
     private Integer status;
 
@@ -172,11 +188,11 @@ public class EmployeeInfoRespVO {
     @ExcelProperty("创建时间")
     private LocalDateTime createTime;
 
-    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14244")
-    @ExcelProperty("租户编")
+    @Schema(description = "租户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "27933")
+    @ExcelProperty("租户编")
     private Long tenantId;
 
-    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14244")
+    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12259")
     @ExcelProperty("用户ID")
     private Long userId;
 

+ 58 - 45
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeInfoSaveReqVO.java

@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo;
+package cn.iocoder.yudao.module.employee.controller.admin.info.vo;
 
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.*;
@@ -12,58 +12,56 @@ import java.time.LocalDate;
 @Data
 public class EmployeeInfoSaveReqVO {
 
-    @Schema(description = "员工ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "20870")
+    @Schema(description = "员工ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "10984")
     private Long id;
 
-    @Schema(description = "业务UUID", requiredMode = Schema.RequiredMode.REQUIRED, example = "19517")
+    @Schema(description = "业务UUID", requiredMode = Schema.RequiredMode.REQUIRED, example = "1987")
+    @NotEmpty(message = "业务UUID不能为空")
     private String infoId;
 
-    @Schema(description = "员工编号", requiredMode = Schema.RequiredMode.REQUIRED)
-    private String employeeNumber;
-
-    @Schema(description = "姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "李四")
+    @Schema(description = "姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六")
     @NotEmpty(message = "姓名不能为空")
     private String name;
 
-    @Schema(description = "部门ID", example = "17351")
+    @Schema(description = "部门ID", example = "22378")
     private Long deptId;
 
-    @Schema(description = "手机号")
-    private String phone;
+    @Schema(description = "部门名称", example = "芋艿")
+    private String deptName;
 
-    @Schema(description = "头像地址")
-    private String avatar;
-
-    @Schema(description = "电子邮箱")
-    private String email;
+    @Schema(description = "职位编号", example = "1056")
+    private Long postId;
 
-    @Schema(description = "职位")
+    @Schema(description = "职位名称")
     private String position;
 
-    @Schema(description = "职位编号", example = "7080")
-    private Long postId;
+    @Schema(description = "员工编号")
+    private String employeeNumber;
 
-    @Schema(description = "入职时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @Schema(description = "入职时间")
     private LocalDate entryDate;
 
     @Schema(description = "试用期到期时间")
     private LocalDate probationEndDate;
 
-    @Schema(description = "工作地点")
-    private String workLocation;
+    @Schema(description = "离职时间")
+    private LocalDate departureDate;
+
+    @Schema(description = "离职原因", example = "不香")
+    private String resignationReason;
 
     @Schema(description = "员工状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
-//    @NotEmpty(message = "员工状态不能为空")
-    private Integer employeeStatus;
+    @NotEmpty(message = "员工状态不能为空")
+    private String employeeStatus;
 
     @Schema(description = "性别")
     private String gender;
 
-    @Schema(description = "出生日期")
-    private LocalDate birthDate;
+    @Schema(description = "电子邮箱")
+    private String email;
 
-    @Schema(description = "婚姻状况", example = "1")
-    private String marriageStatus;
+    @Schema(description = "手机号")
+    private String phone;
 
     @Schema(description = "身份证号")
     private String idCardNumber;
@@ -71,35 +69,47 @@ public class EmployeeInfoSaveReqVO {
     @Schema(description = "身份证地址")
     private String idCardAddress;
 
-    @Schema(description = "户口类型", example = "1")
+    @Schema(description = "户口类型", example = "2")
     private String householdType;
 
     @Schema(description = "户口所在地")
     private String householdLocation;
 
-    @Schema(description = "学历")
+    @Schema(description = "最高学历")
     private String educationLevel;
 
-    @Schema(description = "专业")
-    private String major;
-
     @Schema(description = "毕业院校")
     private String graduationSchool;
 
     @Schema(description = "毕业时间")
     private LocalDate graduationDate;
 
-    @Schema(description = "参加工作时间")
-    private LocalDate workStartDate;
+    @Schema(description = "银行卡名称", example = "张三")
+    private String bankCardName;
+
+    @Schema(description = "银行卡卡号")
+    private String bankCardNumber;
+
+    @Schema(description = "年假基准天数")
+    private Integer baseAnnualLeave;
+
+    @Schema(description = "剩余年假天数")
+    private Integer remainingAnnualLeave;
+
+    @Schema(description = "出生日期")
+    private LocalDate birthDate;
 
-    @Schema(description = "年假天数")
-    private Integer annualLeaveDays;
+    @Schema(description = "婚姻状况", example = "2")
+    private String marriageStatus;
 
-    @Schema(description = "工资卡银行")
-    private String salaryBank;
+    @Schema(description = "工作地点")
+    private String workLocation;
 
-    @Schema(description = "工资卡号")
-    private String salaryCardNumber;
+    @Schema(description = "专业")
+    private String major;
+
+    @Schema(description = "参加工作时间")
+    private LocalDate workStartDate;
 
     @Schema(description = "薪酬")
     private BigDecimal salary;
@@ -128,15 +138,18 @@ public class EmployeeInfoSaveReqVO {
     @Schema(description = "年终奖")
     private BigDecimal yearEndBonus;
 
-    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-//    @NotNull(message = "状态不能为空")
+    @Schema(description = "头像地址")
+    private String avatar;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "2")
+    @NotNull(message = "状态不能为空")
     private Integer status;
 
-    @Schema(description = "租户编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "14244")
-    @NotNull(message = "租户编不能为空")
+    @Schema(description = "租户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "27933")
+    @NotNull(message = "租户编不能为空")
     private Long tenantId;
 
-    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "14244")
+    @Schema(description = "用户ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "12259")
     @NotNull(message = "用户ID不能为空")
     private Long userId;
 

+ 53 - 37
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/dataobject/employeeinfo/EmployeeInfoDO.java

@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo;
+package cn.iocoder.yudao.module.employee.dal.dataobject.info;
 
 import lombok.*;
 
@@ -31,10 +31,6 @@ public class EmployeeInfoDO extends BaseDO {
      * 业务UUID
      */
     private String infoId;
-    /**
-     * 员工编号
-     */
-    private String employeeNumber;
     /**
      * 姓名
      */
@@ -44,25 +40,21 @@ public class EmployeeInfoDO extends BaseDO {
      */
     private Long deptId;
     /**
-     * 手机号
+     * 部门名称
      */
-    private String phone;
+    private String deptName;
     /**
-     * 头像地址
-     */
-    private String avatar;
-    /**
-     * 电子邮箱
+     * 职位编号
      */
-    private String email;
+    private Long postId;
     /**
-     * 职位
+     * 职位名称
      */
     private String position;
     /**
-     * 职位编号
+     * 员工编号
      */
-    private Long postId;
+    private String employeeNumber;
     /**
      * 入职时间
      */
@@ -72,25 +64,29 @@ public class EmployeeInfoDO extends BaseDO {
      */
     private LocalDate probationEndDate;
     /**
-     * 工作地点
+     * 离职时间
      */
-    private String workLocation;
+    private LocalDate departureDate;
+    /**
+     * 离职原因
+     */
+    private String resignationReason;
     /**
      * 员工状态
      */
-    private Integer employeeStatus;
+    private String employeeStatus;
     /**
      * 性别
      */
     private String gender;
     /**
-     * 出生日期
+     * 电子邮箱
      */
-    private LocalDate birthDate;
+    private String email;
     /**
-     * 婚姻状况
+     * 手机号
      */
-    private String marriageStatus;
+    private String phone;
     /**
      * 身份证号
      */
@@ -108,13 +104,9 @@ public class EmployeeInfoDO extends BaseDO {
      */
     private String householdLocation;
     /**
-     * 学历
+     * 最高学历
      */
     private String educationLevel;
-    /**
-     * 专业
-     */
-    private String major;
     /**
      * 毕业院校
      */
@@ -124,21 +116,41 @@ public class EmployeeInfoDO extends BaseDO {
      */
     private LocalDate graduationDate;
     /**
-     * 参加工作时间
+     * 银行卡名称
      */
-    private LocalDate workStartDate;
+    private String bankCardName;
+    /**
+     * 银行卡卡号
+     */
+    private String bankCardNumber;
+    /**
+     * 年假基准天数
+     */
+    private Integer baseAnnualLeave;
+    /**
+     * 剩余年假天数
+     */
+    private Integer remainingAnnualLeave;
+    /**
+     * 出生日期
+     */
+    private LocalDate birthDate;
     /**
-     * 年假天数
+     * 婚姻状况
      */
-    private Integer annualLeaveDays;
+    private String marriageStatus;
     /**
-     * 工资卡银行
+     * 工作地点
      */
-    private String salaryBank;
+    private String workLocation;
     /**
-     * 工资卡号
+     * 专业
      */
-    private String salaryCardNumber;
+    private String major;
+    /**
+     * 参加工作时间
+     */
+    private LocalDate workStartDate;
     /**
      * 薪酬
      */
@@ -175,12 +187,16 @@ public class EmployeeInfoDO extends BaseDO {
      * 年终奖
      */
     private BigDecimal yearEndBonus;
+    /**
+     * 头像地址
+     */
+    private String avatar;
     /**
      * 状态
      */
     private Integer status;
     /**
-     * 租户编
+     * 租户编
      */
     private Long tenantId;
     /**

+ 212 - 0
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/dataobject/info/EmployeeInfoHistoryDO.java

@@ -0,0 +1,212 @@
+package cn.iocoder.yudao.module.employee.dal.dataobject.info;
+
+import lombok.*;
+
+import java.time.LocalDate;
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.*;
+import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
+
+/**
+ * 员工信息历史 DO
+ *
+ * @author zhaopq
+ */
+@TableName("employee_info_history")
+@KeySequence("employee_info_history_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@Data
+@EqualsAndHashCode(callSuper = true)
+@ToString(callSuper = true)
+@Builder
+@NoArgsConstructor
+@AllArgsConstructor
+public class EmployeeInfoHistoryDO extends BaseDO {
+
+    /**
+     * 自增ID
+     */
+    @TableId
+    private Long id;
+    /**
+     * 业务UUID
+     */
+    private String infoId;
+    /**
+     * 姓名
+     */
+    private String name;
+    /**
+     * 部门ID
+     */
+    private Long deptId;
+    /**
+     * 部门名称
+     */
+    private String deptName;
+    /**
+     * 职位编号
+     */
+    private Long postId;
+    /**
+     * 职位名称
+     */
+    private String position;
+    /**
+     * 员工编号
+     */
+    private String employeeNumber;
+    /**
+     * 入职时间
+     */
+    private LocalDate entryDate;
+    /**
+     * 试用期到期时间
+     */
+    private LocalDate probationEndDate;
+    /**
+     * 离职时间
+     */
+    private LocalDate departureDate;
+    /**
+     * 离职原因
+     */
+    private String resignationReason;
+    /**
+     * 员工状态
+     */
+    private String employeeStatus;
+    /**
+     * 性别
+     */
+    private String gender;
+    /**
+     * 电子邮箱
+     */
+    private String email;
+    /**
+     * 手机号
+     */
+    private String phone;
+    /**
+     * 身份证号
+     */
+    private String idCardNumber;
+    /**
+     * 身份证地址
+     */
+    private String idCardAddress;
+    /**
+     * 户口类型
+     */
+    private String householdType;
+    /**
+     * 户口所在地
+     */
+    private String householdLocation;
+    /**
+     * 最高学历
+     */
+    private String educationLevel;
+    /**
+     * 毕业院校
+     */
+    private String graduationSchool;
+    /**
+     * 毕业时间
+     */
+    private LocalDate graduationDate;
+    /**
+     * 银行卡名称
+     */
+    private String bankCardName;
+    /**
+     * 银行卡卡号
+     */
+    private String bankCardNumber;
+    /**
+     * 年假基准天数
+     */
+    private Integer baseAnnualLeave;
+    /**
+     * 剩余年假天数
+     */
+    private Integer remainingAnnualLeave;
+    /**
+     * 出生日期
+     */
+    private LocalDate birthDate;
+    /**
+     * 婚姻状况
+     */
+    private String marriageStatus;
+    /**
+     * 工作地点
+     */
+    private String workLocation;
+    /**
+     * 专业
+     */
+    private String major;
+    /**
+     * 参加工作时间
+     */
+    private LocalDate workStartDate;
+    /**
+     * 薪酬
+     */
+    private BigDecimal salary;
+    /**
+     * 岗位薪资
+     */
+    private BigDecimal positionSalary;
+    /**
+     * 项目津贴
+     */
+    private BigDecimal projectAllowance;
+    /**
+     * 特殊岗位津贴
+     */
+    private BigDecimal specialPositionAllowance;
+    /**
+     * 外籍津贴
+     */
+    private BigDecimal foreignAllowance;
+    /**
+     * 午餐补助
+     */
+    private BigDecimal lunchSubsidy;
+    /**
+     * 特别津贴
+     */
+    private BigDecimal specialAllowance;
+    /**
+     * 补贴
+     */
+    private BigDecimal subsidy;
+    /**
+     * 年终奖
+     */
+    private BigDecimal yearEndBonus;
+    /**
+     * 头像地址
+     */
+    private String avatar;
+    /**
+     * 状态
+     */
+    private Integer status;
+    /**
+     * 租户编号
+     */
+    private Long tenantId;
+    /**
+     * 用户ID
+     */
+    private Long userId;
+    /**
+     * 关联员工ID
+     */
+    private Long employeeId;
+
+}

+ 0 - 33
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/mysql/employeeinfo/EmployeeContractInfoMapper.java

@@ -1,33 +0,0 @@
-package cn.iocoder.yudao.module.employee.dal.mysql.employeeinfo;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.EmployeeContractInfoPageReqVO;
-import cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo.EmployeeContractInfoDO;
-import org.apache.ibatis.annotations.Mapper;
-
-/**
- * 员工合同信息 Mapper
- *
- * @author 芋道源码
- */
-@Mapper
-public interface EmployeeContractInfoMapper extends BaseMapperX<EmployeeContractInfoDO> {
-
-    default PageResult<EmployeeContractInfoDO> selectPage(EmployeeContractInfoPageReqVO reqVO) {
-        return selectPage(reqVO, new LambdaQueryWrapperX<EmployeeContractInfoDO>()
-                .eqIfPresent(EmployeeContractInfoDO::getInfoId, reqVO.getInfoId())
-                .eqIfPresent(EmployeeContractInfoDO::getContractNumber, reqVO.getContractNumber())
-                .eqIfPresent(EmployeeContractInfoDO::getEmployeeId, reqVO.getEmployeeId())
-                .betweenIfPresent(EmployeeContractInfoDO::getContractStartDate, reqVO.getContractStartDate())
-                .betweenIfPresent(EmployeeContractInfoDO::getContractEndDate, reqVO.getContractEndDate())
-                .eqIfPresent(EmployeeContractInfoDO::getJobContent, reqVO.getJobContent())
-                .eqIfPresent(EmployeeContractInfoDO::getContractStatus, reqVO.getContractStatus())
-                .eqIfPresent(EmployeeContractInfoDO::getRemarks, reqVO.getRemarks())
-                .eqIfPresent(EmployeeContractInfoDO::getStatus, reqVO.getStatus())
-                .betweenIfPresent(EmployeeContractInfoDO::getCreateTime, reqVO.getCreateTime())
-                .orderByDesc(EmployeeContractInfoDO::getId));
-    }
-
-}

+ 69 - 0
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/mysql/info/EmployeeInfoHistoryMapper.java

@@ -0,0 +1,69 @@
+package cn.iocoder.yudao.module.employee.dal.mysql.info;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoHistoryPageReqVO;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoHistoryDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 员工信息历史 Mapper
+ *
+ * @author zhaopq
+ */
+@Mapper
+public interface EmployeeInfoHistoryMapper extends BaseMapperX<EmployeeInfoHistoryDO> {
+
+    default PageResult<EmployeeInfoHistoryDO> selectPage(EmployeeInfoHistoryPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<EmployeeInfoHistoryDO>()
+                .eqIfPresent(EmployeeInfoHistoryDO::getInfoId, reqVO.getInfoId())
+                .likeIfPresent(EmployeeInfoHistoryDO::getName, reqVO.getName())
+                .eqIfPresent(EmployeeInfoHistoryDO::getDeptId, reqVO.getDeptId())
+                .likeIfPresent(EmployeeInfoHistoryDO::getDeptName, reqVO.getDeptName())
+                .eqIfPresent(EmployeeInfoHistoryDO::getPostId, reqVO.getPostId())
+                .eqIfPresent(EmployeeInfoHistoryDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(EmployeeInfoHistoryDO::getEmployeeNumber, reqVO.getEmployeeNumber())
+                .betweenIfPresent(EmployeeInfoHistoryDO::getEntryDate, reqVO.getEntryDate())
+                .betweenIfPresent(EmployeeInfoHistoryDO::getProbationEndDate, reqVO.getProbationEndDate())
+                .betweenIfPresent(EmployeeInfoHistoryDO::getDepartureDate, reqVO.getDepartureDate())
+                .eqIfPresent(EmployeeInfoHistoryDO::getResignationReason, reqVO.getResignationReason())
+                .eqIfPresent(EmployeeInfoHistoryDO::getEmployeeStatus, reqVO.getEmployeeStatus())
+                .eqIfPresent(EmployeeInfoHistoryDO::getGender, reqVO.getGender())
+                .eqIfPresent(EmployeeInfoHistoryDO::getEmail, reqVO.getEmail())
+                .eqIfPresent(EmployeeInfoHistoryDO::getPhone, reqVO.getPhone())
+                .eqIfPresent(EmployeeInfoHistoryDO::getIdCardNumber, reqVO.getIdCardNumber())
+                .eqIfPresent(EmployeeInfoHistoryDO::getIdCardAddress, reqVO.getIdCardAddress())
+                .eqIfPresent(EmployeeInfoHistoryDO::getHouseholdType, reqVO.getHouseholdType())
+                .eqIfPresent(EmployeeInfoHistoryDO::getHouseholdLocation, reqVO.getHouseholdLocation())
+                .eqIfPresent(EmployeeInfoHistoryDO::getEducationLevel, reqVO.getEducationLevel())
+                .eqIfPresent(EmployeeInfoHistoryDO::getGraduationSchool, reqVO.getGraduationSchool())
+                .betweenIfPresent(EmployeeInfoHistoryDO::getGraduationDate, reqVO.getGraduationDate())
+                .likeIfPresent(EmployeeInfoHistoryDO::getBankCardName, reqVO.getBankCardName())
+                .eqIfPresent(EmployeeInfoHistoryDO::getBankCardNumber, reqVO.getBankCardNumber())
+                .eqIfPresent(EmployeeInfoHistoryDO::getBaseAnnualLeave, reqVO.getBaseAnnualLeave())
+                .eqIfPresent(EmployeeInfoHistoryDO::getRemainingAnnualLeave, reqVO.getRemainingAnnualLeave())
+                .betweenIfPresent(EmployeeInfoHistoryDO::getBirthDate, reqVO.getBirthDate())
+                .eqIfPresent(EmployeeInfoHistoryDO::getMarriageStatus, reqVO.getMarriageStatus())
+                .eqIfPresent(EmployeeInfoHistoryDO::getWorkLocation, reqVO.getWorkLocation())
+                .eqIfPresent(EmployeeInfoHistoryDO::getMajor, reqVO.getMajor())
+                .betweenIfPresent(EmployeeInfoHistoryDO::getWorkStartDate, reqVO.getWorkStartDate())
+                .eqIfPresent(EmployeeInfoHistoryDO::getSalary, reqVO.getSalary())
+                .eqIfPresent(EmployeeInfoHistoryDO::getPositionSalary, reqVO.getPositionSalary())
+                .eqIfPresent(EmployeeInfoHistoryDO::getProjectAllowance, reqVO.getProjectAllowance())
+                .eqIfPresent(EmployeeInfoHistoryDO::getSpecialPositionAllowance, reqVO.getSpecialPositionAllowance())
+                .eqIfPresent(EmployeeInfoHistoryDO::getForeignAllowance, reqVO.getForeignAllowance())
+                .eqIfPresent(EmployeeInfoHistoryDO::getLunchSubsidy, reqVO.getLunchSubsidy())
+                .eqIfPresent(EmployeeInfoHistoryDO::getSpecialAllowance, reqVO.getSpecialAllowance())
+                .eqIfPresent(EmployeeInfoHistoryDO::getSubsidy, reqVO.getSubsidy())
+                .eqIfPresent(EmployeeInfoHistoryDO::getYearEndBonus, reqVO.getYearEndBonus())
+                .eqIfPresent(EmployeeInfoHistoryDO::getAvatar, reqVO.getAvatar())
+                .eqIfPresent(EmployeeInfoHistoryDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(EmployeeInfoHistoryDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(EmployeeInfoHistoryDO::getTenantId, reqVO.getTenantId())
+                .eqIfPresent(EmployeeInfoHistoryDO::getUserId, reqVO.getUserId())
+                .eqIfPresent(EmployeeInfoHistoryDO::getEmployeeId, reqVO.getEmployeeId())
+                .orderByDesc(EmployeeInfoHistoryDO::getId));
+    }
+
+}

+ 20 - 15
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/mysql/employeeinfo/EmployeeInfoMapper.java

@@ -1,11 +1,11 @@
-package cn.iocoder.yudao.module.employee.dal.mysql.employeeinfo;
+package cn.iocoder.yudao.module.employee.dal.mysql.info;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
 import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
-import cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo.EmployeeInfoDO;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
 import org.apache.ibatis.annotations.Mapper;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.*;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.*;
 
 /**
  * 员工信息 Mapper
@@ -18,33 +18,36 @@ public interface EmployeeInfoMapper extends BaseMapperX<EmployeeInfoDO> {
     default PageResult<EmployeeInfoDO> selectPage(EmployeeInfoPageReqVO reqVO) {
         return selectPage(reqVO, new LambdaQueryWrapperX<EmployeeInfoDO>()
                 .eqIfPresent(EmployeeInfoDO::getInfoId, reqVO.getInfoId())
-                .eqIfPresent(EmployeeInfoDO::getEmployeeNumber, reqVO.getEmployeeNumber())
                 .likeIfPresent(EmployeeInfoDO::getName, reqVO.getName())
                 .eqIfPresent(EmployeeInfoDO::getDeptId, reqVO.getDeptId())
-                .eqIfPresent(EmployeeInfoDO::getPhone, reqVO.getPhone())
-                .eqIfPresent(EmployeeInfoDO::getAvatar, reqVO.getAvatar())
-                .eqIfPresent(EmployeeInfoDO::getEmail, reqVO.getEmail())
-                .eqIfPresent(EmployeeInfoDO::getPosition, reqVO.getPosition())
+                .likeIfPresent(EmployeeInfoDO::getDeptName, reqVO.getDeptName())
                 .eqIfPresent(EmployeeInfoDO::getPostId, reqVO.getPostId())
+                .eqIfPresent(EmployeeInfoDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(EmployeeInfoDO::getEmployeeNumber, reqVO.getEmployeeNumber())
                 .betweenIfPresent(EmployeeInfoDO::getEntryDate, reqVO.getEntryDate())
                 .betweenIfPresent(EmployeeInfoDO::getProbationEndDate, reqVO.getProbationEndDate())
-                .eqIfPresent(EmployeeInfoDO::getWorkLocation, reqVO.getWorkLocation())
+                .betweenIfPresent(EmployeeInfoDO::getDepartureDate, reqVO.getDepartureDate())
+                .eqIfPresent(EmployeeInfoDO::getResignationReason, reqVO.getResignationReason())
                 .eqIfPresent(EmployeeInfoDO::getEmployeeStatus, reqVO.getEmployeeStatus())
                 .eqIfPresent(EmployeeInfoDO::getGender, reqVO.getGender())
-                .betweenIfPresent(EmployeeInfoDO::getBirthDate, reqVO.getBirthDate())
-                .eqIfPresent(EmployeeInfoDO::getMarriageStatus, reqVO.getMarriageStatus())
+                .eqIfPresent(EmployeeInfoDO::getEmail, reqVO.getEmail())
+                .eqIfPresent(EmployeeInfoDO::getPhone, reqVO.getPhone())
                 .eqIfPresent(EmployeeInfoDO::getIdCardNumber, reqVO.getIdCardNumber())
                 .eqIfPresent(EmployeeInfoDO::getIdCardAddress, reqVO.getIdCardAddress())
                 .eqIfPresent(EmployeeInfoDO::getHouseholdType, reqVO.getHouseholdType())
                 .eqIfPresent(EmployeeInfoDO::getHouseholdLocation, reqVO.getHouseholdLocation())
                 .eqIfPresent(EmployeeInfoDO::getEducationLevel, reqVO.getEducationLevel())
-                .eqIfPresent(EmployeeInfoDO::getMajor, reqVO.getMajor())
                 .eqIfPresent(EmployeeInfoDO::getGraduationSchool, reqVO.getGraduationSchool())
                 .betweenIfPresent(EmployeeInfoDO::getGraduationDate, reqVO.getGraduationDate())
+                .likeIfPresent(EmployeeInfoDO::getBankCardName, reqVO.getBankCardName())
+                .eqIfPresent(EmployeeInfoDO::getBankCardNumber, reqVO.getBankCardNumber())
+                .eqIfPresent(EmployeeInfoDO::getBaseAnnualLeave, reqVO.getBaseAnnualLeave())
+                .eqIfPresent(EmployeeInfoDO::getRemainingAnnualLeave, reqVO.getRemainingAnnualLeave())
+                .betweenIfPresent(EmployeeInfoDO::getBirthDate, reqVO.getBirthDate())
+                .eqIfPresent(EmployeeInfoDO::getMarriageStatus, reqVO.getMarriageStatus())
+                .eqIfPresent(EmployeeInfoDO::getWorkLocation, reqVO.getWorkLocation())
+                .eqIfPresent(EmployeeInfoDO::getMajor, reqVO.getMajor())
                 .betweenIfPresent(EmployeeInfoDO::getWorkStartDate, reqVO.getWorkStartDate())
-                .eqIfPresent(EmployeeInfoDO::getAnnualLeaveDays, reqVO.getAnnualLeaveDays())
-                .eqIfPresent(EmployeeInfoDO::getSalaryBank, reqVO.getSalaryBank())
-                .eqIfPresent(EmployeeInfoDO::getSalaryCardNumber, reqVO.getSalaryCardNumber())
                 .eqIfPresent(EmployeeInfoDO::getSalary, reqVO.getSalary())
                 .eqIfPresent(EmployeeInfoDO::getPositionSalary, reqVO.getPositionSalary())
                 .eqIfPresent(EmployeeInfoDO::getProjectAllowance, reqVO.getProjectAllowance())
@@ -54,8 +57,10 @@ public interface EmployeeInfoMapper extends BaseMapperX<EmployeeInfoDO> {
                 .eqIfPresent(EmployeeInfoDO::getSpecialAllowance, reqVO.getSpecialAllowance())
                 .eqIfPresent(EmployeeInfoDO::getSubsidy, reqVO.getSubsidy())
                 .eqIfPresent(EmployeeInfoDO::getYearEndBonus, reqVO.getYearEndBonus())
+                .eqIfPresent(EmployeeInfoDO::getAvatar, reqVO.getAvatar())
                 .eqIfPresent(EmployeeInfoDO::getStatus, reqVO.getStatus())
                 .betweenIfPresent(EmployeeInfoDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(EmployeeInfoDO::getTenantId, reqVO.getTenantId())
                 .eqIfPresent(EmployeeInfoDO::getUserId, reqVO.getUserId())
                 .orderByDesc(EmployeeInfoDO::getId));
     }

+ 0 - 56
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/employeeinfo/EmployeeContractInfoService.java

@@ -1,56 +0,0 @@
-package cn.iocoder.yudao.module.employee.service.employeeinfo;
-
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.EmployeeContractInfoPageReqVO;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.EmployeeContractInfoSaveReqVO;
-import cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo.EmployeeContractInfoDO;
-
-import javax.validation.Valid;
-
-/**
- * 员工合同信息 Service 接口
- *
- * @author 芋道源码
- */
-public interface EmployeeContractInfoService {
-
-    /**
-     * 创建员工合同信息
-     *
-     * @param createReqVO 创建信息
-     * @return 编号
-     */
-    Long createContractInfo(@Valid EmployeeContractInfoSaveReqVO createReqVO);
-
-    /**
-     * 更新员工合同信息
-     *
-     * @param updateReqVO 更新信息
-     */
-    void updateContractInfo(@Valid EmployeeContractInfoSaveReqVO updateReqVO);
-
-    /**
-     * 删除员工合同信息
-     *
-     * @param id 编号
-     */
-    void deleteContractInfo(Long id);
-
-    /**
-     * 获得员工合同信息
-     *
-     * @param id 编号
-     * @return 员工合同信息
-     */
-    EmployeeContractInfoDO getContractInfo(Long id);
-
-    /**
-     * 获得员工合同信息分页
-     *
-     * @param pageReqVO 分页查询
-     * @return 员工合同信息分页
-     */
-    PageResult<EmployeeContractInfoDO> getContractInfoPage(EmployeeContractInfoPageReqVO pageReqVO);
-
-}

+ 0 - 71
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/employeeinfo/EmployeeContractInfoServiceImpl.java

@@ -1,71 +0,0 @@
-package cn.iocoder.yudao.module.employee.service.employeeinfo;
-
-import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.EmployeeContractInfoPageReqVO;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.EmployeeContractInfoSaveReqVO;
-import cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo.EmployeeContractInfoDO;
-import cn.iocoder.yudao.module.employee.dal.mysql.employeeinfo.EmployeeContractInfoMapper;
-import org.springframework.stereotype.Service;
-import org.springframework.validation.annotation.Validated;
-import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
-
-import javax.annotation.Resource;
-
-import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.module.employee.enums.ErrorCodeConstants.EMPLOYEE_CONTRACT_INFO_NOT_EXISTS;
-
-/**
- * 员工合同信息 Service 实现类
- *
- * @author 芋道源码
- */
-@Service
-@Validated
-public class EmployeeContractInfoServiceImpl implements EmployeeContractInfoService {
-
-    @Resource
-    private EmployeeContractInfoMapper contractInfoMapper;
-
-    @Override
-    public Long createContractInfo(EmployeeContractInfoSaveReqVO createReqVO) {
-        // 插入
-        EmployeeContractInfoDO contractInfo = BeanUtils.toBean(createReqVO, EmployeeContractInfoDO.class);
-        contractInfoMapper.insert(contractInfo);
-        // 返回
-        return contractInfo.getId();
-    }
-
-    @Override
-    public void updateContractInfo(EmployeeContractInfoSaveReqVO updateReqVO) {
-        // 校验存在
-        validateContractInfoExists(updateReqVO.getId());
-        // 更新
-        EmployeeContractInfoDO updateObj = BeanUtils.toBean(updateReqVO, EmployeeContractInfoDO.class);
-        contractInfoMapper.updateById(updateObj);
-    }
-
-    @Override
-    public void deleteContractInfo(Long id) {
-        // 校验存在
-        validateContractInfoExists(id);
-        // 删除
-        contractInfoMapper.deleteById(id);
-    }
-
-    private void validateContractInfoExists(Long id) {
-        if (contractInfoMapper.selectById(id) == null) {
-            throw exception(EMPLOYEE_CONTRACT_INFO_NOT_EXISTS);
-        }
-    }
-
-    @Override
-    public EmployeeContractInfoDO getContractInfo(Long id) {
-        return contractInfoMapper.selectById(id);
-    }
-
-    @Override
-    public PageResult<EmployeeContractInfoDO> getContractInfoPage(EmployeeContractInfoPageReqVO pageReqVO) {
-        return contractInfoMapper.selectPage(pageReqVO);
-    }
-
-}

+ 56 - 0
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/info/EmployeeInfoHistoryService.java

@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.employee.service.info;
+
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoHistoryPageReqVO;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoHistorySaveReqVO;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoHistoryDO;
+
+import javax.validation.Valid;
+
+/**
+ * 员工信息历史 Service 接口
+ *
+ * @author zhaopq
+ */
+public interface EmployeeInfoHistoryService {
+
+    /**
+     * 创建员工信息历史
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createInfoHistory(@Valid EmployeeInfoHistorySaveReqVO createReqVO);
+
+    /**
+     * 更新员工信息历史
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateInfoHistory(@Valid EmployeeInfoHistorySaveReqVO updateReqVO);
+
+    /**
+     * 删除员工信息历史
+     *
+     * @param id 编号
+     */
+    void deleteInfoHistory(Long id);
+
+    /**
+     * 获得员工信息历史
+     *
+     * @param id 编号
+     * @return 员工信息历史
+     */
+    EmployeeInfoHistoryDO getInfoHistory(Long id);
+
+    /**
+     * 获得员工信息历史分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 员工信息历史分页
+     */
+    PageResult<EmployeeInfoHistoryDO> getInfoHistoryPage(EmployeeInfoHistoryPageReqVO pageReqVO);
+
+}

+ 80 - 0
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/info/EmployeeInfoHistoryServiceImpl.java

@@ -0,0 +1,80 @@
+package cn.iocoder.yudao.module.employee.service.info;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoHistoryPageReqVO;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.EmployeeInfoHistorySaveReqVO;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoHistoryDO;
+import cn.iocoder.yudao.module.employee.dal.mysql.info.EmployeeInfoHistoryMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.employee.enums.ErrorCodeConstants.*;
+
+/**
+ * 员工信息历史 Service 实现类
+ *
+ * @author zhaopq
+ */
+@Service
+@Validated
+public class EmployeeInfoHistoryServiceImpl implements EmployeeInfoHistoryService {
+
+    @Resource
+    private EmployeeInfoHistoryMapper infoHistoryMapper;
+
+    @Override
+    @TenantIgnore
+    public Long createInfoHistory(EmployeeInfoHistorySaveReqVO createReqVO) {
+        // 插入
+        EmployeeInfoHistoryDO infoHistory = BeanUtils.toBean(createReqVO, EmployeeInfoHistoryDO.class);
+        infoHistoryMapper.insert(infoHistory);
+        // 返回
+        return infoHistory.getId();
+    }
+
+    @Override
+    @TenantIgnore
+    public void updateInfoHistory(EmployeeInfoHistorySaveReqVO updateReqVO) {
+        // 校验存在
+        validateInfoHistoryExists(updateReqVO.getId());
+        // 更新
+        EmployeeInfoHistoryDO updateObj = BeanUtils.toBean(updateReqVO, EmployeeInfoHistoryDO.class);
+        infoHistoryMapper.updateById(updateObj);
+    }
+
+    @Override
+    @TenantIgnore
+    public void deleteInfoHistory(Long id) {
+        // 校验存在
+        validateInfoHistoryExists(id);
+        // 删除
+        infoHistoryMapper.deleteById(id);
+    }
+
+    @TenantIgnore
+    private void validateInfoHistoryExists(Long id) {
+        if (infoHistoryMapper.selectById(id) == null) {
+            throw exception(EMPLOYEE_INFO_HISTORY_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    @TenantIgnore
+    public EmployeeInfoHistoryDO getInfoHistory(Long id) {
+        return infoHistoryMapper.selectById(id);
+    }
+
+    @Override
+    @TenantIgnore
+    public PageResult<EmployeeInfoHistoryDO> getInfoHistoryPage(EmployeeInfoHistoryPageReqVO pageReqVO) {
+        return infoHistoryMapper.selectPage(pageReqVO);
+    }
+
+}

+ 4 - 4
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/employeeinfo/EmployeeInfoService.java

@@ -1,7 +1,7 @@
-package cn.iocoder.yudao.module.employee.service.employeeinfo;
+package cn.iocoder.yudao.module.employee.service.info;
 
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.*;
-import cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo.EmployeeInfoDO;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.*;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 
 import javax.validation.Valid;
@@ -9,7 +9,7 @@ import javax.validation.Valid;
 /**
  * 员工信息 Service 接口
  *
- * @author 芋道源码
+ * @author zhaopq
  */
 public interface EmployeeInfoService {
 

+ 20 - 5
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/employeeinfo/EmployeeInfoServiceImpl.java

@@ -1,16 +1,17 @@
-package cn.iocoder.yudao.module.employee.service.employeeinfo;
+package cn.iocoder.yudao.module.employee.service.info;
 
 import cn.hutool.core.util.IdUtil;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.*;
-import cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo.EmployeeInfoDO;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.*;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
 
-import cn.iocoder.yudao.module.employee.dal.mysql.employeeinfo.EmployeeInfoMapper;
+import cn.iocoder.yudao.module.employee.dal.mysql.info.EmployeeInfoMapper;
 
 import javax.annotation.Resource;
 
@@ -20,7 +21,7 @@ import static cn.iocoder.yudao.module.employee.enums.ErrorCodeConstants.EMPLOYEE
 /**
  * 员工信息 Service 实现类
  *
- * @author 芋道源码
+ * @author zhaopq
  */
 @Service
 @Validated
@@ -28,8 +29,11 @@ public class EmployeeInfoServiceImpl implements EmployeeInfoService {
 
     @Resource
     private EmployeeInfoMapper infoMapper;
+    @Resource
+    private EmployeeInfoHistoryService employeeInfoHistoryService;
 
     @Override
+    @TenantIgnore
     public Long createInfo(EmployeeInfoSaveReqVO createReqVO) {
         // 插入
         // 生成id
@@ -41,15 +45,21 @@ public class EmployeeInfoServiceImpl implements EmployeeInfoService {
     }
 
     @Override
+    @TenantIgnore
     public void updateInfo(EmployeeInfoSaveReqVO updateReqVO) {
         // 校验存在
         validateInfoExists(updateReqVO.getId());
         // 更新
         EmployeeInfoDO updateObj = BeanUtils.toBean(updateReqVO, EmployeeInfoDO.class);
+        // todo: 插入历史数据
+        EmployeeInfoHistorySaveReqVO historySaveReqVO = BeanUtils.toBean(updateObj, EmployeeInfoHistorySaveReqVO.class);
+        historySaveReqVO.setEmployeeId(updateObj.getId());
+        employeeInfoHistoryService.createInfoHistory(historySaveReqVO);
         infoMapper.updateById(updateObj);
     }
 
     @Override
+    @TenantIgnore
     public void deleteInfo(Long id) {
         // 校验存在
         validateInfoExists(id);
@@ -57,6 +67,7 @@ public class EmployeeInfoServiceImpl implements EmployeeInfoService {
         infoMapper.deleteById(id);
     }
 
+    @TenantIgnore
     private void validateInfoExists(Long id) {
         if (infoMapper.selectById(id) == null) {
             throw exception(EMPLOYEE_INFO_NOT_EXISTS);
@@ -64,16 +75,19 @@ public class EmployeeInfoServiceImpl implements EmployeeInfoService {
     }
 
     @Override
+    @TenantIgnore
     public EmployeeInfoDO getInfo(Long id) {
         return infoMapper.selectById(id);
     }
 
     @Override
+    @TenantIgnore
     public PageResult<EmployeeInfoDO> getInfoPage(EmployeeInfoPageReqVO pageReqVO) {
         return infoMapper.selectPage(pageReqVO);
     }
 
     @Override
+    @TenantIgnore
     public EmployeeInfoDO getInfoByUserIdAndTenantId(Long userId, Long tenantId) {
         LambdaQueryWrapper<EmployeeInfoDO> lambdaQueryWrapper = new LambdaQueryWrapper<>();
         lambdaQueryWrapper.eq(EmployeeInfoDO::getUserId, userId)
@@ -82,6 +96,7 @@ public class EmployeeInfoServiceImpl implements EmployeeInfoService {
     }
 
     @Override
+    @TenantIgnore
     public EmployeeInfoDO getInfo(EmployeeInfoQueryReqVO queryReqVO) {
         return infoMapper.getInfo(queryReqVO);
     }

+ 1 - 1
yudao-module-personnel/yudao-module-employee-biz/src/main/resources/mapper/employeeinfo/EmployeeInfoMapper.xml

@@ -1,6 +1,6 @@
 <?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="cn.iocoder.yudao.module.employee.dal.mysql.employeeinfo.EmployeeInfoMapper">
+<mapper namespace="cn.iocoder.yudao.module.employee.dal.mysql.info.EmployeeInfoMapper">
 
     <!--
         一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。

+ 4 - 16
yudao-module-personnel/yudao-module-employee-biz/src/test/java/cn/iocoder/yudao/module/employee/service/employeeinfo/EmployeeInfoServiceImplTest.java

@@ -1,13 +1,13 @@
-package cn.iocoder.yudao.module.employee.service.employeeinfo;
+package cn.iocoder.yudao.module.employee.service.info;
 
 import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 
 import cn.iocoder.yudao.framework.test.core.ut.BaseDbUnitTest;
 
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.*;
-import cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo.EmployeeInfoDO;
-import cn.iocoder.yudao.module.employee.dal.mysql.employeeinfo.EmployeeInfoMapper;
+import cn.iocoder.yudao.module.employee.controller.admin.info.vo.*;
+import cn.iocoder.yudao.module.employee.dal.dataobject.info.EmployeeInfoDO;
+import cn.iocoder.yudao.module.employee.dal.mysql.info.EmployeeInfoMapper;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 
 import org.springframework.context.annotation.Import;
@@ -128,9 +128,6 @@ public class EmployeeInfoServiceImplTest extends BaseDbUnitTest {
            o.setGraduationSchool(null);
            o.setGraduationDate(null);
            o.setWorkStartDate(null);
-           o.setAnnualLeaveDays(null);
-           o.setSalaryBank(null);
-           o.setSalaryCardNumber(null);
            o.setSalary(null);
            o.setPositionSalary(null);
            o.setProjectAllowance(null);
@@ -195,12 +192,6 @@ public class EmployeeInfoServiceImplTest extends BaseDbUnitTest {
        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setGraduationDate(null)));
        // 测试 workStartDate 不匹配
        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setWorkStartDate(null)));
-       // 测试 annualLeaveDays 不匹配
-       infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setAnnualLeaveDays(null)));
-       // 测试 salaryBank 不匹配
-       infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setSalaryBank(null)));
-       // 测试 salaryCardNumber 不匹配
-       infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setSalaryCardNumber(null)));
        // 测试 salary 不匹配
        infoMapper.insert(cloneIgnoreId(dbInfo, o -> o.setSalary(null)));
        // 测试 positionSalary 不匹配
@@ -247,9 +238,6 @@ public class EmployeeInfoServiceImplTest extends BaseDbUnitTest {
        reqVO.setEducationLevel(null);
        reqVO.setMajor(null);
        reqVO.setGraduationSchool(null);
-       reqVO.setAnnualLeaveDays(null);
-       reqVO.setSalaryBank(null);
-       reqVO.setSalaryCardNumber(null);
        reqVO.setSalary(null);
        reqVO.setPositionSalary(null);
        reqVO.setProjectAllowance(null);

+ 34 - 0
yudao-module-personnel/yudao-module-relations-api/pom.xml

@@ -0,0 +1,34 @@
+<?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>cn.iocoder.boot</groupId>
+        <artifactId>yudao-module-personnel</artifactId>
+        <version>${revision}</version>
+    </parent>
+
+    <artifactId>yudao-module-relations-api</artifactId>
+    <packaging>jar</packaging>
+
+    <name>${project.artifactId}</name>
+    <description>
+        relations 模块 API,暴露给其它模块调用
+    </description>
+
+    <dependencies>
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-common</artifactId>
+        </dependency>
+
+        <!-- 参数校验 -->
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+            <optional>true</optional>
+        </dependency>
+    </dependencies>
+
+</project>

+ 11 - 0
yudao-module-personnel/yudao-module-relations-api/src/main/java/cn/iocoder/yudao/module/relations/api/RelationsApi.java

@@ -0,0 +1,11 @@
+package cn.iocoder.yudao.module.relations.api;
+
+
+/**
+ * 员工关系 API 接口
+ *
+ * @author zhaopq
+ */
+public interface RelationsApi {
+
+}

+ 16 - 0
yudao-module-personnel/yudao-module-relations-api/src/main/java/cn/iocoder/yudao/module/relations/enums/ErrorCodeConstants.java

@@ -0,0 +1,16 @@
+package cn.iocoder.yudao.module.relations.enums;
+
+
+import cn.iocoder.yudao.framework.common.exception.ErrorCode;
+
+/**
+ * Relations 错误码枚举类
+ *
+ * relations 系统,使用 1-011-000-000 段
+ */
+public interface ErrorCodeConstants {
+
+    // ========== 员工关系模块 1-011-000-000 ==========
+    ErrorCode RELATIONS_CONTRACT_INFO_NOT_EXISTS = new ErrorCode(1_011_000_000, "员工合同信息不存在");
+
+}

+ 96 - 0
yudao-module-personnel/yudao-module-relations-biz/pom.xml

@@ -0,0 +1,96 @@
+<?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">
+    <parent>
+        <groupId>cn.iocoder.boot</groupId>
+        <artifactId>yudao-module-personnel</artifactId>
+        <version>${revision}</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+    <artifactId>yudao-module-relations-biz</artifactId>
+    <packaging>jar</packaging>
+
+    <name>${project.artifactId}</name>
+    <description>
+        relations 模块,主要实现员工关系相关功能
+    </description>
+
+    <dependencies>
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-module-relations-api</artifactId>
+            <version>${revision}</version>
+        </dependency>
+
+        <!-- 业务组件 -->
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-spring-boot-starter-biz-data-permission</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-spring-boot-starter-biz-tenant</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-spring-boot-starter-biz-ip</artifactId>
+        </dependency>
+
+        <!-- Web 相关 -->
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-spring-boot-starter-security</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
+        </dependency>
+
+        <!-- DB 相关 -->
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-spring-boot-starter-mybatis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-spring-boot-starter-redis</artifactId>
+        </dependency>
+
+        <!-- Job 定时任务相关 -->
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-spring-boot-starter-job</artifactId>
+        </dependency>
+
+        <!-- 消息队列相关 -->
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-spring-boot-starter-mq</artifactId>
+        </dependency>
+
+        <!-- Test 测试相关 -->
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+
+        <!-- 工具类相关 -->
+        <dependency>
+            <groupId>cn.iocoder.boot</groupId>
+            <artifactId>yudao-spring-boot-starter-excel</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-mail</artifactId>
+        </dependency>
+
+        <!-- 三方云服务相关 -->
+
+    </dependencies>
+
+</project>

+ 15 - 0
yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/api/contractinfo/RelationsApiImpl.java

@@ -0,0 +1,15 @@
+package cn.iocoder.yudao.module.relations.api.contractinfo;
+
+import cn.iocoder.yudao.module.relations.api.RelationsApi;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * 员工关系 API 实现类
+ *
+ * @author zhaopq
+ */
+@Service
+public class RelationsApiImpl implements RelationsApi {
+
+}

+ 29 - 28
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/EmployeeContractInfoController.java

@@ -1,11 +1,11 @@
-package cn.iocoder.yudao.module.employee.controller.admin.employeeinfo;
+package cn.iocoder.yudao.module.relations.controller.admin.contractinfo;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.EmployeeContractInfoPageReqVO;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.EmployeeContractInfoRespVO;
-import cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo.EmployeeContractInfoSaveReqVO;
-import cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo.EmployeeContractInfoDO;
-import cn.iocoder.yudao.module.employee.service.employeeinfo.EmployeeContractInfoService;
+import cn.iocoder.yudao.module.relations.controller.admin.contractinfo.vo.RelationsContractInfoPageReqVO;
+import cn.iocoder.yudao.module.relations.controller.admin.contractinfo.vo.RelationsContractInfoRespVO;
+import cn.iocoder.yudao.module.relations.controller.admin.contractinfo.vo.RelationsContractInfoSaveReqVO;
+import cn.iocoder.yudao.module.relations.dal.dataobject.contractinfo.RelationsContractInfoDO;
+import cn.iocoder.yudao.module.relations.service.contractinfo.RelationsContractInfoService;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -13,8 +13,8 @@ import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Operation;
 
+import java.util.*;
 import java.io.IOException;
-import java.util.List;
 
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
@@ -31,26 +31,27 @@ import javax.validation.Valid;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
 
+
 @Tag(name = "管理后台 - 员工合同信息")
 @RestController
-@RequestMapping("/presonnel/employee/contract")
+@RequestMapping("/relations/contract-info")
 @Validated
-public class EmployeeContractInfoController {
+public class RelationsContractInfoController {
 
     @Resource
-    private EmployeeContractInfoService contractInfoService;
+    private RelationsContractInfoService contractInfoService;
 
     @PostMapping("/create")
     @Operation(summary = "创建员工合同信息")
-    @PreAuthorize("@ss.hasPermission('employee:contract-info:create')")
-    public CommonResult<Long> createContractInfo(@Valid @RequestBody EmployeeContractInfoSaveReqVO createReqVO) {
+    @PreAuthorize("@ss.hasPermission('relations:contract-info:create')")
+    public CommonResult<Long> createContractInfo(@Valid @RequestBody RelationsContractInfoSaveReqVO createReqVO) {
         return success(contractInfoService.createContractInfo(createReqVO));
     }
 
     @PutMapping("/update")
     @Operation(summary = "更新员工合同信息")
-    @PreAuthorize("@ss.hasPermission('employee:contract-info:update')")
-    public CommonResult<Boolean> updateContractInfo(@Valid @RequestBody EmployeeContractInfoSaveReqVO updateReqVO) {
+    @PreAuthorize("@ss.hasPermission('relations:contract-info:update')")
+    public CommonResult<Boolean> updateContractInfo(@Valid @RequestBody RelationsContractInfoSaveReqVO updateReqVO) {
         contractInfoService.updateContractInfo(updateReqVO);
         return success(true);
     }
@@ -58,7 +59,7 @@ public class EmployeeContractInfoController {
     @DeleteMapping("/delete")
     @Operation(summary = "删除员工合同信息")
     @Parameter(name = "id", description = "编号", required = true)
-    @PreAuthorize("@ss.hasPermission('employee:contract-info:delete')")
+    @PreAuthorize("@ss.hasPermission('relations:contract-info:delete')")
     public CommonResult<Boolean> deleteContractInfo(@RequestParam("id") Long id) {
         contractInfoService.deleteContractInfo(id);
         return success(true);
@@ -67,31 +68,31 @@ public class EmployeeContractInfoController {
     @GetMapping("/get")
     @Operation(summary = "获得员工合同信息")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('employee:contract-info:query')")
-    public CommonResult<EmployeeContractInfoRespVO> getContractInfo(@RequestParam("id") Long id) {
-        EmployeeContractInfoDO contractInfo = contractInfoService.getContractInfo(id);
-        return success(BeanUtils.toBean(contractInfo, EmployeeContractInfoRespVO.class));
+    @PreAuthorize("@ss.hasPermission('relations:contract-info:query')")
+    public CommonResult<RelationsContractInfoRespVO> getContractInfo(@RequestParam("id") Long id) {
+        RelationsContractInfoDO contractInfo = contractInfoService.getContractInfo(id);
+        return success(BeanUtils.toBean(contractInfo, RelationsContractInfoRespVO.class));
     }
 
     @GetMapping("/page")
     @Operation(summary = "获得员工合同信息分页")
-    @PreAuthorize("@ss.hasPermission('employee:contract-info:query')")
-    public CommonResult<PageResult<EmployeeContractInfoRespVO>> getContractInfoPage(@Valid EmployeeContractInfoPageReqVO pageReqVO) {
-        PageResult<EmployeeContractInfoDO> pageResult = contractInfoService.getContractInfoPage(pageReqVO);
-        return success(BeanUtils.toBean(pageResult, EmployeeContractInfoRespVO.class));
+    @PreAuthorize("@ss.hasPermission('relations:contract-info:query')")
+    public CommonResult<PageResult<RelationsContractInfoRespVO>> getContractInfoPage(@Valid RelationsContractInfoPageReqVO pageReqVO) {
+        PageResult<RelationsContractInfoDO> pageResult = contractInfoService.getContractInfoPage(pageReqVO);
+        return success(BeanUtils.toBean(pageResult, RelationsContractInfoRespVO.class));
     }
 
     @GetMapping("/export-excel")
     @Operation(summary = "导出员工合同信息 Excel")
-    @PreAuthorize("@ss.hasPermission('employee:contract-info:export')")
+    @PreAuthorize("@ss.hasPermission('relations:contract-info:export')")
     @ApiAccessLog(operateType = EXPORT)
-    public void exportContractInfoExcel(@Valid EmployeeContractInfoPageReqVO pageReqVO,
+    public void exportContractInfoExcel(@Valid RelationsContractInfoPageReqVO pageReqVO,
               HttpServletResponse response) throws IOException {
         pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
-        List<EmployeeContractInfoDO> list = contractInfoService.getContractInfoPage(pageReqVO).getList();
+        List<RelationsContractInfoDO> list = contractInfoService.getContractInfoPage(pageReqVO).getList();
         // 导出 Excel
-        ExcelUtils.write(response, "员工合同信息.xls", "数据", EmployeeContractInfoRespVO.class,
-                        BeanUtils.toBean(list, EmployeeContractInfoRespVO.class));
+        ExcelUtils.write(response, "员工合同信息.xls", "数据", RelationsContractInfoRespVO.class,
+                        BeanUtils.toBean(list, RelationsContractInfoRespVO.class));
     }
 
 }

+ 25 - 13
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/employeeinfo/vo/EmployeeContractInfoPageReqVO.java

@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.employee.controller.admin.employeeinfo.vo;
+package cn.iocoder.yudao.module.relations.controller.admin.contractinfo.vo;
 
 import lombok.*;
 
@@ -14,16 +14,28 @@ import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
-public class EmployeeContractInfoPageReqVO extends PageParam {
+public class RelationsContractInfoPageReqVO extends PageParam {
 
-    @Schema(description = "业务UUID", example = "8684")
+    @Schema(description = "业务UUID", example = "17794")
     private String infoId;
 
-    @Schema(description = "合同编号,唯一")
-    private String contractNumber;
+    @Schema(description = "姓名", example = "芋艿")
+    private String name;
 
-    @Schema(description = "员工ID", example = "19556")
-    private String employeeId;
+    @Schema(description = "部门ID", example = "20570")
+    private Long deptId;
+
+    @Schema(description = "部门名称", example = "张三")
+    private String deptName;
+
+    @Schema(description = "职位编号", example = "13164")
+    private Long postId;
+
+    @Schema(description = "职位名称")
+    private String position;
+
+    @Schema(description = "员工编号")
+    private String employeeNumber;
 
     @Schema(description = "合同开始日期")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
@@ -33,20 +45,20 @@ public class EmployeeContractInfoPageReqVO extends PageParam {
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDate[] contractEndDate;
 
-    @Schema(description = "工作内容")
-    private String jobContent;
-
-    @Schema(description = "合同状态", example = "1")
-    private String contractStatus;
+    @Schema(description = "合同期限")
+    private String contractDeadline;
 
     @Schema(description = "备注信息")
     private String remarks;
 
-    @Schema(description = "状态", example = "2")
+    @Schema(description = "状态", example = "1")
     private Integer status;
 
     @Schema(description = "创建时间")
     @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
     private LocalDateTime[] createTime;
 
+    @Schema(description = "员工ID", example = "31256")
+    private Long employeeId;
+
 }

+ 78 - 0
yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/controller/admin/contractinfo/vo/RelationsContractInfoRespVO.java

@@ -0,0 +1,78 @@
+package cn.iocoder.yudao.module.relations.controller.admin.contractinfo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.time.LocalDate;
+import java.util.*;
+import java.util.*;
+import org.springframework.format.annotation.DateTimeFormat;
+import java.time.LocalDateTime;
+import com.alibaba.excel.annotation.*;
+
+@Schema(description = "管理后台 - 员工合同信息 Response VO")
+@Data
+@ExcelIgnoreUnannotated
+public class RelationsContractInfoRespVO {
+
+    @Schema(description = "自增ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28961")
+    @ExcelProperty("自增ID")
+    private Long id;
+
+    @Schema(description = "业务UUID", requiredMode = Schema.RequiredMode.REQUIRED, example = "17794")
+    @ExcelProperty("业务UUID")
+    private String infoId;
+
+    @Schema(description = "姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+    @ExcelProperty("姓名")
+    private String name;
+
+    @Schema(description = "部门ID", example = "20570")
+    @ExcelProperty("部门ID")
+    private Long deptId;
+
+    @Schema(description = "部门名称", example = "张三")
+    @ExcelProperty("部门名称")
+    private String deptName;
+
+    @Schema(description = "职位编号", example = "13164")
+    @ExcelProperty("职位编号")
+    private Long postId;
+
+    @Schema(description = "职位名称")
+    @ExcelProperty("职位名称")
+    private String position;
+
+    @Schema(description = "员工编号")
+    @ExcelProperty("员工编号")
+    private String employeeNumber;
+
+    @Schema(description = "合同开始日期", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("合同开始日期")
+    private LocalDate contractStartDate;
+
+    @Schema(description = "合同结束日期")
+    @ExcelProperty("合同结束日期")
+    private LocalDate contractEndDate;
+
+    @Schema(description = "合同期限")
+    @ExcelProperty("合同期限")
+    private String contractDeadline;
+
+    @Schema(description = "备注信息")
+    @ExcelProperty("备注信息")
+    private String remarks;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @ExcelProperty("状态")
+    private Integer status;
+
+    @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+    @Schema(description = "员工ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31256")
+    @ExcelProperty("员工ID")
+    private Long employeeId;
+
+}

+ 62 - 0
yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/controller/admin/contractinfo/vo/RelationsContractInfoSaveReqVO.java

@@ -0,0 +1,62 @@
+package cn.iocoder.yudao.module.relations.controller.admin.contractinfo.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.*;
+
+import java.time.LocalDate;
+
+import javax.validation.constraints.NotEmpty;
+import javax.validation.constraints.NotNull;
+
+@Schema(description = "管理后台 - 员工合同信息新增/修改 Request VO")
+@Data
+public class RelationsContractInfoSaveReqVO {
+
+    @Schema(description = "自增ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "28961")
+    private Long id;
+
+    @Schema(description = "业务UUID", requiredMode = Schema.RequiredMode.REQUIRED, example = "17794")
+    @NotEmpty(message = "业务UUID不能为空")
+    private String infoId;
+
+    @Schema(description = "姓名", requiredMode = Schema.RequiredMode.REQUIRED, example = "芋艿")
+    @NotEmpty(message = "姓名不能为空")
+    private String name;
+
+    @Schema(description = "部门ID", example = "20570")
+    private Long deptId;
+
+    @Schema(description = "部门名称", example = "张三")
+    private String deptName;
+
+    @Schema(description = "职位编号", example = "13164")
+    private Long postId;
+
+    @Schema(description = "职位名称")
+    private String position;
+
+    @Schema(description = "员工编号")
+    private String employeeNumber;
+
+    @Schema(description = "合同开始日期", requiredMode = Schema.RequiredMode.REQUIRED)
+    @NotNull(message = "合同开始日期不能为空")
+    private LocalDate contractStartDate;
+
+    @Schema(description = "合同结束日期")
+    private LocalDate contractEndDate;
+
+    @Schema(description = "合同期限")
+    private String contractDeadline;
+
+    @Schema(description = "备注信息")
+    private String remarks;
+
+    @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
+    @NotNull(message = "状态不能为空")
+    private Integer status;
+
+    @Schema(description = "员工ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31256")
+    @NotNull(message = "员工ID不能为空")
+    private Long employeeId;
+
+}

+ 32 - 16
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/dal/dataobject/employeeinfo/EmployeeContractInfoDO.java

@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.employee.dal.dataobject.employeeinfo;
+package cn.iocoder.yudao.module.relations.dal.dataobject.contractinfo;
 
 import lombok.*;
 
@@ -12,20 +12,20 @@ import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
 /**
  * 员工合同信息 DO
  *
- * @author 芋道源码
+ * @author zhaopq
  */
-@TableName("employee_contract_info")
-@KeySequence("employee_contract_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
+@TableName("relations_contract_info")
+@KeySequence("relations_contract_info_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
 @Data
 @EqualsAndHashCode(callSuper = true)
 @ToString(callSuper = true)
 @Builder
 @NoArgsConstructor
 @AllArgsConstructor
-public class EmployeeContractInfoDO extends BaseDO {
+public class RelationsContractInfoDO extends BaseDO {
 
     /**
-     * 合同ID
+     * 自增ID
      */
     @TableId
     private Long id;
@@ -34,13 +34,29 @@ public class EmployeeContractInfoDO extends BaseDO {
      */
     private String infoId;
     /**
-     * 合同编号,唯一
+     * 姓名
      */
-    private String contractNumber;
+    private String name;
     /**
-     * 员工ID
+     * 部门ID
+     */
+    private Long deptId;
+    /**
+     * 部门名称
+     */
+    private String deptName;
+    /**
+     * 职位编号
+     */
+    private Long postId;
+    /**
+     * 职位名称
      */
-    private String employeeId;
+    private String position;
+    /**
+     * 员工编号
+     */
+    private String employeeNumber;
     /**
      * 合同开始日期
      */
@@ -50,13 +66,9 @@ public class EmployeeContractInfoDO extends BaseDO {
      */
     private LocalDate contractEndDate;
     /**
-     * 工作内容
-     */
-    private String jobContent;
-    /**
-     * 合同状态
+     * 合同期限
      */
-    private String contractStatus;
+    private String contractDeadline;
     /**
      * 备注信息
      */
@@ -65,5 +77,9 @@ public class EmployeeContractInfoDO extends BaseDO {
      * 状态
      */
     private Integer status;
+    /**
+     * 员工ID
+     */
+    private Long employeeId;
 
 }

+ 39 - 0
yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/dal/mysql/contractinfo/RelationsContractInfoMapper.java

@@ -0,0 +1,39 @@
+package cn.iocoder.yudao.module.relations.dal.mysql.contractinfo;
+
+import java.util.*;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
+import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
+import cn.iocoder.yudao.module.relations.controller.admin.contractinfo.vo.RelationsContractInfoPageReqVO;
+import cn.iocoder.yudao.module.relations.dal.dataobject.contractinfo.RelationsContractInfoDO;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * 员工合同信息 Mapper
+ *
+ * @author zhaopq
+ */
+@Mapper
+public interface RelationsContractInfoMapper extends BaseMapperX<RelationsContractInfoDO> {
+
+    default PageResult<RelationsContractInfoDO> selectPage(RelationsContractInfoPageReqVO reqVO) {
+        return selectPage(reqVO, new LambdaQueryWrapperX<RelationsContractInfoDO>()
+                .eqIfPresent(RelationsContractInfoDO::getInfoId, reqVO.getInfoId())
+                .likeIfPresent(RelationsContractInfoDO::getName, reqVO.getName())
+                .eqIfPresent(RelationsContractInfoDO::getDeptId, reqVO.getDeptId())
+                .likeIfPresent(RelationsContractInfoDO::getDeptName, reqVO.getDeptName())
+                .eqIfPresent(RelationsContractInfoDO::getPostId, reqVO.getPostId())
+                .eqIfPresent(RelationsContractInfoDO::getPosition, reqVO.getPosition())
+                .eqIfPresent(RelationsContractInfoDO::getEmployeeNumber, reqVO.getEmployeeNumber())
+                .betweenIfPresent(RelationsContractInfoDO::getContractStartDate, reqVO.getContractStartDate())
+                .betweenIfPresent(RelationsContractInfoDO::getContractEndDate, reqVO.getContractEndDate())
+                .eqIfPresent(RelationsContractInfoDO::getContractDeadline, reqVO.getContractDeadline())
+                .eqIfPresent(RelationsContractInfoDO::getRemarks, reqVO.getRemarks())
+                .eqIfPresent(RelationsContractInfoDO::getStatus, reqVO.getStatus())
+                .betweenIfPresent(RelationsContractInfoDO::getCreateTime, reqVO.getCreateTime())
+                .eqIfPresent(RelationsContractInfoDO::getEmployeeId, reqVO.getEmployeeId())
+                .orderByDesc(RelationsContractInfoDO::getId));
+    }
+
+}

+ 56 - 0
yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/service/contractinfo/RelationsContractInfoService.java

@@ -0,0 +1,56 @@
+package cn.iocoder.yudao.module.relations.service.contractinfo;
+
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.relations.controller.admin.contractinfo.vo.RelationsContractInfoPageReqVO;
+import cn.iocoder.yudao.module.relations.controller.admin.contractinfo.vo.RelationsContractInfoSaveReqVO;
+import cn.iocoder.yudao.module.relations.dal.dataobject.contractinfo.RelationsContractInfoDO;
+
+import javax.validation.Valid;
+
+/**
+ * 员工合同信息 Service 接口
+ *
+ * @author zhaopq
+ */
+public interface RelationsContractInfoService {
+
+    /**
+     * 创建员工合同信息
+     *
+     * @param createReqVO 创建信息
+     * @return 编号
+     */
+    Long createContractInfo(@Valid RelationsContractInfoSaveReqVO createReqVO);
+
+    /**
+     * 更新员工合同信息
+     *
+     * @param updateReqVO 更新信息
+     */
+    void updateContractInfo(@Valid RelationsContractInfoSaveReqVO updateReqVO);
+
+    /**
+     * 删除员工合同信息
+     *
+     * @param id 编号
+     */
+    void deleteContractInfo(Long id);
+
+    /**
+     * 获得员工合同信息
+     *
+     * @param id 编号
+     * @return 员工合同信息
+     */
+    RelationsContractInfoDO getContractInfo(Long id);
+
+    /**
+     * 获得员工合同信息分页
+     *
+     * @param pageReqVO 分页查询
+     * @return 员工合同信息分页
+     */
+    PageResult<RelationsContractInfoDO> getContractInfoPage(RelationsContractInfoPageReqVO pageReqVO);
+
+}

+ 71 - 0
yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/service/contractinfo/RelationsContractInfoServiceImpl.java

@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.relations.service.contractinfo;
+
+import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.module.relations.controller.admin.contractinfo.vo.RelationsContractInfoPageReqVO;
+import cn.iocoder.yudao.module.relations.controller.admin.contractinfo.vo.RelationsContractInfoSaveReqVO;
+import cn.iocoder.yudao.module.relations.dal.dataobject.contractinfo.RelationsContractInfoDO;
+import cn.iocoder.yudao.module.relations.dal.mysql.contractinfo.RelationsContractInfoMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+
+import javax.annotation.Resource;
+
+import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
+import static cn.iocoder.yudao.module.relations.enums.ErrorCodeConstants.RELATIONS_CONTRACT_INFO_NOT_EXISTS;
+
+/**
+ * 员工合同信息 Service 实现类
+ *
+ * @author zhaopq
+ */
+@Service
+@Validated
+public class RelationsContractInfoServiceImpl implements RelationsContractInfoService {
+
+    @Resource
+    private RelationsContractInfoMapper contractInfoMapper;
+
+    @Override
+    public Long createContractInfo(RelationsContractInfoSaveReqVO createReqVO) {
+        // 插入
+        RelationsContractInfoDO contractInfo = BeanUtils.toBean(createReqVO, RelationsContractInfoDO.class);
+        contractInfoMapper.insert(contractInfo);
+        // 返回
+        return contractInfo.getId();
+    }
+
+    @Override
+    public void updateContractInfo(RelationsContractInfoSaveReqVO updateReqVO) {
+        // 校验存在
+        validateContractInfoExists(updateReqVO.getId());
+        // 更新
+        RelationsContractInfoDO updateObj = BeanUtils.toBean(updateReqVO, RelationsContractInfoDO.class);
+        contractInfoMapper.updateById(updateObj);
+    }
+
+    @Override
+    public void deleteContractInfo(Long id) {
+        // 校验存在
+        validateContractInfoExists(id);
+        // 删除
+        contractInfoMapper.deleteById(id);
+    }
+
+    private void validateContractInfoExists(Long id) {
+        if (contractInfoMapper.selectById(id) == null) {
+            throw exception(RELATIONS_CONTRACT_INFO_NOT_EXISTS);
+        }
+    }
+
+    @Override
+    public RelationsContractInfoDO getContractInfo(Long id) {
+        return contractInfoMapper.selectById(id);
+    }
+
+    @Override
+    public PageResult<RelationsContractInfoDO> getContractInfoPage(RelationsContractInfoPageReqVO pageReqVO) {
+        return contractInfoMapper.selectPage(pageReqVO);
+    }
+
+}

+ 12 - 0
yudao-module-personnel/yudao-module-relations-biz/src/main/resources/mapper/contractinfo/RelationsContractInfoMapper.xml

@@ -0,0 +1,12 @@
+<?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="cn.iocoder.yudao.module.relations.dal.mysql.contractinfo.RelationsContractInfoMapper">
+
+    <!--
+        一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
+        无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
+        代码生成器暂时只生成 Mapper XML 文件本身,更多推荐 MybatisX 快速开发插件来生成查询。
+        文档可见:https://www.iocoder.cn/MyBatis/x-plugins/
+     -->
+
+</mapper>

+ 1 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java

@@ -14,8 +14,7 @@ import lombok.EqualsAndHashCode;
  *
  * @author ruoyi
  */
-// todo: 临时
-@TableName("system_menu_copy1")
+@TableName("system_menu")
 @KeySequence("system_menu_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
 @Data
 @EqualsAndHashCode(callSuper = true)