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.HrmEmployeeSocialSecurityPageReqVO; import cn.iocoder.yudao.module.hrm.controller.admin.salary.vo.HrmEmployeeSocialSecurityRespVO; import cn.iocoder.yudao.module.hrm.controller.admin.salary.vo.HrmEmployeeSocialSecuritySaveReqVO; import cn.iocoder.yudao.module.hrm.dal.dataobject.employee.HrmEmployeeDO; import cn.iocoder.yudao.module.hrm.dal.dataobject.salary.HrmEmployeeSocialSecurityDO; import cn.iocoder.yudao.module.hrm.dal.dataobject.salary.HrmSocialSecuritySchemeDO; import cn.iocoder.yudao.module.hrm.service.employee.HrmEmployeeService; import cn.iocoder.yudao.module.hrm.service.salary.HrmEmployeeSocialSecurityService; import cn.iocoder.yudao.module.hrm.service.salary.HrmSocialSecuritySchemeService; import cn.iocoder.yudao.module.system.api.dept.DeptApi; import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; 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 java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - HRM 员工社保公积金档案") @RestController @RequestMapping("/hrm/salary/employee-social-security") @Validated public class HrmEmployeeSocialSecurityController { @Resource private HrmEmployeeSocialSecurityService employeeSocialSecurityService; @Resource private HrmEmployeeService employeeService; @Resource private DeptApi deptApi; @Resource private HrmSocialSecuritySchemeService schemeService; @PostMapping("/create") @Operation(summary = "创建员工社保公积金档案") @PreAuthorize("@ss.hasPermission('hrm:social-security:create')") public CommonResult createEmployeeSocialSecurity(@Valid @RequestBody HrmEmployeeSocialSecuritySaveReqVO createReqVO) { HrmEmployeeSocialSecurityDO socialSecurity = BeanUtils.toBean(createReqVO, HrmEmployeeSocialSecurityDO.class); return success(employeeSocialSecurityService.createEmployeeSocialSecurity(socialSecurity)); } @PutMapping("/update") @Operation(summary = "更新员工社保公积金档案") @PreAuthorize("@ss.hasPermission('hrm:social-security:update')") public CommonResult updateEmployeeSocialSecurity(@Valid @RequestBody HrmEmployeeSocialSecuritySaveReqVO updateReqVO) { HrmEmployeeSocialSecurityDO socialSecurity = BeanUtils.toBean(updateReqVO, HrmEmployeeSocialSecurityDO.class); employeeSocialSecurityService.updateEmployeeSocialSecurity(socialSecurity); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除员工社保公积金档案") @Parameter(name = "id", description = "档案ID", required = true) @PreAuthorize("@ss.hasPermission('hrm:social-security:delete')") public CommonResult deleteEmployeeSocialSecurity(@RequestParam("id") Long id) { employeeSocialSecurityService.deleteEmployeeSocialSecurity(id); return success(true); } @GetMapping("/get") @Operation(summary = "获取员工社保公积金档案") @Parameter(name = "id", description = "档案ID", required = true) @PreAuthorize("@ss.hasPermission('hrm:social-security:query')") public CommonResult getEmployeeSocialSecurity(@RequestParam("id") Long id) { HrmEmployeeSocialSecurityDO socialSecurity = employeeSocialSecurityService.getEmployeeSocialSecurity(id); if (socialSecurity == null) { return success(null); } HrmEmployeeSocialSecurityRespVO respVO = BeanUtils.toBean(socialSecurity, HrmEmployeeSocialSecurityRespVO.class); // 填充员工和方案信息 fillEmployeeInfo(respVO, socialSecurity.getUserId()); fillSchemeInfo(respVO, socialSecurity.getSocialSecuritySchemeId()); return success(respVO); } @GetMapping("/page") @Operation(summary = "获取员工社保公积金档案分页") @PreAuthorize("@ss.hasPermission('hrm:social-security:query')") public CommonResult> getEmployeeSocialSecurityPage( @Valid HrmEmployeeSocialSecurityPageReqVO pageReqVO) { PageResult pageResult = employeeSocialSecurityService.getEmployeeSocialSecurityPage(pageReqVO); List recordList = pageResult.getList(); if (CollUtil.isEmpty(recordList)) { return success(new PageResult<>(Collections.emptyList(), pageResult.getTotal())); } // userId 是员工ID,批量获取员工信息 Set employeeIds = recordList.stream() .map(HrmEmployeeSocialSecurityDO::getUserId) .filter(Objects::nonNull) .collect(Collectors.toSet()); Map employeeMap = new HashMap<>(); Set deptIds = new HashSet<>(); for (Long employeeId : employeeIds) { HrmEmployeeDO employee = employeeService.getEmployee(employeeId); if (employee != null) { employeeMap.put(employeeId, employee); if (employee.getDeptId() != null) { deptIds.add(employee.getDeptId()); } } } // 批量获取部门信息 Map deptMap = CollUtil.isEmpty(deptIds) ? Collections.emptyMap() : deptApi.getDeptMap(deptIds); // 批量获取方案信息 Set schemeIds = recordList.stream() .map(HrmEmployeeSocialSecurityDO::getSocialSecuritySchemeId) .filter(Objects::nonNull) .collect(Collectors.toSet()); Map schemeMap = new HashMap<>(); for (Long schemeId : schemeIds) { HrmSocialSecuritySchemeDO scheme = schemeService.getScheme(schemeId); if (scheme != null) { schemeMap.put(schemeId, scheme); } } // 转换并填充信息 List list = recordList.stream() .map(socialSecurity -> { HrmEmployeeSocialSecurityRespVO respVO = BeanUtils.toBean(socialSecurity, HrmEmployeeSocialSecurityRespVO.class); // 填充员工姓名和部门名称(userId 是员工ID) HrmEmployeeDO employee = employeeMap.get(socialSecurity.getUserId()); if (employee != null) { respVO.setUserName(employee.getName()); if (employee.getDeptId() != null) { DeptRespDTO dept = deptMap.get(employee.getDeptId()); if (dept != null) { respVO.setDeptName(dept.getName()); } } } // 填充方案名称 if (socialSecurity.getSocialSecuritySchemeId() != null) { HrmSocialSecuritySchemeDO scheme = schemeMap.get(socialSecurity.getSocialSecuritySchemeId()); if (scheme != null) { respVO.setSchemeName(scheme.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:social-security:query')") public CommonResult> getEmployeeSocialSecurityList( @RequestParam("userId") Long userId) { List list = employeeSocialSecurityService.getEmployeeSocialSecurityList(userId); List result = list.stream() .map(socialSecurity -> { HrmEmployeeSocialSecurityRespVO respVO = BeanUtils.toBean(socialSecurity, HrmEmployeeSocialSecurityRespVO.class); fillSchemeInfo(respVO, socialSecurity.getSocialSecuritySchemeId()); return respVO; }) .toList(); return success(result); } @GetMapping("/get-latest") @Operation(summary = "获取员工最新生效的社保公积金档案") @Parameter(name = "userId", description = "系统用户ID", required = true) @PreAuthorize("@ss.hasPermission('hrm:social-security:query')") public CommonResult getLatestEmployeeSocialSecurity( @RequestParam("userId") Long userId) { HrmEmployeeSocialSecurityDO socialSecurity = employeeSocialSecurityService.getLatestEmployeeSocialSecurity(userId); if (socialSecurity == null) { return success(null); } HrmEmployeeSocialSecurityRespVO respVO = BeanUtils.toBean(socialSecurity, HrmEmployeeSocialSecurityRespVO.class); // 填充员工和方案信息 fillEmployeeInfo(respVO, socialSecurity.getUserId()); fillSchemeInfo(respVO, socialSecurity.getSocialSecuritySchemeId()); return success(respVO); } /** * 填充员工信息(通过员工ID) */ private void fillEmployeeInfo(HrmEmployeeSocialSecurityRespVO respVO, Long userId) { // userId 是员工ID,通过员工表获取姓名和部门 HrmEmployeeDO employee = employeeService.getEmployee(userId); if (employee != null) { respVO.setUserName(employee.getName()); if (employee.getDeptId() != null) { DeptRespDTO dept = deptApi.getDept(employee.getDeptId()); if (dept != null) { respVO.setDeptName(dept.getName()); } } } } /** * 填充方案信息 */ private void fillSchemeInfo(HrmEmployeeSocialSecurityRespVO respVO, Long schemeId) { if (schemeId != null) { HrmSocialSecuritySchemeDO scheme = schemeService.getScheme(schemeId); if (scheme != null) { respVO.setSchemeName(scheme.getName()); } } } }