166 lines
8.3 KiB
Java
166 lines
8.3 KiB
Java
package com.engine.salary.service.impl;
|
|
|
|
import com.engine.common.util.ServiceUtil;
|
|
import com.engine.core.impl.Service;
|
|
import com.engine.salary.constant.SalaryDefaultTenantConstant;
|
|
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
|
|
import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO;
|
|
import com.engine.salary.entity.salarysob.param.SalarySobTaxRuleSaveParam;
|
|
import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO;
|
|
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
|
|
import com.engine.salary.entity.salarysob.po.SalarySobPO;
|
|
import com.engine.salary.entity.salarysob.po.SalarySobTaxRulePO;
|
|
import com.engine.salary.enums.salarysob.IncomeCategoryEnum;
|
|
import com.engine.salary.enums.sicategory.DeleteTypeEnum;
|
|
import com.engine.salary.mapper.salarysob.SalarySobTaxRuleMapper;
|
|
import com.engine.salary.service.*;
|
|
import com.engine.salary.util.SalaryEntityUtil;
|
|
import com.engine.salary.util.SalaryI18nUtil;
|
|
import com.engine.salary.util.db.IdGenerator;
|
|
import com.engine.salary.util.db.MapperProxyFactory;
|
|
import com.google.common.collect.Lists;
|
|
import com.google.common.collect.Sets;
|
|
import org.apache.commons.collections4.CollectionUtils;
|
|
import weaver.hrm.User;
|
|
|
|
import java.util.*;
|
|
|
|
/**
|
|
* 薪资账套的个税申报表规则
|
|
* <p>Copyright: Copyright (c) 2023</p>
|
|
* <p>Company: 泛微软件</p>
|
|
*
|
|
* @author qiantao
|
|
* @version 1.0
|
|
**/
|
|
public class SalarySobTaxRuleServiceImpl extends Service implements SalarySobTaxRuleService {
|
|
|
|
|
|
private SalarySobTaxRuleMapper salarySobTaxRuleMapper() {
|
|
return MapperProxyFactory.getProxy(SalarySobTaxRuleMapper.class);
|
|
}
|
|
|
|
private SalarySobService getSalarySobService(User user) {
|
|
return ServiceUtil.getService(SalarySobServiceImpl.class, user);
|
|
}
|
|
|
|
private TaxReportColumnService getTaxReportColumnService(User user) {
|
|
return ServiceUtil.getService(TaxReportColumnServiceImpl.class, user);
|
|
}
|
|
|
|
private SalaryItemService getSalaryItemService(User user) {
|
|
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
|
|
}
|
|
|
|
private SalarySobItemService getSalarySobItemService(User user) {
|
|
return ServiceUtil.getService(SalarySobItemServiceImpl.class, user);
|
|
}
|
|
|
|
private SalarySobBackItemService getSalarySobBackItemService(User user) {
|
|
return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user);
|
|
}
|
|
|
|
@Override
|
|
public List<SalarySobTaxRulePO> listBySalarySobId(Long salarySobId) {
|
|
if (salarySobId == null) {
|
|
return Collections.emptyList();
|
|
}
|
|
return salarySobTaxRuleMapper().listSome(SalarySobTaxRulePO.builder().salarySobId(salarySobId).build());
|
|
}
|
|
|
|
@Override
|
|
public List<SalarySobTaxRuleDTO> getSalarySobTaxRuleDTO(Long salarySobId) {
|
|
List<SalarySobTaxRuleDTO> resultList = Lists.newArrayList();
|
|
// 查询薪资账套
|
|
SalarySobPO salarySob = getSalarySobService(user).getById(salarySobId);
|
|
Integer incomeCategory = salarySob.getIncomeCategory();
|
|
List<Integer> incomeCategoryIds = Collections.singletonList(incomeCategory);
|
|
// 薪资账套的薪资项目
|
|
List<SalarySobItemPO> salarySobItems = getSalarySobItemService(user).listBySalarySobId(salarySobId);
|
|
// 薪资账套的回算薪资项目
|
|
List<SalarySobBackItemPO> salarySobBackItems = getSalarySobBackItemService(user).listBySalarySobId(salarySobId);
|
|
// 薪资项目
|
|
Set<Long> salaryItemIds = Sets.newHashSet();
|
|
salaryItemIds.addAll(SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId));
|
|
salaryItemIds.addAll(SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId));
|
|
List<SalaryItemPO> salaryItems = getSalaryItemService(user).listByIds(salaryItemIds);
|
|
Map<Long, SalaryItemPO> idKeySalaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId);
|
|
// 薪资账套中已经存在的对应关系
|
|
List<SalarySobTaxRulePO> salarySobTaxReportRules = listBySalarySobId(salarySobId);
|
|
Map<String, Long> salarySobTaxReportRuleMap = SalaryEntityUtil.convert2Map(salarySobTaxReportRules,
|
|
e -> e.getIncomeCategory() + "-" + e.getTaxIndex(), SalarySobTaxRulePO::getSalaryItemId);
|
|
|
|
for (Integer incomeCategoryId : incomeCategoryIds) {
|
|
IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(incomeCategoryId);
|
|
List<SalarySobTaxRuleDTO.TaxRuleDTO> taxRules = new ArrayList<>();
|
|
if (incomeCategoryEnum == IncomeCategoryEnum.WAGES_AND_SALARIES || incomeCategoryEnum == IncomeCategoryEnum.NON_RESIDENT_INCOME_WAGES_AND_SALARIES) {
|
|
//只有正常工资薪金,才显示算税明细规则
|
|
taxRules = incomeCategoryEnum.getReportType().getTaxRules();
|
|
} else {
|
|
taxRules.add(SalarySobTaxRuleDTO.TaxRuleDTO.builder().name("税率").taxIndex("sl").build());
|
|
taxRules.add(SalarySobTaxRuleDTO.TaxRuleDTO.builder().name("速算扣除数").taxIndex("sskcs").build());
|
|
taxRules.add(SalarySobTaxRuleDTO.TaxRuleDTO.builder().name("本月(次)应补税额").taxIndex("ybtse").build());
|
|
}
|
|
for (SalarySobTaxRuleDTO.TaxRuleDTO taxRule : taxRules) {
|
|
Long salaryItemId = salarySobTaxReportRuleMap.get(incomeCategoryId + "-" + taxRule.getTaxIndex());
|
|
SalaryItemPO salaryItem = idKeySalaryItemMap.get(salaryItemId);
|
|
if (Objects.nonNull(salaryItem)) {
|
|
taxRule.setSalaryItemId(salaryItem.getId());
|
|
taxRule.setSalaryItemName(salaryItem.getName());
|
|
}
|
|
}
|
|
|
|
SalarySobTaxRuleDTO salarySobTaxReportRuleDTO = new SalarySobTaxRuleDTO();
|
|
salarySobTaxReportRuleDTO.setIncomeCategoryId(incomeCategoryId.toString());
|
|
salarySobTaxReportRuleDTO.setIncomeCategoryName(SalaryI18nUtil.getI18nLabel(incomeCategoryEnum.getLabelId(), incomeCategoryEnum.getDefaultLabel()));
|
|
salarySobTaxReportRuleDTO.setTaxRules(taxRules);
|
|
resultList.add(salarySobTaxReportRuleDTO);
|
|
}
|
|
return resultList;
|
|
}
|
|
|
|
@Override
|
|
public void saveByParam(SalarySobTaxRuleSaveParam saveParam) {
|
|
// 校验参数是否合法
|
|
// 构建po
|
|
Date now = new Date();
|
|
List<SalarySobTaxRulePO> salarySobTaxReportRules = Lists.newArrayList();
|
|
for (SalarySobTaxRuleSaveParam.TaxReportRuleIncomeCategoryParam incomeCategoryParam : saveParam.getIncomeCategoryParams()) {
|
|
for (SalarySobTaxRuleSaveParam.TaxRuleParam taxReportRuleParam : incomeCategoryParam.getTaxRuleParams()) {
|
|
SalarySobTaxRulePO salarySobTaxRule = new SalarySobTaxRulePO();
|
|
salarySobTaxRule.setId(IdGenerator.generate());
|
|
salarySobTaxRule.setSalarySobId(saveParam.getSalarySobId());
|
|
salarySobTaxRule.setIncomeCategory(incomeCategoryParam.getIncomeCategory());
|
|
salarySobTaxRule.setTaxIndex(taxReportRuleParam.getTaxIndex());
|
|
salarySobTaxRule.setSalaryItemId(taxReportRuleParam.getSalaryItemId());
|
|
salarySobTaxRule.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY);
|
|
salarySobTaxRule.setCreator((long) user.getUID());
|
|
salarySobTaxRule.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue());
|
|
salarySobTaxRule.setCreateTime(now);
|
|
salarySobTaxRule.setUpdateTime(now);
|
|
salarySobTaxReportRules.add(salarySobTaxRule);
|
|
}
|
|
}
|
|
deleteBySalarySobIds(Collections.singleton(saveParam.getSalarySobId()));
|
|
if (CollectionUtils.isNotEmpty(salarySobTaxReportRules)) {
|
|
salarySobTaxReportRules.forEach(salarySobTaxRuleMapper()::insertIgnoreNull);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void deleteBySalarySobIds(Collection<Long> salarySobIds) {
|
|
if (CollectionUtils.isEmpty(salarySobIds)) {
|
|
return;
|
|
}
|
|
salarySobTaxRuleMapper().deleteBySalarySobIds(salarySobIds);
|
|
}
|
|
|
|
@Override
|
|
public void saveBatch(List<SalarySobTaxRulePO> salarySobTaxReportRules) {
|
|
if (CollectionUtils.isEmpty(salarySobTaxReportRules)) {
|
|
return;
|
|
}
|
|
// salarySobTaxReportRules.forEach(salarySobTaxReportRuleMapper()::insertIgnoreNull);
|
|
}
|
|
}
|