package cn.iocoder.yudao.module.hrm.service.salary; import cn.iocoder.yudao.module.hrm.dal.dataobject.salary.HrmSalaryStructureDO; import cn.iocoder.yudao.module.hrm.dal.mysql.employee.HrmEmployeeMapper; import cn.iocoder.yudao.module.hrm.dal.mysql.salary.HrmEmployeeSalaryMapper; import cn.iocoder.yudao.module.hrm.dal.mysql.salary.HrmSalaryStructureMapper; 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.SALARY_STRUCTURE_IN_USE; import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.SALARY_STRUCTURE_NAME_EXISTS; import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.SALARY_STRUCTURE_NOT_EXISTS; @Service @Validated public class HrmSalaryStructureServiceImpl implements HrmSalaryStructureService { @Resource private HrmSalaryStructureMapper salaryStructureMapper; @Resource private HrmEmployeeMapper employeeMapper; @Resource private HrmEmployeeSalaryMapper employeeSalaryMapper; @Override public Long createSalaryStructure(HrmSalaryStructureDO structure) { validateNameUnique(null, structure.getName()); // 基本工资由员工档案维护。数据库历史字段非空,新建结构统一写入占位值 0。 structure.setBaseSalary(BigDecimal.ZERO); salaryStructureMapper.insert(structure); return structure.getId(); } @Override public void updateSalaryStructure(HrmSalaryStructureDO structure) { validateExists(structure.getId()); validateNameUnique(structure.getId(), structure.getName()); salaryStructureMapper.updateById(structure); } @Override public void deleteSalaryStructure(Long id) { validateExists(id); if (employeeMapper.selectCountBySalaryStructureId(id) > 0 || employeeSalaryMapper.selectCountBySalaryStructureId(id) > 0) { throw exception(SALARY_STRUCTURE_IN_USE); } salaryStructureMapper.deleteById(id); } @Override public HrmSalaryStructureDO getSalaryStructure(Long id) { return salaryStructureMapper.selectById(id); } @Override public List getSalaryStructureList(String name, Integer status) { return salaryStructureMapper.selectListByCondition(name, status); } private void validateExists(Long id) { if (id == null || salaryStructureMapper.selectById(id) == null) { throw exception(SALARY_STRUCTURE_NOT_EXISTS); } } private void validateNameUnique(Long id, String name) { HrmSalaryStructureDO structure = salaryStructureMapper.selectByName(name); if (structure != null && !structure.getId().equals(id)) { throw exception(SALARY_STRUCTURE_NAME_EXISTS); } } }