liu
2026-08-24 76bf0caef9a6f4b7daae7e7b1d09b0c9044aebef
新增请假扣款配置设置
已修改4个文件
已添加1个文件
84 ■■■■■ 文件已修改
yudao-module-hrm-api/src/main/java/cn/iocoder/yudao/module/hrm/enums/ErrorCodeConstants.java 1 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/salary/HrmLeaveTypeConfigController.java 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/salary/vo/HrmLeaveTypeConfigCreateReqVO.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/salary/HrmLeaveTypeConfigService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/salary/HrmLeaveTypeConfigServiceImpl.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-hrm-api/src/main/java/cn/iocoder/yudao/module/hrm/enums/ErrorCodeConstants.java
@@ -102,6 +102,7 @@
    ErrorCode EMPLOYEE_SOCIAL_SECURITY_NOT_EXISTS = new ErrorCode(1_030_005_009, "员工社保公积金档案不存在");
    ErrorCode SOCIAL_SECURITY_SCHEME_NOT_EXISTS = new ErrorCode(1_030_005_010, "社保公积金方案不存在");
    ErrorCode LEAVE_TYPE_CONFIG_NOT_EXISTS = new ErrorCode(1_030_005_011, "请假类型扣款配置不存在");
    ErrorCode LEAVE_TYPE_CONFIG_TYPE_EXISTS = new ErrorCode(1_030_005_022, "该请假类型扣款配置已存在");
    ErrorCode SALARY_PAYMENT_EXISTS = new ErrorCode(1_030_005_012, "该周期薪资发放台账已存在");
    ErrorCode SALARY_CALCULATION_NO_CONFIRMED = new ErrorCode(1_030_005_013, "该周期没有已确认的薪酬核算记录");
    ErrorCode SALARY_PAYMENT_ALREADY_PAY = new ErrorCode(1_030_005_014, "薪资发放台账已发放,请勿重复操作");
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/salary/HrmLeaveTypeConfigController.java
@@ -2,6 +2,7 @@
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.HrmLeaveTypeConfigCreateReqVO;
import cn.iocoder.yudao.module.hrm.controller.admin.salary.vo.HrmLeaveTypeConfigRespVO;
import cn.iocoder.yudao.module.hrm.controller.admin.salary.vo.HrmLeaveTypeConfigSaveReqVO;
import cn.iocoder.yudao.module.hrm.dal.dataobject.salary.HrmLeaveTypeConfigDO;
@@ -30,7 +31,7 @@
    @GetMapping("/list")
    @Operation(summary = "获取所有请假类型配置列表")
    @PreAuthorize("@ss.hasPermission('hrm:salary:query')")
    @PreAuthorize("@ss.hasPermission('hrm:leave-type-config:query')")
    public CommonResult<List<HrmLeaveTypeConfigRespVO>> getLeaveTypeConfigList() {
        List<HrmLeaveTypeConfigDO> list = leaveTypeConfigService.getLeaveTypeConfigList();
        return success(BeanUtils.toBean(list, HrmLeaveTypeConfigRespVO.class));
@@ -39,19 +40,37 @@
    @GetMapping("/get")
    @Operation(summary = "获取请假类型配置")
    @Parameter(name = "leaveType", description = "请假类型", required = true, example = "1")
    @PreAuthorize("@ss.hasPermission('hrm:salary:query')")
    @PreAuthorize("@ss.hasPermission('hrm:leave-type-config:query')")
    public CommonResult<HrmLeaveTypeConfigRespVO> getLeaveTypeConfig(@RequestParam("leaveType") Integer leaveType) {
        HrmLeaveTypeConfigDO config = leaveTypeConfigService.getLeaveTypeConfig(leaveType);
        return success(BeanUtils.toBean(config, HrmLeaveTypeConfigRespVO.class));
    }
    @PostMapping("/create")
    @Operation(summary = "新增请假类型配置")
    @PreAuthorize("@ss.hasPermission('hrm:leave-type-config:create')")
    public CommonResult<Long> createLeaveTypeConfig(@Valid @RequestBody HrmLeaveTypeConfigCreateReqVO createReqVO) {
        HrmLeaveTypeConfigDO config = BeanUtils.toBean(createReqVO, HrmLeaveTypeConfigDO.class);
        leaveTypeConfigService.createLeaveTypeConfig(config);
        return success(config.getId());
    }
    @PutMapping("/update")
    @Operation(summary = "更新请假类型配置")
    @PreAuthorize("@ss.hasPermission('hrm:salary:update')")
    @PreAuthorize("@ss.hasPermission('hrm:leave-type-config:update')")
    public CommonResult<Boolean> updateLeaveTypeConfig(@Valid @RequestBody HrmLeaveTypeConfigSaveReqVO updateReqVO) {
        HrmLeaveTypeConfigDO config = BeanUtils.toBean(updateReqVO, HrmLeaveTypeConfigDO.class);
        leaveTypeConfigService.updateLeaveTypeConfig(config);
        return success(true);
    }
    @DeleteMapping("/delete")
    @Operation(summary = "删除请假类型配置")
    @Parameter(name = "id", description = "配置ID", required = true)
    @PreAuthorize("@ss.hasPermission('hrm:leave-type-config:delete')")
    public CommonResult<Boolean> deleteLeaveTypeConfig(@RequestParam("id") Long id) {
        leaveTypeConfigService.deleteLeaveTypeConfig(id);
        return success(true);
    }
}
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/controller/admin/salary/vo/HrmLeaveTypeConfigCreateReqVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,32 @@
package cn.iocoder.yudao.module.hrm.controller.admin.salary.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.math.BigDecimal;
@Schema(description = "管理后台 - è¯·å‡ç±»åž‹æ‰£æ¬¾é…ç½®æ–°å¢ž Request VO")
@Data
public class HrmLeaveTypeConfigCreateReqVO {
    @Schema(description = "请假类型:1-事假, 2-病假, 3-年假, 4-婚假, 5-产假, 6-丧假", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
    @NotNull(message = "请假类型不能为空")
    private Integer leaveType;
    @Schema(description = "类型名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "事假")
    @NotBlank(message = "类型名称不能为空")
    private String name;
    @Schema(description = "扣款比例(0-1之间,如0.5表示扣50%)", requiredMode = Schema.RequiredMode.REQUIRED, example = "0.5")
    @NotNull(message = "扣款比例不能为空")
    private BigDecimal deductionRatio;
    @Schema(description = "备注")
    private String remark;
    @Schema(description = "状态:0-启用, 1-禁用")
    private Integer status;
}
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/salary/HrmLeaveTypeConfigService.java
@@ -22,8 +22,18 @@
    HrmLeaveTypeConfigDO getLeaveTypeConfig(Integer leaveType);
    /**
     * æ–°å¢žè¯·å‡ç±»åž‹é…ç½®
     */
    void createLeaveTypeConfig(HrmLeaveTypeConfigDO config);
    /**
     * æ›´æ–°è¯·å‡ç±»åž‹é…ç½®
     */
    void updateLeaveTypeConfig(HrmLeaveTypeConfigDO config);
    /**
     * åˆ é™¤è¯·å‡ç±»åž‹é…ç½®
     */
    void deleteLeaveTypeConfig(Long id);
}
yudao-module-hrm/src/main/java/cn/iocoder/yudao/module/hrm/service/salary/HrmLeaveTypeConfigServiceImpl.java
@@ -10,6 +10,7 @@
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.LEAVE_TYPE_CONFIG_NOT_EXISTS;
import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.LEAVE_TYPE_CONFIG_TYPE_EXISTS;
/**
 * è¯·å‡ç±»åž‹æ‰£æ¬¾é…ç½® Service å®žçŽ°ç±»
@@ -34,11 +35,26 @@
    }
    @Override
    public void createLeaveTypeConfig(HrmLeaveTypeConfigDO config) {
        // æ ¡éªŒåŒä¸€è¯·å‡ç±»åž‹åªå…è®¸å­˜åœ¨ä¸€æ¡é…ç½®
        if (leaveTypeConfigMapper.selectCount(HrmLeaveTypeConfigDO::getLeaveType, config.getLeaveType()) > 0) {
            throw exception(LEAVE_TYPE_CONFIG_TYPE_EXISTS);
        }
        leaveTypeConfigMapper.insert(config);
    }
    @Override
    public void updateLeaveTypeConfig(HrmLeaveTypeConfigDO config) {
        validateLeaveTypeConfigExists(config.getId());
        leaveTypeConfigMapper.updateById(config);
    }
    @Override
    public void deleteLeaveTypeConfig(Long id) {
        validateLeaveTypeConfigExists(id);
        leaveTypeConfigMapper.deleteById(id);
    }
    private void validateLeaveTypeConfigExists(Long id) {
        if (leaveTypeConfigMapper.selectById(id) == null) {
            throw exception(LEAVE_TYPE_CONFIG_NOT_EXISTS);