diff --git a/src/com/engine/salary/entity/datacollection/param/OtherDeductionDetailDeleteParam.java b/src/com/engine/salary/entity/datacollection/param/OtherDeductionDetailDeleteParam.java index 447c04b87..c97a0b9a7 100644 --- a/src/com/engine/salary/entity/datacollection/param/OtherDeductionDetailDeleteParam.java +++ b/src/com/engine/salary/entity/datacollection/param/OtherDeductionDetailDeleteParam.java @@ -23,4 +23,6 @@ public class OtherDeductionDetailDeleteParam { // 主键id private List ids; + + private Long mainId; } diff --git a/src/com/engine/salary/service/OtherDeductionService.java b/src/com/engine/salary/service/OtherDeductionService.java index c8e72bb1e..c02d4a948 100644 --- a/src/com/engine/salary/service/OtherDeductionService.java +++ b/src/com/engine/salary/service/OtherDeductionService.java @@ -3,6 +3,7 @@ package com.engine.salary.service; import com.engine.salary.entity.datacollection.dto.*; import com.engine.salary.entity.datacollection.param.*; import com.engine.salary.entity.datacollection.po.*; +import com.engine.salary.enums.datacollection.TaxFreeTypeEnum; import com.engine.salary.util.page.PageInfo; import org.apache.poi.xssf.usermodel.XSSFWorkbook; @@ -125,35 +126,75 @@ public interface OtherDeductionService { String extendToLastMonth(OtherDeductionExtendLastParam param); PageInfo freeIncomeList(OtherDeductionDetailQueryParam param); + PageInfo derateDeductionList(OtherDeductionDetailQueryParam param); + PageInfo endowmentInsuranceList(OtherDeductionDetailQueryParam param); + PageInfo grantDonationList(OtherDeductionDetailQueryParam param); + PageInfo healthInsuranceList(OtherDeductionDetailQueryParam param); + PageInfo otherDerateDeductionList(OtherDeductionDetailQueryParam param); + PageInfo personalPensionList(OtherDeductionDetailQueryParam param); List queryFreeIncomes(OtherDeductionFreeListQueryParam param); + List queryDerateDeductions(OtherDeductionFreeListQueryParam param); + List queryEndowmentInsurances(OtherDeductionFreeListQueryParam param); + List queryGrantDonations(OtherDeductionFreeListQueryParam param); + List queryHealthInsurances(OtherDeductionFreeListQueryParam param); + List queryOtherDerateDeductions(OtherDeductionFreeListQueryParam param); + List queryPersonalPensions(OtherDeductionFreeListQueryParam param); void saveFreeIncome(FreeIncomeSaveParam param); + void saveEndowmentInsurance(EndowmentInsuranceSaveParam param); + void saveGrantDonation(GrantDonationSaveParam param); + void saveHealthInsurance(HealthInsuranceSaveParam param); + void saveOtherDerateDeduction(OtherDerateDeductionSaveParam param); + void saveDerateDeduction(DerateDeductionSaveParam param); + void savePersonalPension(PersonalPensionSaveParam param); void deleteFreeIncome(OtherDeductionDetailDeleteParam param); + void deleteEndowmentInsurance(OtherDeductionDetailDeleteParam param); + void deleteGrantDonation(OtherDeductionDetailDeleteParam param); + void deleteHealthInsurance(OtherDeductionDetailDeleteParam param); + void deleteOtherDerateDeduction(OtherDeductionDetailDeleteParam param); + void deleteDerateDeduction(OtherDeductionDetailDeleteParam param); + void deletePersonalPension(OtherDeductionDetailDeleteParam param); + void syncMain(Long mainId, List 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); + } diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index 9cabcfbda..49b627e22 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -21,6 +21,7 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; 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.exception.SalaryRunTimeException; 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.util.IOUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.BeanUtils; import weaver.file.ImageFileManager; import weaver.general.Util; @@ -1559,6 +1561,14 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction l.setMainId(po.getId()); 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; @@ -2221,23 +2231,183 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction public XSSFWorkbook downloadDetailTemplate(OtherDeductionQueryParam param) { + List freeIncomeList = new ArrayList<>(); + List healthInsuranceList = new ArrayList<>(); + List endowmentInsuranceList = new ArrayList<>(); + List grantDonationList = new ArrayList<>(); + List derateDeductionList = new ArrayList<>(); + List otherDerateDeductionList = new ArrayList<>(); + List personalPensionList = new ArrayList<>(); + if (param.isHasData()) { + long employeeId = user.getUID(); + //排序配置 + OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); + param.setOrderRule(orderRule); + + List list = getOtherDeductionMapper().list(param); + encryptUtil.decryptList(list, OtherDeductionListDTO.class); + SalaryI18nUtil.i18nList(list); + // 开启分权并且不是薪酬模块总管理员 + if (getTaxAgentService(user).isOpenDevolution() && !getTaxAgentService(user).isChief(employeeId)) { + List 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 freeIncomeListDTOS = freeIncomePO2DTO(getFreeIncomeMapper().listSome(FreeIncomePO.builder().mainId(dto.getId()).build())); + freeIncomeList.addAll(freeIncomeListDTOS); + List endowmentInsuranceListDTOS = endowmentInsurancePO2DTO(getEndowmentInsuranceMapper().listSome(EndowmentInsurancePO.builder().mainId(dto.getId()).build())); + endowmentInsuranceList.addAll(endowmentInsuranceListDTOS); + List grantDonationListDTOS = grantDonationPO2DTO(getGrantDonationMapper().listSome(GrantDonationPO.builder().mainId(dto.getId()).build())); + grantDonationList.addAll(grantDonationListDTOS); + List healthInsuranceListDTOS = healthInsurancePO2DTO(getHealthInsuranceMapper().listSome(HealthInsurancePO.builder().mainId(dto.getId()).build())); + healthInsuranceList.addAll(healthInsuranceListDTOS); + List otherDerateDeductionListDTOS = otherDerateDeductionPO2DTO(getOtherDerateDeductionMapper().listSome(OtherDerateDeductionPO.builder().mainId(dto.getId()).build())); + otherDerateDeductionList.addAll(otherDerateDeductionListDTOS); + List derateDeductionListDTOS = derateDeductionPO2DTO(getDerateDeductionMapper().listSome(DerateDeductionPO.builder().mainId(dto.getId()).build())); + derateDeductionList.addAll(derateDeductionListDTOS); + List personalPensionListDTOS = personalPensionPO2DTO(getPersonalPensionMapper().listSome(PersonalPensionPO.builder().mainId(dto.getId()).build())); + personalPensionList.addAll(personalPensionListDTOS); + }); + } + Map>> map = new LinkedHashMap<>(); + List> freeIncomeRowList = new ArrayList<>(); List freeIncomeTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "免税事项", "免税性质", "免税金额"); - map.put("免税收入", Arrays.asList(freeIncomeTitle)); - List healthInsuranceTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "税优识别码", "保单生效日期", "年度保费", "月度保费", "本期扣除金额"); - map.put("商业健康保险", Arrays.asList(healthInsuranceTitle)); - List endowmentInsuranceTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "税延养老账户编号", "报税校验码", "年度保费", "月度保费", "本期扣除金额"); - map.put("税延养老保险", Arrays.asList(endowmentInsuranceTitle)); - List grantDonationTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "受赠单位名称", "受赠单位纳税人识别号", "凭证号", "捐赠日期", "捐赠金额", "扣除比例", "实际扣除金额"); - map.put("准予扣除的捐赠额", Arrays.asList(grantDonationTitle)); - List derateDeductionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "减免事项", "减免性质", "减免金额"); - map.put("减免税额", Arrays.asList(derateDeductionTitle)); - List otherDerateDeductionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "其他免税扣除金额", "备注"); - map.put("其他", Arrays.asList(otherDerateDeductionTitle)); - List personalPensionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "凭证类型", "凭证编码", "缴费金额"); - map.put("个人养老金", Arrays.asList(personalPensionTitle)); + freeIncomeRowList.add(freeIncomeTitle); + freeIncomeList.forEach(dto -> { + List 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.getFreeItem()); + row.add(dto.getFreeProperty()); + row.add(dto.getFreeAmount()); + freeIncomeRowList.add(row); + }); + map.put("免税收入", freeIncomeRowList); + List> healthInsuranceRowList = new ArrayList<>(); + List healthInsuranceTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "税优识别码", "保单生效日期", "年度保费", "月度保费", "本期扣除金额"); + healthInsuranceRowList.add(healthInsuranceTitle); + healthInsuranceList.forEach(dto -> { + List 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> endowmentInsuranceRowList = new ArrayList<>(); + List endowmentInsuranceTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "税延养老账户编号", "报税校验码", "年度保费", "月度保费", "本期扣除金额"); + endowmentInsuranceRowList.add(endowmentInsuranceTitle); + endowmentInsuranceList.forEach(dto -> { + List 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> grantDonationRowList = new ArrayList<>(); + List grantDonationTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "受赠单位名称", "受赠单位纳税人识别号", "凭证号", "捐赠日期", "捐赠金额", "扣除比例", "实际扣除金额"); + grantDonationRowList.add(grantDonationTitle); + grantDonationList.forEach(dto -> { + List 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> derateDeductionRowList = new ArrayList<>(); + List derateDeductionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "减免事项", "减免性质", "减免金额"); + derateDeductionRowList.add(derateDeductionTitle); + derateDeductionList.forEach(dto -> { + List 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> otherDerateDeductionRowList = new ArrayList<>(); + List otherDerateDeductionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "其他免税扣除金额", "备注"); + otherDerateDeductionRowList.add(otherDerateDeductionTitle); + otherDerateDeductionList.forEach(dto -> { + List 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> personalPensionRowList = new ArrayList<>(); + List personalPensionTitle = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "凭证类型", "凭证编码", "缴费金额"); + personalPensionRowList.add(personalPensionTitle); + personalPensionList.forEach(dto -> { + List 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); return book; @@ -2254,6 +2424,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getFreeIncomeMapper().listSome(build); + List listDTOS = freeIncomePO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, FreeIncomeListDTO.class); + } + + @NotNull + private List freeIncomePO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, FreeIncomePO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2272,7 +2448,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, FreeIncomeListDTO.class); + return listDTOS; } @Override @@ -2285,6 +2461,11 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getDerateDeductionMapper().listSome(build); + List listDTOS = derateDeductionPO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, DerateDeductionListDTO.class); + } + + private List derateDeductionPO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, DerateDeductionPO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2303,7 +2484,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, DerateDeductionListDTO.class); + return listDTOS; } @Override @@ -2316,6 +2497,13 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getEndowmentInsuranceMapper().listSome(build); + + List listDTOS = endowmentInsurancePO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, EndowmentInsuranceListDTO.class); + } + + @NotNull + private List endowmentInsurancePO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, EndowmentInsurancePO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2334,7 +2522,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, EndowmentInsuranceListDTO.class); + return listDTOS; } @Override @@ -2347,6 +2535,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getGrantDonationMapper().listSome(build); + List listDTOS = grantDonationPO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, GrantDonationListDTO.class); + } + + @NotNull + private List grantDonationPO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, GrantDonationPO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2365,7 +2559,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, GrantDonationListDTO.class); + return listDTOS; } @Override @@ -2378,6 +2572,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getHealthInsuranceMapper().listSome(build); + List listDTOS = healthInsurancePO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, HealthInsuranceListDTO.class); + } + + @NotNull + private List healthInsurancePO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, HealthInsurancePO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2396,7 +2596,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, HealthInsuranceListDTO.class); + return listDTOS; } @Override @@ -2409,6 +2609,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getOtherDerateDeductionMapper().listSome(build); + List listDTOS = otherDerateDeductionPO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, OtherDerateDeductionListDTO.class); + } + + @NotNull + private List otherDerateDeductionPO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, OtherDerateDeductionPO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2427,7 +2633,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, OtherDerateDeductionListDTO.class); + return listDTOS; } @Override @@ -2440,6 +2646,12 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction } List pos = getPersonalPensionMapper().listSome(build); + List listDTOS = personalPensionPO2DTO(pos); + return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, PersonalPensionListDTO.class); + } + + @NotNull + private List personalPensionPO2DTO(List pos) { List empIds = SalaryEntityUtil.properties(pos, PersonalPensionPO::getEmployeeId, Collectors.toList()); List employeeList = getSalaryEmployeeService(user).listByIds(empIds); Map employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId); @@ -2458,7 +2670,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction dto.setIdNo(employee.getIdNo()); return dto; }).collect(Collectors.toList()); - return SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), listDTOS, PersonalPensionListDTO.class); + return listDTOS; } @Override @@ -2547,6 +2759,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getFreeIncomeMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.FREE_INCOME)); } @Override @@ -2598,6 +2812,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getEndowmentInsuranceMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.ENDOWMENT_INSURANCE)); } @Override @@ -2651,6 +2867,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getGrantDonationMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.GRANT_DONATION)); } @Override @@ -2700,6 +2918,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getHealthInsuranceMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.HEALTH_INSURANCE)); } @Override @@ -2743,6 +2963,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getOtherDerateDeductionMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION)); } @Override @@ -2788,6 +3010,8 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getDerateDeductionMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.DERATE_DEDUCTION)); } @Override @@ -2833,41 +3057,136 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction getPersonalPensionMapper().updateIgnoreNull(po); } + + syncMain(mainId, Collections.singletonList(TaxFreeTypeEnum.PERSONAL_PENSION)); } @Override public void deleteFreeIncome(OtherDeductionDetailDeleteParam param) { getFreeIncomeMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.FREE_INCOME)); } @Override public void deleteEndowmentInsurance(OtherDeductionDetailDeleteParam param) { getEndowmentInsuranceMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.ENDOWMENT_INSURANCE)); } @Override public void deleteGrantDonation(OtherDeductionDetailDeleteParam param) { getGrantDonationMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.GRANT_DONATION)); } @Override public void deleteHealthInsurance(OtherDeductionDetailDeleteParam param) { getHealthInsuranceMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.HEALTH_INSURANCE)); } @Override public void deleteOtherDerateDeduction(OtherDeductionDetailDeleteParam param) { getOtherDerateDeductionMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.OTHER_DERATE_DEDUCTION)); } @Override public void deleteDerateDeduction(OtherDeductionDetailDeleteParam param) { getDerateDeductionMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.DERATE_DEDUCTION)); } @Override public void deletePersonalPension(OtherDeductionDetailDeleteParam param) { getPersonalPensionMapper().deleteByIds(param.getIds()); + syncMain(param.getMainId(), Collections.singletonList(TaxFreeTypeEnum.PERSONAL_PENSION)); + } + + @Override + public void syncMain(Long mainId, List 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 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 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 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 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 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 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 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)); } }