package cn.iocoder.yudao.module.hrm.service.salary; import cn.iocoder.yudao.module.hrm.dal.dataobject.salary.HrmOvertimeWageConfigDO; import cn.iocoder.yudao.module.hrm.dal.mysql.salary.HrmOvertimeWageConfigMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.OVERTIME_WAGE_CONFIG_NOT_EXISTS; import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.OVERTIME_WAGE_CONFIG_POST_EXISTS; /** * 岗位加班工资配置 Service 实现类 * * @author 超级管理员 */ @Service @Validated public class HrmOvertimeWageConfigServiceImpl implements HrmOvertimeWageConfigService { /** * 默认加班时薪(元/小时) */ private static final BigDecimal DEFAULT_HOURLY_RATE = new BigDecimal("20"); @Resource private HrmOvertimeWageConfigMapper overtimeWageConfigMapper; @Override public Long createOvertimeWageConfig(HrmOvertimeWageConfigDO config) { validatePostUnique(null, config.getPostId()); // 未填写时薪时,使用默认 20 元/小时 if (config.getHourlyRate() == null) { config.setHourlyRate(DEFAULT_HOURLY_RATE); } overtimeWageConfigMapper.insert(config); return config.getId(); } @Override public void updateOvertimeWageConfig(HrmOvertimeWageConfigDO config) { validateExists(config.getId()); validatePostUnique(config.getId(), config.getPostId()); overtimeWageConfigMapper.updateById(config); } @Override public void deleteOvertimeWageConfig(Long id) { validateExists(id); overtimeWageConfigMapper.deleteById(id); } @Override public HrmOvertimeWageConfigDO getOvertimeWageConfig(Long id) { return overtimeWageConfigMapper.selectById(id); } @Override public List getOvertimeWageConfigList(Long postId, Integer status) { return overtimeWageConfigMapper.selectListByCondition(postId, status); } private void validateExists(Long id) { if (id == null || overtimeWageConfigMapper.selectById(id) == null) { throw exception(OVERTIME_WAGE_CONFIG_NOT_EXISTS); } } private void validatePostUnique(Long id, Long postId) { if (postId == null) { return; } HrmOvertimeWageConfigDO config = overtimeWageConfigMapper.selectByPostId(postId); if (config != null && !config.getId().equals(id)) { throw exception(OVERTIME_WAGE_CONFIG_POST_EXISTS); } } }