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.util.object.BeanUtils; import cn.iocoder.yudao.module.hrm.controller.admin.salary.vo.HrmOvertimeWageConfigRespVO; import cn.iocoder.yudao.module.hrm.controller.admin.salary.vo.HrmOvertimeWageConfigSaveReqVO; import cn.iocoder.yudao.module.hrm.dal.dataobject.salary.HrmOvertimeWageConfigDO; import cn.iocoder.yudao.module.hrm.service.salary.HrmOvertimeWageConfigService; import cn.iocoder.yudao.module.system.api.dept.PostApi; import cn.iocoder.yudao.module.system.api.dept.dto.PostRespDTO; 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.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @Tag(name = "管理后台 - HRM 加班工资管理") @RestController @RequestMapping("/hrm/salary/overtime-wage") @Validated public class HrmOvertimeWageConfigController { @Resource private HrmOvertimeWageConfigService overtimeWageConfigService; @Resource private PostApi postApi; @PostMapping("/create") @Operation(summary = "创建岗位加班工资配置") @PreAuthorize("@ss.hasPermission('hrm:overtime-wage:create')") public CommonResult createOvertimeWageConfig(@Valid @RequestBody HrmOvertimeWageConfigSaveReqVO reqVO) { return success(overtimeWageConfigService.createOvertimeWageConfig( BeanUtils.toBean(reqVO, HrmOvertimeWageConfigDO.class))); } @PutMapping("/update") @Operation(summary = "更新岗位加班工资配置") @PreAuthorize("@ss.hasPermission('hrm:overtime-wage:update')") public CommonResult updateOvertimeWageConfig(@Valid @RequestBody HrmOvertimeWageConfigSaveReqVO reqVO) { overtimeWageConfigService.updateOvertimeWageConfig(BeanUtils.toBean(reqVO, HrmOvertimeWageConfigDO.class)); return success(true); } @DeleteMapping("/delete") @Operation(summary = "删除岗位加班工资配置") @Parameter(name = "id", description = "配置编号", required = true) @PreAuthorize("@ss.hasPermission('hrm:overtime-wage:delete')") public CommonResult deleteOvertimeWageConfig(@RequestParam("id") Long id) { overtimeWageConfigService.deleteOvertimeWageConfig(id); return success(true); } @GetMapping("/get") @Operation(summary = "获得岗位加班工资配置") @Parameter(name = "id", description = "配置编号", required = true) @PreAuthorize("@ss.hasPermission('hrm:overtime-wage:query')") public CommonResult getOvertimeWageConfig(@RequestParam("id") Long id) { return success(convert(overtimeWageConfigService.getOvertimeWageConfig(id))); } @GetMapping("/list") @Operation(summary = "获得岗位加班工资配置列表") @PreAuthorize("@ss.hasPermission('hrm:overtime-wage:query')") public CommonResult> getOvertimeWageConfigList( @RequestParam(value = "postId", required = false) Long postId, @RequestParam(value = "status", required = false) Integer status) { return success(convertList(overtimeWageConfigService.getOvertimeWageConfigList(postId, status))); } private HrmOvertimeWageConfigRespVO convert(HrmOvertimeWageConfigDO config) { if (config == null) { return null; } return convertList(Collections.singletonList(config)).get(0); } private List convertList(List list) { List voList = BeanUtils.toBean(list, HrmOvertimeWageConfigRespVO.class); List postIds = voList.stream().map(HrmOvertimeWageConfigRespVO::getPostId) .filter(Objects::nonNull).distinct().collect(Collectors.toList()); if (CollUtil.isNotEmpty(postIds)) { Map postMap = postApi.getPostMap(postIds); voList.forEach(vo -> { PostRespDTO post = postMap.get(vo.getPostId()); if (post != null) { vo.setPostName(post.getName()); } }); } return voList; } }