package cn.iocoder.yudao.module.hrm.controller.admin.salary;
|
|
import cn.hutool.core.collection.CollUtil;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.module.hrm.controller.admin.salary.vo.HrmEmployeeSalaryPageReqVO;
|
import cn.iocoder.yudao.module.hrm.controller.admin.salary.vo.HrmEmployeeSalaryRespVO;
|
import cn.iocoder.yudao.module.hrm.controller.admin.salary.vo.HrmEmployeeSalarySaveReqVO;
|
import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO;
|
import cn.iocoder.yudao.module.hrm.dal.dataobject.salary.HrmEmployeeSalaryDO;
|
import cn.iocoder.yudao.module.hrm.dal.dataobject.salary.HrmSalaryStructureDO;
|
import cn.iocoder.yudao.module.hrm.service.employee.HrmEmployeeService;
|
import cn.iocoder.yudao.module.hrm.service.salary.HrmEmployeeSalaryService;
|
import cn.iocoder.yudao.module.hrm.service.salary.HrmSalaryStructureService;
|
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Parameter;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
import jakarta.annotation.Resource;
|
import jakarta.validation.Valid;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.validation.annotation.Validated;
|
import org.springframework.web.bind.annotation.*;
|
|
import java.util.*;
|
|
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
|
@Tag(name = "管理后台 - HRM 员工薪酬档案")
|
@RestController
|
@RequestMapping("/hrm/employee-salary")
|
@Validated
|
public class HrmEmployeeSalaryController {
|
|
@Resource
|
private HrmEmployeeSalaryService employeeSalaryService;
|
@Resource
|
private HrmEmployeeService employeeService;
|
@Resource
|
private HrmSalaryStructureService structureService;
|
|
@PostMapping("/create")
|
@Operation(summary = "创建员工薪酬档案")
|
@PreAuthorize("@ss.hasPermission('hrm:salary:create')")
|
public CommonResult<Long> createEmployeeSalary(@Valid @RequestBody HrmEmployeeSalarySaveReqVO createReqVO) {
|
HrmEmployeeSalaryDO salary = BeanUtils.toBean(createReqVO, HrmEmployeeSalaryDO.class);
|
return success(employeeSalaryService.createEmployeeSalary(salary));
|
}
|
|
@PutMapping("/update")
|
@Operation(summary = "更新员工薪酬档案")
|
@PreAuthorize("@ss.hasPermission('hrm:salary:update')")
|
public CommonResult<Boolean> updateEmployeeSalary(@Valid @RequestBody HrmEmployeeSalarySaveReqVO updateReqVO) {
|
HrmEmployeeSalaryDO salary = BeanUtils.toBean(updateReqVO, HrmEmployeeSalaryDO.class);
|
employeeSalaryService.updateEmployeeSalary(salary);
|
return success(true);
|
}
|
|
@DeleteMapping("/delete")
|
@Operation(summary = "删除员工薪酬档案")
|
@Parameter(name = "id", description = "档案ID", required = true)
|
@PreAuthorize("@ss.hasPermission('hrm:salary:delete')")
|
public CommonResult<Boolean> deleteEmployeeSalary(@RequestParam("id") Long id) {
|
employeeSalaryService.deleteEmployeeSalary(id);
|
return success(true);
|
}
|
|
@GetMapping("/get")
|
@Operation(summary = "获取员工薪酬档案")
|
@Parameter(name = "id", description = "档案ID", required = true)
|
@PreAuthorize("@ss.hasPermission('hrm:salary:query')")
|
public CommonResult<HrmEmployeeSalaryRespVO> getEmployeeSalary(@RequestParam("id") Long id) {
|
HrmEmployeeSalaryDO salary = employeeSalaryService.getEmployeeSalary(id);
|
if (salary == null) {
|
return success(null);
|
}
|
HrmEmployeeSalaryRespVO respVO = BeanUtils.toBean(salary, HrmEmployeeSalaryRespVO.class);
|
fillEmployeeInfo(respVO, salary.getUserId());
|
fillStructureInfo(respVO, salary.getSalaryStructureId());
|
return success(respVO);
|
}
|
|
@GetMapping("/page")
|
@Operation(summary = "获取员工薪酬档案分页")
|
@PreAuthorize("@ss.hasPermission('hrm:salary:query')")
|
public CommonResult<PageResult<HrmEmployeeSalaryRespVO>> getEmployeeSalaryPage(
|
@Valid HrmEmployeeSalaryPageReqVO pageReqVO) {
|
PageResult<HrmEmployeeSalaryDO> pageResult = employeeSalaryService.getEmployeeSalaryPage(pageReqVO);
|
List<HrmEmployeeSalaryDO> recordList = pageResult.getList();
|
if (CollUtil.isEmpty(recordList)) {
|
return success(new PageResult<>(Collections.emptyList(), pageResult.getTotal()));
|
}
|
// 批量获取员工信息
|
Set<Long> employeeIds = new HashSet<>();
|
Set<Long> structureIds = new HashSet<>();
|
for (HrmEmployeeSalaryDO record : recordList) {
|
if (record.getUserId() != null) {
|
employeeIds.add(record.getUserId());
|
}
|
if (record.getSalaryStructureId() != null) {
|
structureIds.add(record.getSalaryStructureId());
|
}
|
}
|
Map<Long, HrmEmployeeDO> employeeMap = new HashMap<>();
|
for (Long employeeId : employeeIds) {
|
HrmEmployeeDO employee = employeeService.getEmployee(employeeId);
|
if (employee != null) {
|
employeeMap.put(employeeId, employee);
|
}
|
}
|
Map<Long, HrmSalaryStructureDO> structureMap = new HashMap<>();
|
for (Long structureId : structureIds) {
|
HrmSalaryStructureDO structure = structureService.getStructure(structureId);
|
if (structure != null) {
|
structureMap.put(structureId, structure);
|
}
|
}
|
List<HrmEmployeeSalaryRespVO> list = recordList.stream()
|
.map(salary -> {
|
HrmEmployeeSalaryRespVO respVO = BeanUtils.toBean(salary, HrmEmployeeSalaryRespVO.class);
|
HrmEmployeeDO employee = employeeMap.get(salary.getUserId());
|
if (employee != null) {
|
respVO.setEmployeeNo(employee.getEmployeeNo());
|
respVO.setEmployeeName(employee.getName());
|
}
|
if (salary.getSalaryStructureId() != null) {
|
HrmSalaryStructureDO structure = structureMap.get(salary.getSalaryStructureId());
|
if (structure != null) {
|
respVO.setSalaryStructureName(structure.getName());
|
}
|
}
|
return respVO;
|
})
|
.toList();
|
return success(new PageResult<>(list, pageResult.getTotal()));
|
}
|
|
@GetMapping("/list-by-user")
|
@Operation(summary = "获取员工薪酬档案历史列表")
|
@Parameter(name = "userId", description = "员工ID", required = true)
|
@PreAuthorize("@ss.hasPermission('hrm:salary:query')")
|
public CommonResult<List<HrmEmployeeSalaryRespVO>> getEmployeeSalaryList(
|
@RequestParam("userId") Long userId) {
|
List<HrmEmployeeSalaryDO> list = employeeSalaryService.getEmployeeSalaryList(userId);
|
return success(list.stream()
|
.map(salary -> {
|
HrmEmployeeSalaryRespVO respVO = BeanUtils.toBean(salary, HrmEmployeeSalaryRespVO.class);
|
fillEmployeeInfo(respVO, salary.getUserId());
|
fillStructureInfo(respVO, salary.getSalaryStructureId());
|
return respVO;
|
})
|
.toList());
|
}
|
|
@GetMapping("/get-latest")
|
@Operation(summary = "获取员工最新生效的薪酬档案")
|
@Parameter(name = "userId", description = "员工ID", required = true)
|
@PreAuthorize("@ss.hasPermission('hrm:salary:query')")
|
public CommonResult<HrmEmployeeSalaryRespVO> getLatestEmployeeSalary(
|
@RequestParam("userId") Long userId) {
|
HrmEmployeeSalaryDO salary = employeeSalaryService.getLatestEmployeeSalary(userId);
|
if (salary == null) {
|
return success(null);
|
}
|
HrmEmployeeSalaryRespVO respVO = BeanUtils.toBean(salary, HrmEmployeeSalaryRespVO.class);
|
fillEmployeeInfo(respVO, salary.getUserId());
|
fillStructureInfo(respVO, salary.getSalaryStructureId());
|
return success(respVO);
|
}
|
|
private void fillEmployeeInfo(HrmEmployeeSalaryRespVO respVO, Long userId) {
|
HrmEmployeeDO employee = employeeService.getEmployee(userId);
|
if (employee != null) {
|
respVO.setEmployeeNo(employee.getEmployeeNo());
|
respVO.setEmployeeName(employee.getName());
|
}
|
}
|
|
private void fillStructureInfo(HrmEmployeeSalaryRespVO respVO, Long structureId) {
|
if (structureId != null) {
|
HrmSalaryStructureDO structure = structureService.getStructure(structureId);
|
if (structure != null) {
|
respVO.setSalaryStructureName(structure.getName());
|
}
|
}
|
}
|
|
}
|