Merge branch 'feature/减免附表' into release/个税版本

This commit is contained in:
钱涛 2025-02-12 15:59:53 +08:00
commit a8dc1d4010
3 changed files with 382 additions and 20 deletions

View File

@ -23,4 +23,6 @@ public class OtherDeductionDetailDeleteParam {
// 主键id // 主键id
private List<Long> ids; private List<Long> ids;
private Long mainId;
} }

View File

@ -3,6 +3,7 @@ package com.engine.salary.service;
import com.engine.salary.entity.datacollection.dto.*; import com.engine.salary.entity.datacollection.dto.*;
import com.engine.salary.entity.datacollection.param.*; import com.engine.salary.entity.datacollection.param.*;
import com.engine.salary.entity.datacollection.po.*; import com.engine.salary.entity.datacollection.po.*;
import com.engine.salary.enums.datacollection.TaxFreeTypeEnum;
import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.PageInfo;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
@ -125,35 +126,75 @@ public interface OtherDeductionService {
String extendToLastMonth(OtherDeductionExtendLastParam param); String extendToLastMonth(OtherDeductionExtendLastParam param);
PageInfo<FreeIncomeListDTO> freeIncomeList(OtherDeductionDetailQueryParam param); PageInfo<FreeIncomeListDTO> freeIncomeList(OtherDeductionDetailQueryParam param);
PageInfo<DerateDeductionListDTO> derateDeductionList(OtherDeductionDetailQueryParam param); PageInfo<DerateDeductionListDTO> derateDeductionList(OtherDeductionDetailQueryParam param);
PageInfo<EndowmentInsuranceListDTO> endowmentInsuranceList(OtherDeductionDetailQueryParam param); PageInfo<EndowmentInsuranceListDTO> endowmentInsuranceList(OtherDeductionDetailQueryParam param);
PageInfo<GrantDonationListDTO> grantDonationList(OtherDeductionDetailQueryParam param); PageInfo<GrantDonationListDTO> grantDonationList(OtherDeductionDetailQueryParam param);
PageInfo<HealthInsuranceListDTO> healthInsuranceList(OtherDeductionDetailQueryParam param); PageInfo<HealthInsuranceListDTO> healthInsuranceList(OtherDeductionDetailQueryParam param);
PageInfo<OtherDerateDeductionListDTO> otherDerateDeductionList(OtherDeductionDetailQueryParam param); PageInfo<OtherDerateDeductionListDTO> otherDerateDeductionList(OtherDeductionDetailQueryParam param);
PageInfo<PersonalPensionListDTO> personalPensionList(OtherDeductionDetailQueryParam param); PageInfo<PersonalPensionListDTO> personalPensionList(OtherDeductionDetailQueryParam param);
List<FreeIncomePO> queryFreeIncomes(OtherDeductionFreeListQueryParam param); List<FreeIncomePO> queryFreeIncomes(OtherDeductionFreeListQueryParam param);
List<DerateDeductionPO> queryDerateDeductions(OtherDeductionFreeListQueryParam param); List<DerateDeductionPO> queryDerateDeductions(OtherDeductionFreeListQueryParam param);
List<EndowmentInsurancePO> queryEndowmentInsurances(OtherDeductionFreeListQueryParam param); List<EndowmentInsurancePO> queryEndowmentInsurances(OtherDeductionFreeListQueryParam param);
List<GrantDonationPO> queryGrantDonations(OtherDeductionFreeListQueryParam param); List<GrantDonationPO> queryGrantDonations(OtherDeductionFreeListQueryParam param);
List<HealthInsurancePO> queryHealthInsurances(OtherDeductionFreeListQueryParam param); List<HealthInsurancePO> queryHealthInsurances(OtherDeductionFreeListQueryParam param);
List<OtherDerateDeductionPO> queryOtherDerateDeductions(OtherDeductionFreeListQueryParam param); List<OtherDerateDeductionPO> queryOtherDerateDeductions(OtherDeductionFreeListQueryParam param);
List<PersonalPensionPO> queryPersonalPensions(OtherDeductionFreeListQueryParam param); List<PersonalPensionPO> queryPersonalPensions(OtherDeductionFreeListQueryParam param);
void saveFreeIncome(FreeIncomeSaveParam param); void saveFreeIncome(FreeIncomeSaveParam param);
void saveEndowmentInsurance(EndowmentInsuranceSaveParam param); void saveEndowmentInsurance(EndowmentInsuranceSaveParam param);
void saveGrantDonation(GrantDonationSaveParam param); void saveGrantDonation(GrantDonationSaveParam param);
void saveHealthInsurance(HealthInsuranceSaveParam param); void saveHealthInsurance(HealthInsuranceSaveParam param);
void saveOtherDerateDeduction(OtherDerateDeductionSaveParam param); void saveOtherDerateDeduction(OtherDerateDeductionSaveParam param);
void saveDerateDeduction(DerateDeductionSaveParam param); void saveDerateDeduction(DerateDeductionSaveParam param);
void savePersonalPension(PersonalPensionSaveParam param); void savePersonalPension(PersonalPensionSaveParam param);
void deleteFreeIncome(OtherDeductionDetailDeleteParam param); void deleteFreeIncome(OtherDeductionDetailDeleteParam param);
void deleteEndowmentInsurance(OtherDeductionDetailDeleteParam param); void deleteEndowmentInsurance(OtherDeductionDetailDeleteParam param);
void deleteGrantDonation(OtherDeductionDetailDeleteParam param); void deleteGrantDonation(OtherDeductionDetailDeleteParam param);
void deleteHealthInsurance(OtherDeductionDetailDeleteParam param); void deleteHealthInsurance(OtherDeductionDetailDeleteParam param);
void deleteOtherDerateDeduction(OtherDeductionDetailDeleteParam param); void deleteOtherDerateDeduction(OtherDeductionDetailDeleteParam param);
void deleteDerateDeduction(OtherDeductionDetailDeleteParam param); void deleteDerateDeduction(OtherDeductionDetailDeleteParam param);
void deletePersonalPension(OtherDeductionDetailDeleteParam param); void deletePersonalPension(OtherDeductionDetailDeleteParam param);
void syncMain(Long mainId, List<TaxFreeTypeEnum> taxFreeTypes);
void syncFreeIncome(OtherDeductionPO mainPO);
void syncEndowmentInsurance(OtherDeductionPO mainPO);
void syncGrantDonation(OtherDeductionPO mainPO);
void syncHealthInsurance(OtherDeductionPO mainPO);
void syncOtherDerateDeduction(OtherDeductionPO mainPO);
void syncDerateDeduction(OtherDeductionPO mainPO);
void syncPersonalPension(OtherDeductionPO mainPO);
} }

View File

@ -21,6 +21,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.OperateTypeEnum;
import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.UserStatusEnum;
import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum;
import com.engine.salary.enums.datacollection.TaxFreeTypeEnum;
import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.mapper.datacollection.*; import com.engine.salary.mapper.datacollection.*;
@ -53,6 +54,7 @@ import org.apache.commons.lang3.Validate;
import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.util.IOUtils; import org.apache.poi.util.IOUtils;
import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import weaver.file.ImageFileManager; import weaver.file.ImageFileManager;
import weaver.general.Util; import weaver.general.Util;
@ -1559,6 +1561,14 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
l.setMainId(po.getId()); l.setMainId(po.getId());
getPersonalPensionMapper().insertIgnoreNull(l); getPersonalPensionMapper().insertIgnoreNull(l);
}); });
syncMain(po.getId(), Arrays.asList(TaxFreeTypeEnum.FREE_INCOME,
TaxFreeTypeEnum.HEALTH_INSURANCE,
TaxFreeTypeEnum.ENDOWMENT_INSURANCE,
TaxFreeTypeEnum.GRANT_DONATION,
TaxFreeTypeEnum.DERATE_DEDUCTION,
TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION,
TaxFreeTypeEnum.PERSONAL_PENSION));
}); });
return apidatas; return apidatas;
@ -2221,23 +2231,183 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
public XSSFWorkbook downloadDetailTemplate(OtherDeductionQueryParam param) { public XSSFWorkbook downloadDetailTemplate(OtherDeductionQueryParam param) {
List<FreeIncomeListDTO> freeIncomeList = new ArrayList<>();
List<HealthInsuranceListDTO> healthInsuranceList = new ArrayList<>();
List<EndowmentInsuranceListDTO> endowmentInsuranceList = new ArrayList<>();
List<GrantDonationListDTO> grantDonationList = new ArrayList<>();
List<DerateDeductionListDTO> derateDeductionList = new ArrayList<>();
List<OtherDerateDeductionListDTO> otherDerateDeductionList = new ArrayList<>();
List<PersonalPensionListDTO> personalPensionList = new ArrayList<>();
if (param.isHasData()) {
long employeeId = user.getUID();
//排序配置
OrderRuleVO orderRule = getSalarySysConfService(user).orderRule();
param.setOrderRule(orderRule);
List<OtherDeductionListDTO> list = getOtherDeductionMapper().list(param);
encryptUtil.decryptList(list, OtherDeductionListDTO.class);
SalaryI18nUtil.i18nList(list);
// 开启分权并且不是薪酬模块总管理员
if (getTaxAgentService(user).isOpenDevolution() && !getTaxAgentService(user).isChief(employeeId)) {
List<Long> taxAgentIdsAsAdmin = getTaxAgentService(user).listAllTaxAgentsAsAdmin(employeeId).stream().map(TaxAgentPO::getId).collect(Collectors.toList());
list = list.stream().filter(f ->
// 作为管理员
taxAgentIdsAsAdmin.contains(f.getTaxAgentId())
).collect(Collectors.toList());
}
list.forEach(dto -> {
List<FreeIncomeListDTO> freeIncomeListDTOS = freeIncomePO2DTO(getFreeIncomeMapper().listSome(FreeIncomePO.builder().mainId(dto.getId()).build()));
freeIncomeList.addAll(freeIncomeListDTOS);
List<EndowmentInsuranceListDTO> endowmentInsuranceListDTOS = endowmentInsurancePO2DTO(getEndowmentInsuranceMapper().listSome(EndowmentInsurancePO.builder().mainId(dto.getId()).build()));
endowmentInsuranceList.addAll(endowmentInsuranceListDTOS);
List<GrantDonationListDTO> grantDonationListDTOS = grantDonationPO2DTO(getGrantDonationMapper().listSome(GrantDonationPO.builder().mainId(dto.getId()).build()));
grantDonationList.addAll(grantDonationListDTOS);
List<HealthInsuranceListDTO> healthInsuranceListDTOS = healthInsurancePO2DTO(getHealthInsuranceMapper().listSome(HealthInsurancePO.builder().mainId(dto.getId()).build()));
healthInsuranceList.addAll(healthInsuranceListDTOS);
List<OtherDerateDeductionListDTO> otherDerateDeductionListDTOS = otherDerateDeductionPO2DTO(getOtherDerateDeductionMapper().listSome(OtherDerateDeductionPO.builder().mainId(dto.getId()).build()));
otherDerateDeductionList.addAll(otherDerateDeductionListDTOS);
List<DerateDeductionListDTO> derateDeductionListDTOS = derateDeductionPO2DTO(getDerateDeductionMapper().listSome(DerateDeductionPO.builder().mainId(dto.getId()).build()));
derateDeductionList.addAll(derateDeductionListDTOS);
List<PersonalPensionListDTO> personalPensionListDTOS = personalPensionPO2DTO(getPersonalPensionMapper().listSome(PersonalPensionPO.builder().mainId(dto.getId()).build()));
personalPensionList.addAll(personalPensionListDTOS);
});
}
Map<String, List<List<Object>>> map = new LinkedHashMap<>(); Map<String, List<List<Object>>> map = new LinkedHashMap<>();
List<List<Object>> freeIncomeRowList = new ArrayList<>();
List<Object> freeIncomeTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "免税事项", "免税性质", "免税金额"); List<Object> freeIncomeTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "免税事项", "免税性质", "免税金额");
map.put("免税收入", Arrays.asList(freeIncomeTitle)); freeIncomeRowList.add(freeIncomeTitle);
List<Object> healthInsuranceTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "税优识别码", "保单生效日期", "年度保费", "月度保费", "本期扣除金额"); freeIncomeList.forEach(dto -> {
map.put("商业健康保险", Arrays.asList(healthInsuranceTitle)); List<Object> row = new ArrayList<>();
List<Object> endowmentInsuranceTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "税延养老账户编号", "报税校验码", "年度保费", "月度保费", "本期扣除金额"); row.add(dto.getUsername());
map.put("税延养老保险", Arrays.asList(endowmentInsuranceTitle)); row.add(dto.getTaxAgentName());
List<Object> grantDonationTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "受赠单位名称", "受赠单位纳税人识别号", "凭证号", "捐赠日期", "捐赠金额", "扣除比例", "实际扣除金额"); row.add(dto.getDepartmentName());
map.put("准予扣除的捐赠额", Arrays.asList(grantDonationTitle)); row.add(dto.getMobile());
List<Object> derateDeductionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "减免事项", "减免性质", "减免金额"); row.add(dto.getJobNum());
map.put("减免税额", Arrays.asList(derateDeductionTitle)); row.add(dto.getIdNo());
List<Object> otherDerateDeductionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "其他免税扣除金额", "备注"); row.add(dto.getFreeItem());
map.put("其他", Arrays.asList(otherDerateDeductionTitle)); row.add(dto.getFreeProperty());
List<Object> personalPensionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "凭证类型", "凭证编码", "缴费金额"); row.add(dto.getFreeAmount());
map.put("个人养老金", Arrays.asList(personalPensionTitle)); freeIncomeRowList.add(row);
});
map.put("免税收入", freeIncomeRowList);
List<List<Object>> healthInsuranceRowList = new ArrayList<>();
List<Object> healthInsuranceTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "税优识别码", "保单生效日期", "年度保费", "月度保费", "本期扣除金额");
healthInsuranceRowList.add(healthInsuranceTitle);
healthInsuranceList.forEach(dto -> {
List<Object> row = new ArrayList<>();
row.add(dto.getUsername());
row.add(dto.getTaxAgentName());
row.add(dto.getDepartmentName());
row.add(dto.getMobile());
row.add(dto.getJobNum());
row.add(dto.getIdNo());
row.add(dto.getIdentificationNumber());
row.add(dto.getEffectiveDate());
row.add(dto.getYearPremium());
row.add(dto.getMonthPremium());
row.add(dto.getCurrentDeduction());
healthInsuranceRowList.add(row);
});
map.put("商业健康保险", healthInsuranceRowList);
List<List<Object>> endowmentInsuranceRowList = new ArrayList<>();
List<Object> endowmentInsuranceTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "税延养老账户编号", "报税校验码", "年度保费", "月度保费", "本期扣除金额");
endowmentInsuranceRowList.add(endowmentInsuranceTitle);
endowmentInsuranceList.forEach(dto -> {
List<Object> row = new ArrayList<>();
row.add(dto.getUsername());
row.add(dto.getTaxAgentName());
row.add(dto.getDepartmentName());
row.add(dto.getMobile());
row.add(dto.getJobNum());
row.add(dto.getIdNo());
row.add(dto.getAccountNumber());
row.add(dto.getCheckCode());
row.add(dto.getYearPremium());
row.add(dto.getMonthPremium());
row.add(dto.getCurrentDeduction());
endowmentInsuranceRowList.add(row);
});
map.put("税延养老保险", endowmentInsuranceRowList);
List<List<Object>> grantDonationRowList = new ArrayList<>();
List<Object> grantDonationTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "受赠单位名称", "受赠单位纳税人识别号", "凭证号", "捐赠日期", "捐赠金额", "扣除比例", "实际扣除金额");
grantDonationRowList.add(grantDonationTitle);
grantDonationList.forEach(dto -> {
List<Object> row = new ArrayList<>();
row.add(dto.getUsername());
row.add(dto.getTaxAgentName());
row.add(dto.getDepartmentName());
row.add(dto.getMobile());
row.add(dto.getJobNum());
row.add(dto.getIdNo());
row.add(dto.getRecipientName());
row.add(dto.getTaxCode());
row.add(dto.getDonationNumber());
row.add(dto.getDonateDate());
row.add(dto.getDonateAmount());
row.add(dto.getDeductionProportion());
row.add(dto.getActualDeduction());
grantDonationRowList.add(row);
});
map.put("准予扣除的捐赠额", grantDonationRowList);
List<List<Object>> derateDeductionRowList = new ArrayList<>();
List<Object> derateDeductionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "减免事项", "减免性质", "减免金额");
derateDeductionRowList.add(derateDeductionTitle);
derateDeductionList.forEach(dto -> {
List<Object> row = new ArrayList<>();
row.add(dto.getUsername());
row.add(dto.getTaxAgentName());
row.add(dto.getDepartmentName());
row.add(dto.getMobile());
row.add(dto.getJobNum());
row.add(dto.getIdNo());
row.add(dto.getDerateItem());
row.add(dto.getDerateProperty());
row.add(dto.getDerateAmount());
derateDeductionRowList.add(row);
});
map.put("减免税额", derateDeductionRowList);
List<List<Object>> otherDerateDeductionRowList = new ArrayList<>();
List<Object> otherDerateDeductionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "其他免税扣除金额", "备注");
otherDerateDeductionRowList.add(otherDerateDeductionTitle);
otherDerateDeductionList.forEach(dto -> {
List<Object> row = new ArrayList<>();
row.add(dto.getUsername());
row.add(dto.getTaxAgentName());
row.add(dto.getDepartmentName());
row.add(dto.getMobile());
row.add(dto.getJobNum());
row.add(dto.getIdNo());
row.add(dto.getOtherDeduction());
row.add(dto.getRemark());
otherDerateDeductionRowList.add(row);
});
map.put("其他", otherDerateDeductionRowList);
List<List<Object>> personalPensionRowList = new ArrayList<>();
List<Object> personalPensionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "凭证类型", "凭证编码", "缴费金额");
personalPensionRowList.add(personalPensionTitle);
personalPensionList.forEach(dto -> {
List<Object> row = new ArrayList<>();
row.add(dto.getUsername());
row.add(dto.getTaxAgentName());
row.add(dto.getDepartmentName());
row.add(dto.getMobile());
row.add(dto.getJobNum());
row.add(dto.getIdNo());
row.add(dto.getVoucherTypeName());
row.add(dto.getVoucherNo());
row.add(dto.getPayAmount());
personalPensionRowList.add(row);
});
map.put("个人养老金", personalPensionRowList);
XSSFWorkbook book = ExcelUtil.genWorkbookV2(map); XSSFWorkbook book = ExcelUtil.genWorkbookV2(map);
return book; return book;
@ -2254,6 +2424,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
} }
List<FreeIncomePO> pos = getFreeIncomeMapper().listSome(build); List<FreeIncomePO> pos = getFreeIncomeMapper().listSome(build);
List<FreeIncomeListDTO> listDTOS = freeIncomePO2DTO(pos);
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, FreeIncomeListDTO.class);
}
@NotNull
private List<FreeIncomeListDTO> freeIncomePO2DTO(List<FreeIncomePO> pos) {
List<Long> empIds = SalaryEntityUtil.properties(pos, FreeIncomePO::getEmployeeId, Collectors.toList()); List<Long> empIds = SalaryEntityUtil.properties(pos, FreeIncomePO::getEmployeeId, Collectors.toList());
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds); List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds);
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId);
@ -2272,7 +2448,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
dto.setIdNo(employee.getIdNo()); dto.setIdNo(employee.getIdNo());
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, FreeIncomeListDTO.class); return listDTOS;
} }
@Override @Override
@ -2285,6 +2461,11 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
} }
List<DerateDeductionPO> pos = getDerateDeductionMapper().listSome(build); List<DerateDeductionPO> pos = getDerateDeductionMapper().listSome(build);
List<DerateDeductionListDTO> listDTOS = derateDeductionPO2DTO(pos);
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, DerateDeductionListDTO.class);
}
private List<DerateDeductionListDTO> derateDeductionPO2DTO(List<DerateDeductionPO> pos) {
List<Long> empIds = SalaryEntityUtil.properties(pos, DerateDeductionPO::getEmployeeId, Collectors.toList()); List<Long> empIds = SalaryEntityUtil.properties(pos, DerateDeductionPO::getEmployeeId, Collectors.toList());
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds); List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds);
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId);
@ -2303,7 +2484,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
dto.setIdNo(employee.getIdNo()); dto.setIdNo(employee.getIdNo());
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, DerateDeductionListDTO.class); return listDTOS;
} }
@Override @Override
@ -2316,6 +2497,13 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
} }
List<EndowmentInsurancePO> pos = getEndowmentInsuranceMapper().listSome(build); List<EndowmentInsurancePO> pos = getEndowmentInsuranceMapper().listSome(build);
List<EndowmentInsuranceListDTO> listDTOS = endowmentInsurancePO2DTO(pos);
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, EndowmentInsuranceListDTO.class);
}
@NotNull
private List<EndowmentInsuranceListDTO> endowmentInsurancePO2DTO(List<EndowmentInsurancePO> pos) {
List<Long> empIds = SalaryEntityUtil.properties(pos, EndowmentInsurancePO::getEmployeeId, Collectors.toList()); List<Long> empIds = SalaryEntityUtil.properties(pos, EndowmentInsurancePO::getEmployeeId, Collectors.toList());
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds); List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds);
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId);
@ -2334,7 +2522,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
dto.setIdNo(employee.getIdNo()); dto.setIdNo(employee.getIdNo());
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, EndowmentInsuranceListDTO.class); return listDTOS;
} }
@Override @Override
@ -2347,6 +2535,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
} }
List<GrantDonationPO> pos = getGrantDonationMapper().listSome(build); List<GrantDonationPO> pos = getGrantDonationMapper().listSome(build);
List<GrantDonationListDTO> listDTOS = grantDonationPO2DTO(pos);
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, GrantDonationListDTO.class);
}
@NotNull
private List<GrantDonationListDTO> grantDonationPO2DTO(List<GrantDonationPO> pos) {
List<Long> empIds = SalaryEntityUtil.properties(pos, GrantDonationPO::getEmployeeId, Collectors.toList()); List<Long> empIds = SalaryEntityUtil.properties(pos, GrantDonationPO::getEmployeeId, Collectors.toList());
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds); List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds);
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId);
@ -2365,7 +2559,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
dto.setIdNo(employee.getIdNo()); dto.setIdNo(employee.getIdNo());
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, GrantDonationListDTO.class); return listDTOS;
} }
@Override @Override
@ -2378,6 +2572,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
} }
List<HealthInsurancePO> pos = getHealthInsuranceMapper().listSome(build); List<HealthInsurancePO> pos = getHealthInsuranceMapper().listSome(build);
List<HealthInsuranceListDTO> listDTOS = healthInsurancePO2DTO(pos);
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, HealthInsuranceListDTO.class);
}
@NotNull
private List<HealthInsuranceListDTO> healthInsurancePO2DTO(List<HealthInsurancePO> pos) {
List<Long> empIds = SalaryEntityUtil.properties(pos, HealthInsurancePO::getEmployeeId, Collectors.toList()); List<Long> empIds = SalaryEntityUtil.properties(pos, HealthInsurancePO::getEmployeeId, Collectors.toList());
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds); List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds);
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId);
@ -2396,7 +2596,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
dto.setIdNo(employee.getIdNo()); dto.setIdNo(employee.getIdNo());
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, HealthInsuranceListDTO.class); return listDTOS;
} }
@Override @Override
@ -2409,6 +2609,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
} }
List<OtherDerateDeductionPO> pos = getOtherDerateDeductionMapper().listSome(build); List<OtherDerateDeductionPO> pos = getOtherDerateDeductionMapper().listSome(build);
List<OtherDerateDeductionListDTO> listDTOS = otherDerateDeductionPO2DTO(pos);
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, OtherDerateDeductionListDTO.class);
}
@NotNull
private List<OtherDerateDeductionListDTO> otherDerateDeductionPO2DTO(List<OtherDerateDeductionPO> pos) {
List<Long> empIds = SalaryEntityUtil.properties(pos, OtherDerateDeductionPO::getEmployeeId, Collectors.toList()); List<Long> empIds = SalaryEntityUtil.properties(pos, OtherDerateDeductionPO::getEmployeeId, Collectors.toList());
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds); List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds);
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId);
@ -2427,7 +2633,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
dto.setIdNo(employee.getIdNo()); dto.setIdNo(employee.getIdNo());
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, OtherDerateDeductionListDTO.class); return listDTOS;
} }
@Override @Override
@ -2440,6 +2646,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
} }
List<PersonalPensionPO> pos = getPersonalPensionMapper().listSome(build); List<PersonalPensionPO> pos = getPersonalPensionMapper().listSome(build);
List<PersonalPensionListDTO> listDTOS = personalPensionPO2DTO(pos);
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, PersonalPensionListDTO.class);
}
@NotNull
private List<PersonalPensionListDTO> personalPensionPO2DTO(List<PersonalPensionPO> pos) {
List<Long> empIds = SalaryEntityUtil.properties(pos, PersonalPensionPO::getEmployeeId, Collectors.toList()); List<Long> empIds = SalaryEntityUtil.properties(pos, PersonalPensionPO::getEmployeeId, Collectors.toList());
List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds); List<DataCollectionEmployee> employeeList = getSalaryEmployeeService(user).listByIds(empIds);
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId);
@ -2458,7 +2670,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
dto.setIdNo(employee.getIdNo()); dto.setIdNo(employee.getIdNo());
return dto; return dto;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, PersonalPensionListDTO.class); return listDTOS;
} }
@Override @Override
@ -2547,6 +2759,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
getFreeIncomeMapper().updateIgnoreNull(po); getFreeIncomeMapper().updateIgnoreNull(po);
} }
syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.FREE_INCOME));
} }
@Override @Override
@ -2598,6 +2812,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
getEndowmentInsuranceMapper().updateIgnoreNull(po); getEndowmentInsuranceMapper().updateIgnoreNull(po);
} }
syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.ENDOWMENT_INSURANCE));
} }
@Override @Override
@ -2651,6 +2867,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
getGrantDonationMapper().updateIgnoreNull(po); getGrantDonationMapper().updateIgnoreNull(po);
} }
syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.GRANT_DONATION));
} }
@Override @Override
@ -2700,6 +2918,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
getHealthInsuranceMapper().updateIgnoreNull(po); getHealthInsuranceMapper().updateIgnoreNull(po);
} }
syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.HEALTH_INSURANCE));
} }
@Override @Override
@ -2743,6 +2963,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
getOtherDerateDeductionMapper().updateIgnoreNull(po); getOtherDerateDeductionMapper().updateIgnoreNull(po);
} }
syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION));
} }
@Override @Override
@ -2788,6 +3010,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
getDerateDeductionMapper().updateIgnoreNull(po); getDerateDeductionMapper().updateIgnoreNull(po);
} }
syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.DERATE_DEDUCTION));
} }
@Override @Override
@ -2833,41 +3057,136 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction
getPersonalPensionMapper().updateIgnoreNull(po); getPersonalPensionMapper().updateIgnoreNull(po);
} }
syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.PERSONAL_PENSION));
} }
@Override @Override
public void deleteFreeIncome(OtherDeductionDetailDeleteParam param) { public void deleteFreeIncome(OtherDeductionDetailDeleteParam param) {
getFreeIncomeMapper().deleteByIds(param.getIds()); getFreeIncomeMapper().deleteByIds(param.getIds());
syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.FREE_INCOME));
} }
@Override @Override
public void deleteEndowmentInsurance(OtherDeductionDetailDeleteParam param) { public void deleteEndowmentInsurance(OtherDeductionDetailDeleteParam param) {
getEndowmentInsuranceMapper().deleteByIds(param.getIds()); getEndowmentInsuranceMapper().deleteByIds(param.getIds());
syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.ENDOWMENT_INSURANCE));
} }
@Override @Override
public void deleteGrantDonation(OtherDeductionDetailDeleteParam param) { public void deleteGrantDonation(OtherDeductionDetailDeleteParam param) {
getGrantDonationMapper().deleteByIds(param.getIds()); getGrantDonationMapper().deleteByIds(param.getIds());
syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.GRANT_DONATION));
} }
@Override @Override
public void deleteHealthInsurance(OtherDeductionDetailDeleteParam param) { public void deleteHealthInsurance(OtherDeductionDetailDeleteParam param) {
getHealthInsuranceMapper().deleteByIds(param.getIds()); getHealthInsuranceMapper().deleteByIds(param.getIds());
syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.HEALTH_INSURANCE));
} }
@Override @Override
public void deleteOtherDerateDeduction(OtherDeductionDetailDeleteParam param) { public void deleteOtherDerateDeduction(OtherDeductionDetailDeleteParam param) {
getOtherDerateDeductionMapper().deleteByIds(param.getIds()); getOtherDerateDeductionMapper().deleteByIds(param.getIds());
syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION));
} }
@Override @Override
public void deleteDerateDeduction(OtherDeductionDetailDeleteParam param) { public void deleteDerateDeduction(OtherDeductionDetailDeleteParam param) {
getDerateDeductionMapper().deleteByIds(param.getIds()); getDerateDeductionMapper().deleteByIds(param.getIds());
syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.DERATE_DEDUCTION));
} }
@Override @Override
public void deletePersonalPension(OtherDeductionDetailDeleteParam param) { public void deletePersonalPension(OtherDeductionDetailDeleteParam param) {
getPersonalPensionMapper().deleteByIds(param.getIds()); getPersonalPensionMapper().deleteByIds(param.getIds());
syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.PERSONAL_PENSION));
}
@Override
public void syncMain(Long mainId, List<TaxFreeTypeEnum> taxFreeTypes) {
OtherDeductionPO deductionPO = getById(mainId);
if (deductionPO == null) {
throw new SalaryRunTimeException("主表不存在!");
}
if (taxFreeTypes.contains(TaxFreeTypeEnum.FREE_INCOME)) {
syncFreeIncome(deductionPO);
}
if (taxFreeTypes.contains(TaxFreeTypeEnum.HEALTH_INSURANCE)) {
syncHealthInsurance(deductionPO);
}
if (taxFreeTypes.contains(TaxFreeTypeEnum.ENDOWMENT_INSURANCE)) {
syncEndowmentInsurance(deductionPO);
}
if (taxFreeTypes.contains(TaxFreeTypeEnum.GRANT_DONATION)) {
syncGrantDonation(deductionPO);
}
if (taxFreeTypes.contains(TaxFreeTypeEnum.DERATE_DEDUCTION)) {
syncDerateDeduction(deductionPO);
}
if (taxFreeTypes.contains(TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION)) {
syncOtherDerateDeduction(deductionPO);
}
if (taxFreeTypes.contains(TaxFreeTypeEnum.PERSONAL_PENSION)) {
syncPersonalPension(deductionPO);
}
}
@Override
public void syncFreeIncome(OtherDeductionPO mainPO) {
List<FreeIncomePO> freeIncomePOS = getFreeIncomeMapper().listSome(FreeIncomePO.builder().mainId(mainPO.getId()).build());
String sum = freeIncomePOS.stream().filter(po -> NumberUtil.isNumber(po.getFreeAmount())).map(po -> new BigDecimal(po.getFreeAmount())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
mainPO.setFreeIncome(sum);
getOtherDeductionMapper().updateData(Collections.singletonList(mainPO));
}
@Override
public void syncEndowmentInsurance(OtherDeductionPO mainPO) {
List<EndowmentInsurancePO> endowmentInsurancePOS = getEndowmentInsuranceMapper().listSome(EndowmentInsurancePO.builder().mainId(mainPO.getId()).build());
String sum = endowmentInsurancePOS.stream().filter(po -> NumberUtil.isNumber(po.getCurrentDeduction())).map(po -> new BigDecimal(po.getCurrentDeduction())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
mainPO.setTaxDelayEndowmentInsurance(sum);
getOtherDeductionMapper().updateData(Collections.singletonList(mainPO));
}
@Override
public void syncGrantDonation(OtherDeductionPO mainPO) {
List<GrantDonationPO> grantDonationPOS = getGrantDonationMapper().listSome(GrantDonationPO.builder().mainId(mainPO.getId()).build());
String sum = grantDonationPOS.stream().filter(po -> NumberUtil.isNumber(po.getActualDeduction())).map(po -> new BigDecimal(po.getActualDeduction())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
mainPO.setDeductionAllowedDonation(sum);
getOtherDeductionMapper().updateData(Collections.singletonList(mainPO));
}
@Override
public void syncHealthInsurance(OtherDeductionPO mainPO) {
List<HealthInsurancePO> healthInsurancePOS = getHealthInsuranceMapper().listSome(HealthInsurancePO.builder().mainId(mainPO.getId()).build());
String sum = healthInsurancePOS.stream().filter(po -> NumberUtil.isNumber(po.getCurrentDeduction())).map(po -> new BigDecimal(po.getCurrentDeduction())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
mainPO.setBusinessHealthyInsurance(sum);
getOtherDeductionMapper().updateData(Collections.singletonList(mainPO));
}
@Override
public void syncOtherDerateDeduction(OtherDeductionPO mainPO) {
List<OtherDerateDeductionPO> otherDerateDeductionPOS = getOtherDerateDeductionMapper().listSome(OtherDerateDeductionPO.builder().mainId(mainPO.getId()).build());
String sum = otherDerateDeductionPOS.stream().filter(po -> NumberUtil.isNumber(po.getOtherDeduction())).map(po -> new BigDecimal(po.getOtherDeduction())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
mainPO.setOtherDeduction(sum);
getOtherDeductionMapper().updateData(Collections.singletonList(mainPO));
}
@Override
public void syncDerateDeduction(OtherDeductionPO mainPO) {
List<DerateDeductionPO> derateDeductionPOS = getDerateDeductionMapper().listSome(DerateDeductionPO.builder().mainId(mainPO.getId()).build());
String sum = derateDeductionPOS.stream().filter(po -> NumberUtil.isNumber(po.getDerateAmount())).map(po -> new BigDecimal(po.getDerateAmount())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
mainPO.setDerateDeduction(sum);
getOtherDeductionMapper().updateData(Collections.singletonList(mainPO));
}
@Override
public void syncPersonalPension(OtherDeductionPO mainPO) {
List<PersonalPensionPO> personalPensionPOS = getPersonalPensionMapper().listSome(PersonalPensionPO.builder().mainId(mainPO.getId()).build());
String sum = personalPensionPOS.stream().filter(po -> NumberUtil.isNumber(po.getPayAmount())).map(po -> new BigDecimal(po.getPayAmount())).reduce(BigDecimal.ZERO, BigDecimal::add).toPlainString();
mainPO.setPrivatePension(sum);
getOtherDeductionMapper().updateData(Collections.singletonList(mainPO));
} }
} }