package cn.iocoder.yudao.module.hrm.service.salary; import cn.iocoder.yudao.module.hrm.dal.dataobject.salary.HrmTaxRateConfigDO; import cn.iocoder.yudao.module.hrm.dal.mysql.salary.HrmTaxRateConfigMapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.validation.annotation.Validated; import java.math.BigDecimal; import java.time.LocalDate; import java.util.List; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; import static cn.iocoder.yudao.module.hrm.enums.ErrorCodeConstants.TAX_RATE_CONFIG_NOT_EXISTS; /** * 个税税率配置 Service 实现类 * * @author 超级管理员 */ @Service @Validated public class HrmTaxRateConfigServiceImpl implements HrmTaxRateConfigService { @Resource private HrmTaxRateConfigMapper taxRateConfigMapper; @Override @Transactional(rollbackFor = Exception.class) public void createTaxRateConfigList(List configList) { for (HrmTaxRateConfigDO config : configList) { applyDefaults(config); taxRateConfigMapper.insert(config); } } @Override public void updateTaxRateConfig(HrmTaxRateConfigDO config) { validateTaxRateConfigExists(config.getId()); applyDefaults(config); taxRateConfigMapper.updateById(config); } /** * 补全默认值:生效日期默认为当月 1 号,配置名称自动生成,速算扣除数/上限缺省按 0 */ private void applyDefaults(HrmTaxRateConfigDO config) { if (config.getEffectiveDate() == null) { config.setEffectiveDate(LocalDate.now().withDayOfMonth(1)); } if (config.getName() == null || config.getName().isBlank()) { config.setName(config.getEffectiveDate().getYear() + "年" + config.getEffectiveDate().getMonthValue() + "月个税税率表"); } if (config.getStatus() == null) { config.setStatus(0); } if (config.getQuickDeduction() == null) { config.setQuickDeduction(BigDecimal.ZERO); } if (config.getMaxAmount() == null) { config.setMaxAmount(BigDecimal.ZERO); } } @Override public void deleteTaxRateConfig(Long id) { validateTaxRateConfigExists(id); taxRateConfigMapper.deleteById(id); } @Override public HrmTaxRateConfigDO getTaxRateConfig(Long id) { return taxRateConfigMapper.selectById(id); } @Override public List getTaxRateConfigList() { return taxRateConfigMapper.selectListByStatus(null); } @Override public List getEffectiveTaxRateConfigList(LocalDate effectiveDate) { return taxRateConfigMapper.selectListByEffectiveDate(effectiveDate); } private void validateTaxRateConfigExists(Long id) { if (taxRateConfigMapper.selectById(id) == null) { throw exception(TAX_RATE_CONFIG_NOT_EXISTS); } } }