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<HrmOvertimeWageConfigDO> 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);
|
}
|
}
|
|
}
|