zhaopeiqing 9 mesiacov pred
rodič
commit
f11e2e6cb8
21 zmenil súbory, kde vykonal 218 pridanie a 475 odobranie
  1. 1 1
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/info/EmployeeInfoController.java
  2. 2 2
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/controller/admin/info/EmployeeInfoHistoryController.java
  3. 3 0
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/info/EmployeeInfoHistoryServiceImpl.java
  4. 8 4
      yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/info/EmployeeInfoServiceImpl.java
  5. 9 9
      yudao-module-personnel/yudao-module-holiday-biz/src/main/java/cn/iocoder/yudao/module/holiday/controller/admin/contractinfo/HolidayController.java
  6. 0 64
      yudao-module-personnel/yudao-module-holiday-biz/src/main/java/cn/iocoder/yudao/module/holiday/controller/admin/contractinfo/vo/RelationsContractInfoPageReqVO.java
  7. 0 78
      yudao-module-personnel/yudao-module-holiday-biz/src/main/java/cn/iocoder/yudao/module/holiday/controller/admin/contractinfo/vo/RelationsContractInfoRespVO.java
  8. 0 62
      yudao-module-personnel/yudao-module-holiday-biz/src/main/java/cn/iocoder/yudao/module/holiday/controller/admin/contractinfo/vo/RelationsContractInfoSaveReqVO.java
  9. 0 85
      yudao-module-personnel/yudao-module-holiday-biz/src/main/java/cn/iocoder/yudao/module/holiday/dal/dataobject/contractinfo/RelationsContractInfoDO.java
  10. 0 37
      yudao-module-personnel/yudao-module-holiday-biz/src/main/java/cn/iocoder/yudao/module/holiday/dal/mysql/contractinfo/RelationsContractInfoMapper.java
  11. 0 56
      yudao-module-personnel/yudao-module-holiday-biz/src/main/java/cn/iocoder/yudao/module/holiday/service/contractinfo/RelationsContractInfoService.java
  12. 0 71
      yudao-module-personnel/yudao-module-holiday-biz/src/main/java/cn/iocoder/yudao/module/holiday/service/contractinfo/RelationsContractInfoServiceImpl.java
  13. 30 0
      yudao-module-personnel/yudao-module-relations-api/src/main/java/cn/iocoder/yudao/module/relations/enums/contractinfo/ContractInfoStatusEnum.java
  14. 3 2
      yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/controller/admin/contractinfo/vo/RelationsContractInfoSaveReqVO.java
  15. 19 0
      yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/dal/mysql/contractinfo/RelationsContractInfoMapper.java
  16. 33 0
      yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/job/contractinfo/RelationsContractInfoEffectiveJob.java
  17. 8 0
      yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/service/contractinfo/RelationsContractInfoService.java
  18. 74 0
      yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/service/contractinfo/RelationsContractInfoServiceImpl.java
  19. 1 1
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/permission/MenuDO.java
  20. 23 2
      yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java
  21. 4 1
      yudao-server/src/main/resources/application-local.yaml

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

@@ -39,7 +39,7 @@ public class EmployeeInfoController {
 
     @PostMapping("/create")
     @Operation(summary = "创建员工信息")
-//    @PreAuthorize("@ss.hasPermission('employee:info:create')")
+    @PreAuthorize("@ss.hasPermission('employee:info:create')")
     public CommonResult<Long> createInfo(@Valid @RequestBody EmployeeInfoSaveReqVO createReqVO) {
         return success(infoService.createInfo(createReqVO));
     }

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

@@ -68,7 +68,7 @@ public class EmployeeInfoHistoryController {
     @GetMapping("/get")
     @Operation(summary = "获得员工信息历史")
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
-    @PreAuthorize("@ss.hasPermission('employee:info-history:query')")
+    @PreAuthorize("@ss.hasPermission('employee:info:query')")
     public CommonResult<EmployeeInfoHistoryRespVO> getInfoHistory(@RequestParam("id") Long id) {
         EmployeeInfoHistoryDO infoHistory = infoHistoryService.getInfoHistory(id);
         return success(BeanUtils.toBean(infoHistory, EmployeeInfoHistoryRespVO.class));
@@ -76,7 +76,7 @@ public class EmployeeInfoHistoryController {
 
     @GetMapping("/page")
     @Operation(summary = "获得员工信息历史分页")
-    @PreAuthorize("@ss.hasPermission('employee:info-history:query')")
+    @PreAuthorize("@ss.hasPermission('employee:info:query')")
     public CommonResult<PageResult<EmployeeInfoHistoryRespVO>> getInfoHistoryPage(@Valid EmployeeInfoHistoryPageReqVO pageReqVO) {
         PageResult<EmployeeInfoHistoryDO> pageResult = infoHistoryService.getInfoHistoryPage(pageReqVO);
         return success(BeanUtils.toBean(pageResult, EmployeeInfoHistoryRespVO.class));

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

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.employee.service.info;
 
+import cn.hutool.core.util.IdUtil;
 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;
@@ -33,6 +34,8 @@ public class EmployeeInfoHistoryServiceImpl implements EmployeeInfoHistoryServic
     @TenantIgnore
     public Long createInfoHistory(EmployeeInfoHistorySaveReqVO createReqVO) {
         // 插入
+        // 生成id
+        createReqVO.setInfoId(IdUtil.fastSimpleUUID());
         EmployeeInfoHistoryDO infoHistory = BeanUtils.toBean(createReqVO, EmployeeInfoHistoryDO.class);
         infoHistoryMapper.insert(infoHistory);
         // 返回

+ 8 - 4
yudao-module-personnel/yudao-module-employee-biz/src/main/java/cn/iocoder/yudao/module/employee/service/info/EmployeeInfoServiceImpl.java

@@ -49,12 +49,16 @@ public class EmployeeInfoServiceImpl implements EmployeeInfoService {
     public void updateInfo(EmployeeInfoSaveReqVO updateReqVO) {
         // 校验存在
         validateInfoExists(updateReqVO.getId());
+        EmployeeInfoDO employeeInfoDO = this.getInfo(updateReqVO.getId());
+        if (employeeInfoDO == null) {
+            throw exception(EMPLOYEE_INFO_NOT_EXISTS);
+        }
+        EmployeeInfoHistorySaveReqVO historySaveReqVO = BeanUtils.toBean(employeeInfoDO, EmployeeInfoHistorySaveReqVO.class);
+        historySaveReqVO.setEmployeeId(employeeInfoDO.getId());
+        historySaveReqVO.setId(null);
+        employeeInfoHistoryService.createInfoHistory(historySaveReqVO);// 插入历史数据
         // 更新
         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);
     }
 

+ 9 - 9
yudao-module-personnel/yudao-module-holiday-biz/src/main/java/cn/iocoder/yudao/module/holiday/controller/admin/contractinfo/HolidayController.java

@@ -1,4 +1,4 @@
-package cn.iocoder.yudao.module.holiday.controller.admin.contractinfo;
+package cn.iocoder.yudao.module.holiday.controller.admin.annualleave;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.module.employee.api.EmployeeApi;
@@ -21,26 +21,26 @@ import javax.validation.Valid;
 
 @Tag(name = "管理后台 - 员工假务信息")
 @RestController
-@RequestMapping("/presonnel/holiday")
+@RequestMapping("/presonnel/holiday/annual-leave")
 @Validated
-public class HolidayController {
+public class HolidayAnnualLeaveController {
 
     @Resource
     private EmployeeApi employeeApi;
 
 
-    @GetMapping("/getAnnualLeave")
+    @GetMapping("/get")
     @Operation(summary = "获得员工年假信息")
-//    @PreAuthorize("@ss.hasPermission('employee:info:query')")
-    public CommonResult<EmployeeRespDTO> getAnnualLeave(@Valid EmployeeQueryReqDTO reqDTO) {
+    @PreAuthorize("@ss.hasPermission('holiday:annual-leave:query')")
+    public CommonResult<EmployeeRespDTO> get(@Valid EmployeeQueryReqDTO reqDTO) {
         EmployeeRespDTO info = employeeApi.getEmployee(reqDTO);
         return success(info);
     }
 
-    @GetMapping("/getAnnualLeavePage")
+    @GetMapping("/page")
     @Operation(summary = "获得员工年假信息分页")
-//    @PreAuthorize("@ss.hasPermission('employee:info:query')")
-    public CommonResult<PageResult<EmployeeRespDTO>> getAnnualLeavePage(@Valid EmployeePageReqDTO pageReqVO) {
+    @PreAuthorize("@ss.hasPermission('holiday:annual-leave:query')")
+    public CommonResult<PageResult<EmployeeRespDTO>> page(@Valid EmployeePageReqDTO pageReqVO) {
         PageResult<EmployeeRespDTO> pageResult = employeeApi.getEmployeePage(pageReqVO);
         return success(pageResult);
     }

+ 0 - 64
yudao-module-personnel/yudao-module-holiday-biz/src/main/java/cn/iocoder/yudao/module/holiday/controller/admin/contractinfo/vo/RelationsContractInfoPageReqVO.java

@@ -1,64 +0,0 @@
-package cn.iocoder.yudao.module.holiday.controller.admin.contractinfo.vo;
-
-import lombok.*;
-
-import java.time.LocalDate;
-import io.swagger.v3.oas.annotations.media.Schema;
-import cn.iocoder.yudao.framework.common.pojo.PageParam;
-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 RelationsContractInfoPageReqVO extends PageParam {
-
-    @Schema(description = "业务UUID", example = "17794")
-    private String infoId;
-
-    @Schema(description = "姓名", example = "芋艿")
-    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 = "合同开始日期")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDate[] contractStartDate;
-
-    @Schema(description = "合同结束日期")
-    @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
-    private LocalDate[] contractEndDate;
-
-    @Schema(description = "合同期限")
-    private String contractDeadline;
-
-    @Schema(description = "备注信息")
-    private String remarks;
-
-    @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;
-
-}

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

@@ -1,78 +0,0 @@
-package cn.iocoder.yudao.module.holiday.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;
-
-}

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

@@ -1,62 +0,0 @@
-package cn.iocoder.yudao.module.holiday.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;
-
-}

+ 0 - 85
yudao-module-personnel/yudao-module-holiday-biz/src/main/java/cn/iocoder/yudao/module/holiday/dal/dataobject/contractinfo/RelationsContractInfoDO.java

@@ -1,85 +0,0 @@
-//package cn.iocoder.yudao.module.holiday.dal.dataobject.contractinfo;
-//
-//import lombok.*;
-//
-//import java.time.LocalDate;
-//import java.util.*;
-//import java.time.LocalDateTime;
-//import java.time.LocalDateTime;
-//import com.baomidou.mybatisplus.annotation.*;
-//import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
-//
-///**
-// * 员工合同信息 DO
-// *
-// * @author zhaopq
-// */
-//@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 RelationsContractInfoDO 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 contractStartDate;
-//    /**
-//     * 合同结束日期
-//     */
-//    private LocalDate contractEndDate;
-//    /**
-//     * 合同期限
-//     */
-//    private String contractDeadline;
-//    /**
-//     * 备注信息
-//     */
-//    private String remarks;
-//    /**
-//     * 状态
-//     */
-//    private Integer status;
-//    /**
-//     * 员工ID
-//     */
-//    private Long employeeId;
-//
-//}

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

@@ -1,37 +0,0 @@
-//package cn.iocoder.yudao.module.holiday.dal.mysql.contractinfo;
-//
-//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.holiday.dal.dataobject.contractinfo.RelationsContractInfoDO;
-//import cn.iocoder.yudao.module.holiday.controller.admin.contractinfo.vo.RelationsContractInfoPageReqVO;
-//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));
-//    }
-//
-//}

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

@@ -1,56 +0,0 @@
-//package cn.iocoder.yudao.module.holiday.service.contractinfo;
-//
-//
-//import cn.iocoder.yudao.framework.common.pojo.PageResult;
-//import cn.iocoder.yudao.module.holiday.controller.admin.contractinfo.vo.RelationsContractInfoPageReqVO;
-//import cn.iocoder.yudao.module.holiday.controller.admin.contractinfo.vo.RelationsContractInfoSaveReqVO;
-//import cn.iocoder.yudao.module.holiday.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);
-//
-//}

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

@@ -1,71 +0,0 @@
-//package cn.iocoder.yudao.module.holiday.service.contractinfo;
-//
-//import cn.iocoder.yudao.framework.common.pojo.PageResult;
-//import cn.iocoder.yudao.module.holiday.controller.admin.contractinfo.vo.RelationsContractInfoPageReqVO;
-//import cn.iocoder.yudao.module.holiday.controller.admin.contractinfo.vo.RelationsContractInfoSaveReqVO;
-//import cn.iocoder.yudao.module.holiday.dal.dataobject.contractinfo.RelationsContractInfoDO;
-//import cn.iocoder.yudao.module.holiday.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.holiday.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);
-//    }
-//
-//}

+ 30 - 0
yudao-module-personnel/yudao-module-relations-api/src/main/java/cn/iocoder/yudao/module/relations/enums/contractinfo/ContractInfoStatusEnum.java

@@ -0,0 +1,30 @@
+package cn.iocoder.yudao.module.relations.enums.contractinfo;
+
+import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
+import cn.iocoder.yudao.framework.common.util.object.ObjectUtils;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+import java.util.Objects;
+
+/**
+ * 员工合同的状态枚举
+ *
+ * @author zhaopq
+ */
+@Getter
+@AllArgsConstructor
+public enum ContractInfoStatusEnum implements IntArrayValuable {
+    LATEST(0, "最新"),
+    HISTORY(1, "历史"),
+    ;
+
+    private final Integer status;
+    private final String name;
+
+    @Override
+    public int[] array() {
+        return new int[0];
+    }
+
+}

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

@@ -16,7 +16,6 @@ public class RelationsContractInfoSaveReqVO {
     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 = "芋艿")
@@ -43,16 +42,18 @@ public class RelationsContractInfoSaveReqVO {
     private LocalDate contractStartDate;
 
     @Schema(description = "合同结束日期")
+    @NotNull(message = "合同开始日期不能为空")
     private LocalDate contractEndDate;
 
     @Schema(description = "合同期限")
+    @NotEmpty(message = "合同期限不能为空")
     private String contractDeadline;
 
     @Schema(description = "备注信息")
     private String remarks;
 
     @Schema(description = "状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
-    @NotNull(message = "状态不能为空")
+//    @NotNull(message = "状态不能为空")
     private Integer status;
 
     @Schema(description = "员工ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "31256")

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

@@ -1,5 +1,6 @@
 package cn.iocoder.yudao.module.relations.dal.mysql.contractinfo;
 
+import java.time.LocalDate;
 import java.util.*;
 
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
@@ -36,4 +37,22 @@ public interface RelationsContractInfoMapper extends BaseMapperX<RelationsContra
                 .orderByDesc(RelationsContractInfoDO::getId));
     }
 
+    default List<RelationsContractInfoDO> selectListByStatusAndEmployeeId(Integer status, Long employeeId) {
+        return selectList(new LambdaQueryWrapperX<RelationsContractInfoDO>()
+                .eqIfPresent(RelationsContractInfoDO::getStatus, status)
+                .eqIfPresent(RelationsContractInfoDO::getEmployeeId, employeeId));
+    }
+
+    default List<RelationsContractInfoDO> selectListByStatusAndEffectiveDateGe(Integer status, LocalDate now) {
+        return selectList(new LambdaQueryWrapperX<RelationsContractInfoDO>()
+                .eqIfPresent(RelationsContractInfoDO::getStatus, status)
+                .geIfPresent(RelationsContractInfoDO::getContractStartDate, now));
+    }
+
+    default List<RelationsContractInfoDO> selectListByStatusAndEmployeeIds(Integer status, Set<Long> employeeIds) {
+            return selectList(new LambdaQueryWrapperX<RelationsContractInfoDO>()
+                    .eqIfPresent(RelationsContractInfoDO::getStatus, status)
+                    .inIfPresent(RelationsContractInfoDO::getEmployeeId, employeeIds));
+    }
+
 }

+ 33 - 0
yudao-module-personnel/yudao-module-relations-biz/src/main/java/cn/iocoder/yudao/module/relations/job/contractinfo/RelationsContractInfoEffectiveJob.java

@@ -0,0 +1,33 @@
+package cn.iocoder.yudao.module.relations.job.contractinfo;
+
+import cn.hutool.core.util.StrUtil;
+import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
+import cn.iocoder.yudao.module.relations.service.contractinfo.RelationsContractInfoService;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+
+/**
+ * 员工合同的生效 Job
+ *
+ * 新的合同生效后,将原合同信息添加到合同历史信息表中,并将原合同信息状态修改为作废
+ *
+ * @author zhaopq
+ */
+//@Component
+public class RelationsContractInfoEffectiveJob implements JobHandler {
+
+    @Resource
+    private RelationsContractInfoService infoService;
+
+    @Override
+    @TenantJob
+    public String execute(String param) {
+        int count = 0;
+//        count = infoService.effectiveContractInfo();
+        return StrUtil.format("更新的合同数量 {} 个", count);
+    }
+
+}

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

@@ -53,4 +53,12 @@ public interface RelationsContractInfoService {
      */
     PageResult<RelationsContractInfoDO> getContractInfoPage(RelationsContractInfoPageReqVO pageReqVO);
 
+    /**
+     * 将已过期的合同,状态修改为失效
+     * 新的合同生效后,将原合同信息添加到合同历史信息表中。
+     *
+     * @return 过期的合同数量
+     */
+    int effectiveContractInfo();
+
 }

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

@@ -1,16 +1,24 @@
 package cn.iocoder.yudao.module.relations.service.contractinfo;
 
+import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.util.IdUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
 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 cn.iocoder.yudao.module.relations.enums.contractinfo.ContractInfoStatusEnum;
 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 java.time.LocalDate;
+import java.util.*;
+import java.util.stream.Collectors;
+
 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;
 
@@ -27,15 +35,35 @@ public class RelationsContractInfoServiceImpl implements RelationsContractInfoSe
     private RelationsContractInfoMapper contractInfoMapper;
 
     @Override
+    @TenantIgnore
     public Long createContractInfo(RelationsContractInfoSaveReqVO createReqVO) {
+        // 查询该员工是否有合同存在
+        List<RelationsContractInfoDO> list = contractInfoMapper.selectPage(new RelationsContractInfoPageReqVO().setEmployeeId(createReqVO.getEmployeeId())).getList();
+        // 检查查询结果是否为空
+        if (!CollUtil.isEmpty(list)) {
+            // 更新状态
+            List<RelationsContractInfoDO> toUpdate = new ArrayList<>();
+            for (RelationsContractInfoDO contract : list) {
+                contract.setStatus(ContractInfoStatusEnum.HISTORY.getStatus());
+                toUpdate.add(contract);
+            }
+            // 批量更新
+            if (!toUpdate.isEmpty()) {
+                contractInfoMapper.updateBatch(toUpdate);
+            }
+        }
         // 插入
+        // 生成id
+        createReqVO.setInfoId(IdUtil.fastSimpleUUID());
         RelationsContractInfoDO contractInfo = BeanUtils.toBean(createReqVO, RelationsContractInfoDO.class);
+        contractInfo.setStatus(ContractInfoStatusEnum.LATEST.getStatus());
         contractInfoMapper.insert(contractInfo);
         // 返回
         return contractInfo.getId();
     }
 
     @Override
+    @TenantIgnore
     public void updateContractInfo(RelationsContractInfoSaveReqVO updateReqVO) {
         // 校验存在
         validateContractInfoExists(updateReqVO.getId());
@@ -45,6 +73,7 @@ public class RelationsContractInfoServiceImpl implements RelationsContractInfoSe
     }
 
     @Override
+    @TenantIgnore
     public void deleteContractInfo(Long id) {
         // 校验存在
         validateContractInfoExists(id);
@@ -52,6 +81,7 @@ public class RelationsContractInfoServiceImpl implements RelationsContractInfoSe
         contractInfoMapper.deleteById(id);
     }
 
+    @TenantIgnore
     private void validateContractInfoExists(Long id) {
         if (contractInfoMapper.selectById(id) == null) {
             throw exception(RELATIONS_CONTRACT_INFO_NOT_EXISTS);
@@ -59,13 +89,57 @@ public class RelationsContractInfoServiceImpl implements RelationsContractInfoSe
     }
 
     @Override
+    @TenantIgnore
     public RelationsContractInfoDO getContractInfo(Long id) {
         return contractInfoMapper.selectById(id);
     }
 
     @Override
+    @TenantIgnore
     public PageResult<RelationsContractInfoDO> getContractInfoPage(RelationsContractInfoPageReqVO pageReqVO) {
         return contractInfoMapper.selectPage(pageReqVO);
     }
 
+    @Override
+    @TenantIgnore
+    public int effectiveContractInfo() {
+        // 1. 查询状态为已完成且已到合同开始日期的合同
+        List<RelationsContractInfoDO> doneContracts = contractInfoMapper.selectListByStatusAndEffectiveDateGe(
+                null, LocalDate.now());
+        if (CollUtil.isEmpty(doneContracts)) {
+            return 0;
+        }
+        // 2. 收集所有需要查询的员工ID
+        Set<Long> employeeIds = new HashSet<>();
+        for (RelationsContractInfoDO contract : doneContracts) {
+            employeeIds.add(contract.getEmployeeId());
+        }
+        // 3. 一次性查询所有员工ID对应的“有效”状态合同
+        List<RelationsContractInfoDO> contracts = contractInfoMapper.selectListByStatusAndEmployeeIds(
+                null, employeeIds);
+        Map<Long, List<RelationsContractInfoDO>> employeeToEffectiveContracts = contracts.stream()
+                .collect(Collectors.groupingBy(RelationsContractInfoDO::getEmployeeId));
+        // 4. 更新状态
+        List<RelationsContractInfoDO> toUpdate = new ArrayList<>();
+        for (RelationsContractInfoDO contract : doneContracts) {
+            List<RelationsContractInfoDO> effectives = employeeToEffectiveContracts.getOrDefault(contract.getEmployeeId(), Collections.emptyList());
+//            List<RelationsContractInfoDO> effectives = contractInfoMapper.selectListByStatusAndEmployeeId(ContractInfoStatusEnum.EFFECTIVE.getStatus(), contract.getEmployeeId());
+            // 标记所有当前有效的合同为已弃用
+            for (RelationsContractInfoDO effective : effectives) {
+                effective.setStatus(ContractInfoStatusEnum.HISTORY.getStatus());
+                toUpdate.add(effective);
+            }
+            // 标记当前合同为有效
+            contract.setStatus(ContractInfoStatusEnum.LATEST.getStatus());
+            toUpdate.add(contract);
+        }
+        // 5. 批量更新
+        if (!toUpdate.isEmpty()) {
+            contractInfoMapper.updateBatch(toUpdate);
+        }
+        // 返回更新的合同数量
+        return doneContracts.size();
+    }
+
+
 }

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

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

+ 23 - 2
yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/tenant/TenantServiceImpl.java

@@ -165,7 +165,16 @@ public class TenantServiceImpl implements TenantService {
         EmployeeRespDTO employeeRespDTO = employeeApi.getEmployee(new EmployeeQueryReqDTO().setUserId(user.getId()).setTenantId(tenant.getId()));
         if (employeeRespDTO == null) {
             // 创建员工信息
-            employeeApi.createEmployee(new EmployeeCreateReqDTO().setUserId(user.getId()).setTenantId(tenant.getId()).setName(adminUserDO.getNickname()).setAvatar(adminUserDO.getAvatar()).setPhone(adminUserDO.getMobile()));
+            employeeApi.createEmployee(
+                    new EmployeeCreateReqDTO()
+                            .setUserId(user.getId())
+                            .setTenantId(tenant.getId())
+                            .setName(adminUserDO.getNickname())
+                            .setAvatar(adminUserDO.getAvatar())
+                            .setPhone(adminUserDO.getMobile())
+                            .setStatus(CommonStatusEnum.ENABLE.getStatus())
+                            .setEmployeeStatus(CommonStatusEnum.ENABLE.getStatus())
+            );
         } else {
             throw exception(USER_TENANT_EMPLOYEE_DUPLICATE, tenant.getName());
         }
@@ -216,7 +225,16 @@ public class TenantServiceImpl implements TenantService {
         EmployeeRespDTO employeeRespDTO = employeeApi.getEmployee(new EmployeeQueryReqDTO().setUserId(user.getId()).setTenantId(tenant.getId()));
         if (employeeRespDTO == null) {
             // 创建员工信息
-            employeeApi.createEmployee(new EmployeeCreateReqDTO().setUserId(user.getId()).setTenantId(tenant.getId()).setName(adminUserDO.getNickname()).setAvatar(adminUserDO.getAvatar()).setPhone(adminUserDO.getMobile()));
+            employeeApi.createEmployee(
+                    new EmployeeCreateReqDTO()
+                            .setUserId(user.getId())
+                            .setTenantId(tenant.getId())
+                            .setName(adminUserDO.getNickname())
+                            .setAvatar(adminUserDO.getAvatar())
+                            .setPhone(adminUserDO.getMobile())
+                            .setStatus(CommonStatusEnum.ENABLE.getStatus())
+                            .setEmployeeStatus(CommonStatusEnum.ENABLE.getStatus())
+            );
         } else {
             throw exception(USER_TENANT_EMPLOYEE_DUPLICATE, tenant.getName());
         }
@@ -267,6 +285,9 @@ public class TenantServiceImpl implements TenantService {
         // 获取其他菜单
         MenuDO otherMenu = menuService.selectByParentIdAndName(0L, "其他");
         // 获取企业管理菜单
+        if (otherMenu == null || otherMenu.getId() == null) {
+            throw exception(MENU_NOT_EXISTS);
+        }
         MenuDO manageMenu = menuService.selectByParentIdAndName(otherMenu.getId(), "企业管理");
         // 获取OA菜单下所有子级菜单ID
         Set<Long> oaChildrenMenuIds = this.collectAllMenuIds(oaMenu.getId());

+ 4 - 1
yudao-server/src/main/resources/application-local.yaml

@@ -172,7 +172,10 @@ logging:
     cn.iocoder.yudao.module.statistics.dal.mysql: debug
     cn.iocoder.yudao.module.crm.dal.mysql: debug
     cn.iocoder.yudao.module.erp.dal.mysql: debug
-    cn.iocoder.yudao.module.personnel.dal.mysql: debug
+    cn.iocoder.yudao.module.employee.dal.mysql: debug
+    cn.iocoder.yudao.module.relations.dal.mysql: debug
+    cn.iocoder.yudao.module.holiday.dal.mysql: debug
+    cn.iocoder.yudao.module.attendance.dal.mysql: debug
     org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示
 
 debug: false