From 5d0b8e7759a3359e8364af14c9d46eccee9b06e2 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 18 Mar 2024 14:01:08 +0800 Subject: [PATCH 01/96] =?UTF-8?q?=E5=AF=BC=E5=87=BAexcel=E5=8D=95=E5=85=83?= =?UTF-8?q?=E6=A0=BC=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AddUpDeductionServiceImpl.java | 47 ++--- .../impl/AddUpSituationServiceImpl.java | 92 +++++----- .../impl/AttendQuoteDataServiceImpl.java | 12 +- .../impl/OtherDeductionServiceImpl.java | 40 +++-- .../service/impl/SIExportServiceImpl.java | 11 +- .../service/impl/SISchemeServiceImpl.java | 6 +- .../impl/SalaryArchiveServiceImpl.java | 37 ++-- .../impl/SpecialAddDeductionServiceImpl.java | 64 +++---- .../impl/TaxDeclarationExcelServiceImpl.java | 46 ++++- .../engine/salary/util/excel/ExcelUtil.java | 163 ++++++++++++++++++ .../salary/util/excel/ExcelUtilPlus.java | 114 ++++++++++++ 11 files changed, 494 insertions(+), 138 deletions(-) diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index f2bf7b9d8..245b06860 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -1,6 +1,7 @@ package com.engine.salary.service.impl; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.NumberUtil; import com.api.browser.bean.SearchConditionGroup; import com.api.browser.bean.SearchConditionItem; import com.api.browser.util.ConditionFactory; @@ -63,6 +64,7 @@ import weaver.general.Util; import weaver.hrm.User; import java.io.InputStream; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.*; import java.util.*; @@ -1048,11 +1050,11 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction //获取操作按钮资源 - List> rowList = getExcelRowDetailList(isChief, queryParam); + List> rowList = getExcelRowDetailList(isChief, queryParam); //获取excel - return ExcelUtil.genWorkbook(rowList, "累计专项附加扣除明细"); + return ExcelUtil.genWorkbookWithDefaultPattern(rowList, "累计专项附加扣除明细", 2); } @@ -1062,32 +1064,33 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction * @param param * @return */ - private List> getExcelRowDetailList(boolean isChief, AddUpDeductionQueryParam param) { + private List> getExcelRowDetailList(boolean isChief, AddUpDeductionQueryParam param) { long employeeId = user.getUID(); //excel标题 - List title = Arrays.asList("姓名", "申报月份", "个税扣缴义务人", "部门", "工号", "累计子女教育", "累计继续教育", "累计住房贷款利息", "累计住房租金", "累计赡养老人", "累计大病医疗", "累计婴幼儿照护"); + List title = Arrays.asList("姓名", "申报月份", "个税扣缴义务人", "部门", "工号", "累计子女教育", "累计继续教育", "累计住房贷款利息", "累计住房租金", "累计赡养老人", "累计大病医疗", "累计婴幼儿照护"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); //查询详细信息 List list = new AddUpDeductionBiz().recordList(param); - final List> dataRowList = Optional.ofNullable(list) + final List> dataRowList = Optional.ofNullable(list) .map(List::stream) .map(operatorStream -> operatorStream.map(dto -> { - List cellList = new ArrayList<>(); + List cellList = new ArrayList<>(); cellList.add(Util.null2String(dto.getUsername())); cellList.add(Util.null2String(dto.getDeclareMonth() == null ? "" : formatter.format(dto.getDeclareMonth()))); cellList.add(Util.null2String(dto.getTaxAgentName())); cellList.add(Util.null2String(dto.getDepartmentName())); cellList.add(Util.null2String(dto.getJobNum())); - cellList.add(Util.null2String(dto.getAddUpChildEducation())); - cellList.add(Util.null2String(dto.getAddUpContinuingEducation())); - cellList.add(Util.null2String(dto.getAddUpHousingLoanInterest())); - cellList.add(Util.null2String(dto.getAddUpHousingRent())); - cellList.add(Util.null2String(dto.getAddUpSupportElderly())); - cellList.add(Util.null2String(dto.getAddUpIllnessMedical())); - cellList.add(Util.null2String(dto.getAddUpInfantCare())); + cellList.add(NumberUtil.isNumber(dto.getAddUpChildEducation()) ? new BigDecimal(dto.getAddUpChildEducation()) : Util.null2String(dto.getAddUpChildEducation())); + cellList.add(NumberUtil.isNumber(dto.getAddUpContinuingEducation()) ? new BigDecimal(dto.getAddUpContinuingEducation()) :Util.null2String(dto.getAddUpContinuingEducation())); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingLoanInterest()) ? new BigDecimal(dto.getAddUpHousingLoanInterest()) :Util.null2String(dto.getAddUpHousingLoanInterest())); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingRent()) ? new BigDecimal(dto.getAddUpHousingRent()) :Util.null2String(dto.getAddUpHousingRent())); + cellList.add(NumberUtil.isNumber(dto.getAddUpSupportElderly()) ? new BigDecimal(dto.getAddUpSupportElderly()) :Util.null2String(dto.getAddUpSupportElderly())); + cellList.add(NumberUtil.isNumber(dto.getAddUpIllnessMedical()) ? new BigDecimal(dto.getAddUpIllnessMedical()) :Util.null2String(dto.getAddUpIllnessMedical())); + cellList.add(NumberUtil.isNumber(dto.getAddUpInfantCare()) ? new BigDecimal(dto.getAddUpInfantCare()) :Util.null2String(dto.getAddUpInfantCare())); + return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); @@ -1107,7 +1110,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction } - List> rowList = new ArrayList<>(); + List> rowList = new ArrayList<>(); rowList.add(title); rowList.addAll(dataRowList); return rowList; @@ -1195,7 +1198,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction SalaryElogConfig.addUpDeductionLoggerTemplate.write(loggerContext); //获取excel - return ExcelUtil.genWorkbookV2(rowList, "累计专项附加扣除"); + return ExcelUtil.genWorkbookV2WithDefaultPattern(rowList, "累计专项附加扣除", 2); } private List> getLists(AddUpDeductionQueryParam param) { @@ -1230,13 +1233,13 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction cellList.add(Util.null2String(dto.getJobNum())); cellList.add(Util.null2String(dto.getIdNo())); cellList.add(Util.null2String(dto.getHiredate())); - cellList.add(Util.null2String(dto.getAddUpChildEducation())); - cellList.add(Util.null2String(dto.getAddUpContinuingEducation())); - cellList.add(Util.null2String(dto.getAddUpHousingLoanInterest())); - cellList.add(Util.null2String(dto.getAddUpHousingRent())); - cellList.add(Util.null2String(dto.getAddUpSupportElderly())); - cellList.add(Util.null2String(dto.getAddUpIllnessMedical())); - cellList.add(Util.null2String(dto.getAddUpInfantCare())); + cellList.add(NumberUtil.isNumber(dto.getAddUpChildEducation()) ? new BigDecimal(dto.getAddUpChildEducation()) : Util.null2String(dto.getAddUpChildEducation())); + cellList.add(NumberUtil.isNumber(dto.getAddUpContinuingEducation()) ? new BigDecimal(dto.getAddUpContinuingEducation()) :Util.null2String(dto.getAddUpContinuingEducation())); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingLoanInterest()) ? new BigDecimal(dto.getAddUpHousingLoanInterest()) :Util.null2String(dto.getAddUpHousingLoanInterest())); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingRent()) ? new BigDecimal(dto.getAddUpHousingRent()) :Util.null2String(dto.getAddUpHousingRent())); + cellList.add(NumberUtil.isNumber(dto.getAddUpSupportElderly()) ? new BigDecimal(dto.getAddUpSupportElderly()) :Util.null2String(dto.getAddUpSupportElderly())); + cellList.add(NumberUtil.isNumber(dto.getAddUpIllnessMedical()) ? new BigDecimal(dto.getAddUpIllnessMedical()) :Util.null2String(dto.getAddUpIllnessMedical())); + cellList.add(NumberUtil.isNumber(dto.getAddUpInfantCare()) ? new BigDecimal(dto.getAddUpInfantCare()) :Util.null2String(dto.getAddUpInfantCare())); return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); diff --git a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java index 9c7994261..c7bc48d87 100644 --- a/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpSituationServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.util.NumberUtil; import com.api.browser.bean.SearchConditionGroup; import com.api.browser.bean.SearchConditionItem; import com.api.browser.util.ConditionFactory; @@ -7,9 +8,9 @@ import com.api.browser.util.ConditionType; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.AddUpSituationBiz; import com.engine.salary.config.SalaryElogConfig; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.AddUpSituation; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -57,6 +58,7 @@ import weaver.general.Util; import weaver.hrm.User; import java.io.InputStream; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDate; import java.time.YearMonth; @@ -276,7 +278,7 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation SalaryElogConfig.addUpSituationLoggerTemplate.write(loggerContext); // 获取excel - return ExcelUtil.genWorkbookV2(rowList, "累计情况"); + return ExcelUtil.genWorkbookV2WithDefaultPattern(rowList, "累计情况", 2); } @@ -320,24 +322,24 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation cellList.add(Util.null2String(dto.getJobNum())); cellList.add(Util.null2String(dto.getIdNo())); cellList.add(Util.null2String(dto.getHiredate())); - cellList.add(Util.null2String(dto.getAddUpIncome())); - cellList.add(Util.null2String(dto.getAddUpSubtraction())); - cellList.add(Util.null2String(dto.getAddUpSocialSecurityTotal())); - cellList.add(Util.null2String(dto.getAddUpAccumulationFundTotal())); - cellList.add(Util.null2String(dto.getAddUpChildEducation())); - cellList.add(Util.null2String(dto.getAddUpContinuingEducation())); - cellList.add(Util.null2String(dto.getAddUpHousingLoanInterest())); - cellList.add(Util.null2String(dto.getAddUpHousingRent())); - cellList.add(Util.null2String(dto.getAddUpSupportElderly())); - cellList.add(Util.null2String(dto.getAddUpIllnessMedical())); - cellList.add(Util.null2String(dto.getAddUpEnterpriseAndOther())); - cellList.add(Util.null2String(dto.getAddUpOtherDeduction())); - cellList.add(Util.null2String(dto.getAddUpTaxExemptIncome())); - cellList.add(Util.null2String(dto.getAddUpAllowedDonation())); - cellList.add(Util.null2String(dto.getAddUpTaxSavings())); - cellList.add(Util.null2String(dto.getAddUpAdvanceTax())); - cellList.add(Util.null2String(dto.getAddUpInfantCare())); - cellList.add(Util.null2String(dto.getAddUpPrivatePension())); + cellList.add(NumberUtil.isNumber(dto.getAddUpIncome()) ? new BigDecimal(dto.getAddUpIncome()) : Util.null2String(dto.getAddUpIncome())); + cellList.add(NumberUtil.isNumber(dto.getAddUpSubtraction()) ? new BigDecimal(dto.getAddUpSubtraction()) : Util.null2String(dto.getAddUpSubtraction())); + cellList.add(NumberUtil.isNumber(dto.getAddUpSocialSecurityTotal()) ? new BigDecimal(dto.getAddUpSocialSecurityTotal()) : Util.null2String(dto.getAddUpSocialSecurityTotal())); + cellList.add(NumberUtil.isNumber(dto.getAddUpAccumulationFundTotal()) ? new BigDecimal(dto.getAddUpAccumulationFundTotal()) : Util.null2String(dto.getAddUpAccumulationFundTotal())); + cellList.add(NumberUtil.isNumber(dto.getAddUpChildEducation()) ? new BigDecimal(dto.getAddUpChildEducation()) : Util.null2String(dto.getAddUpChildEducation())); + cellList.add(NumberUtil.isNumber(dto.getAddUpContinuingEducation()) ? new BigDecimal(dto.getAddUpContinuingEducation()) : Util.null2String(dto.getAddUpContinuingEducation())); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingLoanInterest()) ? new BigDecimal(dto.getAddUpHousingLoanInterest()) : Util.null2String(dto.getAddUpHousingLoanInterest())); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingRent()) ? new BigDecimal(dto.getAddUpHousingRent()) : Util.null2String(dto.getAddUpHousingRent())); + cellList.add(NumberUtil.isNumber(dto.getAddUpSupportElderly()) ? new BigDecimal(dto.getAddUpSupportElderly()) : Util.null2String(dto.getAddUpSupportElderly())); + cellList.add(NumberUtil.isNumber(dto.getAddUpIllnessMedical()) ? new BigDecimal(dto.getAddUpIllnessMedical()) : Util.null2String(dto.getAddUpIllnessMedical())); + cellList.add(NumberUtil.isNumber(dto.getAddUpEnterpriseAndOther()) ? new BigDecimal(dto.getAddUpEnterpriseAndOther()) : Util.null2String(dto.getAddUpEnterpriseAndOther())); + cellList.add(NumberUtil.isNumber(dto.getAddUpOtherDeduction()) ? new BigDecimal(dto.getAddUpOtherDeduction()) : Util.null2String(dto.getAddUpOtherDeduction())); + cellList.add(NumberUtil.isNumber(dto.getAddUpTaxExemptIncome()) ? new BigDecimal(dto.getAddUpTaxExemptIncome()) : Util.null2String(dto.getAddUpTaxExemptIncome())); + cellList.add(NumberUtil.isNumber(dto.getAddUpAllowedDonation()) ? new BigDecimal(dto.getAddUpAllowedDonation()) : Util.null2String(dto.getAddUpAllowedDonation())); + cellList.add(NumberUtil.isNumber(dto.getAddUpTaxSavings()) ? new BigDecimal(dto.getAddUpTaxSavings()) : Util.null2String(dto.getAddUpTaxSavings())); + cellList.add(NumberUtil.isNumber(dto.getAddUpAdvanceTax()) ? new BigDecimal(dto.getAddUpAdvanceTax()) : Util.null2String(dto.getAddUpAdvanceTax())); + cellList.add(NumberUtil.isNumber(dto.getAddUpInfantCare()) ? new BigDecimal(dto.getAddUpInfantCare()) : Util.null2String(dto.getAddUpInfantCare())); + cellList.add(NumberUtil.isNumber(dto.getAddUpPrivatePension()) ? new BigDecimal(dto.getAddUpPrivatePension()) : Util.null2String(dto.getAddUpPrivatePension())); return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); @@ -354,10 +356,10 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation * @param param * @return */ - private List> getExcelRowDetailList(AddUpSituationQueryParam param) { + private List> getExcelRowDetailList(AddUpSituationQueryParam param) { long employeeId = user.getUID(); //excel标题 - List title = Arrays.asList("姓名", "税款所属期", "个税扣缴义务人", "部门", "手机号", "工号", "累计收入额", "累计减除费用", "累计社保个人合计", + List title = Arrays.asList("姓名", "税款所属期", "个税扣缴义务人", "部门", "手机号", "工号", "累计收入额", "累计减除费用", "累计社保个人合计", "累计公积金个人合计", "累计子女教育", "累计继续教育", "累计住房贷款利息", "累计住房租金", "累计赡养老人", "累计大病医疗", "累计企业(职业)年金及其他福利", "累计其他扣除", "累计免税收入", "累计准予扣除的捐赠额", "累计减免税额", "累计已预扣预缴税额", "累计婴幼儿照护", "累计个人养老金"); @@ -373,39 +375,39 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation taxAgentIdsAsAdmin.contains(f.getTaxAgentId()) ).collect(Collectors.toList()); } - final List> dataRowList = Optional.ofNullable(list) + final List> dataRowList = Optional.ofNullable(list) .map(List::stream) .map(operatorStream -> operatorStream.map(dto -> { - List cellList = new ArrayList<>(); + List cellList = new ArrayList<>(); cellList.add(Util.null2String(dto.getUsername())); cellList.add(Util.null2String(dto.getTaxYearMonth() == null ? "" : formatter.format(dto.getTaxYearMonth()))); cellList.add(Util.null2String(dto.getTaxAgentName())); cellList.add(Util.null2String(dto.getDepartmentName())); cellList.add(Util.null2String(dto.getMobile())); cellList.add(Util.null2String(dto.getJobNum())); - cellList.add(Util.null2String(dto.getAddUpIncome())); - cellList.add(Util.null2String(dto.getAddUpSubtraction())); - cellList.add(Util.null2String(dto.getAddUpSocialSecurityTotal())); - cellList.add(Util.null2String(dto.getAddUpAccumulationFundTotal())); - cellList.add(Util.null2String(dto.getAddUpChildEducation())); - cellList.add(Util.null2String(dto.getAddUpContinuingEducation())); - cellList.add(Util.null2String(dto.getAddUpHousingLoanInterest())); - cellList.add(Util.null2String(dto.getAddUpHousingRent())); - cellList.add(Util.null2String(dto.getAddUpSupportElderly())); - cellList.add(Util.null2String(dto.getAddUpIllnessMedical())); - cellList.add(Util.null2String(dto.getAddUpEnterpriseAndOther())); - cellList.add(Util.null2String(dto.getAddUpOtherDeduction())); - cellList.add(Util.null2String(dto.getAddUpTaxExemptIncome())); - cellList.add(Util.null2String(dto.getAddUpAllowedDonation())); - cellList.add(Util.null2String(dto.getAddUpTaxSavings())); - cellList.add(Util.null2String(dto.getAddUpAdvanceTax())); - cellList.add(Util.null2String(dto.getAddUpInfantCare())); - cellList.add(Util.null2String(dto.getAddUpPrivatePension())); + cellList.add(NumberUtil.isNumber(dto.getAddUpIncome()) ? new BigDecimal(dto.getAddUpIncome()) : dto.getAddUpIncome()); + cellList.add(NumberUtil.isNumber(dto.getAddUpSubtraction()) ? new BigDecimal(dto.getAddUpSubtraction()) : dto.getAddUpSubtraction()); + cellList.add(NumberUtil.isNumber(dto.getAddUpSocialSecurityTotal()) ? new BigDecimal(dto.getAddUpSocialSecurityTotal()) : dto.getAddUpSocialSecurityTotal()); + cellList.add(NumberUtil.isNumber(dto.getAddUpAccumulationFundTotal()) ? new BigDecimal(dto.getAddUpAccumulationFundTotal()) : dto.getAddUpAccumulationFundTotal()); + cellList.add(NumberUtil.isNumber(dto.getAddUpChildEducation()) ? new BigDecimal(dto.getAddUpChildEducation()) : dto.getAddUpChildEducation()); + cellList.add(NumberUtil.isNumber(dto.getAddUpContinuingEducation()) ? new BigDecimal(dto.getAddUpContinuingEducation()) : dto.getAddUpContinuingEducation()); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingLoanInterest()) ? new BigDecimal(dto.getAddUpHousingLoanInterest()) : dto.getAddUpHousingLoanInterest()); + cellList.add(NumberUtil.isNumber(dto.getAddUpHousingRent()) ? new BigDecimal(dto.getAddUpHousingRent()) : dto.getAddUpHousingRent()); + cellList.add(NumberUtil.isNumber(dto.getAddUpSupportElderly()) ? new BigDecimal(dto.getAddUpSupportElderly()) : dto.getAddUpSupportElderly()); + cellList.add(NumberUtil.isNumber(dto.getAddUpIllnessMedical()) ? new BigDecimal(dto.getAddUpIllnessMedical()) : dto.getAddUpIllnessMedical()); + cellList.add(NumberUtil.isNumber(dto.getAddUpEnterpriseAndOther()) ? new BigDecimal(dto.getAddUpEnterpriseAndOther()) : dto.getAddUpEnterpriseAndOther()); + cellList.add(NumberUtil.isNumber(dto.getAddUpOtherDeduction()) ? new BigDecimal(dto.getAddUpOtherDeduction()) : dto.getAddUpOtherDeduction()); + cellList.add(NumberUtil.isNumber(dto.getAddUpTaxExemptIncome()) ? new BigDecimal(dto.getAddUpTaxExemptIncome()) : dto.getAddUpTaxExemptIncome()); + cellList.add(NumberUtil.isNumber(dto.getAddUpAllowedDonation()) ? new BigDecimal(dto.getAddUpAllowedDonation()) : dto.getAddUpAllowedDonation()); + cellList.add(NumberUtil.isNumber(dto.getAddUpTaxSavings()) ? new BigDecimal(dto.getAddUpTaxSavings()) : dto.getAddUpTaxSavings()); + cellList.add(NumberUtil.isNumber(dto.getAddUpAdvanceTax()) ? new BigDecimal(dto.getAddUpAdvanceTax()) : dto.getAddUpAdvanceTax()); + cellList.add(NumberUtil.isNumber(dto.getAddUpInfantCare()) ? new BigDecimal(dto.getAddUpInfantCare()) : dto.getAddUpInfantCare()); + cellList.add(NumberUtil.isNumber(dto.getAddUpPrivatePension()) ? new BigDecimal(dto.getAddUpPrivatePension()) : dto.getAddUpPrivatePension()); return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); - List> rowList = new ArrayList<>(); + List> rowList = new ArrayList<>(); rowList.add(title); rowList.addAll(dataRowList); return rowList; @@ -441,10 +443,10 @@ public class AddUpSituationServiceImpl extends Service implements AddUpSituation } //获取操作按钮资源 - List> rowList = getExcelRowDetailList(queryParam); + List> rowList = getExcelRowDetailList(queryParam); //获取excel - return ExcelUtil.genWorkbook(rowList, "累计情况明细"); + return ExcelUtil.genWorkbookWithDefaultPattern(rowList, "累计情况明细", 2); } diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index 9216e7841..e83195dcf 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.util.NumberUtil; import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.fastjson.JSONObject; import com.api.formmode.mybatis.util.SqlProxyHandle; @@ -268,7 +269,16 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa // 动态列 for (AttendQuoteFieldPO attendQuoteField : attendQuoteFields) { - row.add(dto.get(attendQuoteField.getId().toString() + "_attendQuoteData")); + Object o = dto.get(attendQuoteField.getId().toString() + "_attendQuoteData"); + try { + if (o != null && NumberUtil.isNumber(o.toString())) { + row.add(new BigDecimal(o.toString())); + } else { + row.add(o); + } + } catch (Exception e) { + row.add(o); + } } rows.add(row); } diff --git a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java index 6ac7b89cf..bb21a8381 100644 --- a/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/OtherDeductionServiceImpl.java @@ -1,13 +1,14 @@ package com.engine.salary.service.impl; +import cn.hutool.core.util.NumberUtil; import com.alibaba.fastjson.JSONObject; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.OtherDeductionBiz; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.AddUpDeduction; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -54,6 +55,7 @@ import weaver.general.Util; import weaver.hrm.User; import java.io.InputStream; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.LocalDateTime; import java.time.YearMonth; @@ -489,7 +491,7 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction SalaryElogConfig.otherDeductionLoggerTemplate.write(loggerContext); //获取excel - return ExcelUtil.genWorkbookV2(rowList, "其他免税扣除"); + return ExcelUtil.genWorkbookV2WithDefaultPattern(rowList, "其他免税扣除", 2); } @@ -533,11 +535,11 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction cellList.add(Util.null2String(dto.getJobNum())); cellList.add(Util.null2String(dto.getIdNo())); cellList.add(Util.null2String(dto.getHiredate())); - cellList.add(Util.null2String(dto.getBusinessHealthyInsurance())); - cellList.add(Util.null2String(dto.getTaxDelayEndowmentInsurance())); - cellList.add(Util.null2String(dto.getOtherDeduction())); - cellList.add(Util.null2String(dto.getDeductionAllowedDonation())); - cellList.add(Util.null2String(dto.getPrivatePension())); + cellList.add(NumberUtil.isNumber(dto.getBusinessHealthyInsurance()) ? new BigDecimal(dto.getBusinessHealthyInsurance()) : Util.null2String(dto.getBusinessHealthyInsurance())); + cellList.add(NumberUtil.isNumber(dto.getTaxDelayEndowmentInsurance()) ? new BigDecimal(dto.getTaxDelayEndowmentInsurance()) : Util.null2String(dto.getTaxDelayEndowmentInsurance())); + cellList.add(NumberUtil.isNumber(dto.getOtherDeduction()) ? new BigDecimal(dto.getOtherDeduction()) : Util.null2String(dto.getOtherDeduction())); + cellList.add(NumberUtil.isNumber(dto.getDeductionAllowedDonation()) ? new BigDecimal(dto.getDeductionAllowedDonation()) : Util.null2String(dto.getDeductionAllowedDonation())); + cellList.add(NumberUtil.isNumber(dto.getPrivatePension()) ? new BigDecimal(dto.getPrivatePension()) : Util.null2String(dto.getPrivatePension())); return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); @@ -585,10 +587,10 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction //获取操作按钮资源 - List> rowList = getExcelRowDetailList(param); + List> rowList = getExcelRowDetailList(param); //获取excel - return ExcelUtil.genWorkbook(rowList, "其他免税扣除明细"); + return ExcelUtil.genWorkbookWithDefaultPattern(rowList, "其他免税扣除明细", 2); } @@ -598,34 +600,34 @@ public class OtherDeductionServiceImpl extends Service implements OtherDeduction * @param param * @return */ - private List> getExcelRowDetailList(OtherDeductionQueryParam param) { + private List> getExcelRowDetailList(OtherDeductionQueryParam param) { //excel标题 - List title = Arrays.asList("姓名", "申报月份", "个税扣缴义务人", "部门", "手机号", "工号", "商业健康保险", "税延养老保险", "其他", "准予扣除的捐赠额", "个人养老金"); + List title = Arrays.asList("姓名", "申报月份", "个税扣缴义务人", "部门", "手机号", "工号", "商业健康保险", "税延养老保险", "其他", "准予扣除的捐赠额", "个人养老金"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); //查询详细信息 List list = getOtherDeductionMapper().recordList(param); encryptUtil.decryptList(list, OtherDeductionRecordDTO.class); - final List> dataRowList = Optional.ofNullable(list) + final List> dataRowList = Optional.ofNullable(list) .map(List::stream) .map(operatorStream -> operatorStream.map(dto -> { - List cellList = new ArrayList<>(); + List cellList = new ArrayList<>(); cellList.add(Util.null2String(dto.getUsername())); cellList.add(Util.null2String(dto.getDeclareMonth() == null ? "" : formatter.format(dto.getDeclareMonth()))); cellList.add(Util.null2String(dto.getTaxAgentName())); cellList.add(Util.null2String(dto.getDepartmentName())); cellList.add(Util.null2String(dto.getMobile())); cellList.add(Util.null2String(dto.getJobNum())); - cellList.add(Util.null2String(dto.getBusinessHealthyInsurance())); - cellList.add(Util.null2String(dto.getTaxDelayEndowmentInsurance())); - cellList.add(Util.null2String(dto.getOtherDeduction())); - cellList.add(Util.null2String(dto.getDeductionAllowedDonation())); - cellList.add(Util.null2String(dto.getPrivatePension())); + cellList.add(NumberUtil.isNumber(dto.getBusinessHealthyInsurance()) ? new BigDecimal(dto.getBusinessHealthyInsurance()) : Util.null2String(dto.getBusinessHealthyInsurance())); + cellList.add(NumberUtil.isNumber(dto.getTaxDelayEndowmentInsurance()) ? new BigDecimal(dto.getTaxDelayEndowmentInsurance()) : Util.null2String(dto.getTaxDelayEndowmentInsurance())); + cellList.add(NumberUtil.isNumber(dto.getOtherDeduction()) ? new BigDecimal(dto.getOtherDeduction()) : Util.null2String(dto.getOtherDeduction())); + cellList.add(NumberUtil.isNumber(dto.getDeductionAllowedDonation()) ? new BigDecimal(dto.getDeductionAllowedDonation()) : Util.null2String(dto.getDeductionAllowedDonation())); + cellList.add(NumberUtil.isNumber(dto.getPrivatePension()) ? new BigDecimal(dto.getPrivatePension()) : Util.null2String(dto.getPrivatePension())); return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); - List> rowList = new ArrayList<>(); + List> rowList = new ArrayList<>(); rowList.add(title); rowList.addAll(dataRowList); return rowList; diff --git a/src/com/engine/salary/service/impl/SIExportServiceImpl.java b/src/com/engine/salary/service/impl/SIExportServiceImpl.java index 3c2ab86c4..0f0cdf7a7 100644 --- a/src/com/engine/salary/service/impl/SIExportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIExportServiceImpl.java @@ -47,6 +47,7 @@ import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.general.BaseBean; import weaver.hrm.User; +import java.math.BigDecimal; import java.util.*; import java.util.function.Function; import java.util.stream.Collectors; @@ -250,7 +251,15 @@ public class SIExportServiceImpl extends Service implements SIExportService { for (Map recordData : records) { List row = new LinkedList<>(); for (WeaTableColumn column : columns) { - row.add(recordData.get(column.getColumn())); + try { + if (column.getText().contains("个人") || column.getText().contains("单位") || column.getText().contains("合计")) { + row.add(new BigDecimal(recordData.get(column.getColumn()).toString())); + } else { + row.add(recordData.get(column.getColumn())); + } + } catch (Exception e) { + row.add(recordData.get(column.getColumn())); + } } rows.add(row); } diff --git a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java index 66945d79b..b0eefa1c6 100644 --- a/src/com/engine/salary/service/impl/SISchemeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SISchemeServiceImpl.java @@ -623,7 +623,11 @@ public class SISchemeServiceImpl extends Service implements SISchemeService { for (WeaTableColumn column : columns) { try { Object o = recordData.get(column.getColumn()); - row.add(o.toString()); + if (column.getText().contains("申报基数") && StringUtils.isNotBlank(o.toString())) { + row.add(new BigDecimal(o.toString())); + } else { + row.add(o.toString()); + } } catch (Exception e) { row.add(""); } diff --git a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java index e492cbd16..fb261cb86 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveServiceImpl.java @@ -3,12 +3,13 @@ package com.engine.salary.service.impl; import com.cloudstore.dev.api.util.Util_DataCache; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.*; import com.engine.salary.common.LocalDateRange; +import com.engine.salary.component.WeaTableColumnGroup; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.constant.SalaryItemConstant; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.AddUpSituation; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryarchive.bo.SalaryArchiveBO; @@ -28,6 +29,7 @@ import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.datacollection.UseEmployeeTypeEnum; import com.engine.salary.enums.salaryarchive.*; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.taxagent.TaxAgentEmpChangeModuleEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.archive.SalaryArchiveItemMapper; @@ -68,6 +70,7 @@ import weaver.general.Util; import weaver.hrm.User; import java.io.InputStream; +import java.math.BigDecimal; import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Pattern; @@ -520,18 +523,20 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe String sheetName = SalaryI18nUtil.getI18nLabel(85368, "薪资档案"); // 获取所有可被引用的薪资项目 List salaryItems = salaryItemMapper.getCanAdjustSalaryItems(); - String[] header = {SalaryI18nUtil.getI18nLabel(85429, "姓名"), - SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), - SalaryI18nUtil.getI18nLabel(86185, "部门"), - SalaryI18nUtil.getI18nLabel(86176, "工号"), - SalaryI18nUtil.getI18nLabel(86186, "手机号"), - SalaryI18nUtil.getI18nLabel(15890, "员工状态"), - SalaryI18nUtil.getI18nLabel(91075, "起始发薪日期"), - SalaryI18nUtil.getI18nLabel(91075, "最后发薪日期")}; + Object[] header = { + new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(85429, "姓名"), "", "", 0), + new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), "", "", 0), + new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(86185, "部门"), "", "", 0), + new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(86176, "工号"), "", "", 0), + new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(86186, "手机号"), "", "", 0), + new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(15890, "员工状态"), "", "", 0), + new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(91075, "起始发薪日期"), "", "", 0), + new WeaTableColumnGroup("150px", SalaryI18nUtil.getI18nLabel(91075, "最后发薪日期"), "", "", 0) + }; // 2.表头 List headerList = new ArrayList<>(Arrays.asList(header)); for (SalaryItemPO salaryItem : salaryItems) { - headerList.add(salaryItem.getName()); + headerList.add(new WeaTableColumnGroup("150px", salaryItem.getName(), "", "", salaryItem.getPattern())); } // 获取所有个税扣缴义务人 @@ -585,7 +590,15 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe row.add(Util.null2String(e.get("payEndDate"))); // 薪资项目数据 for (SalaryItemPO salaryItem : salaryItems) { - row.add(e.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) ? (e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) == null ? "" : e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX).toString()) : ""); + try { + if (salaryItem.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())) { + row.add(new BigDecimal(e.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) ? (e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) == null ? "" : e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX).toString()) : "")); + } else { + row.add(e.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) ? (e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) == null ? "" : e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX).toString()) : ""); + } + } catch (Exception ex) { + row.add(e.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) ? (e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX) == null ? "" : e.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX).toString()) : ""); + } } rows.add(row); }); @@ -603,7 +616,7 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "薪资档案") + "-" + name); loggerContext.setUser(user); SalaryElogConfig.salaryArchiveLoggerTemplate.write(loggerContext); - return ExcelUtilPlus.genWorkbookV2(rows, sheetName); + return ExcelUtilPlus.genWorkbookV2WithPattern(rows, sheetName); } diff --git a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java index cd8cc1c83..43d8e13c7 100644 --- a/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/SpecialAddDeductionServiceImpl.java @@ -1,12 +1,13 @@ package com.engine.salary.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.NumberUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.SpecialAddDeductionBiz; import com.engine.salary.config.SalaryElogConfig; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.AddUpDeduction; import com.engine.salary.entity.datacollection.DataCollectionEmployee; @@ -53,6 +54,7 @@ import weaver.general.Util; import weaver.hrm.User; import java.io.InputStream; +import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.time.YearMonth; import java.util.*; @@ -370,7 +372,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd public XSSFWorkbook export(SpecialAddDeductionQueryParam param, boolean isTemplate) { //获取操作按钮资源 - List> rowList = getExcelRowList(param, isTemplate); + List> rowList = getExcelRowList(param, isTemplate); // 记录操作日志 String name = SalaryI18nUtil.getI18nLabel(0, "导出"); @@ -383,7 +385,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd SalaryElogConfig.specialAddDeductionLoggerTemplate.write(loggerContext); //获取excel - return ExcelUtil.genWorkbook(rowList, "专项附加免税扣除"); + return ExcelUtil.genWorkbookWithDefaultPattern(rowList, "专项附加免税扣除", 2); } @@ -392,16 +394,16 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd * * @return 导出数据行集合 */ - private List> getExcelRowList(SpecialAddDeductionQueryParam param, boolean isTemplate) { + private List> getExcelRowList(SpecialAddDeductionQueryParam param, boolean isTemplate) { long employeeId = user.getUID(); //excel标题 - List title = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "入职日期", "子女教育", "继续教育", "住房贷款利息", "住房租金", "赡养老人", "大病医疗", "婴幼儿照护"); + List title = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "证件号码", "入职日期", "子女教育", "继续教育", "住房贷款利息", "住房租金", "赡养老人", "大病医疗", "婴幼儿照护"); - List> rowList = new ArrayList<>(); + List> rowList = new ArrayList<>(); rowList.add(title); if (!isTemplate || param.isHasData()) { // 非下载导入模版,查询数据填充 - List> dataRowList = queryInfoForExcel(param, rowList); + List> dataRowList = queryInfoForExcel(param, rowList); rowList.addAll(dataRowList); } return rowList; @@ -438,10 +440,10 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd //获取操作按钮资源 - List> rowList = getExcelRowDetailList(param); + List> rowList = getExcelRowDetailList(param); //获取excel - return ExcelUtil.genWorkbook(rowList, "专项附加扣除明细"); + return ExcelUtil.genWorkbookWithDefaultPattern(rowList, "专项附加扣除明细", 2); } @@ -451,35 +453,35 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd * @param param * @return */ - private List> getExcelRowDetailList(SpecialAddDeductionQueryParam param) { + private List> getExcelRowDetailList(SpecialAddDeductionQueryParam param) { //excel标题 - List title = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "子女教育", "继续教育", "住房贷款利息", "住房租金", "赡养老人", "大病医疗", "婴幼儿照护"); + List title = Arrays.asList("姓名", "个税扣缴义务人", "部门", "手机号", "工号", "子女教育", "继续教育", "住房贷款利息", "住房租金", "赡养老人", "大病医疗", "婴幼儿照护"); SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM"); //查询详细信息 List list = getSpecialAddDeductionBiz().listDTOByParam(param); encryptUtil.decryptList(list, SpecialAddDeductionRecordDTO.class); - final List> dataRowList = Optional.ofNullable(list) + final List> dataRowList = Optional.ofNullable(list) .map(List::stream) .map(operatorStream -> operatorStream.map(dto -> { - List cellList = new ArrayList<>(); + List cellList = new ArrayList<>(); cellList.add(Util.null2String(dto.getUsername())); cellList.add(Util.null2String(dto.getTaxAgentName())); cellList.add(Util.null2String(dto.getDepartmentName())); cellList.add(Util.null2String(dto.getMobile())); cellList.add(Util.null2String(dto.getJobNum())); - cellList.add(Util.null2String(dto.getChildrenEducation())); - cellList.add(Util.null2String(dto.getContinuingEducation())); - cellList.add(Util.null2String(dto.getHousingLoanInterest())); - cellList.add(Util.null2String(dto.getHousingRent())); - cellList.add(Util.null2String(dto.getSupportingElder())); - cellList.add(Util.null2String(dto.getSeriousIllnessTreatment())); - cellList.add(Util.null2String(dto.getInfantCare())); + cellList.add(NumberUtil.isNumber(dto.getChildrenEducation()) ? new BigDecimal(dto.getChildrenEducation()) : Util.null2String(dto.getChildrenEducation())); + cellList.add(NumberUtil.isNumber(dto.getContinuingEducation()) ? new BigDecimal(dto.getContinuingEducation()) : Util.null2String(dto.getContinuingEducation())); + cellList.add(NumberUtil.isNumber(dto.getHousingLoanInterest()) ? new BigDecimal(dto.getHousingLoanInterest()) : Util.null2String(dto.getHousingLoanInterest())); + cellList.add(NumberUtil.isNumber(dto.getHousingRent()) ? new BigDecimal(dto.getHousingRent()) : Util.null2String(dto.getHousingRent())); + cellList.add(NumberUtil.isNumber(dto.getSupportingElder()) ? new BigDecimal(dto.getSupportingElder()) : Util.null2String(dto.getSupportingElder())); + cellList.add(NumberUtil.isNumber(dto.getSeriousIllnessTreatment()) ? new BigDecimal(dto.getSeriousIllnessTreatment()) : Util.null2String(dto.getSeriousIllnessTreatment())); + cellList.add(NumberUtil.isNumber(dto.getInfantCare()) ? new BigDecimal(dto.getInfantCare()) : Util.null2String(dto.getInfantCare())); return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); - List> rowList = new ArrayList<>(); + List> rowList = new ArrayList<>(); rowList.add(title); rowList.addAll(dataRowList); return rowList; @@ -699,7 +701,7 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd return CollUtil.isNotEmpty(specialAddDeductionRecordDTOList) ? specialAddDeductionRecordDTOList.get(0) : null; } - private List> queryInfoForExcel(SpecialAddDeductionQueryParam param, List> rowList) { + private List> queryInfoForExcel(SpecialAddDeductionQueryParam param, List> rowList) { //排序配置 OrderRuleVO orderRule = getSalarySysConfService(user).orderRule(); param.setOrderRule(orderRule); @@ -708,10 +710,10 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd putQueryRange(param); } List list = getSpecialAddDeductionBiz().listByParam(param); - final List> dataRowList = Optional.ofNullable(list) + final List> dataRowList = Optional.ofNullable(list) .map(List::stream) .map(operatorStream -> operatorStream.map(dto -> { - List cellList = new ArrayList<>(); + List cellList = new ArrayList<>(); cellList.add(Util.null2String(dto.getUsername())); cellList.add(Util.null2String(dto.getTaxAgentName())); cellList.add(Util.null2String(dto.getDepartmentName())); @@ -719,13 +721,13 @@ public class SpecialAddDeductionServiceImpl extends Service implements SpecialAd cellList.add(Util.null2String(dto.getJobNum())); cellList.add(Util.null2String(dto.getIdNo())); cellList.add(Util.null2String(dto.getHiredate())); - cellList.add(Util.null2String(dto.getChildrenEducation())); - cellList.add(Util.null2String(dto.getContinuingEducation())); - cellList.add(Util.null2String(dto.getHousingLoanInterest())); - cellList.add(Util.null2String(dto.getHousingRent())); - cellList.add(Util.null2String(dto.getSupportingElder())); - cellList.add(Util.null2String(dto.getSeriousIllnessTreatment())); - cellList.add(Util.null2String(dto.getInfantCare())); + cellList.add(NumberUtil.isNumber(dto.getChildrenEducation()) ? new BigDecimal(dto.getChildrenEducation()) : Util.null2String(dto.getChildrenEducation())); + cellList.add(NumberUtil.isNumber(dto.getContinuingEducation()) ? new BigDecimal(dto.getContinuingEducation()) : Util.null2String(dto.getContinuingEducation())); + cellList.add(NumberUtil.isNumber(dto.getHousingLoanInterest()) ? new BigDecimal(dto.getHousingLoanInterest()) : Util.null2String(dto.getHousingLoanInterest())); + cellList.add(NumberUtil.isNumber(dto.getHousingRent()) ? new BigDecimal(dto.getHousingRent()) : Util.null2String(dto.getHousingRent())); + cellList.add(NumberUtil.isNumber(dto.getSupportingElder()) ? new BigDecimal(dto.getSupportingElder()) : Util.null2String(dto.getSupportingElder())); + cellList.add(NumberUtil.isNumber(dto.getSeriousIllnessTreatment()) ? new BigDecimal(dto.getSeriousIllnessTreatment()) : Util.null2String(dto.getSeriousIllnessTreatment())); + cellList.add(NumberUtil.isNumber(dto.getInfantCare()) ? new BigDecimal(dto.getInfantCare()) : Util.null2String(dto.getInfantCare())); return cellList; }).collect(Collectors.toList())) .orElse(Collections.emptyList()); diff --git a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java index 784433e6c..16b4c3006 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationExcelServiceImpl.java @@ -4,6 +4,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.config.SalaryElogConfig; import com.engine.hrmelog.entity.dto.LoggerContext; +import com.engine.salary.constant.TaxDeclarationDataIndexConstant; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationAnnualListDTO; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationLaborListDTO; @@ -28,9 +29,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; -import java.util.List; -import java.util.Map; -import java.util.Objects; +import java.math.BigDecimal; +import java.util.*; /** * 个税申报表导出 @@ -74,6 +74,16 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar List> rows = Lists.newArrayListWithExpectedSize(count); List headerList = Lists.newArrayList(); List dataIndexList = Lists.newArrayList(); + List NumberCode = Arrays.asList(TaxDeclarationDataIndexConstant.INCOME, TaxDeclarationDataIndexConstant.TAX_FREE_INCOME, + TaxDeclarationDataIndexConstant.ENDOWMENT_INSURANCE, TaxDeclarationDataIndexConstant.MEDICAL_INSURANCE, TaxDeclarationDataIndexConstant.UNEMPLOYMENT_INSURANCE, + TaxDeclarationDataIndexConstant.HOUSING_PROVIDENT_FUND, TaxDeclarationDataIndexConstant.ADD_UP_CHILD_EDUCATION, TaxDeclarationDataIndexConstant.ADD_UP_CONTINUING_EDUCATION, + TaxDeclarationDataIndexConstant.ADD_UP_HOUSING_LOAN_INTEREST, TaxDeclarationDataIndexConstant.ADD_UP_HOUSING_RENT, TaxDeclarationDataIndexConstant.ADD_UP_SUPPORT_ELDERLY, + TaxDeclarationDataIndexConstant.ADD_UP_ILLNESS_MEDICAL, TaxDeclarationDataIndexConstant.ADD_UP_INFANT_CARE, TaxDeclarationDataIndexConstant.ADD_UP_PRIVATE_PENSION, + TaxDeclarationDataIndexConstant.ANNUITY, TaxDeclarationDataIndexConstant.COMMERCIAL_HEALTH_INSURANCE, TaxDeclarationDataIndexConstant.TAX_DEFERRED_ENDOWMENT_INSURANCE, + TaxDeclarationDataIndexConstant.OTHER, TaxDeclarationDataIndexConstant.ALLOWED_DONATION, TaxDeclarationDataIndexConstant.TAX_DEDUCTION, + TaxDeclarationDataIndexConstant.LABOR_INCOME, TaxDeclarationDataIndexConstant.LABOR_TAX_FREE_INCOME, TaxDeclarationDataIndexConstant.ANNUAL_INCOME, + TaxDeclarationDataIndexConstant.ANNUAL_TAX_FREE_INCOME, TaxDeclarationDataIndexConstant.ANNUAL_OTHER, TaxDeclarationDataIndexConstant.ANNUAL_DONATE_TAX, + TaxDeclarationDataIndexConstant.ANNUAL_TAX_SAVINGS); if (Objects.equals(taxDeclarationPO.getIncomeCategory(), IncomeCategoryEnum.WAGES_AND_SALARIES.getValue())) { // 解析表头 ExcelUtil.parseHeader(TaxDeclarationWageListDTO.class, headerList, dataIndexList); @@ -89,7 +99,15 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar List row = Lists.newArrayListWithExpectedSize(dataIndexList.size()); Map map = JsonUtil.parseMap(taxDeclarationWageListDTO, Object.class); for (String dataIndex : dataIndexList) { - row.add(map.get(dataIndex)); + try { + if (NumberCode.contains(dataIndex)) { + row.add(new BigDecimal(map.get(dataIndex).toString())); + } else { + row.add(map.get(dataIndex)); + } + } catch (Exception e) { + row.add(map.get(dataIndex)); + } } rows.add(row); } @@ -110,7 +128,15 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar List row = Lists.newArrayListWithExpectedSize(dataIndexList.size()); Map map = JsonUtil.parseMap(taxDeclarationLaborListDTO, Object.class); for (String dataIndex : dataIndexList) { - row.add(map.get(dataIndex)); + try { + if (NumberCode.contains(dataIndex)) { + row.add(new BigDecimal(map.get(dataIndex).toString())); + } else { + row.add(map.get(dataIndex)); + } + } catch (Exception e) { + row.add(map.get(dataIndex)); + } } rows.add(row); } @@ -132,7 +158,15 @@ public class TaxDeclarationExcelServiceImpl extends Service implements TaxDeclar List row = Lists.newArrayListWithExpectedSize(dataIndexList.size()); Map map = JsonUtil.parseMap(taxDeclarationLaborListDTO, Object.class); for (String dataIndex : dataIndexList) { - row.add(map.get(dataIndex)); + try { + if (NumberCode.contains(dataIndex)) { + row.add(new BigDecimal(map.get(dataIndex).toString())); + } else { + row.add(map.get(dataIndex)); + } + } catch (Exception e) { + row.add(map.get(dataIndex)); + } } rows.add(row); } diff --git a/src/com/engine/salary/util/excel/ExcelUtil.java b/src/com/engine/salary/util/excel/ExcelUtil.java index 2a482e42d..5b7410994 100644 --- a/src/com/engine/salary/util/excel/ExcelUtil.java +++ b/src/com/engine/salary/util/excel/ExcelUtil.java @@ -10,6 +10,7 @@ import org.apache.poi.ss.usermodel.FillPatternType; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.xssf.usermodel.*; +import org.springframework.beans.BeanUtils; import java.awt.*; import java.beans.BeanInfo; @@ -17,11 +18,15 @@ import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Date; import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class ExcelUtil { + /** * 生成excel * @@ -76,6 +81,82 @@ public class ExcelUtil { return workbook; } + // 设置默认舍入位数,可设为null + public static XSSFWorkbook genWorkbookWithDefaultPattern(List> rowList, String sheetName, Integer defaultPattern) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(20); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + + + XSSFCellStyle numberCellStyle = null; + if (defaultPattern != null) { + XSSFDataFormat df = workbook.createDataFormat(); + String start = "0."; + if (defaultPattern.equals(0)) { + start = "0"; + } + short format = df.getFormat(start + Stream.generate(() -> "0").limit(defaultPattern).collect(Collectors.joining()) + "_ "); + numberCellStyle = workbook.createCellStyle(); + BeanUtils.copyProperties(cellStyle, numberCellStyle); + numberCellStyle.setDataFormat(format); + } + + for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex); + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + cell.setCellType(CellType.STRING); + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + Object o = infoList.get(cellIndex); + if (o instanceof String) { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof BigDecimal) { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); + if (defaultPattern != null) { + cell.setCellStyle(numberCellStyle); + } + } else { + cell.setCellType(CellType.STRING); + cell.setCellValue(o == null ? "" : o.toString()); + } +// sheet.setColumnWidth(cellIndex, 35 * 256); + } + } + return workbook; + } + public static XSSFWorkbook genWorkbook(String sheetName, List rowList) { List headerList = Lists.newArrayList(); List dataIndexList = Lists.newArrayList(); @@ -156,6 +237,88 @@ public class ExcelUtil { if (o instanceof String) { cell.setCellType(CellType.STRING); cell.setCellValue(String.valueOf(o)); + } else if (o instanceof BigDecimal) { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); + } else if (o instanceof Boolean) { + cell.setCellType(CellType.BOOLEAN); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Date) { + cell.setCellType(CellType.STRING); + cell.setCellValue(SalaryDateUtil.getFormatLocalDate((Date) o)); + } else { + cell.setCellType(CellType.STRING); + cell.setCellValue(o == null ? "" : o.toString()); + } + } + } + return workbook; + } + + // 设置默认舍入位数,可传null + public static XSSFWorkbook genWorkbookV2WithDefaultPattern(List> rowList, String sheetName, Integer defaultPattern) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(20); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + + XSSFCellStyle numberCellStyle = null; + if (defaultPattern != null) { + XSSFDataFormat df = workbook.createDataFormat(); + String start = "0."; + if (defaultPattern.equals(0)) { + start = "0"; + } + short format = df.getFormat(start + Stream.generate(() -> "0").limit(defaultPattern).collect(Collectors.joining()) + "_ "); + numberCellStyle = workbook.createCellStyle(); + BeanUtils.copyProperties(cellStyle, numberCellStyle); + numberCellStyle.setDataFormat(format); + } + + for (int rowIndex = 0; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex); + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + Object o = infoList.get(cellIndex); + if (o instanceof String) { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof BigDecimal) { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); + if (defaultPattern != null) { + cell.setCellStyle(numberCellStyle); + } } else if (o instanceof Boolean) { cell.setCellType(CellType.BOOLEAN); cell.setCellValue(String.valueOf(o)); diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index b9aee0531..bfb2cf92e 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -70,6 +70,114 @@ public class ExcelUtilPlus { } + public static XSSFWorkbook genWorkbookV2WithPattern(List> rowList, String sheetName) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + // 设置title样式 + XSSFCellStyle titleCellStyle = workbook.createCellStyle(); + XSSFFont titleFont = workbook.createFont(); + titleFont.setBold(true); + titleFont.setFontName("仿宋"); + titleFont.setFontHeightInPoints((short) 15); + titleCellStyle.setFont(titleFont); + titleCellStyle.setAlignment(HorizontalAlignment.CENTER); + titleCellStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());//背景色 + titleCellStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND); + titleCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); + titleCellStyle.setBorderLeft(BorderStyle.THIN); + titleCellStyle.setBorderRight(BorderStyle.THIN); + titleCellStyle.setBorderTop(BorderStyle.THIN); + titleCellStyle.setBorderBottom(BorderStyle.THIN); + + + // 设置主体样式 + XSSFCellStyle cellStyle = workbook.createCellStyle(); + XSSFFont font = workbook.createFont(); + font.setFontName("宋体"); + font.setFontHeightInPoints((short) 10);// 设置字体大小 + cellStyle.setFont(font);// 选择需要用到的字体格式 + cellStyle.setWrapText(true); + cellStyle.setBorderLeft(BorderStyle.THIN); + cellStyle.setBorderRight(BorderStyle.THIN); + cellStyle.setBorderTop(BorderStyle.THIN); + cellStyle.setBorderBottom(BorderStyle.THIN); + + XSSFSheet sheet = workbook.createSheet(sheetName); + //自适应宽度 + sheet.autoSizeColumn(0, true); + //默认列宽 + sheet.setDefaultColumnWidth(20); + //默认行高 + sheet.setDefaultRowHeightInPoints(18); + //遍历设置列宽 + List header = rowList.get(0); + List patternList = new ArrayList<>(); + XSSFRow row0 = sheet.createRow(0); + for (int i = 0; i < header.size(); i++) { + WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) header.get(i); + XSSFCell rowZeroCell = row0.createCell(i, CellType.STRING); + rowZeroCell.setCellValue(columnGroupItem.getText().toString()); + rowZeroCell.setCellStyle(titleCellStyle); + //设置列宽 + sheet.setColumnWidth(i, Math.max(12, columnGroupItem.getText().length() * 4) * 256); + patternList.add(columnGroupItem.getPattern()); + } + + HashMap numberCellStyleMap = new HashMap(); + XSSFDataFormat df = workbook.createDataFormat(); + patternList.stream().distinct().filter(a -> a != null).forEach(p -> { + String start = "0."; + if (p == 0) { + start = "0"; + } + short format = df.getFormat(start + Stream.generate(() -> "0").limit(p).collect(Collectors.joining()) + "_ "); + XSSFCellStyle numberCellStyle = workbook.createCellStyle(); + BeanUtils.copyProperties(cellStyle, numberCellStyle); + numberCellStyle.setDataFormat(format); + numberCellStyleMap.put(p, numberCellStyle); + }); + + + for (int rowIndex = 1; rowIndex < rowList.size(); rowIndex++) { + List infoList = rowList.get(rowIndex); + XSSFRow row = sheet.createRow(rowIndex); + float height = 18; + float finalHeight = 18; + + for (int cellIndex = 0; cellIndex < infoList.size(); cellIndex++) { + XSSFCell cell = row.createCell(cellIndex); + if (rowIndex == 0) { + cell.setCellStyle(titleCellStyle); + } else { + cell.setCellStyle(cellStyle); + } + Object o = infoList.get(cellIndex); + if (o instanceof String) { + cell.setCellType(CellType.STRING); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof BigDecimal) { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); + cell.setCellStyle(numberCellStyleMap.get(patternList.get(cellIndex))); + } else if (o instanceof Boolean) { + cell.setCellType(CellType.BOOLEAN); + cell.setCellValue(String.valueOf(o)); + } else if (o instanceof Date) { + cell.setCellType(CellType.STRING); + cell.setCellValue(SalaryDateUtil.getFormatLocalDate((Date) o)); + } else { + cell.setCellType(CellType.STRING); + cell.setCellValue(o == null ? "" : o.toString()); + } + + //判断是否要调整高度 + int width = sheet.getColumnWidth(cellIndex) / 256; + finalHeight = getFinalHeight(o, width, finalHeight, height); + } + row.setHeightInPoints(finalHeight); + } + return workbook; + } public static XSSFWorkbook genWorkbookV2(List> rowList, String sheetName) { XSSFWorkbook workbook = new XSSFWorkbook(); @@ -132,6 +240,9 @@ public class ExcelUtilPlus { if (o instanceof String) { cell.setCellType(CellType.STRING); cell.setCellValue(String.valueOf(o)); + } else if (o instanceof BigDecimal) { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); } else if (o instanceof Boolean) { cell.setCellType(CellType.BOOLEAN); cell.setCellValue(String.valueOf(o)); @@ -325,6 +436,9 @@ public class ExcelUtilPlus { if (o instanceof String) { cell.setCellType(CellType.STRING); cell.setCellValue(String.valueOf(o)); + } else if (o instanceof BigDecimal) { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); } else if (o instanceof Boolean) { cell.setCellType(CellType.BOOLEAN); cell.setCellValue(String.valueOf(o)); From 0facbabf55853089ac52d3dd170d0627dd0456cc Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 20 May 2024 15:04:14 +0800 Subject: [PATCH 02/96] =?UTF-8?q?=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=BB=98=E8=AE=A4=E5=80=BCtemp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryitem/bo/SalaryItemBO.java | 4 +++- .../entity/salaryitem/dto/SalaryItemFormDTO.java | 3 +++ .../salaryitem/param/SalaryItemSaveParam.java | 5 +++++ .../entity/salaryitem/po/SalaryItemPO.java | 6 ++++++ .../salarysob/dto/SalarySobItemFormDTO.java | 3 +++ .../salarysob/param/SalarySobItemSaveParam.java | 3 +++ .../entity/salarysob/po/SalarySobBackItemPO.java | 5 +++++ .../entity/salarysob/po/SalarySobItemPO.java | 5 +++++ .../mapper/salaryitem/SalaryItemMapper.xml | 16 ++++++++++++++-- .../mapper/salarysob/SalarySobBackItemMapper.xml | 1 + .../mapper/salarysob/SalarySobItemMapper.xml | 4 ++++ .../service/impl/SalaryItemServiceImpl.java | 1 + .../service/impl/SalarySobItemServiceImpl.java | 8 +++++++- 13 files changed, 60 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java index 1048360fa..49c1a9300 100644 --- a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java +++ b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java @@ -202,7 +202,8 @@ public class SalaryItemBO { .setTaxAgentIds(salaryItemPO.getTaxAgentIds()) .setSharedType(salaryItemPO.getSharedType()) .setSortedIndex(salaryItemPO.getSortedIndex()) - .setWidth(salaryItemPO.getWidth()); + .setWidth(salaryItemPO.getWidth()) + .setDefaultValue(salaryItemPO.getDefaultValue()); } /** @@ -283,6 +284,7 @@ public class SalaryItemBO { .taxAgentIds(saveParam.getTaxAgentIds()) .sortedIndex(saveParam.getSortedIndex()) .width(saveParam.getWidth()) + .defaultValue(saveParam.getDefaultValue()) .build(); // 开启了"薪资档案引用",取值方式固定为输入 // if (Objects.equals(saveParam.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE)) { diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java index da0c6d4d5..15585ff2d 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemFormDTO.java @@ -98,4 +98,7 @@ public class SalaryItemFormDTO { // 宽度 private Integer width; + + // 默认值 + private String defaultValue; } diff --git a/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java b/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java index a200cea77..6622f3173 100644 --- a/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java +++ b/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java @@ -107,4 +107,9 @@ public class SalaryItemSaveParam { * 宽度 */ private Integer width; + + /** + * 默认值 + */ + private String defaultValue; } diff --git a/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java b/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java index 8db3c3c89..1224b0c56 100644 --- a/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java +++ b/src/com/engine/salary/entity/salaryitem/po/SalaryItemPO.java @@ -191,4 +191,10 @@ public class SalaryItemPO { */ @ElogTransform(name = "宽度") private Integer width; + + /** + * 默认值 + */ + @ElogTransform(name = "默认值") + private String defaultValue; } diff --git a/src/com/engine/salary/entity/salarysob/dto/SalarySobItemFormDTO.java b/src/com/engine/salary/entity/salarysob/dto/SalarySobItemFormDTO.java index f23df1512..7c600fcb4 100644 --- a/src/com/engine/salary/entity/salarysob/dto/SalarySobItemFormDTO.java +++ b/src/com/engine/salary/entity/salarysob/dto/SalarySobItemFormDTO.java @@ -83,4 +83,7 @@ public class SalarySobItemFormDTO { // 薪资档案引用。0:薪资档案未引用、1:薪资档案引用 private Integer useInEmployeeSalary; + + // 默认值 + private String defaultValue; } diff --git a/src/com/engine/salary/entity/salarysob/param/SalarySobItemSaveParam.java b/src/com/engine/salary/entity/salarysob/param/SalarySobItemSaveParam.java index e19856374..f0e9c4004 100644 --- a/src/com/engine/salary/entity/salarysob/param/SalarySobItemSaveParam.java +++ b/src/com/engine/salary/entity/salarysob/param/SalarySobItemSaveParam.java @@ -78,6 +78,9 @@ public class SalarySobItemSaveParam { private Boolean canDelete; + // 默认值 + private String defaultValue; + /** * 进位规则 */ diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java index 659707a90..02e05af29 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobBackItemPO.java @@ -110,6 +110,11 @@ public class SalarySobBackItemPO{ @JsonIgnore private Date updateTime; + /** + * 默认值 + */ + private String defaultValue; + /** diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java index 15704802b..10d5112c6 100644 --- a/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobItemPO.java @@ -115,6 +115,11 @@ public class SalarySobItemPO { //该分类是否隐藏(0不隐藏,1隐藏) private Long itemHide; + /** + * 默认值 + */ + private String defaultValue; + //in Collection ids; Collection salarySobIds; diff --git a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml index 93ec756ca..77e4b37d9 100644 --- a/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml +++ b/src/com/engine/salary/mapper/salaryitem/SalaryItemMapper.xml @@ -52,7 +52,8 @@ t.tax_agent_ids, t.sorted_index, t.hide_default, - t.width + t.width, + t.default_value @@ -221,6 +222,9 @@ width, + + default_value, + @@ -295,6 +299,9 @@ #{width}, + + #{defaultValue}, + @@ -369,7 +376,12 @@ width=#{width}, - sorted_index=#{sortedIndex}, + + sorted_index=#{sortedIndex}, + + + default_value=#{defaultValue}, + WHERE id = #{id} AND delete_type = 0 diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobBackItemMapper.xml b/src/com/engine/salary/mapper/salarysob/SalarySobBackItemMapper.xml index 430bb5734..85c51b081 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobBackItemMapper.xml +++ b/src/com/engine/salary/mapper/salarysob/SalarySobBackItemMapper.xml @@ -52,6 +52,7 @@ , t.delete_type , t.create_time , t.update_time + , t.default_value diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml index ed7016175..98fe7f070 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml +++ b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml @@ -37,6 +37,7 @@ , t.rounding_mode , t.pattern , t.value_type + , t.default_value @@ -336,6 +337,9 @@ value_type=#{valueType}, + + default_value=#{defaultValue}, + WHERE id = #{id} AND delete_type = 0 diff --git a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java index 82afc2e9e..b652d7e47 100644 --- a/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryItemServiceImpl.java @@ -249,6 +249,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService newSalaryItemPO.setTaxAgentIds(saveParam.getTaxAgentIds()); newSalaryItemPO.setSortedIndex(saveParam.getSortedIndex()); newSalaryItemPO.setWidth(saveParam.getWidth()); + newSalaryItemPO.setDefaultValue(saveParam.getDefaultValue()); salaryItemBiz.updateById(newSalaryItemPO); //改名后更新公式 diff --git a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java index d857a9709..8f916f0b2 100644 --- a/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobItemServiceImpl.java @@ -396,6 +396,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) + .defaultValue(itemParam.getDefaultValue()) .build(); salarySobItems.add(salarySobItemPO); @@ -475,6 +476,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) + .defaultValue(itemParam.getDefaultValue()) .build(); salarySobItems.add(salarySobItemPO); @@ -509,6 +511,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) + .defaultValue(itemParam.getDefaultValue()) .build(); getSalarySobItemMapper().updateIgnoreNull(salarySobItemPO); // 保存薪资项目是否展示 @@ -565,6 +568,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) + .defaultValue(itemParam.getDefaultValue()) .build(); salarySobItems.add(salarySobItemPO); @@ -597,6 +601,7 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .roundingMode(itemParam.getRoundingMode() == null ? salaryItemPO.getRoundingMode() : itemParam.getRoundingMode()) .pattern(itemParam.getPattern() == null ? salaryItemPO.getPattern() : itemParam.getPattern()) .valueType(itemParam.getValueType() == null ? salaryItemPO.getValueType() : itemParam.getValueType()) + .defaultValue(itemParam.getDefaultValue()) .build(); getSalarySobItemMapper().updateIgnoreNull(salarySobItemPO); @@ -776,7 +781,8 @@ public class SalarySobItemServiceImpl extends Service implements SalarySobItemSe .setOriginSqlContent(valueType.equals(SalaryValueTypeEnum.SQL.getValue()) ? formulaContent : "") .setUseInEmployeeSalary(salaryItemPO.getUseInEmployeeSalary()) .setDescription(salarySobItemPO.getDescription()) - .setCanEdit((openFormulaForcedEditing || salaryItemPO.getCanEdit().equals(1)) ? 1 : 0); + .setCanEdit((openFormulaForcedEditing || salaryItemPO.getCanEdit().equals(1)) ? 1 : 0) + .setDefaultValue(salarySobItemPO.getDefaultValue()); } return salarySobItemFormDTO; } From e1e00f4db0a4a915f1e6ca760fd1632c483611ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 6 Jun 2024 13:51:33 +0800 Subject: [PATCH 03/96] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=AE=97=E7=A8=8Ev1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/config/SalaryPermissionConfig.java | 6 +- .../salary/constant/SzyhApiConstant.java | 19 + .../entity/salaryacct/bo/SalaryCalcTax.java | 199 +++ .../salaryacct/bo/SalaryCalcTaxFeedback.java | 62 + .../salaryacct/bo/SalaryCalcTaxRequest.java | 258 +++ .../salaryacct/dto/SalaryCalcTaxInfoDTO.java | 27 + .../salaryacct/param/SalaryCalcTaxParam.java | 19 + .../salaryacct/po/SalaryAcctCalcTaxReqPO.java | 52 + .../enums/salarysob/IncomeCategoryEnum.java | 247 ++- .../SalaryAcctCalcTaxReqMapper.java | 74 + .../salaryacct/SalaryAcctCalcTaxReqMapper.xml | 232 +++ .../remote/tax/client/CalculateClient.java | 31 + ...lculateASynIndividualIncomeTaxRequest.java | 1442 +++++++++++++++++ ...ynIndividualIncomeTaxFeedbackResponse.java | 746 +++++++++ .../service/EmployeeDeclareService.java | 9 + .../service/SalaryAcctCalcTaxReqService.java | 30 + .../service/SalaryAcctResultService.java | 1 + .../salary/service/SalaryCalcTaxService.java | 29 + .../impl/EmployeeDeclareServiceImpl.java | 19 + .../impl/SalaryAcctCalcTaxReqServiceImpl.java | 37 + .../impl/SalaryAcctResultServiceImpl.java | 9 + .../impl/SalaryCalcTaxServiceImpl.java | 315 ++++ .../engine/salary/util/SalaryEntityUtil.java | 36 +- .../salary/web/SalaryAcctController.java | 44 +- .../salary/web/SalarySobController.java | 7 + .../wrapper/SalaryAcctResultWrapper.java | 33 + .../salary/wrapper/SalarySobWrapper.java | 14 + test/ParseTaxApi.java | 4 +- 28 files changed, 3950 insertions(+), 51 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTax.java create mode 100644 src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTaxFeedback.java create mode 100644 src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTaxRequest.java create mode 100644 src/com/engine/salary/entity/salaryacct/dto/SalaryCalcTaxInfoDTO.java create mode 100644 src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java create mode 100644 src/com/engine/salary/entity/salaryacct/po/SalaryAcctCalcTaxReqPO.java create mode 100644 src/com/engine/salary/mapper/salaryacct/SalaryAcctCalcTaxReqMapper.java create mode 100644 src/com/engine/salary/mapper/salaryacct/SalaryAcctCalcTaxReqMapper.xml create mode 100644 src/com/engine/salary/remote/tax/client/CalculateClient.java create mode 100644 src/com/engine/salary/remote/tax/request/calculate/CalculateASynIndividualIncomeTaxRequest.java create mode 100644 src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java create mode 100644 src/com/engine/salary/service/SalaryAcctCalcTaxReqService.java create mode 100644 src/com/engine/salary/service/SalaryCalcTaxService.java create mode 100644 src/com/engine/salary/service/impl/SalaryAcctCalcTaxReqServiceImpl.java create mode 100644 src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java diff --git a/src/com/engine/salary/config/SalaryPermissionConfig.java b/src/com/engine/salary/config/SalaryPermissionConfig.java index 7703e9267..61abe6086 100644 --- a/src/com/engine/salary/config/SalaryPermissionConfig.java +++ b/src/com/engine/salary/config/SalaryPermissionConfig.java @@ -22,11 +22,11 @@ //@Configuration //public class SalaryPermissionConfig { // -// @Autowired +// // private PermissionConfig permissionConfig; -// @Autowired +// // private PermissionModuleSourceService permissionModuleSourceService; -// @Autowired +// // private PermissionModuleTargetService permissionModuleTargetService; // // public static final String TABLE_NAME = "hrsa"; diff --git a/src/com/engine/salary/constant/SzyhApiConstant.java b/src/com/engine/salary/constant/SzyhApiConstant.java index 608bf61a4..ae932a07d 100644 --- a/src/com/engine/salary/constant/SzyhApiConstant.java +++ b/src/com/engine/salary/constant/SzyhApiConstant.java @@ -147,6 +147,25 @@ public class SzyhApiConstant { */ public static final String GET_COMPANY_INCOMES = "gateway/iit/report/getCompanyIncomes"; + /** + * 个人养老金下载 + */ + public static final String DOWNLOAD_PERSONAL_PENSION = "gateway/iit/personalPension/download"; + /** + * 获取个人养老金下载反馈 + */ + public static final String DOWNLOAD_PERSONAL_PENSION_FEEDBACK = "gateway/iit/personalPension/getDownloadFeedback"; + /** + * 异步计算个税 + */ + public static final String CALCULATE_ASYN_INDIVIDUAL_INCOME_TAX = "gateway/iit/calculateTax/calculateASynIndividualIncomeTax"; + /** + * 查询算税反馈结果 + */ + public static final String ASYN_INDIVIDUAL_INCOME_TAX_FEEDBACK = "gateway/iit/calculateTax/getASynIndividualIncomeTaxFeedback"; + + + /** * 请求成功状态码 diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTax.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTax.java new file mode 100644 index 000000000..3dab288f0 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTax.java @@ -0,0 +1,199 @@ +package com.engine.salary.entity.salaryacct.bo; + +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctTaxAgentPO; +import com.engine.salary.entity.salarysob.po.SalarySobTaxReportRulePO; +import com.engine.salary.entity.taxagent.bo.TaxAgentTaxReturnBO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; +import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 薪资核算计算个税 + * + * @author xiajun + */ +@Data +@AllArgsConstructor +public class SalaryCalcTax { + + /** + * 薪资核算记录 + */ + private SalaryAcctRecordPO salaryAcctRecord; + + /** + * 薪资核算关联的个税扣缴义务人 + */ + private List salaryAcctTaxAgents; + + /** + * 薪资核算关联的薪资核算人员 + */ + private List salaryAcctEmployees; + + /** + * 薪资核算关联的薪资核算结果 + */ + private List salaryAcctResultValues; + + /** + * 个税扣缴义务人 + */ + private List taxAgents; + + /** + * 个税扣缴义务人的个税信息 + */ + private List taxAgentTaxReturns; + + /** + * 个税申报表字段 + */ + private List taxReportColumns; + + /** + * 薪资账套的个税申报表字段对应 + */ + private List salarySobTaxReportRules; + + /** + * 报送人员 + */ + private List employeeDeclares; + + public Map> buildCalcTaxRequestParam() { + // 薪资核算关联的个税扣缴义务人 + Map> salaryAcctAgentMap = SalaryEntityUtil.group2Map(salaryAcctTaxAgents, SalaryAcctTaxAgentPO::getTaxAgentId); + // 薪资核算关联的薪资核算人员 + Map> salaryAcctEmployeeMap = SalaryEntityUtil.group2Map(salaryAcctEmployees, SalaryAcctEmployeePO::getTaxAgentId); + // 薪资核算关联的薪资核算结果 + Map> salaryAcctResultValueMap = SalaryEntityUtil.group2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId); + // 个税扣款义务人 + Map taxAgentMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId); + // 个税扣款义务人的个税信息 + Map taxAgentTaxReturnMap = SalaryEntityUtil.convert2Map(taxAgentTaxReturns, TaxAgentTaxReturnPO::getTaxAgentId); + // 个税申报表字段 + Map> taxReportColumnMap = SalaryEntityUtil.group2Map(taxReportColumns, TaxReportColumnPO::getIncomeCategory); + // 薪资账套的个税申报表字段对应 + Map salarySobTaxReportRuleMap = SalaryEntityUtil.convert2Map(salarySobTaxReportRules, SalarySobTaxReportRulePO::getReportColumnDataIndex); + // 报送人员 + Map> employeeDeclareMap = SalaryEntityUtil.group2Map(employeeDeclares, EmployeeDeclarePO::getTaxAgentId); + + Map> resultMap = new HashMap<>(); + + for (Map.Entry> entry : salaryAcctAgentMap.entrySet()) { + TaxAgentPO taxAgent = taxAgentMap.get(entry.getKey()); + if (taxAgent == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人不存在或已被删除")); + } + TaxAgentTaxReturnPO taxAgentTaxReturn = taxAgentTaxReturnMap.get(taxAgent.getId()); + if (taxAgentTaxReturn == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "个税扣缴义务人没有维护个税信息")); + } + List salaryAcctEmployees = salaryAcctEmployeeMap.get(taxAgent.getId()); + if (CollectionUtils.isEmpty(salaryAcctEmployees)) { + continue; + } + List employeeDeclares = employeeDeclareMap.get(taxAgent.getId()); + if (CollectionUtils.isEmpty(employeeDeclares)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "该个税扣缴义务人无申报人员")); + } + + // 注册的企业信息-->请求参数 + Map requestParam = TaxAgentTaxReturnBO.convert2RequestMap(taxAgent, taxAgentTaxReturn); + // 税款所属期 + requestParam.put("skssq", SalaryDateUtil.getFormatYYYYMM(entry.getValue().get(0).getTaxCycle())); + // 综合所得 + requestParam.put("zhsd", buildZHSDRequestParam(salaryAcctTaxAgents, salaryAcctEmployees, + salaryAcctResultValueMap, taxReportColumnMap, salarySobTaxReportRuleMap, employeeDeclares)); + + resultMap.put(taxAgent.getId(), requestParam); + } + return resultMap; + } + + private Map buildZHSDRequestParam(List salaryAcctTaxAgents, + List salaryAcctEmployees, + Map> salaryAcctResultValueMap, + Map> taxReportColumnMap, + Map salarySobTaxReportRuleMap, + List employeeDeclares) { + Map> incomeCategoryKeySalaryAcctEmployeeMap = SalaryEntityUtil + .group2Map(salaryAcctEmployees, SalaryAcctEmployeePO::getIncomeCategory); + + Map requestParam = new HashMap<>(); + + for (SalaryAcctTaxAgentPO salaryAcctTaxAgent : salaryAcctTaxAgents) { + IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum + .parseByValue(salaryAcctTaxAgent.getIncomeCategory()); + List taxReportColumns = taxReportColumnMap.get(incomeCategoryEnum.getValue().toString()); + List subSalaryAcctEmployees = incomeCategoryKeySalaryAcctEmployeeMap.get(incomeCategoryEnum.getValue().toString()); + Map salaryAcctEmployeeMap = SalaryEntityUtil.convert2Map(subSalaryAcctEmployees, SalaryAcctEmployeePO::getEmployeeId); + + SalaryCalcTaxRequest salaryCalcTaxRequest = new SalaryCalcTaxRequest(salaryAcctEmployeeMap, + salaryAcctResultValueMap, taxReportColumns, salarySobTaxReportRuleMap, employeeDeclares); + + switch (incomeCategoryEnum) { + case WAGES_AND_SALARIES: + requestParam.put("zcgzxj", salaryCalcTaxRequest.buildZCGZXJRequestParam()); + break; + case ONETIME_ANNUAL_BONUS: + requestParam.put("qnycxjjsslb", salaryCalcTaxRequest.buildQNYCXJJSSLBRequestParam()); + break; + case COMPENSATION_FOR_RETIRE: + requestParam.put("ntycxbcjlb", salaryCalcTaxRequest.buildNTYCXBCJLBRequestParam()); + break; + case COMPENSATION_FOR_DISMISS: + requestParam.put("jcldhtycxbcjlb", salaryCalcTaxRequest.buildJCLDHTYCXBCJLBRequestParam()); + break; + case INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE: + requestParam.put("grgqjl", salaryCalcTaxRequest.buildGRGQJLRequestParam()); + break; + case ANNUITY_RECEIPT: + requestParam.put("qynj", salaryCalcTaxRequest.buildQYNJRequestParam()); + break; + case REMUNERATION_FOR_LABOR: + requestParam.put("lwbclb", salaryCalcTaxRequest.buildLWBCLBRequestParam()); + break; + case INCOME_FOR_INSURANCE_SALESMAN: + requestParam.put("bxyxy", salaryCalcTaxRequest.buildBXYXYRequestParam()); + break; + case INCOME_FOR_SECURITIES_BROKER: + requestParam.put("zqjjr", salaryCalcTaxRequest.buildZQJJRRequestParam()); + break; + case REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR: + requestParam.put("qtlxlwbc", salaryCalcTaxRequest.buildQTLXLWBCRequestParam()); + break; + case REMUNERATION_FOR_OTHER_LABOR: + requestParam.put("qtflxlwbc", salaryCalcTaxRequest.buildQTFLXLWBCRequestParam()); + break; + case REMUNERATION_FOR_AUTHOR: + requestParam.put("gcsdlb", salaryCalcTaxRequest.buildGCSDLBRequestParam()); + break; + case ROYALTIES: + requestParam.put("txq", salaryCalcTaxRequest.buildTXQRequestParam()); + break; + default: + break; + + } + } + return requestParam; + } +} diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTaxFeedback.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTaxFeedback.java new file mode 100644 index 000000000..70963b916 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTaxFeedback.java @@ -0,0 +1,62 @@ +package com.engine.salary.entity.salaryacct.bo; + +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; +import com.engine.salary.util.JsonUtil; +import lombok.Data; +import weaver.general.Util; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * 异步算税的反馈结果 + */ +@Data +public class SalaryCalcTaxFeedback { + + private Map dataMap; + + private List employeeDeclares; + + public SalaryCalcTaxFeedback(Map dataMap, List employeeDeclares) { + this.dataMap = dataMap; + this.employeeDeclares = employeeDeclares; + } + + public Map buildZCGZXJFeedback() { + Map successDataMap = new HashMap<>(); + List successList = JsonUtil.parseList(dataMap.get("sscglb"), Map.class); + for (Map map : successList) { + // 证件号码 + String zzhm = Util.null2String(map.get("zzhm")); + // 应补退税额 + String ybtse = Util.null2String(map.get("ybtse")); + + successDataMap.put(zzhm, ybtse); + } + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), successDataMap.get(employeeDeclare.getCardNum())); + } + return resultMap; + } + + public Map buildOtherFeedback() { + Map successDataMap = new HashMap<>(); + List successList = JsonUtil.parseList(dataMap.get("sscglb"), Map.class); + for (Map map : successList) { + // 证件号码 + String zzhm = Util.null2String(map.get("zzhm")); + // 应补退税额 + String ybtse = Util.null2String(map.get("yingkjse")); + + successDataMap.put(zzhm, ybtse); + } + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), successDataMap.get(employeeDeclare.getCardNum())); + } + return resultMap; + } +} diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTaxRequest.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTaxRequest.java new file mode 100644 index 000000000..cca1f16ff --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryCalcTaxRequest.java @@ -0,0 +1,258 @@ +package com.engine.salary.entity.salaryacct.bo; + +import com.engine.salary.entity.employeedeclare.bo.EmployeeDeclareRequest; +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; +import com.engine.salary.entity.salarysob.po.SalarySobTaxReportRulePO; +import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO; +import com.engine.salary.enums.employeedeclare.CardTypeEnum; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; +import com.engine.salary.util.SalaryEntityUtil; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.wbi.util.Util; +import lombok.AllArgsConstructor; +import lombok.Data; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.MapUtils; +import org.apache.commons.lang3.StringUtils; + +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.*; + +@Data +@AllArgsConstructor +public class SalaryCalcTaxRequest { + + private Map salaryAcctEmployeeMap; + private Map> salaryAcctResultValueMap; + private List taxReportColumns; + private Map salarySobTaxReportRuleMap; + private List employeeDeclares; + + /** + * 正常工资薪金 + * + * @return + */ + public Map buildZCGZXJRequestParam() { + // 人员列表 + List> RYLBRequestParam = EmployeeDeclareRequest.convert2RequestParam(employeeDeclares); + // 正常工资薪金列表 + List> ZCGZXJLBRequestParams = buildRequestParams(IncomeCategoryEnum.WAGES_AND_SALARIES, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + + Map param = new HashMap<>(); + // 人员列表 + param.put("rylb", RYLBRequestParam); + // 正常工资薪金列表 + param.put("zcgzxjlb", ZCGZXJLBRequestParams); + // 正常工资薪金是否需要专项 + param.put("zcgzxjsfxyzx", 0); + // 正常工资薪金是否传入专项累计 + param.put("zcgzxjsfcrlj", 1); + // 是否传入累计个人养老金,2使用传入数据 + param.put("gryljcl", 2); + + return param; + } + + /** + * 全年一次性奖金收入 + * + * @return + */ + public List> buildQNYCXJJSSLBRequestParam() { + return buildRequestParams(IncomeCategoryEnum.ONETIME_ANNUAL_BONUS, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + } + + /** + * 稿酬所得 + * + * @return + */ + public List> buildGCSDLBRequestParam() { + return buildRequestParams(IncomeCategoryEnum.REMUNERATION_FOR_AUTHOR, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + } + + /** + * 一般劳务报酬所得 + * + * @return + */ + public List> buildLWBCLBRequestParam() { + return buildRequestParams(IncomeCategoryEnum.REMUNERATION_FOR_LABOR, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + } + + /** + * 解除劳动合同一次性补偿金 + * + * @return + */ + public List> buildJCLDHTYCXBCJLBRequestParam() { + return buildRequestParams(IncomeCategoryEnum.COMPENSATION_FOR_DISMISS, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + } + + /** + * 保险营销员佣金收入 + * + * @return + */ + public Map buildBXYXYRequestParam() { + List> requestParams = buildRequestParams(IncomeCategoryEnum.INCOME_FOR_INSURANCE_SALESMAN, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + + Map param = new HashMap<>(); + // 保险营销员薪金列表 + param.put("bxyxylwbclb", requestParams); + // 是否传入累计个人养老金,2使用传入数据 + param.put("gryljcl", 2); + return param; + } + + /** + * 证券经纪人佣金收入 + * + * @return + */ + public Map buildZQJJRRequestParam() { + List> requestParams = buildRequestParams(IncomeCategoryEnum.INCOME_FOR_SECURITIES_BROKER, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + + Map param = new HashMap<>(); + // 证券经纪人薪金列表 + param.put("zqjjrsdlb", requestParams); + // 是否传入累计个人养老金,2使用传入数据 + param.put("gryljcl", 2); + return param; + } + + /** + * 其他连续劳务报酬所得 + * + * @return + */ + public Map buildQTLXLWBCRequestParam() { + List> requestParams = buildRequestParams(IncomeCategoryEnum.REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + + Map param = new HashMap<>(); + param.put("qtlxlwbclb", Lists.newArrayList()); + // 是否传入累计个人养老金,2使用传入数据 + param.put("gryljcl", 2); + return param; + } + + /** + * 特许权使用费所得 + * + * @return + */ + public List> buildTXQRequestParam() { + return buildRequestParams(IncomeCategoryEnum.ROYALTIES, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + } + + /** + * 个人股权激励收入 + * + * @return + */ + public List> buildGRGQJLRequestParam() { + return buildRequestParams(IncomeCategoryEnum.INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + } + + /** + * 年金领取 + * + * @return + */ + public List> buildQYNJRequestParam() { + return buildRequestParams(IncomeCategoryEnum.ANNUITY_RECEIPT, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + } + + /** + * 内退一次性补偿金 + * + * @return + */ + public List> buildNTYCXBCJLBRequestParam() { + return buildRequestParams(IncomeCategoryEnum.COMPENSATION_FOR_RETIRE, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + } + + /** + * 其他非连续劳务报酬所得 + * + * @return + */ + public List> buildQTFLXLWBCRequestParam() { + return buildRequestParams(IncomeCategoryEnum.REMUNERATION_FOR_OTHER_LABOR, + employeeDeclares, salaryAcctEmployeeMap, salaryAcctResultValueMap); + } + + private List> buildRequestParams(IncomeCategoryEnum incomeCategoryEnum, + List employeeDeclares, + Map salaryAcctEmployeeMap, + Map> salaryAcctResultValueMap) { + List> requestParams = Lists.newArrayListWithExpectedSize(salaryAcctResultValueMap.size()); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + SalaryAcctEmployeePO salaryAcctEmployee = salaryAcctEmployeeMap.get(employeeDeclare.getEmployeeId()); + if (salaryAcctEmployee == null) { + continue; + } + List salaryAcctResultValue = salaryAcctResultValueMap.get(salaryAcctEmployee.getId()); + if (salaryAcctResultValue == null) { + continue; + } + Map map = SalaryEntityUtil.convert2Map(salaryAcctResultValue, SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue); + Map requestParam = buildRequestParam(incomeCategoryEnum, employeeDeclare, map); + if (MapUtils.isNotEmpty(requestParam)) { + requestParams.add(requestParam); + } + } + return requestParams; + } + + private Map buildRequestParam(IncomeCategoryEnum incomeCategoryEnum, + EmployeeDeclarePO employeeDeclare, + Map salaryAcctResultValue) { + if (CollectionUtils.isEmpty(taxReportColumns)) { + return Collections.emptyMap(); + } + Map requestParam = Maps.newHashMap(); + // 姓名 + requestParam.put("xm", employeeDeclare.getEmployeeName()); + // 证件类型 + requestParam.put("zzlx", CardTypeEnum.RESIDENT_IDENTITY_CARDS.getDefaultLabel()); + // 证件号码 + requestParam.put("zzhm", employeeDeclare.getCardNum()); + // 所得项目 + requestParam.put("sdxm", incomeCategoryEnum.getDefaultLabel()); + + for (TaxReportColumnPO taxReportColumn : taxReportColumns) { + Long dataKey = null; + SalarySobTaxReportRulePO salarySobTaxReportRule = salarySobTaxReportRuleMap.get(taxReportColumn.getReportColumnDataIndex()); + if (salarySobTaxReportRule != null && salarySobTaxReportRule.getSalaryItemId() != null) { + dataKey = salarySobTaxReportRule.getSalaryItemId(); + } + String value = salaryAcctResultValue.getOrDefault(dataKey, StringUtils.EMPTY); + if (Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue())) { + value = Util.getBigDecimalValue(value, BigDecimal.ZERO).toPlainString(); + } else if (Objects.equals(taxReportColumn.getDataType(), "integer")) { + value = Util.getBigDecimalValue(value, BigDecimal.ZERO).setScale(0, RoundingMode.HALF_UP).toPlainString(); + } + requestParam.put(taxReportColumn.getRequestParamKey(), value); + } + return requestParam; + } +} diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryCalcTaxInfoDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryCalcTaxInfoDTO.java new file mode 100644 index 000000000..554f98f9d --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryCalcTaxInfoDTO.java @@ -0,0 +1,27 @@ +package com.engine.salary.entity.salaryacct.dto; + +import lombok.Data; + +/** + * 薪资核算计算个税 + * + * @author xiajun + */ +@Data +public class SalaryCalcTaxInfoDTO { + + /** + * 是否开启智能算薪 + */ + private boolean enableTaxDeclarationApiConfig; + + /** + * 是否显示计算个税按钮 + */ + private boolean showCalcTaxButton; + + /** + * 是否显示获取个税计算反馈按钮 + */ + private boolean showCalcTaxFeedbackButton; +} diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java new file mode 100644 index 000000000..d4745f149 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryCalcTaxParam.java @@ -0,0 +1,19 @@ +package com.engine.salary.entity.salaryacct.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.Data; + +/** + * 薪资核算计算个税 + * + * @author xiajun + */ +@Data +public class SalaryCalcTaxParam { + + /** + * 参数错误,薪资核算记录ID不能为空 + */ + @DataCheck(require = true,message = "薪资核算记录ID不能为空") + private Long salaryAcctRecordId; +} diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctCalcTaxReqPO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctCalcTaxReqPO.java new file mode 100644 index 000000000..a325a71a1 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctCalcTaxReqPO.java @@ -0,0 +1,52 @@ +package com.engine.salary.entity.salaryacct.po; + +import com.engine.hrmelog.annotation.ElogTransform; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.Accessors; + +import java.util.Collection; +import java.util.Date; + +@Data +@Builder +@Accessors(chain = true) +@NoArgsConstructor +@AllArgsConstructor +@ElogTransform(name = "薪资核算在线计算个税请求") +//hrsa_acct_calc_tax_req +public class SalaryAcctCalcTaxReqPO { + + @ElogTransform(name = "主键id", ignore = true) + private Long id; + + @ElogTransform(name = "薪资核算记录", ignore = true) + private Long salaryAcctRecordId; + + @ElogTransform(name = "个税扣缴义务人id", ignore = true) + private Long taxAgentId; + + @ElogTransform(name = "请求requestId", ignore = true) + private String requestId; + + @ElogTransform(name = "租户key", ignore = true) + private String tenantKey; + + @ElogTransform(name = "创建人id", ignore = true) + private Long creator; + + @ElogTransform(name = "是否删除", ignore = true) + private Integer deleteType; + + @ElogTransform(name = "创建时间", ignore = true) + private Date createTime; + + @ElogTransform(name = "更新时间", ignore = true) + private Date updateTime; + + //--------条件---------- + //主键id集合 + private Collection ids; +} diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index fbce1c59b..9d7c9c427 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -1,7 +1,10 @@ package com.engine.salary.enums.salarysob; +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.enums.BaseEnum; +import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTaxFeedbackResponse; import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; +import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; @@ -21,155 +24,325 @@ public enum IncomeCategoryEnum implements BaseEnum { // todo 多语言 WAGES_AND_SALARIES(1, "0101", "正常工资薪金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160487) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, REMUNERATION_FOR_LABOR(4, "0400", "一般劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160488) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getLwbclb().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getLwbclb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, ONETIME_ANNUAL_BONUS(2, "0103", "全年一次性奖金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160489) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQnycxjjsslb().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQnycxjjsslb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, COMPENSATION_FOR_RETIRE(107, "0107", "内退一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181936) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getNtycxbcjlb().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getNtycxbcjlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, COMPENSATION_FOR_DISMISS(108, "0108", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181937) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getJcldhtycxbcjlb().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getJcldhtycxbcjlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE(109, "0109", "个人股权激励收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181938) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getGrgqjl().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getGrgqjl().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, ANNUITY_RECEIPT(110, "0110", "年金领取", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181939) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQynj().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQynj().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, INCOME_FOR_INSURANCE_SALESMAN(402, "0402", "保险营销员佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181940) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getBxyxy().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getBxyxy().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, INCOME_FOR_SECURITIES_BROKER(403, "0403", "证券经纪人佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181942) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getZqjjr().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getZqjjr().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR(489, "0489", "其他连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181943) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtlxlwbc().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtlxlwbc().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, REMUNERATION_FOR_OTHER_LABOR(499, "0499", "其他非连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 175330) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtflxlwbc().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtflxlwbc().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, REMUNERATION_FOR_AUTHOR(500, "0500", "稿酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181944) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getGcsdlb().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getGcsdlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, ROYALTIES(600, "0600", "特许权使用费所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181945) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getTxq().getSscglb(); List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); result.put(this.getDefaultLabel(), zhsdSheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getTxq().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, NON_RESIDENT_INCOME_WAGES_AND_SALARIES(700, "0700", "无住所个人正常工资薪金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjgzxjlb().getSscglb(); List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); result.put(this.getDefaultLabel(), sheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjgzxjlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, NON_RESIDENT_INCOME_MONTHLY_BONUS(710, "0710", "无住所个人数月奖金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjrysyjjlb().getSscglb(); List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); result.put(this.getDefaultLabel(), sheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjrysyjjlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }, NON_RESIDENT_INCOME_REMUNERATION_FOR_LABOR(720, "0720", "一般劳务报酬所得", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getLwbclb().getSscglb(); List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); result.put(this.getDefaultLabel(), sheetData); - return result; } + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getLwbclb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; + } + }, NON_RESIDENT_INCOME_COMPENSATION_FOR_DISMISS(730, "0730", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + public void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getJcldhtycxbcjlb().getSscglb(); List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); result.put(this.getDefaultLabel(), sheetData); - return result; + } + + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getJcldhtycxbcjlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + } + return resultMap; } }; @@ -192,7 +365,11 @@ public enum IncomeCategoryEnum implements BaseEnum { this.labelId = labelId; } - public abstract Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse); + public abstract void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse); + + + public abstract Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares); + @Override public Integer getValue() { diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctCalcTaxReqMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctCalcTaxReqMapper.java new file mode 100644 index 000000000..badcde3d7 --- /dev/null +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctCalcTaxReqMapper.java @@ -0,0 +1,74 @@ +package com.engine.salary.mapper.salaryacct; + +import com.engine.salary.entity.salaryacct.po.SalaryAcctCalcTaxReqPO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +public interface SalaryAcctCalcTaxReqMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalaryAcctCalcTaxReqPO acctCalcTaxReq); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalaryAcctCalcTaxReqPO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param acctCalcTaxReq 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalaryAcctCalcTaxReqPO acctCalcTaxReq); + + + /** + * 修改,修改所有字段 + * + * @param acctCalcTaxReq 修改的记录 + * @return 返回影响行数 + */ + int update(SalaryAcctCalcTaxReqPO acctCalcTaxReq); + + /** + * 修改,忽略null字段 + * + * @param acctCalcTaxReq 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalaryAcctCalcTaxReqPO acctCalcTaxReq); + + /** + * 删除记录 + * + * @param acctCalcTaxReq 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalaryAcctCalcTaxReqPO acctCalcTaxReq); + + /** + * 批量删除记录 + * @param ids 主键id集合 + */ + void deleteByIds(@Param("ids") Collection ids); + + void deleteByRecordId(Long salaryAcctRecordId); +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctCalcTaxReqMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctCalcTaxReqMapper.xml new file mode 100644 index 000000000..ced6e5276 --- /dev/null +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctCalcTaxReqMapper.xml @@ -0,0 +1,232 @@ + + + + + + + + + + + + + + + + + + t + . + id + , t.salary_acct_record_id + , t.tax_agent_id + , t.request_id + , t.tenant_key + , t.creator + , t.delete_type + , t.create_time + , t.update_time + + + + + + + + + + + + + + + INSERT INTO hrsa_acct_calc_tax_req + + + + id, + + + salary_acct_record_id, + + + tax_agent_id, + + + request_id, + + + tenant_key, + + + creator, + + + delete_type, + + + create_time, + + + update_time, + + + + + #{id}, + + + #{salaryAcctRecordId}, + + + #{taxAgentId}, + + + #{requestId}, + + + #{tenantKey}, + + + #{creator}, + + + #{deleteType}, + + + #{createTime}, + + + #{updateTime}, + + + + + + + + UPDATE hrsa_acct_calc_tax_req + + salary_acct_record_id=#{salaryAcctRecordId}, + tax_agent_id=#{taxAgentId}, + request_id=#{requestId}, + tenant_key=#{tenantKey}, + creator=#{creator}, + delete_type=#{deleteType}, + create_time=#{createTime}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_acct_calc_tax_req + + + salary_acct_record_id=#{salaryAcctRecordId}, + + + tax_agent_id=#{taxAgentId}, + + + request_id=#{requestId}, + + + tenant_key=#{tenantKey}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_acct_calc_tax_req + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + UPDATE hrsa_acct_calc_tax_req + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + UPDATE hrsa_acct_calc_tax_req + SET delete_type = 1 + WHERE delete_type = 0 + AND salary_acct_record_id = #{salaryAcctRecordId} + + + + \ No newline at end of file diff --git a/src/com/engine/salary/remote/tax/client/CalculateClient.java b/src/com/engine/salary/remote/tax/client/CalculateClient.java new file mode 100644 index 000000000..6c27ef8fc --- /dev/null +++ b/src/com/engine/salary/remote/tax/client/CalculateClient.java @@ -0,0 +1,31 @@ +package com.engine.salary.remote.tax.client; + +import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTaxFeedbackResponse; +import com.engine.salary.util.HttpUtil; +import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SingnatureData; +import lombok.extern.slf4j.Slf4j; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +@Slf4j +public class CalculateClient extends TaxBaseClient{ + + public CalculateClient(Long taxAgentId) { + super(taxAgentId); + } + + public GetASynIndividualIncomeTaxFeedbackResponse getASynIndividualIncomeTaxFeedback(String requestId){ + String url = super.apiConfig.getHost() + "/gateway/iit/calculateTax/getASynIndividualIncomeTaxFeedback"; + Map params = new HashMap<>(1); + params.put("requestId", requestId); + Map header = SingnatureData.initHeader(Collections.emptyMap(), apiConfig.getAppKey(), apiConfig.getAppSecret()); + String res = HttpUtil.getRequest(url, header, params); + + log.info("getDeclareTaxResultFeedback res --- {}", res); + return JsonUtil.parseObject(res, GetASynIndividualIncomeTaxFeedbackResponse.class); + + } +} diff --git a/src/com/engine/salary/remote/tax/request/calculate/CalculateASynIndividualIncomeTaxRequest.java b/src/com/engine/salary/remote/tax/request/calculate/CalculateASynIndividualIncomeTaxRequest.java new file mode 100644 index 000000000..408dec81f --- /dev/null +++ b/src/com/engine/salary/remote/tax/request/calculate/CalculateASynIndividualIncomeTaxRequest.java @@ -0,0 +1,1442 @@ +package com.engine.salary.remote.tax.request.calculate; + +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Data +public class CalculateASynIndividualIncomeTaxRequest { + /** + * 外部业务编号 必填:是 外部业务编号,唯一,幂等需要,最长64位,建议使用UUID,建议使用UUID + */ + private String bizNo; + /** + * 企业名称 必填:是 扣缴义务人名称:例如:测试ß科技有限公司 + */ + private String qymc; + /** + * 密码类型 必填:否 0表示申报密码;2表示实名账号实名密码 + */ + private String mmlx; + /** + * 实名账号 必填:条件必填 当mmlx=2时,必填 + */ + private String smzh; + /** + * 实名密码 必填:条件必填 当mmlx=2时,必填 + */ + private String smmm; + /** + * 加密实名密码 必填:否 默认不传则设置为0,0表示不加密,1表示加密 + */ + private String jmsmmm; + /** + * 申报密码 必填:条件必填 当mmlx=0时,必填 + */ + private String sbmm; + /** + * 加密申报密码 必填:否 默认不传则设置为0,0表示不加密;1表示加密 + */ + private String jmsbmm; + /** + * 登记序号 必填:条件必填 存在多个登记序号时,需要指定传入一个.例:10117440105249764755 + */ + private String djxhid; + /** + * 税号 必填:是 扣缴单位纳税人识别号 + */ + private String nsrsbh; + /** + * 地区编号 必填:是 6位行政区划代码,精确到市级,例如:440100,参考省市区编码 + */ + private String areaid; + /** + * 部门编号 必填:条件必填 分部门代报时必传 + */ + private String bmbh; + /** + * 部门名称 必填:否 分部门代报时必传 + */ + private String bmmc; + /** + * 所属期 必填:是 格式YYYYMM年月 + */ + private String skssq; + /** + * 多批次算税,是否校验人员之前批次算税状态 必填:否 应用场景: 如果填写“是”,在多批次算税中会校验当前批次中的人员在之前批次算税中是否存在未拿反馈的请求,如果存在就阻断当前批次算税。 + * 如果不填写或者填写“否”,不校验该逻辑。 + */ + private String sfjyrysszt; + /** + * 综合所得 必填:是 见综合所得 + */ + private zhsd zhsd; +// /** +// * 分类所得 必填:是 见分类所得 +// */ +// private 对象 flsd; +// /** +// * 非居民所得 必填:是 见非居民所得 +// */ +// private 对象 fjmsd; +// /** +// * 限售股所得 必填:是 见限售股所得 +// */ +// private 对象 xsgsd; + + @Data + public static class zhsd { + /** + * 是否离线算薪 必填:否 可选【是】或【否】,非必传,不传的情况下默认为【否】,当为离线算薪时,专项下载、人员报送都失效, + * sfrysb=1 时也不会报送人员, + * zcgzxjsfcrlj=0时会统一使用本地数据进行计算 + */ + private String sflxsx; + /** + * 减免方式 必填:否 1:"比例减免方式" 2:"限额减免方式" 其他方式不传值,按照当地政策选择减免方式 + */ + private String jmfs; + /** + * 减免比例 必填:条件必填 jmfs为1时必填,示例:10% 传0.1 + */ + private BigDecimal jmbl; + /** + * 减免限额 必填:条件必填 jmfs为2时必填,减免限额大于0 + */ + private BigDecimal jmxe; + /** + * 正常工资薪金对象 必填:是 参考综合所得-正常工资薪金对象 + */ + private zcgzxj zcgzxj; + /** + * 全年一次性奖金收入列表 必填:是 参考综合所得-全年一次性奖金收入 + */ + private List qnycxjjsslb; + /** + * 稿酬所得列表 必填:是 参考综合所得-稿酬所得 + */ + private List gcsdlb; + /** + * 一般劳务报酬所得列表 必填:是 参考综合所得-一般劳务报酬所得 + */ + private List lwbclb; + /** + * 解除劳动合同一次性补偿金列表 必填:是 参考综合所得-解除劳动合同一次性补偿金 + */ + private List jcldhtycxbcjlb; + /** + * 保险营销员 必填:是 参考综合所得-保险营销员薪金对象 + */ + private bxyxy bxyxy; + /** + * 证券经纪人 必填:是 参考综合所得-证券经纪人薪金对象 + */ + private zqjjr zqjjr; + /** + * 其他连续劳务报酬所得 必填:是 参考综合所得-其他连续劳务报酬所得 + */ + private qtlxlwbc qtlxlwbc; + /** + * 特许权所得 必填:是 参考综合所得-特许权所得 + */ + private List txq; + /** + * 个人股权激励所得 必填:是 参考综合所得-个人股权激励所得 + */ + private List grgqjl; + /** + * 企业年金 必填:是 参考综合所得-企业年金 + */ + private List qynj; + /** + * 内退一次性补偿金 必填:是 参考综合所得-内退一次性补偿金 + */ + private List ntycxbcjlb; + /** + * 其他非连续劳务报酬 必填:是 参考综合所得-其他非连续劳务报酬 + */ + private List qtflxlwbc; +// /** +// * 提前退休一次性补贴 必填:是 参考综合所得-提前退休一次性补贴 +// */ +// private List tqtxycxbt; +// /** +// * 央企负责人绩效薪金延期兑现收入和任期奖励 必填:是 参考综合所得-央企负责人绩效薪金延期兑现收入和任期奖励 +// */ +// private 数组 yqfzrsrhjl; +// /** +// * 法律援助劳务报酬所得列表 必填:是 参考综合所得-法律援助劳务报酬所得列表 +// */ +// private 数组 flyzlwbclb; +// /** +// * 非居民所得 必填:是 见非居民所得 +// */ +// private 对象 fjmsd; +// /** +// * 限售股所得 必填:是 见限售股所得 +// */ +// private 对象 xsgsd; + + @Data + public static class ry { + /** + * 姓名 必填:是 纳税人姓名 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 证件号码需要大写 + */ + private String zzhm; + /** + * 其他证件类型 必填:条件必填 见证件类型字典 + */ + private String qtzzlx; + /** + * 其他证件号码 必填:条件必填 见证件类型字典 + */ + private String qtzzhm; + /** + * 部门编号 必填:否 部门编号 + */ + private String bmbh; + /** + * 人员报送策略 必填:否 1. 默认逻辑“是”,仅当信息变化时才会报送信息到税局 2. 若企业想要支持人员信息不变化的情况下,也能重新发起报送,覆盖局端信息,可修改传参为“否” + */ + private String rybscl; + /** + * 工号 必填:否 + */ + private String gh; + /** + * 所属期 必填:否 格式YYYYMM年月 + */ + private String skssq; + /** + * 电话号码 必填:是 11位中国大陆手机号码 + */ + private String lxdh; + /** + * 人员状态 必填:是 默认为正常,可选择正常/非正常 + */ + private String nsrzt; + /** + * 任职受雇类型 必填:是 可选择雇员、保险营销员、证券经纪人、其他、实习学生(全日制学历教育) + */ + private String sfgy; + /** + * 入职年度就业情形 必填:否 当雇员、保险营销员、证券经纪人时可选择:当年首次入职学生、当年首次入职其他人员。其他情况下填写默认为空 + */ + private String rzndjyqk; + /** + * 受雇日期 必填:条件必填 格式:YYYY-MM-DD,不能大于当前时间 任职受雇类型选择:雇员、保险营销员、证券经纪人、实习学生(全日制学历教育)时必录 + */ + private String rzsgrq; + /** + * 性别 必填:是 男/女 + */ + private String xb; + /** + * 出生日期 必填:是 YYYY-MM-DD 需要和身份证上保持一致 + */ + private String csny; + /** + * 国籍 必填:是 见国籍字典 + */ + private String gj; + /** + * 人员地区 必填:是 境内/境外 + */ + private String rydq; + /** + * 离职日期 必填:否 格式:YYYY-MM-DD,不能大于当前时间,离职日期不能大于入职日期 人员状态非正常时必填 注:清空离职时间传入空字符串,不能是null + */ + private String lzrq; + /** + * 个人投资总额 必填:条件必填 当为股东投资者时必填,投资额大于0 + */ + private BigDecimal grgbze; + /** + * 个人投资比例 必填:否 投资额填写时必填,范围为0~100,不包含0 + */ + private BigDecimal grgbbl; + /** + * 是否残疾 必填:否 默认为否,可选择是/否 + */ + private String sfcj; + /** + * 是否烈属 必填:否 默认为否,可选择是/否 + */ + private String sfls; + /** + * 是否孤老 必填:否 默认为否,可选择是/否 + */ + private String sfgl; + /** + * 是否扣除减除费用 必填:否 默认为是,可选择是/否,传null或者空值都会默认为是,当填了否后, 如果后续还需要保持否的状态还需传否,不填则会默认为是 + */ + private String sfzdw; + /** + * 残疾证号 必填:条件必填 当为残疾时必填 + */ + private String cjzh; + /** + * 烈属证号 必填:条件必填 当为烈属时必填 + */ + private String lszh; + /** + * 邮箱 必填:否 + */ + private String dzyx; + /** + * 学历 必填:否 + * 默认为空,大学本科以下 大学本科 研究生 + */ + private String xl; + /** + * 职务 必填:否 高层 普通 + */ + private String zw; + /** + * 开户银行 必填:否 见银行字典 + */ + private String khyh; + /** + * 开户银行省份 必填:否 见开户银行省份字典 + */ + private String khyhsfmz; + /** + * 银行账号 必填:否 如果khyh,khyhsfmz,yhzh 有一项选择填写了那么其他两项也需要填写 + */ + private String yhzh; + /** + * 居住省份 必填:否 中文,例如浙江省 + */ + private String lxdz_sheng; + /** + * 居住城市 必填:否 中文,例如杭州市 + */ + private String lxdz_shi; + /** + * 居住区县 必填:否 中文,例如滨江区 + */ + private String lxdz_qx; + /** + * 居住街道 必填:否 中文,浦沿街道 + */ + private String lxdz_jd; + /** + * 居住详细地址 必填:否 + */ + private String lxdz; + /** + * 户籍省份 必填:否 中文,例如浙江省 + */ + private String hjszd_sheng; + /** + * 户籍城市 必填:否 中文,例如杭州市 + */ + private String hjszd_shi; + /** + * 户籍区县 必填:否 中文,例如滨江区 + */ + private String hjszd_qx; + /** + * 户籍街道 必填:否 中文,浦沿街道 + */ + private String hjszd_jd; + /** + * 户籍详细地址 必填:否 + */ + private String hjszd_xxdz; + /** + * 备注 必填:否 + */ + private String bz; + /** + * 出生地 必填:条件必填 外籍人员必填,填写出生地国家(地区),见国籍字典 + */ + private String csd; + /** + * 涉税事由 必填:条件必填 外籍人员必填,多个时用逗号分割; + * 任职受雇 提供临时劳务 转让财产 从事投资和经营活动 其他 + */ + private String sssx; + /** + * 首次入境时间 必填:条件必填 证件类型为港澳居民来往内地通行证、港澳居民居住证、台湾居民来往大陆通行证、台湾居民居住证、外国护照、外国人永久居留身份证、外国人来华工作许可证A、外国人来华工作许可证B、外国人来华工作许可证C时,且任职受雇类型选择雇员时必填,格式YYYY-MM-DD + */ + private String scrjsj; + /** + * 预计离境时间 必填:条件必填 证件类型为港澳居民来往内地通行证、港澳居民居住证、台湾居民来往大陆通行证、台湾居民居住证、外国护照、外国人永久居留身份证、外国人来华工作许可证A、外国人来华工作许可证B、外国人来华工作许可证C时,且任职受雇类型选择雇员时必填,格式YYYY-MM-DD + */ + private String yjljsj; + /** + * 联系地省份 必填:否 + */ + private String wjrlxdz_sheng; + /** + * 联系地城市 必填:否 + */ + private String wjrlxdz_shi; + /** + * 联系地区县 必填:否 + */ + private String wjrlxdz_qx; + /** + * 联系地街道 必填:否 + */ + private String wjrlxdz_jd; + /** + * 联系地详细地址 必填:否 + */ + private String wjrlxdz_xxdz; + /** + * 中文名 必填:否 证件类型为外国护照、外国人永久居留身份证、外国人工作许可证(A类)、外国人工作许可证(B类)、外国人工作许可证(C类)时不可填写,其他证件类型可填写。如果有填写必须为中文。 + */ + private String xmzw; + + } + + @Data + public static class zcgzxj { + /** + * 正常工资薪金列表 必填:是 参考综合所得-正常工资薪金 + */ + private List zcgzxjlb; + /** + * 上月正常工资薪金列表 必填:否 参考综合所得-正常工资薪金 + * 1、若当月已经代报完毕(当月代报上月所得),那么能从客户端下发累计到上月的所得数据,此时传给客户端的所得月份为当前月份 + * 2、若当月未代报完毕(当月代报上月所得),那么能从客户端下发累计到上月-1的所属数据,此时传给客户端的所得月份为当月月份-1 + * 3、上月正常工资薪金列表与本月正常工资薪金列表需要一一对应 + */ + private List syzcgzxjlb; + /** + * 人员列表 必填:是 见人员列表 + */ + private List rylb; + /** + * 正常工资薪金是否需要下载专项 必填:是 + * 1:需要专项明细进行专项计算 + * 0:不需要专项明细进行专项计算 + * 见附录专项传值策略 + */ + private String zcgzxjsfxyzx; + /** + * 是否已代报上月正常工资薪金 必填:否 + * 仅对需要计算正常工资所得生效,(默认为1) + * 1: 已代报上月正常工资薪金 + * 0: 未代报上月正常工资薪金(两个月算税传入0) + */ + private String syysfsyzcgzxj; + /** + * 支持传入专项 必填:否 + * 仅在syysfsyzcgzxj=0时候生效,默认值=0 + * 0: 不支持用户传专项,使用实时下载的专项,默认值 + * 1: 支持传上月当月的专项 + * 2:支持传截止至上月为止的累计专项 + */ + private String zcgzxjsfcrzx; + /** + * 当前算税月正常工资薪金是否传入专项累计 必填:否 + * 仅对当前算税月数据生效,默认为0 + * (如果是离线算薪,zcgzxjsfcrlj=1时会强制使用本地数据进行计算) + * 0:使用下载计算专项累计 + * 1:使用传入的专项累计值 + * 2: 不实时下载专项,使用本地数据进行计算 + * 见附录专项传值策略 + */ + private String zcgzxjsfcrlj; + + /** + * 批次号 必填:否 + * 默认不填为Null,表示一月一次算薪; + * 其他整数值(如1、2、3等)为一月多次发薪算薪的批次 + */ + private Integer pch; + /** + * 是否导入上月正常工资薪金(一月多次发薪) 必填:否 + * 仅在一月多次算税场景中使用 0:不导入上月薪金 1:导入上月薪资(默认为1,导入上月薪资) + */ + private String sfdrsyzcgzxj; + /** + * 是否同时人员报送 必填:否 0: 人员不报送; + */ + private String sfrysb; + /** + * 年金/住房公积金上限选项 必填:否 + * 1:不处理(默认) + * 2:使用年金/公积金上限(超过上限使用上限值,不超过 则使用原来的值) + * 3:年金使用上限,公积金截取超上限部分纳入收入额 + * 4.年金使用上限,截取公积金超过上限的部分减少收入额 + */ + private String njzfgjjsxxx; + /** + * 企业下载往期标志 必填:否 + * 1:按照企业维度下载(默认) 0:按照部门维度下载(企业在局端备案分部门,需要传入0) + */ + private String qyxzwqbz; + + /** + * 多月算税,是否使用上月传入的应补退税额 必填:否 + * 1. 不传或传空(默认为否)或者传“否”,与当前多月算税逻辑一致。2. 传“是”,多月算税时取上月薪资数据传入的应补退税额参与算税。 + */ + private String sfsysyybtse; + + /** + * 个人养老金策略 必填:否 + * 0: 不传或传空或者传“0”则会实时下载个人养老金 1: 传“1”则使用本地的个人养老金 2: 传“2”则使用传入的累计个人养老金 + */ + private String gryljcl; + + /** + * 上月个人养老金策略 必填:否 + * 不传或传空赋值默认值,默认值为1 + * 0:传“0”则会实时下载个人养老金 1: 传“1”则使用本地的个人养老金 2: 传“2”则使用传入的累计个人养老金 + */ + private String sygryljcl; + + @Data + public static class zcgz { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 当期收入额 必填:条件必填 当sygs为空或者等于公式5时必填 + */ + private BigDecimal sre; + /** + * 适用公式 必填:否 见《工资收入公式字典》 + * 重点说明:一般正常工资薪金所得不用传适用公式,只需要传入收入额,就可以进行计算;也可以传适用公式,系统就会按照适用公式进行计算 当证件类型为居民身份证时,适用公式默认为空 + */ + private String sygs; + /** + * 境内工作天数 必填:条件必填 正常工资薪金传了适用公式才需要条件必录。当sygs字段填值并且不等于公式5时,该字段必填,可以为小数 小数位0.5天 不能两位小数,只能是1或者1.0不能1.00 + */ + private BigDecimal jngzts; + /** + * 境外工作天数 必填:条件必填 正常工资薪金传了适用公式才需要条件必录。当sygs字段填值并且不等于公式5时,该字段必填,可以为小数 小数位0.5天 不能两位小数,只能是1或者1.0不能1.00 + */ + private BigDecimal jwgzts; + /** + * 境内支付 必填:条件必填 正常工资薪金传了适用公式才需要条件必录。当sygs字段填值并且不等于公式5时,该字段必填 + */ + private BigDecimal jnzf; + /** + * 境外支付 必填:条件必填 正常工资薪金传了适用公式才需要条件必录。当sygs字段填值并且不等于公式5时,该字段必填 + */ + private BigDecimal jwzf; + /** + * 免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 基本养老保险 必填:否 无则填0 + */ + private BigDecimal jbylaobxf; + /** + * 基本医疗保险 必填:否 无则填0 + */ + private BigDecimal jbylbxf; + /** + * 失业保险 必填:否 无则填0 + */ + private BigDecimal sybxf; + /** + * 住房公积金 必填:否 无则填0 + */ + private BigDecimal zfgjj; + /** + * 年金 必填:否 无则填0 + */ + private BigDecimal nj; + /** + * 商业健康保险 必填:否 无则填0 + */ + private BigDecimal syjkbx; + /** + * 税延养老保险 必填:否 无则填0 + */ + private BigDecimal syylbx; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目,填写其他,一定 + */ + private BigDecimal qt; + /** + * 备注 必填:条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称 + */ + private String bz; + /** + * 准予扣除的捐赠额 必填:否 无则填0,按照税法以及相关法规、政策规定,可以在税前扣除的捐赠额 + */ + private BigDecimal zykcjze; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + /** + * 所得项目名称 必填:是 正常工资薪金; + */ + private String sdxm; + /** + * 子女教育支出 必填:条件必填 在zcgzxjsfcrzx=1时必传,默认不传 + */ + private BigDecimal znjyzc; + /** + * 继续教育支出 必填:条件必填 在zcgzxjsfcrzx=1时必传,默认不传 + */ + private BigDecimal jxjyzc; + /** + * 住房租金支出 必填:条件必填 在zcgzxjsfcrzx=1时必传,默认不传 + */ + private BigDecimal zfzjzc; + /** + * 房屋贷款支出 必填:条件必填 在zcgzxjsfcrzx=1时必传,默认不传 + */ + private BigDecimal zfdklxzc; + /** + * 赡养老人支出 必填:条件必填 在zcgzxjsfcrzx=1时必传,默认不传 + */ + private BigDecimal sylrzc; + /** + * 3岁以下婴幼儿照护支出 必填:条件必填 在zcgzxjsfcrzx=1时必传,默认不传 + */ + private BigDecimal yyezhzc; + /** + * 累计子女教育支出 必填:条件必填 在zcgzxjsfcrzx=2时必传,默认不传 + */ + private BigDecimal ljznjyzc; + /** + * 累计继续教育支出 必填:条件必填 在zcgzxjsfcrzx=2时必传,默认不传 + */ + private BigDecimal ljjxjyzc; + /** + * 累计住房租金支出 必填:条件必填 在zcgzxjsfcrzx=2时必传,默认不传 + */ + private BigDecimal ljzfzjzc; + /** + * 累计房屋贷款支出 必填:条件必填 在zcgzxjsfcrzx=2时必传,默认不传 + */ + private BigDecimal ljzfdklxzc; + /** + * 累计赡养老人支出 必填:条件必填 在zcgzxjsfcrzx=2时必传,默认不传 + */ + private BigDecimal ljsylrzc; + /** + * 累计3岁以下婴幼儿照护支出 必填:条件必填 在zcgzxjsfcrzx=2时必传,默认不传 + */ + private BigDecimal ljyyezhzc; + /** + * 累计个人养老金 必填:否 在gryljcl=2时传值,默认不传 + */ + private BigDecimal ljgrylj; + /** + * 累计个人养老金校验码 必填:否 + * 在gryljcl=2时传值,默认不传 在ljgrylj传值时校验是否合法 ljgrylj传0时不校验 + */ + private String ljgryljjym; + /** + * 应补退税额 必填:否 配合sfsysyybtse字段使用 + */ + private BigDecimal ybtse; + } + } + + @Data + public static class qnycxjjss { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 批次号 必填:否 默认不填为Null,表示一月一次算薪; 其他整数值(如1、2、3等)为一月多次发薪算薪的批次 + */ + private Integer pch; + /** + * 当期收入额 必填:是 不填写默认为0 + */ + private BigDecimal sre; + /** + * 免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 准予扣除的捐赠额 必填:否 无则填0 + */ + private BigDecimal zykcjze; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + /** + * 备注 必填: 条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 所得项目名称 必填:是 填写:全年一次性奖金收入; + */ + private String sdxm; + } + + @Data + public static class gcsd { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 当期收入额 必填:是 不填写默认为0 + */ + private BigDecimal sre; + /** + * 免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + /** + * 备注 必填: 条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 所得项目名称 必填:是 填写:稿酬所得; + */ + private String sdxm; + } + + @Data + public static class lwbc { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 当期收入额 必填:是 不填写默认为0 + */ + private BigDecimal sre; + /** + * 当期免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 商业健康保险 必填:否 无则填0 + */ + private BigDecimal syjkbx; + /** + * 税延养老保险 必填:否 无则填0 + */ + private BigDecimal syylbx; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + /** + * 备注 必填:条件必填  根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 允许扣除税费 必填:否 + */ + private BigDecimal yxkcsf; + /** + * 所得项目名称 必填:是 填写:一般劳务报酬所得; + */ + private String sdxm; + } + + @Data + public static class jcldhtycxbcj { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 当期收入额 必填:是 不填写默认为0 + */ + private BigDecimal sre; + /** + * 免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 备注 必填: 条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 准予扣除的捐赠额 必填:否 无则填0 + */ + private BigDecimal zykcjze; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + /** + * 所得项目名称 必填:是 填写:解除劳动合同一次性补偿金; + */ + private String sdxm; + + } + + @Data + public static class bxyxy { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 当期收入额 必填:条件必填 当sygs为空或者等于公式5时必填 + */ + private BigDecimal sre; + /** + * 免税收入 必填:是 无则填0 + */ + private BigDecimal mssd; + /** + * 商业健康保险 必填:是 无则填0 + */ + private BigDecimal syjkbx; + /** + * 税延养老保险 必填:是 无则填0 + */ + private BigDecimal syylbx; + /** + * 准予扣除的捐赠额 必填:否 无则填0,按照税法以及相关法规、政策规定,可以在税前扣除的捐赠额 + */ + private BigDecimal zykcjze; + /** + * 其他 必填:是 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 备注 必填:条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 减免税额 必填:是 无则填0 + */ + private BigDecimal jmse; + /** + * 累计个人养老金 必填:否 在gryljcl=2时传值,默认不传 + */ + private BigDecimal ljgrylj; + /** + * 累计个人养老金校验码 必填:否 + * 在gryljcl=2时传值,默认不传 在ljgrylj传值时校验是否合法 ljgrylj传0时不校验 + */ + private String ljgryljjym; + + /** + * 所得项目名称 必填:是 保险营销员佣金收入; + */ + private String sdxm; + /** + * 允许扣除税费 必填:否 + */ + private BigDecimal yxkcsf; + /** + * 应补退税额 必填:否 配合sfsysyybtse字段使用 + */ + private BigDecimal ybtse; + } + + @Data + public static class zqjjr { + /** + * 证券经纪人所得薪金列表 必填:null 参考综合所得-证券经纪人列表 + */ + private List zqjjrsdlb; + /** + * 上月证券经纪人列表 必填:null 参考综合所得-证券经纪人列表 + */ + private List syzqjjrlb; + /** + * 人员列表 必填:null 见企业人员列表 + */ + private List rylb; + /** + * 批次号 必填:否 + * 默认不填为Null,表示一月一次算薪; + * 其他整数值(如1、2、3等)为一月多次发薪算薪的批次 + */ + private Integer pch; + /** + * 是否导入上月正常工资薪金(一月多次发薪) 必填:否 + * 仅在一月多次算税场景中使用 + * 0:不导入上月薪金 1:导入上月薪资 (默认为1,导入上月薪资) + */ + private String sfdrsyzcgzxj; + /** + * 是否同时人员报送 必填:否 0: 人员不报送; 1: 人员报送 (默认为1,算税前同时处理人员报送,离线算薪模式时,不会进行人员报送) + */ + private String sfrysb; + /** + * 是否已代报上月薪金 必填:否 (默认为1) 1: 已代报上月正常工资薪金 0: 未代报上月正常工资薪金(两个月算税传入0) + */ + private String syysfsyzcgzxj; + /** + * 企业下载往期标志 必填:否 1:按照企业维度下载(默认) 0:按照部门维度下载(企业在局端备案分部门,需要传入0) + */ + private String qyxzwqbz; + /** + * 多月算税,是否使用上月传入的应补退税额 必填:否 + * 1. 不传或传空(默认为否)或者传“否”,与当前多月算税逻辑一致。 2. 传“是”,多月算税时取上月薪资数据传入的应补退税额参与算税。 + */ + private String sfsysyybtse; + /** + * 个人养老金策略 必填:否 + * 0: 不传或传空或者传“0”则会实时下载个人养老金 1: 传“1”则使用本地的个人养老金 2: 传“2”则使用传入的累计个人养老金 + */ + private String gryljcl; + /** + * 上月个人养老金策略 必填:否 + * 不传或传空赋值默认值,默认值为1 0:传“0”则会实时下载个人养老金 1: 传“1”则使用本地的个人养老金 2: 传“2”则使用传入的累计个人养老金 + */ + private String sygryljcl; + + + @Data + public static class zqjjrsd { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 当期收入额 必填:条件必填 当sygs为空或者等于公式5时必填 + */ + private BigDecimal sre; + /** + * 免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 商业健康保险 必填:否 无则填0 + */ + private BigDecimal syjkbx; + /** + * 税延养老保险 必填:否 无则填0 + */ + private BigDecimal syylbx; + /** + * 准予扣除的捐赠额 必填:否 无则填0,按照税法以及相关法规、政策规定,可以在税前扣除的捐赠额 + */ + private BigDecimal zykcjze; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 备注 必填:条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + /** + * 累计个人养老金 必填:否 在gryljcl=2时传值,默认不传 + */ + private BigDecimal ljgrylj; + /** + * 累计个人养老金校验码 必填:否 + * 在gryljcl=2时传值,默认不传 在ljgrylj传值时校验是否合法 ljgrylj传0时不校验 + */ + private String ljgryljjym; + /** + * 所得项目名称 必填:是 证券经纪人佣金收入; + */ + private String sdxm; + /** + * 允许扣除税费 必填:否 + */ + private BigDecimal yxkcsf; + /** + * 应补退税额 必填:否 配合sfsysyybtse字段使用 + */ + private BigDecimal ybtse; + } + } + + @Data + public static class qtlxlwbc { + /** + * 其他连续劳务报酬所得列表 必填:null 参考综合所得-其他连续劳务报酬所得列表 + */ + private List qtlxlwbclb; + /** + * 上月其他连续劳务报酬所得列表 必填:null 参考综合所得-其他连续劳务报酬所得列表 + */ + private List syqtlxlwbclb; + /** + * 人员列表 必填:null 见企业人员列表 + */ + private List rylb; + /** + * 是否同时人员报送 必填:否 0: 人员不报送;1: 人员报送 默认为1,算税前同时处理人员报送,离线算薪模式时,不会进行人员报送) + */ + private String sfrysb; + /** + * 是否已代报上薪金 必填:否 (默认为1) 1: 已代报上月正常工资薪金 0: 未代报上月正常工资薪金(两个月算税) + */ + private String syysfsyzcgzxj; + /** + * 企业下载往期标志 必填:否 1:按照企业维度下载(默认) 0:按照部门维度下载(企业在局端备案分部门,需要传入0) + */ + private String qyxzwqbz; + /** + * 批次号 必填:否 默认不填为Null,表示一月一次算薪; 其他整数值(如1、2、3等)为一月多次发薪算薪的批次 + */ + private Integer pch; + /** + * 多月算税,是否使用上月传入的应补退税额 必填:否 1. 不传或传空(默认为否)或者传“否”,与当前多月算税逻辑一致。 2. 传“是”,多月算税时取上月薪资数据传入的应补退税额参与算税。 + */ + private String sfsysyybtse; + /** + * 个人养老金策略 必填:否 0: 不传或传空或者传“0”则会实时下载个人养老金 1: 传“1”则使用本地的个人养老金 2: 传“2”则使用传入的累计个人养老金 + */ + private String gryljcl; + /** + * 上月个人养老金策略 必填:否 不传或传空赋值默认值,默认值为1 0:传“0”则会实时下载个人养老金 1: 传“1”则使用本地的个人养老金 2: 传“2”则使用传入的累计个人养老金 + */ + private String sygryljcl; + + @Data + public static class qtlxlw { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 当期收入额 必填:条件必填 当sygs为空或者等于公式5时必填 + */ + private BigDecimal sre; + /** + * 免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 商业健康保险 必填:否 无则填0 + */ + private BigDecimal syjkbx; + /** + * 税延养老保险 必填:否 无则填0 + */ + private BigDecimal syylbx; + /** + * 准予扣除的捐赠额 必填:否 无则填0,按照税法以及相关法规、政策规定,可以在税前扣除的捐赠额 + */ + private BigDecimal zykcjze; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 备注 必填:条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + /** + * 累计个人养老金 必填:否 在gryljcl=2时传值,默认不传 + */ + private BigDecimal ljgrylj; + /** + * 累计个人养老金校验码 必填:否 在gryljcl=2时传值,默认不传 在ljgrylj传值时校验是否合法 ljgrylj传0时不校验 + */ + private String ljgryljjym; + /** + * 所得项目名称 必填:是 证券经纪人佣金收入; + */ + private String sdxm; + /** + * 允许扣除税费 必填:否 + */ + private BigDecimal yxkcsf; + /** + * 应补退税额 必填:否 配合sfsysyybtse字段使用 + */ + private BigDecimal ybtse; + } + } + + @Data + public static class txq { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 当期收入额 必填:是 不填写默认为0 + */ + private BigDecimal sre; + /** + * 免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 备注 必填: 条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + /** + * 所得项目名称 必填:是 填写:特许权使用费所得 + */ + private String sdxm; + } + + @Data + public static class grgqjl { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 当期收入额 必填:是 + */ + private BigDecimal sre; + /** + * 累计收入额(不含本期) 必填:否 如果为null,则使用本地申报数据累计自动填充 + */ + private BigDecimal ljsre; + /** + * 累计免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 备注 必填:条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 准予扣除的捐赠额 必填:否 无则填0 + */ + private BigDecimal zykcjze; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + /** + * 适用公式 必填:否 见《工资收入公式字典》 + */ + private String sygs; + /** + * 累计已扣缴税额 必填:否 如果为null,则使用本地申报数据累计自动填充 + */ + private BigDecimal ykjse; + /** + * 境内工作天数 必填:条件必填 + * 当sygs字段填值并且不等于公式5时,该字段必填 不能两位小数,只能是1或者1.0不能1.00 + */ + private BigDecimal jngzts; + /** + * 境外工作天数 必填:条件必填 + * 当sygs字段填值并且不等于公式5时,该字段必填 + * 不能两位小数,只能是1或者1.0不能1.00 + */ + private BigDecimal jwgzts; + /** + * 境内支付 必填:条件必填 当sygs字段填值并且不等于公式5时,该字段必填 + */ + private BigDecimal jnzf; + /** + * 境外支付 必填:条件必填 当sygs字段填值并且不等于公式5时,该字段必填 + */ + private BigDecimal jwzf; + /** + * 所得项目名称 必填:是 填写:个人股权激励收入 + */ + private String sdxm; + } + + @Data + public static class qynj { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 当期收入额 必填:是 不填写默认为0 + */ + private BigDecimal sre; + /** + * 已完税缴费额 必填:否 不填写默认为0 + */ + private BigDecimal ywsjfe; + /** + * 全部缴费额 必填:是 不小于等于0,取值小数点后两位例0.00 + */ + private BigDecimal qbjfe; + /** + * 是否一次性领取 必填: 是 1:是 0:否 + */ + private String sfycxlq; + /** + * 年金领取方式 必填:条件必填 当“是否一次性领取”为是时,不可填写,当“是否一次性领取”为否时,可填写; 领取方式按“按年”,“按季”,“按月” + */ + private String njlqfs; + /** + * 年金领取原因 必填:条件必填 当“是否一次性领取”为是时,可填写; 当“是否一次性领取”为否时,不可填写; 领取原因:“出国定居或个人死亡“、”其他“; + */ + private String njlqyy; + /** + * 免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 商业健康保险 必填:否 + */ + private BigDecimal syjkbx; + /** + * 税延养老保险 必填:否 + */ + private BigDecimal syylbx; + /** + * 其他 必填:否 + */ + private BigDecimal qt; + /** + * 准予扣除捐赠额 必填:否 + */ + private BigDecimal zykcjze; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + /** + * 备注 必填:条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 所得项目名称 必填:是 填写:年金领取 + */ + private String sdxm; + } + + @Data + public static class ntycxbcj { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 一次性补偿收入 必填:是 不填写默认为0 + */ + private BigDecimal sre; + /** + * 本期工资收入 必填: 否 + */ + private BigDecimal bqgzs; + /** + * 免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 其他 必填:否 + */ + private BigDecimal qt; + /** + * 准予扣除捐赠额 必填:否 + */ + private BigDecimal zykcjze; + /** + * 备注 必填:条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 所得项目名称 必填:是 填写:内退一次性补偿金 + */ + private String sdxm; + /** + * 分摊月份数 必填:是 + */ + private Integer ftyfs; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + } + + @Data + public static class qtflxlwbc { + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型 必填:是 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 当期收入额 必填:是 不填写默认为0 + */ + private BigDecimal sre; + /** + * 免税收入 必填:否 无则填0 + */ + private BigDecimal mssd; + /** + * 商业健康保险 必填:否 无则填0 + */ + private BigDecimal syjkbx; + /** + * 税延养老保险 必填:否 无则填0 + */ + private BigDecimal syylbx; + /** + * 允许扣除税费 必填:否 + */ + private BigDecimal yxkcsf; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 备注 必填:条件必填 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称,备注不超过20个字符 + */ + private String bz; + /** + * 减免税额 必填:否 无则填0 + */ + private BigDecimal jmse; + /** + * 所得项目名称 必填:是 填写:其他非连续劳务报酬 + */ + private String sdxm; + } + } + + +} diff --git a/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java new file mode 100644 index 000000000..7c1e13b6d --- /dev/null +++ b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java @@ -0,0 +1,746 @@ +package com.engine.salary.remote.tax.response.calculate; + +import com.engine.salary.annotation.TableTitle; +import com.engine.salary.entity.taxpayment.response.BaseResponse; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +public class GetASynIndividualIncomeTaxFeedbackResponse extends BaseResponse { + /** + * 返回数据 + */ + private Body body; + + @Data + public static class Body { + /** + * 企业名称 必填:是 + */ + private String qymc; + /** + * 税号 必填:是 + */ + private String nsrsbh; + /** + * 地区编号 必填:是 6位行政区划代码,精确到市级,例如:440100,参考省市区编码 + */ + private String areaid; + /** + * 部门编号 必填:是 + */ + private String bmbh; + /** + * 部门名称 必填:否 + */ + private String bmmc; + /** + * 算税月份 必填:是 + */ + private String skssq; + /** + * 综合所得 必填:是 见综合所得计算结果 + */ + private zhsd zhsd; +// /** +// * 分类所得 必填:是 见分类所得计算结果 +// */ +// private flsd flsd; + /** + * 非居民所得 必填:是 见非居民所得计算结果 + */ + private fjmsd fjmsd; +// /** +// * 限售股所得 必填:是 见限售股所得计算结果 +// */ +// private xsgsd xsgsd; +// /** +// * 人员申报失败列表 必填:是 参考人员代报结果对象 +// */ +// private rysbsblb rysbsblb; + + + @Data + public static class zhsd { + /** + * 人员代代报失败列表 参考人员代报结果对象 + */ + private List rysbsblb; + /** + * 正常工资薪金算税结果对象 参考综合所得算税结果对象 + */ + private ssjgdx zcgzxj; + /** + * 全年一次性奖金收入算税结果对象 参考综合所得算税结果对象 + */ + private ssjgdx qnycxjjsslb; + /** + * 稿酬所得算税结果对象 参考综合所得算税结果对象 + */ + private ssjgdx gcsdlb; + /** + * 一般劳务报酬算税结果对象 参考综合所得算税结果对象 + */ + private ssjgdx lwbclb; + /** + * 解除劳动合同一次性补偿金列表 参考综合所得算税结果对象 + */ + private ssjgdx jcldhtycxbcjlb; + /** + * 保险营销员薪金算税结果对象 参考综合所得算税结果对象 + */ + private ssjgdx bxyxy; + /** + * 证券经纪人薪金算税结果对象 参考综合所得算税结果对象 + */ + private ssjgdx zqjjr; + /** + * 特许权算税结果对象 参考综合所得算税结果对象 + */ + private ssjgdx txq; + /** + * 个人股权激励结果对象 参考综合所得算税结果对象 + */ + private ssjgdx grgqjl; + /** + * 企业年金结果对象 参考综合所得算税结果对象 + */ + private ssjgdx qynj; + /** + * 内退一次性补偿金 参考综合所得算税结果对象 + */ + private ssjgdx ntycxbcjlb; + /** + * 其他连续劳务报酬 参考综合所得算税结果对象 + */ + private ssjgdx qtlxlwbc; + /** + * 其他非连续劳务报酬 参考综合所得算税结果对象 + */ + private ssjgdx qtflxlwbc; + /** + * 提前退休一次性补贴 参考综合所得算税结果对象 + */ + private ssjgdx tqtxycxbt; + /** + * 央企负责人绩效薪金延期兑现收入和任期奖励 参考综合所得算税结果对象 + */ + private ssjgdx yqfzrsrhjl; + /** + * 法律援助劳务报酬 参考综合所得算税结果对象 + */ + private ssjgdx flyzlwbclb; + + + @Data + public static class rysb { + /** + * 姓名 + */ + private String xm; + /** + * 证件类型名称 + */ + private String zzlx; + /** + * 证件号码 + */ + private String zzhm; + /** + * 代报状态 1 待报送 2 代报中 3 代报失败 4 代报成功 + */ + private String sbzt; + /** + * 人员认证状态 + */ + private String rzzt; + /** + * 失败原因 + */ + private String sbyy; + /** + * 专项代报状态 + */ + private String clzt; + /** + * 专项代报结果原因 + */ + private String cljgms; + } + + @Data + public static class ssjgdx { + /** + * 综合算税成功列表 参考综合所得输出结果报文 + */ + private List sscglb; + /** + * 综合算税失败列表 参考综合所得输出结果报文 + */ + private List sssblb; + /** + * 综合算税失败原因列表 参考算税失败原因对象 + */ + private List sssbyylb; + /** + * 参与综合算税总人数 + */ + private int sszrs; + /** + * 综合算税失败总人数 + */ + private int sssbrs; + /** + * 年金上限 + */ + private BigDecimal njsx; + /** + * 住房公积金上限 + */ + private BigDecimal zfgjjsx; + /** + * 年平均工资 + */ + private BigDecimal npjgz; + /** + * 企业上月是否已申报 0:上月未申报 1:上月已申报 2:上上月未申报 + */ + private String qysysfysb; + } + + } + + + @Data + public static class fjmsd { + /** + * 正常工资薪金(无住所个人正常工资薪金)所得列表 参考非居民所得算税结果对象 + */ + private ssjgdx wjgzxjlb; + /** + * 无住所个人数月奖金列表 参考非居民所得算税结果对象 + */ + private ssjgdx wjrysyjjlb; + /** + * 劳务报酬列表 参考非居民所得算税结果对象 + */ + private ssjgdx lwbclb; + /** + * 稿酬所得列表 参考非居民所得算税结果对象 + */ + private ssjgdx gcsdlb; + /** + * 利息姑息红利所得列表 参考非居民所得算税结果对象 + */ + private ssjgdx lxgxhllb; + /** + * 股权转让列表 参考非居民所得算税结果对象 + */ + private ssjgdx gqzrlb; + /** + * 其他财产转让列表 参考非居民所得算税结果对象 + */ + private ssjgdx qtcczrlb; + /** + * 偶然所得列表 参考非居民所得算税结果对象 + */ + private ssjgdx orsdlb; + /** + * 解除劳动合同一次性补偿金列表 参考非居民所得算税结果对象 + */ + private ssjgdx jcldhtycxbcjlb; + /** + * 保险营销员薪金算税结果对象 参考非居民所得算税结果对象 + */ + private ssjgdx bxyxy; + /** + * 证券经纪人薪金算税结果对象 参考非居民所得算税结果对象 + */ + private ssjgdx zqjjr; + /** + * 个人股权激励结果对象 参考非居民所得算税结果对象 + */ + private ssjgdx grgqjl; + /** + * 特许权使用费所得 参考非居民所得算税结果对象 + */ + private ssjgdx txqsyfsd; + /** + * 个人房屋出租所得 参考非居民所得算税结果对象 + */ + private ssjgdx grfwczsd; + + @Data + public static class ssjgdx { + /** + * 非居民算税成功列表 参考输入报文非居民所得输出结果报文 + */ + private List sscglb; + /** + * 非居民算税失败列表 参考输入报文非居民所得输出结果报文 + */ + private List sssblb; + /** + * 非居民算税失败原因列表 参考算税失败原因对象 + */ + private List sssbyylb; + /** + * 参与非居民算税总人数 + */ + private int sszrs; + /** + * 非居民算税失败总人数 + */ + private int sssbrs; + } + } + + @Data + public static class result { + + //--------------综合所得输出结果报文------------------------------ + + /** + * 是否明细申报 必填:否 是或者否 + */ + private String sfmxsb; + /** + * 姓名 必填:否 如果是汇总申报返回空 + */ + @TableTitle(title = "姓名", dataIndex = "xm",key = "xm") + private String xm; + /** + * 证件类型 必填:否 见证件类型字典 如果是汇总申报返回空 + */ + private String zzlx; + /** + * 证件号码 必填:否 如果是汇总申报返回空 + */ + private String zzhm; + /** + * 任职受雇日期 必填:是 格式YYYY-MM-DD + */ + private String rzsgrq; + /** + * 离职日期 必填:否 格式YYYY-MM-DD + */ + private String lzrq; + /** + * 当期收入额 必填:是 不填写默认为0 + */ + @TableTitle(title = "当期收入额", dataIndex = "sre",key = "sre") + private BigDecimal sre; + /** + * 当期免税收入 必填:否 + */ + private BigDecimal mssd; + /** + * 基本养老保险 必填:否 + */ + private BigDecimal jbylaobxf; + /** + * 基本医疗保险 必填:否 + */ + private BigDecimal jbylbxf; + /** + * 失业保险 必填:否 + */ + private BigDecimal sybxf; + /** + * 住房公积金 必填:否 + */ + private BigDecimal zfgjj; + /** + * 子女教育支出 必填:否 + */ + private BigDecimal znjyzc; + /** + * 赡养老人支出 必填:否 + */ + private BigDecimal sylrzc; + /** + * 住房贷款利息支出 必填:否 + */ + private BigDecimal zfdklxzc; + /** + * 住房租金支出 必填:否 + */ + private BigDecimal zfzjzc; + /** + * 继续教育支出 必填:否 + */ + private BigDecimal jxjyzc; + /** + * 非学历继续教育支出 必填:否 + */ + private BigDecimal fxljxjyzc; + /** + * 3岁以下婴幼儿照护支出 必填:否 + */ + private BigDecimal yyezhzc; + /** + * 年金 必填:否 + */ + private BigDecimal nj; + /** + * 商业健康保险 必填:否 + */ + private BigDecimal syjkbx; + /** + * 税延养老保险 必填:否 + */ + private BigDecimal syylbx; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 准予扣除的捐赠额 必填:否 + */ + private BigDecimal zykcjze; + /** + * 减免税额 必填:否 + */ + private BigDecimal jmse; + /** + * 备注 必填:否 + */ + private String bz; + /** + * 减除费用 必填:否 正常工资薪金的减除费用。 对应保险营销员、证券经纪人的费用 + */ + private BigDecimal jcfy; + /** + * 其他扣除合计 必填:否 + */ + private BigDecimal qtckhj; + /** + * 应纳税所得额 必填:否 正常工资薪金返回否 + */ + @TableTitle(title = "应纳税所得额", dataIndex = "ynssde",key = "ynssde") + private BigDecimal ynssde; + /** + * 应纳税额 必填:否 正常工资薪金返回否 + */ + private BigDecimal ynse; + /** + * 已缴税额 必填:否 正常工资薪金返回否 + */ + private BigDecimal ykjse; + /** + * 应扣缴税额 必填:否 正常工资薪金返回否 + */ + private BigDecimal yingkjse; + /** + * 税率 必填:否 + */ + private BigDecimal sl; + /** + * 速算扣除数 必填:否 + */ + private BigDecimal sskcs; + /** + * 所得项目名称 必填:是 正常工资薪金;全年一次性奖金收入;稿酬所得;劳务报酬 + */ + private String sdxm; + /** + * 应补退税额 必填:否 应补退税额=累计应扣缴税额-累计已缴税额 + */ + @TableTitle(title = "应补退税额", dataIndex = "ybtse",key = "ybtse") + private BigDecimal ybtse; + /** + * 累计收入额 必填:否 + */ + private BigDecimal ljsre; + /** + * 累计免税收入额 必填:否 + */ + private BigDecimal ljmssd; + /** + * 累计专项扣除额 必填:否 三险一金合计 + */ + private BigDecimal ljzxkce; + /** + * 累计专项附加扣除额 必填:否 专项附加合计 + */ + private BigDecimal ljzxfjkce; + /** + * 累计其他扣除额 必填:否 + */ + private BigDecimal ljqtkce; + /** + * 累计减免税额 必填:否 + */ + private BigDecimal ljjmse; + /** + * 累计减除费用额 必填:否 正常工资薪金累计减除费用 必填:否 对应保险营销员、证券经纪人累计费用 + */ + private BigDecimal ljjcfye; + /** + * 累计月减除费用 必填:否 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 + */ + private BigDecimal ljyjcfy; + /** + * 允许扣除税费 必填:否 保险营销员、证券经纪人 + */ + private BigDecimal yxkcsf; + /** + * 展业成本 必填:否 保险营销员、证券经纪人 + */ + private BigDecimal zycb; + /** + * 月减除费用 必填:否 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 + */ + private BigDecimal yjcfy; + /** + * 累计应纳税所得额 必填:否 + */ + @TableTitle(title = "累计应纳税所得额", dataIndex = "ljynssde",key = "ljynssde") + private BigDecimal ljynssde; + /** + * 累计应纳税额 必填:否 + */ + private BigDecimal ljynse; + /** + * 累计应扣缴税额 必填:否 累计应扣缴税额 = 累计应纳税额 - 累计减免税额 + */ + private BigDecimal ljyingkjse; + /** + * 累计已缴税额 必填:否 + */ + private BigDecimal ljykjse; + /** + * 累计子女教育支出 必填:否 + */ + private BigDecimal ljznjyzc; + /** + * 累计继续教育支出 必填:否 + */ + private BigDecimal ljjxjyzc; + /** + * 累计非学历继续教育支持 必填:否 + */ + private BigDecimal ljfxljxjyzc; + /** + * 累计学历继续教育支持 必填:否 + */ + private BigDecimal ljxljxjyzc; + /** + * 累计住房租金支出 必填:否 + */ + private BigDecimal ljzfzjzc; + /** + * 累计房屋贷款支出 必填:否 + */ + private BigDecimal ljzfdklxzc; + /** + * 累计赡养老人支出 必填:否 + */ + private BigDecimal ljsylrzc; + /** + * 累计3岁以下婴幼儿照护支出 必填:否 + */ + private BigDecimal ljyyezhzc; + /** + * 累计准予扣除的捐赠额 必填:否 + */ + private BigDecimal ljzykcjze; + /** + * 累计个人养老金 必填:否 + */ + private BigDecimal ljgrylj; + /** + * 累计个人养老金校验码 必填:否 + */ + private String ljgryljjym; + /** + * 仅在两个月算税场景时使用,当前月分为N月: + * 0表示N-1月(上月)未申报 + * 1表示N-1月(上月)已申报 + * 2表示N-2月(上上个月)未申报 + */ + private String qysysfysb; + + /** + * 当前月分为N,如果N-1(上月)已申报,则返回N-1月员工在税局累计已扣缴的税额; + * 如果N-1月未申报,则返回N-2月工在税局累计已扣缴的税额; + */ + private BigDecimal ygzsjljykjse; + /** + * 本月已累计扣除税额 必填:否 针对一月多次算税的场景字段 + */ + private BigDecimal byyljkjse; + /** + * 本次应扣缴税额 必填:否 针对一月多次算税的场景字段,本次应扣缴税额=本月应扣缴税额-本月已累计税额 + */ + private BigDecimal bcykjse; + /** + * 分摊年度数 必填:否 + */ + private Integer ftnds; + /** + * 年减除费用 必填:否 默认为60000 + */ + private BigDecimal njcfy; + + + //----------非居民所得输出结果报文------------------------------- + + /* + * 姓名 必填:是 + */ +// private String xm; + /* + * 证件类型名称 必填:是 + */ +// private String zzlx; + /* + * 证件号码 必填:是 + */ +// private String zzhm; + /* + * 收入额 必填:是 + */ +// private String sre; + /* + * 累计收入(不含本次) 必填:是 + */ +// private String ljsre; + /* + * 免税收入 必填:是 + */ +// private String mssd; + /** + * 财产原值 必填:是 + */ + private String ccyz; + /* + * 允许扣除的税费 必填:是 + */ +// private String yxkcsf; + /** + * 投资抵扣 必填:是 + */ + private String tzdk; + /* + * 其他 必填:是 + */ +// private String qt; + /* + * 备注 必填:是 + */ +// private String bz; + /** + * 实际工作年限 必填:是 + */ + private String sjgznxs; + /* + * 减除费用 必填:是 + */ +// private String jcfy; + /* + * 准予扣除的捐赠额 必填:是 + */ +// private String zykcjze; + /* + * 税前扣除项目合计 必填:是 + */ +// private String sqkcxmhj; + /* + * 应纳税额所得额 必填:是 + */ +// private String ynssde; + /* + * 应纳税额 必填:是 + */ +// private String ynse; + /* + * 减免税额 必填:是 + */ +// private String jmse; + /* + * 应扣缴税额 必填:是 + */ +// private String yingkjse; + /* + * 已扣缴税额 必填:是 无需填写该值,按0处理 + */ +// private String ykjse; + /* + * 税率 必填:是 + */ +// private String sl; + /* + * 速算扣除数 必填:是 + */ + // private String sskcs; + /** + * 代报方式 必填:是 + */ + private String sbfs; + /* + * 应补退税额 必填:是 + */ + // private String ybtse; + /* + * 非居民所得项目名字 必填:是  非居民所得薪金类别-无住所个人正常工资薪金、全年一次性奖金收入 + */ + // private String sdxm; + /** + * 所得期间起 必填:是 YYYY-MM + */ + private String sdqjq; + /** + * 所得期间止 必填:是 YYYY-MM + */ + private String sdqjz; + + } + + /** + * 算税失败原因对象 + */ + @Data + public static class sssbyy { + /** + * 人员ID + */ + private Integer ygid; + /** + * 人员名称 + */ + private String xm; + /** + * 证件类型 见证件类型字典 + */ + private String zzlx; + /** + * 证件号码 + */ + private String zzhm; + /** + * 错误码 + */ + private String cwm; + /** + * 错误信息 + */ + private String cwxx; + /** + * 所得税的code + */ + private String sdxmdm; + /** + * 所得税的名称 + */ + private String sdxmmc; + } + + } + + +} diff --git a/src/com/engine/salary/service/EmployeeDeclareService.java b/src/com/engine/salary/service/EmployeeDeclareService.java index 3243a0234..94c52cafa 100644 --- a/src/com/engine/salary/service/EmployeeDeclareService.java +++ b/src/com/engine/salary/service/EmployeeDeclareService.java @@ -6,6 +6,7 @@ import com.engine.salary.entity.employeedeclare.dto.EmployeeDeclareListDTO; import com.engine.salary.entity.employeedeclare.dto.EmployeeDeclareRateDTO; import com.engine.salary.entity.employeedeclare.param.*; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctTaxAgentPO; import com.engine.salary.util.page.PageInfo; import java.util.Collection; @@ -109,6 +110,14 @@ public interface EmployeeDeclareService{ */ PageInfo listPage4FailByParam(EmployeeDeclareFailListQueryParam param); + /** + * 根据薪资核算记录关系的个税扣缴义务人查询报送人员 + * + * @param salaryAcctTaxAgents + * @return + */ + List listBySalaryAcctTaxAgent(List salaryAcctTaxAgents); + /** * 保存 * diff --git a/src/com/engine/salary/service/SalaryAcctCalcTaxReqService.java b/src/com/engine/salary/service/SalaryAcctCalcTaxReqService.java new file mode 100644 index 000000000..8fe41c879 --- /dev/null +++ b/src/com/engine/salary/service/SalaryAcctCalcTaxReqService.java @@ -0,0 +1,30 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.salaryacct.po.SalaryAcctCalcTaxReqPO; + +import java.util.List; + +public interface SalaryAcctCalcTaxReqService { + + /** + * 根据薪资核算记录查询 + * + * @param salaryAcctRecordId + * @return + */ + List listByRecordId(Long salaryAcctRecordId); + + /** + * 批量保存 + * + * @param salaryAcctCalcTaxReqs + */ + void batchSave(List salaryAcctCalcTaxReqs); + + /** + * 根据薪资核算记录删除 + * + * @param salaryAcctRecordId + */ + void deleteByRecordId(Long salaryAcctRecordId); +} diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index 0090f8330..e2e83b054 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -116,6 +116,7 @@ public interface SalaryAcctResultService { * @param salaryAcctResultPOS 薪资核算结果 */ void batchSave(List salaryAcctResultPOS); + void batchUpdate(List salaryAcctResultPOS); /** * 根据薪资核算人员id删除薪资核算结果 diff --git a/src/com/engine/salary/service/SalaryCalcTaxService.java b/src/com/engine/salary/service/SalaryCalcTaxService.java new file mode 100644 index 000000000..7e6efec5c --- /dev/null +++ b/src/com/engine/salary/service/SalaryCalcTaxService.java @@ -0,0 +1,29 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.salaryacct.dto.SalaryCalcTaxInfoDTO; +import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxParam; + +public interface SalaryCalcTaxService { + + /** + * 根据薪资核算记录id获取在线计算个税的相关信息 + * + * @param salaryCalcTaxParam + * @return + */ + SalaryCalcTaxInfoDTO getCalcTaxInfo(SalaryCalcTaxParam salaryCalcTaxParam); + + /** + * 计算个税 + * + * @param salaryCalcTaxParam + */ + void calcTax(SalaryCalcTaxParam salaryCalcTaxParam); + + /** + * 计算个税获取反馈 + * + * @param salaryCalcTaxParam + */ + void calcTaxFeedback(SalaryCalcTaxParam salaryCalcTaxParam); +} diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java index a88612e7e..264a83e56 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java @@ -20,6 +20,7 @@ import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclareRecordPO; import com.engine.salary.entity.employeedeclare.response.DeclareEmployeeFeedbackResponse; import com.engine.salary.entity.employeedeclare.response.DeclareEmployeeInfoResponse; +import com.engine.salary.entity.salaryacct.po.SalaryAcctTaxAgentPO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import com.engine.salary.entity.taxagent.bo.TaxAgentTaxReturnBO; @@ -188,6 +189,24 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla return page; } + @Override + public List listBySalaryAcctTaxAgent(List salaryAcctTaxAgents) { + if (CollectionUtils.isEmpty(salaryAcctTaxAgents)) { + return Collections.emptyList(); + } + Map employeeDeclareParamMap = new HashMap<>(); + for (SalaryAcctTaxAgentPO po : salaryAcctTaxAgents) { + employeeDeclareParamMap.putIfAbsent(po.getTaxAgentId() + "-" + po.getTaxCycle(), po); + } + List employeeDeclares = new ArrayList<>(); + for (Map.Entry entry : employeeDeclareParamMap.entrySet()) { + SalaryAcctTaxAgentPO salaryAcctTaxAgent = entry.getValue(); + List temp = listByTaxCycleAndTaxAgentId(salaryAcctTaxAgent.getTaxCycle(), salaryAcctTaxAgent.getTaxAgentId()); + employeeDeclares.addAll(temp); + } + return employeeDeclares; + } + @Override public void save(EmployeeDeclareSaveParam saveParam) { Date now = new Date(); diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalcTaxReqServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalcTaxReqServiceImpl.java new file mode 100644 index 000000000..c23a9b87c --- /dev/null +++ b/src/com/engine/salary/service/impl/SalaryAcctCalcTaxReqServiceImpl.java @@ -0,0 +1,37 @@ +package com.engine.salary.service.impl; + +import com.engine.core.impl.Service; +import com.engine.salary.entity.salaryacct.po.SalaryAcctCalcTaxReqPO; +import com.engine.salary.mapper.salaryacct.SalaryAcctCalcTaxReqMapper; +import com.engine.salary.service.SalaryAcctCalcTaxReqService; +import com.engine.salary.util.db.MapperProxyFactory; +import org.apache.commons.collections4.CollectionUtils; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; + +public class SalaryAcctCalcTaxReqServiceImpl extends Service implements SalaryAcctCalcTaxReqService { + + private SalaryAcctCalcTaxReqMapper getSalaryAcctCalcTaxReqMapper() { + return MapperProxyFactory.getProxy(SalaryAcctCalcTaxReqMapper.class); + } + + + @Override + public List listByRecordId(Long salaryAcctRecordId) { + return getSalaryAcctCalcTaxReqMapper().listSome(SalaryAcctCalcTaxReqPO.builder().salaryAcctRecordId(salaryAcctRecordId).build()); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public void batchSave(List salaryAcctCalcTaxReqs) { + if (CollectionUtils.isNotEmpty(salaryAcctCalcTaxReqs)) { + salaryAcctCalcTaxReqs.forEach(getSalaryAcctCalcTaxReqMapper()::insertIgnoreNull); + } + } + + @Override + public void deleteByRecordId(Long salaryAcctRecordId) { + getSalaryAcctCalcTaxReqMapper().deleteByRecordId(salaryAcctRecordId); + } +} diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 32a23ed79..0bb2244ae 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -704,6 +704,15 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } } + public void batchUpdate(List salaryAcctResultPOS) { + if (CollectionUtils.isNotEmpty(salaryAcctResultPOS)) { + // 数据加密 + encryptUtil.encryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); + List> partition = Lists.partition(salaryAcctResultPOS, 100); + partition.forEach(getSalaryAcctResultMapper()::batchUpdate); + } + } + @Override public void deleteBySalaryAcctEmployeeIds(Collection salaryAcctEmployeeIds) { diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java new file mode 100644 index 000000000..4edb5b06a --- /dev/null +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -0,0 +1,315 @@ +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.constant.SzyhApiConstant; +import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; +import com.engine.salary.entity.salaryacct.bo.SalaryCalcTax; +import com.engine.salary.entity.salaryacct.bo.SalaryCalcTaxFeedback; +import com.engine.salary.entity.salaryacct.dto.SalaryCalcTaxInfoDTO; +import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxParam; +import com.engine.salary.entity.salaryacct.po.*; +import com.engine.salary.entity.salarysob.po.SalarySobTaxReportRulePO; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; +import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; +import com.engine.salary.entity.taxdeclaration.po.TaxReportColumnPO; +import com.engine.salary.entity.taxdeclaration.response.DeclareTaxResponse; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; +import com.engine.salary.enums.sicategory.DeleteTypeEnum; +import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.remote.tax.client.CalculateClient; +import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTaxFeedbackResponse; +import com.engine.salary.service.*; +import com.engine.salary.util.*; +import com.engine.salary.util.db.IdGenerator; +import org.apache.commons.collections4.CollectionUtils; +import weaver.hrm.User; + +import java.time.LocalDateTime; +import java.util.*; + +public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxService { + + + private SalaryAcctRecordService getSalaryAcctRecordService(User user) { + return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user); + } + + private SalaryAcctTaxAgentService getSalaryAcctTaxAgentService(User user) { + return ServiceUtil.getService(SalaryAcctTaxAgentServiceImpl.class, user); + } + + private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) { + return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user); + } + + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + private TaxAgentTaxReturnService getTaxAgentTaxReturnService(User user) { + return ServiceUtil.getService(TaxAgentTaxReturnServiceImpl.class, user); + } + + private TaxReportColumnService getTaxReportColumnService(User user) { + return ServiceUtil.getService(TaxReportColumnServiceImpl.class, user); + } + + private SalarySobTaxReportRuleService getSalarySobTaxReportRuleService(User user) { + return ServiceUtil.getService(SalarySobTaxReportRuleServiceImpl.class, user); + } + + private EmployeeDeclareService getEmployeeDeclareService(User user) { + return ServiceUtil.getService(EmployeeDeclareServiceImpl.class, user); + } + + private TaxDeclarationApiConfigService getTaxDeclarationApiConfigService(User user) { + return ServiceUtil.getService(TaxDeclarationApiConfigServiceImpl.class, user); + } + + private SalaryAcctCalcTaxReqService getSalaryAcctCalcTaxReqService(User user) { + return ServiceUtil.getService(SalaryAcctCalcTaxReqServiceImpl.class, user); + } + + private SalaryAcctResultService getSalaryAcctResultService(User user) { + return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user); + } + + + @Override + public SalaryCalcTaxInfoDTO getCalcTaxInfo(SalaryCalcTaxParam salaryCalcTaxParam) { + // 查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryCalcTaxParam.getSalaryAcctRecordId()); + // 查询供应商信息 + TaxDeclarationApiConfigPO apiConfig = getTaxDeclarationApiConfigService(user).getConfig(false); + // 查询在线计算个税记录 + List salaryAcctCalcTaxReqs = getSalaryAcctCalcTaxReqService(user).listByRecordId(salaryAcctRecord.getId()); + + boolean enableTaxDeclarationApiConfig = Objects.nonNull(apiConfig) && Objects.equals(apiConfig.getEnableUse(), 1); + boolean showCalcTaxButton = enableTaxDeclarationApiConfig && CollectionUtils.isEmpty(salaryAcctCalcTaxReqs); + boolean showCalcTaxFeedbackButton = enableTaxDeclarationApiConfig && CollectionUtils.isNotEmpty(salaryAcctCalcTaxReqs); + + SalaryCalcTaxInfoDTO salaryCalcTaxInfo = new SalaryCalcTaxInfoDTO(); + salaryCalcTaxInfo.setEnableTaxDeclarationApiConfig(enableTaxDeclarationApiConfig); + salaryCalcTaxInfo.setShowCalcTaxButton(showCalcTaxButton); + salaryCalcTaxInfo.setShowCalcTaxFeedbackButton(showCalcTaxFeedbackButton); + + return salaryCalcTaxInfo; + } + + @Override + public void calcTax(SalaryCalcTaxParam salaryCalcTaxParam) { + // 查询供应商信息 + TaxDeclarationApiConfigPO apiConfig = getTaxDeclarationApiConfigService(user).getConfig(true); + if (apiConfig == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160525, "接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量")); + } + + // 查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryCalcTaxParam.getSalaryAcctRecordId()); + // 查询薪资核算记录关联的个税扣缴义务人 + List salaryAcctTaxAgents = getSalaryAcctTaxAgentService(user) + .listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecord.getId())); + // 查询薪资核算记录关联的薪资核算人员 + List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecord.getId()); + // 查询薪资核算记录关联的薪资核算结果 + List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecord.getId())); + // 查询个税扣缴义务人 + Set taxAgentIds = SalaryEntityUtil.properties(salaryAcctTaxAgents, SalaryAcctTaxAgentPO::getTaxAgentId); + List taxAgents = getTaxAgentService(user).listByIds(taxAgentIds); + // 查询个税扣缴义务人关联的报税信息 + List taxAgentTaxReturns = getTaxAgentTaxReturnService(user).getByTaxAgentIds(taxAgentIds); + // 查询个税申报表字段 + List taxReportColumns = getTaxReportColumnService(user).listAll(); + // 查询薪资核算记录关联薪资账套的个税申报配置 + List salarySobTaxReportRules = getSalarySobTaxReportRuleService(user) + .listBySalarySobIds(Collections.singleton(salaryAcctRecord.getSalarySobId())); + // 查询报送人员 + List employeeDeclares = getEmployeeDeclareService(user).listBySalaryAcctTaxAgent(salaryAcctTaxAgents); + + List salaryAcctCalcTaxReqs = new ArrayList<>(); + + Date now = new Date(); + Map params = new HashMap<>(1); + Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); + String url = apiConfig.getHost() + SzyhApiConstant.CALCULATE_ASYN_INDIVIDUAL_INCOME_TAX; + SalaryCalcTax salaryCalcTax = new SalaryCalcTax(salaryAcctRecord, salaryAcctTaxAgents, salaryAcctEmployees, + salaryAcctResultValues, taxAgents, taxAgentTaxReturns, taxReportColumns, salarySobTaxReportRules, employeeDeclares); + Map> taxAgentIdKeyRequestParam = salaryCalcTax.buildCalcTaxRequestParam(); + for (Map.Entry> entry : taxAgentIdKeyRequestParam.entrySet()) { + String reqJson = JsonUtil.toJsonString(entry.getValue()); + // 请求第三方供应商 + String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); + + DeclareTaxResponse declareTaxResponse = JsonUtil.parseObject(res, DeclareTaxResponse.class); + if (Objects.isNull(declareTaxResponse) || Objects.isNull(declareTaxResponse.getHead())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); + } + if (!Objects.equals(declareTaxResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { + throw new SalaryRunTimeException(declareTaxResponse.getHead().getMsg()); + } + + SalaryAcctCalcTaxReqPO salaryAcctCalcTaxReq = new SalaryAcctCalcTaxReqPO(); + salaryAcctCalcTaxReq.setId(IdGenerator.generate()); + salaryAcctCalcTaxReq.setSalaryAcctRecordId(salaryAcctRecord.getId()); + salaryAcctCalcTaxReq.setTaxAgentId(entry.getKey()); + salaryAcctCalcTaxReq.setRequestId(declareTaxResponse.getBody().getRequestId()); + salaryAcctCalcTaxReq.setTenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY); + salaryAcctCalcTaxReq.setCreator((long) user.getUID()); + salaryAcctCalcTaxReq.setDeleteType(DeleteTypeEnum.NOT_DELETED.getValue()); + salaryAcctCalcTaxReq.setCreateTime(now); + salaryAcctCalcTaxReq.setUpdateTime(now); + salaryAcctCalcTaxReqs.add(salaryAcctCalcTaxReq); + } + + // 批量保存 + getSalaryAcctCalcTaxReqService(user).batchSave(salaryAcctCalcTaxReqs); + // 记录日志 + String operateTypeName = SalaryI18nUtil.getI18nLabel(268191, "在线计算个税"); + // 记录日志 +// getSalaryAcctResultService(user).writeBatchLog(salaryAcctRecord, Collections.emptyMap(), SalaryLogOperateTypeEnum.CALC_TAX_ONLINE); + } + + @Override + public void calcTaxFeedback(SalaryCalcTaxParam salaryCalcTaxParam) { + // 查询供应商信息 + TaxDeclarationApiConfigPO apiConfig = getTaxDeclarationApiConfigService(user).getConfig(true); + if (apiConfig == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160525, "接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量")); + } + // 查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryCalcTaxParam.getSalaryAcctRecordId()); + // 查询薪资核算记录关联的薪资核算人员 + List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecord.getId()); + Map> salaryAcctEmployeeMap = SalaryEntityUtil.group2Map(salaryAcctEmployees, e -> e.getTaxAgentId() + "-" + e.getIncomeCategory()); + // 查询薪资核算记录关联的薪资核算结果 + List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecord.getId())); + Map> salaryAcctResultValueMap = SalaryEntityUtil.list2Map(salaryAcctResultValues, SalaryAcctResultPO::getSalaryAcctEmpId, SalaryAcctResultPO::getSalaryItemId); + // 查询薪资核算记录关联的个税扣缴义务人 + List salaryAcctTaxAgents = getSalaryAcctTaxAgentService(user) + .listBySalaryAcctRecordIds(Collections.singleton(salaryAcctRecord.getId())); + Map> salaryAcctTaxAgentMap = SalaryEntityUtil.group2Map(salaryAcctTaxAgents, SalaryAcctTaxAgentPO::getTaxAgentId); + // 查询薪资核算记录关联的异步算税请求记录 + List salaryAcctCalcTaxReqs = getSalaryAcctCalcTaxReqService(user).listByRecordId(salaryAcctRecord.getId()); + if (CollectionUtils.isEmpty(salaryAcctCalcTaxReqs)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(268184, "请先计算个税再获取反馈")); + } + // 查询薪资核算记录关联的薪资账套个税申报表字段对应 + List salarySobTaxReportRules = getSalarySobTaxReportRuleService(user).listBySalarySobIds(Collections.singleton(salaryAcctRecord.getSalarySobId())); + Map salarySobTaxReportRuleMap = SalaryEntityUtil.convert2Map(salarySobTaxReportRules, SalarySobTaxReportRulePO::getReportColumnDataIndex); + // 查询报送人员 + List employeeDeclares = getEmployeeDeclareService(user).listBySalaryAcctTaxAgent(salaryAcctTaxAgents); + Map> employeeDeclareMap = SalaryEntityUtil.group2Map(employeeDeclares, EmployeeDeclarePO::getTaxAgentId); + + String url = apiConfig.getHost() + SzyhApiConstant.ASYN_INDIVIDUAL_INCOME_TAX_FEEDBACK; + Map header = SingnatureData.initHeader(Collections.emptyMap(), apiConfig.getAppKey(), apiConfig.getAppSecret()); + + List resultPOS = new ArrayList<>(); + for (SalaryAcctCalcTaxReqPO salaryAcctCalcTaxReq : salaryAcctCalcTaxReqs) { + CalculateClient calculateClient = new CalculateClient(salaryAcctCalcTaxReq.getTaxAgentId()); + GetASynIndividualIncomeTaxFeedbackResponse feedbackResponse = calculateClient.getASynIndividualIncomeTaxFeedback(salaryAcctCalcTaxReq.getRequestId()); + + if (Objects.isNull(feedbackResponse) || Objects.isNull(feedbackResponse.getHead())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); + } + if (!Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { + throw new SalaryRunTimeException(feedbackResponse.getHead().getMsg()); + } + List subSalaryAcctTaxAgents = salaryAcctTaxAgentMap.get(salaryAcctCalcTaxReq.getTaxAgentId()); + if (CollectionUtils.isEmpty(subSalaryAcctTaxAgents)) { + continue; + } + List subEmployeeDeclares = employeeDeclareMap.get(salaryAcctCalcTaxReq.getTaxAgentId()); + + // 获取不同所得项目的个税 + for (SalaryAcctTaxAgentPO salaryAcctTaxAgent : subSalaryAcctTaxAgents) { + IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(salaryAcctTaxAgent.getIncomeCategory()); + if (incomeCategoryEnum == null) { + continue; + } + + Map empIdResult = incomeCategoryEnum.parseGetASynIndividualIncomeTaxFeedbackResponse(feedbackResponse, subEmployeeDeclares); + + + Map dataMap = null; +// switch (incomeCategoryEnum) { +// case WAGES_AND_SALARIES: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("zcgzxj"), Object.class); +// break; +// case ONETIME_ANNUAL_BONUS: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("qnycxjjsslb"), Object.class); +// break; +// case COMPENSATION_FOR_RETIRE: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("ntycxbcjlb"), Object.class); +// break; +// case COMPENSATION_FOR_DISMISS: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("jcldhtycxbcjlb"), Object.class); +// break; +// case INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("grgqjl"), Object.class); +// break; +// case ANNUITY_RECEIPT: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("qynj"), Object.class); +// break; +// case REMUNERATION_FOR_LABOR: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("lwbclb"), Object.class); +// break; +// case INCOME_FOR_INSURANCE_SALESMAN: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("bxyxy"), Object.class); +// break; +// case INCOME_FOR_SECURITIES_BROKER: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("zqjjr"), Object.class); +// break; +// case REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("qtlxlwbc"), Object.class); +// break; +// case REMUNERATION_FOR_OTHER_LABOR: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("qtflxlwbc"), Object.class); +// break; +// case REMUNERATION_FOR_AUTHOR: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("gcsdlb"), Object.class); +// break; +// case ROYALTIES: +// dataMap = JsonUtil.parseMap(ZHSDMap.get("txq"), Object.class); +// break; +// default: +// dataMap = Collections.emptyMap(); +// break; +// } + + Map employeeIdKeyTaxMap; + SalaryCalcTaxFeedback salaryCalcTaxFeedback = new SalaryCalcTaxFeedback(dataMap, subEmployeeDeclares); + if (incomeCategoryEnum == IncomeCategoryEnum.WAGES_AND_SALARIES) { + employeeIdKeyTaxMap = salaryCalcTaxFeedback.buildZCGZXJFeedback(); + } else { + employeeIdKeyTaxMap = salaryCalcTaxFeedback.buildOtherFeedback(); + } + + LocalDateTime now = LocalDateTime.now(); + List subSalaryAcctEmployees = salaryAcctEmployeeMap.get(salaryAcctTaxAgent.getTaxAgentId() + "-" + salaryAcctTaxAgent.getIncomeCategory()); + if (CollectionUtils.isEmpty(subSalaryAcctEmployees)) { + continue; + } + for (SalaryAcctEmployeePO salaryAcctEmployee : subSalaryAcctEmployees) { + Map salaryAcctResultValue = salaryAcctResultValueMap.get(salaryAcctEmployee.getId()); + if (salaryAcctResultValue == null) { + continue; + } + SalarySobTaxReportRulePO salarySobTaxReportRule = salarySobTaxReportRuleMap.get("refundedOrSupplementedTax" + salaryAcctEmployee.getIncomeCategory()); + if (salarySobTaxReportRule != null) { + SalaryAcctResultPO salaryAcctResultPO = salaryAcctResultValue.get(salarySobTaxReportRule.getSalaryItemId()); + salaryAcctResultPO.setResultValue(employeeIdKeyTaxMap.get(salaryAcctEmployee.getEmployeeId())); + resultPOS.add(salaryAcctResultPO); + } + } + } + } + + getSalaryAcctResultService(user).batchUpdate(resultPOS); + getSalaryAcctCalcTaxReqService(user).deleteByRecordId(salaryAcctRecord.getId()); + // 记录日志 +// getSalaryAcctResultService(user).writeBatchLog(salaryAcctRecord, Collections.emptyMap(), SalaryLogOperateTypeEnum.GET_CALC_TAX_FEEDBACK); + } +} diff --git a/src/com/engine/salary/util/SalaryEntityUtil.java b/src/com/engine/salary/util/SalaryEntityUtil.java index 81e5b12d9..f14a1a2d8 100644 --- a/src/com/engine/salary/util/SalaryEntityUtil.java +++ b/src/com/engine/salary/util/SalaryEntityUtil.java @@ -163,6 +163,36 @@ public class SalaryEntityUtil { Collectors.collectingAndThen(Collectors.toList(), e -> e.stream().map(valueMapper).collect(Collectors.toList())))); } + public static Map> list2Map(Collection objs, Function function1, Function function2, Function function3) { + if (CollectionUtils.isEmpty(objs)) { + return Maps.newHashMap(); + } + Map> collect = objs.stream().collect(Collectors.groupingBy(function1)); + Map> map = new HashMap<>(); + for (Map.Entry> entry: collect.entrySet()) { + Map values = map.getOrDefault(entry.getKey(), new HashMap<>()); + entry.getValue().forEach(e -> values.put(function2.apply(e), function3.apply(e))); + map.put(entry.getKey(), values); + } + return map; + } + + public static Map> list2Map(Collection objs, Function function1, Function function2) { + if (CollectionUtils.isEmpty(objs)) { + return Maps.newHashMap(); + } + Map> collect = objs.stream().collect(Collectors.groupingBy(function1)); + Map> map = new HashMap<>(); + for (Map.Entry> entry: collect.entrySet()) { + Map values = map.getOrDefault(entry.getKey(), new HashMap<>()); + entry.getValue().forEach(e -> values.put(function2.apply(e), e)); + map.put(entry.getKey(), values); + } + return map; + } + + + /** * LinkedHashMap有序去重 * @@ -211,9 +241,10 @@ public class SalaryEntityUtil { /** * 进位规则 - * @param newScale 小数位 + * + * @param newScale 小数位 * @param rententionRule 进位规则 - * @param value 值 + * @param value 值 * @return */ public static BigDecimal carryRule(Integer newScale, Integer rententionRule, BigDecimal value) { @@ -374,7 +405,6 @@ public class SalaryEntityUtil { } - public static String null2String(Object obj) { if (Objects.isNull(obj)) { return ""; diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 52d95a469..b70d97416 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -11,6 +11,7 @@ import com.engine.salary.util.ResponseResult; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.wrapper.*; +import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; @@ -494,6 +495,33 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::calculate, param); } + @POST + @Path("/acctresult/getCalcTaxInfo") + @ApiOperation("获取「计算个税」和「获取个税计算反馈」反馈的显示与否") + @Produces(MediaType.APPLICATION_JSON) + public String getCalcTaxInfo(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody SalaryCalcTaxParam salaryCalcTaxParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::getCalcTaxInfo, salaryCalcTaxParam); + } + + @POST + @Path("/acctresult/calcTax") + @ApiOperation("计算个税") + @Produces(MediaType.APPLICATION_JSON) + public String calcTax(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody SalaryCalcTaxParam salaryCalcTaxParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::calcTax, salaryCalcTaxParam); + } + + @POST + @Path("/acctresult/calcTaxFeedback") + @ApiOperation("获取个税计算反馈") + @Produces(MediaType.APPLICATION_JSON) + public String calcTaxFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody SalaryCalcTaxParam salaryCalcTaxParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::calcTaxFeedback, salaryCalcTaxParam); + } + //导出核算结果 @GET @Path("/acctresult/export") @@ -692,7 +720,7 @@ public class SalaryAcctController { // @GetMapping("/checkresult/getCount") // @ApiOperation(("获取校验结果(异常)总数")) -// @WeaPermission +// @Produces(MediaType.APPLICATION_JSON) // public WeaResult getCheckResultCount(@RequestParam(value = "salaryAcctRecordId") Long salaryAcctRecordId) { // Integer salaryCheckResultCount = salaryAcctCheckResultWrapper.countBySalaryAcctRecordId(salaryAcctRecordId, TenantContext.getCurrentTenantKey()); // return WeaResult.success(salaryCheckResultCount); @@ -700,7 +728,7 @@ public class SalaryAcctController { // // @PostMapping("/checkresult/list") // @ApiOperation("校验结果列表") -// @WeaPermission +// @Produces(MediaType.APPLICATION_JSON) // public WeaResult> listCheckResult(@RequestBody @Validated SalaryCheckResultQueryParam queryParam) { // WeaTable weaTable = salaryAcctCheckResultWrapper.listPage(queryParam, TenantContext.getCurrentTenantKey()); // return WeaResult.success(weaTable); @@ -708,7 +736,7 @@ public class SalaryAcctController { // // @PostMapping("/checkresultdetail/list") // @ApiOperation("校验结果明细列表") -// @WeaPermission +// @Produces(MediaType.APPLICATION_JSON) // public WeaResult> listCheckResultRecord(@RequestBody @Validated SalaryCheckResultRecordQueryParam queryParam) { // WeaTable weaTable = salaryAcctCheckResultWrapper.listPage4CheckResultRecord(queryParam, TenantContext.getCurrentTenantKey()); // return WeaResult.success(weaTable); @@ -716,7 +744,7 @@ public class SalaryAcctController { // // @PostMapping("/checkresult/ignore") // @ApiOperation("校验结果列表") -// @WeaPermission +// @Produces(MediaType.APPLICATION_JSON) // public WeaResult ignoreCheckResult(@RequestParam(value = "id") Long id) { // salaryAcctCheckResultWrapper.ignoreById(id, TenantContext.getCurrentTenantKey()); // return WeaResult.success(null); @@ -724,7 +752,7 @@ public class SalaryAcctController { // // @PostMapping("/checkresult/ignoreAll") // @ApiOperation("校验结果列表") -// @WeaPermission +// @Produces(MediaType.APPLICATION_JSON) // public WeaResult ignoreAllCheckResult(@RequestParam(value = "salaryAcctRecordId") Long salaryAcctRecordId) { // salaryAcctCheckResultWrapper.ignoreBySalaryAcctRecordId(salaryAcctRecordId, TenantContext.getCurrentTenantKey()); // return WeaResult.success(null); @@ -732,7 +760,7 @@ public class SalaryAcctController { // // @PostMapping("/acctresult/check") // @ApiOperation(("薪资核算结果校验")) -// @WeaPermission +// @Produces(MediaType.APPLICATION_JSON) // public WeaResult check(@RequestBody @Validated SalaryAcctCheckParam checkParam) { // salaryAcctResultWrapper.check(checkParam, UserContext.getCurrentUser(), TenantContext.getCurrentTenantKey()); // return WeaResult.success(null); @@ -740,7 +768,7 @@ public class SalaryAcctController { // // @PostMapping("/checkresult/export") // @ApiOperation("校验异常导出") -// @WeaPermission +// @Produces(MediaType.APPLICATION_JSON) // public WeaResult> exportCheckResult(@RequestBody @Validated SalaryCheckResultExportParam exportParam) { // DataCollectionEmployee simpleEmployee = UserContext.getCurrentUser(); // String tenantKey = TenantContext.getCurrentTenantKey(); @@ -751,7 +779,7 @@ public class SalaryAcctController { // // @PostMapping("/checkresultRecord/export") // @ApiOperation("校验异常明细导出") -// @WeaPermission +// @Produces(MediaType.APPLICATION_JSON) // public WeaResult> exportCheckResultDetail(@RequestParam(value = "checkResultId") Long checkResultId) { // DataCollectionEmployee simpleEmployee = UserContext.getCurrentUser(); // String tenantKey = TenantContext.getCurrentTenantKey(); diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index 3782721f4..1fe36dbdb 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -103,6 +103,13 @@ public class SalarySobController { return new ResponseResult>(user).run(getSalarySobWrapper(user)::listAll); } + @GET + @Path("/incomeCategoryList") + @Produces(MediaType.APPLICATION_JSON) + public String getSalarySobBasicForm(@Context HttpServletRequest request, @Context HttpServletResponse response) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>>(user).run(getSalarySobWrapper(user)::incomeCategoryList); + } /** * 薪资账套基本信息表单 diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index cae703b1c..d8ebc1009 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -9,6 +9,7 @@ import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.salaryacct.dto.ConsolidatedTaxDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultDetailDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctResultListColumnDTO; +import com.engine.salary.entity.salaryacct.dto.SalaryCalcTaxInfoDTO; import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; import com.engine.salary.exception.SalaryRunTimeException; @@ -75,6 +76,10 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult return ServiceUtil.getService(SalarySysConfServiceImpl.class, user); } + private SalaryCalcTaxService getSalaryCalcTaxService(User user) { + return ServiceUtil.getService(SalaryCalcTaxServiceImpl.class, user); + } + /** * 薪资核算列表 * @@ -298,4 +303,32 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult // }; // ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.OTHER, "salaryAcctCheck", localRunnable); // } + + /** + * 根据薪资核算记录id获取在线计算个税的相关信息 + * + * @param salaryCalcTaxParam + * @return + */ + public SalaryCalcTaxInfoDTO getCalcTaxInfo(SalaryCalcTaxParam salaryCalcTaxParam) { + return getSalaryCalcTaxService(user).getCalcTaxInfo(salaryCalcTaxParam); + } + + /** + * 计算个税 + * + * @param salaryCalcTaxParam + */ + public void calcTax(SalaryCalcTaxParam salaryCalcTaxParam) { + getSalaryCalcTaxService(user).calcTax(salaryCalcTaxParam); + } + + /** + * 计算个税获取反馈 + * + * @param salaryCalcTaxParam + */ + public void calcTaxFeedback(SalaryCalcTaxParam salaryCalcTaxParam) { + getSalaryCalcTaxService(user).calcTaxFeedback(salaryCalcTaxParam); + } } diff --git a/src/com/engine/salary/wrapper/SalarySobWrapper.java b/src/com/engine/salary/wrapper/SalarySobWrapper.java index e0f456a5f..72f9f1518 100644 --- a/src/com/engine/salary/wrapper/SalarySobWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobWrapper.java @@ -269,4 +269,18 @@ public class SalarySobWrapper extends Service { return taxAgentIds.contains(salarySobPO.getTaxAgentId()) || Objects.isNull(salarySobPO.getTaxAgentId()); } + public List> incomeCategoryList() { + IncomeCategoryEnum[] values = IncomeCategoryEnum.values(); + List> list = new ArrayList<>(values.length); + for (IncomeCategoryEnum value : values) { + Map map = new HashMap(); + map.put("enum", value); + map.put("value", value.getValue()); + map.put("defaultLabel", value.getDefaultLabel()); + map.put("labelId", value.getLabelId()); + map.put("reportTypeName", value.getReportType().getDefaultLabel()); + list.add(map); + } + return list; + } } diff --git a/test/ParseTaxApi.java b/test/ParseTaxApi.java index 56bb4a986..716d56807 100644 --- a/test/ParseTaxApi.java +++ b/test/ParseTaxApi.java @@ -7,9 +7,9 @@ import java.util.List; public class ParseTaxApi { public static void main(String[] args) { - readExcel("H:\\code\\salary\\test\\ApiDes.xlsx"); +// readExcel("H:\\code\\salary\\test\\ApiDes.xlsx"); -// readExcel2("H:\\code\\salary\\test\\ApiDes.xlsx"); + readExcel2("H:\\code\\salary\\test\\ApiDes.xlsx"); } From 6a8c2dd8ac3c0d950c8a459576092161552aa6a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 7 Jun 2024 11:01:57 +0800 Subject: [PATCH 04/96] =?UTF-8?q?=E4=B8=AA=E7=A8=8E=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/annotation/TaxField.java | 12 + .../salarysob/dto/SalarySobTaxRuleDTO.java | 55 ++ .../param/SalarySobTaxRuleSaveParam.java | 43 + .../salarysob/po/SalarySobTaxRulePO.java | 60 ++ .../salarysob/DeclareReportTypeEnum.java | 56 +- .../enums/salarysob/IncomeCategoryEnum.java | 211 ++--- .../salarysob/SalarySobTaxRuleMapper.java | 73 ++ .../salarysob/SalarySobTaxRuleMapper.xml | 249 ++++++ ...ynIndividualIncomeTaxFeedbackResponse.java | 800 +++++++++--------- .../service/SalarySobTaxRuleService.java | 51 ++ .../impl/SalaryCalcTaxServiceImpl.java | 2 +- .../impl/SalarySobTaxRuleServiceImpl.java | 160 ++++ .../salary/web/SalarySobController.java | 39 + .../wrapper/SalarySobTaxRuleWrapper.java | 45 + 14 files changed, 1314 insertions(+), 542 deletions(-) create mode 100644 src/com/engine/salary/annotation/TaxField.java create mode 100644 src/com/engine/salary/entity/salarysob/dto/SalarySobTaxRuleDTO.java create mode 100644 src/com/engine/salary/entity/salarysob/param/SalarySobTaxRuleSaveParam.java create mode 100644 src/com/engine/salary/entity/salarysob/po/SalarySobTaxRulePO.java create mode 100644 src/com/engine/salary/mapper/salarysob/SalarySobTaxRuleMapper.java create mode 100644 src/com/engine/salary/mapper/salarysob/SalarySobTaxRuleMapper.xml create mode 100644 src/com/engine/salary/service/SalarySobTaxRuleService.java create mode 100644 src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java create mode 100644 src/com/engine/salary/wrapper/SalarySobTaxRuleWrapper.java diff --git a/src/com/engine/salary/annotation/TaxField.java b/src/com/engine/salary/annotation/TaxField.java new file mode 100644 index 000000000..57495febf --- /dev/null +++ b/src/com/engine/salary/annotation/TaxField.java @@ -0,0 +1,12 @@ +package com.engine.salary.annotation; + +import java.lang.annotation.*; + +@Target({ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) +@Documented +public @interface TaxField { + String name(); + + String taxIndex(); +} diff --git a/src/com/engine/salary/entity/salarysob/dto/SalarySobTaxRuleDTO.java b/src/com/engine/salary/entity/salarysob/dto/SalarySobTaxRuleDTO.java new file mode 100644 index 000000000..a39c1abbf --- /dev/null +++ b/src/com/engine/salary/entity/salarysob/dto/SalarySobTaxRuleDTO.java @@ -0,0 +1,55 @@ +package com.engine.salary.entity.salarysob.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +/** + * 薪资账套的个税规则 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class SalarySobTaxRuleDTO { + + //所得项目的id + private String incomeCategoryId; + + //所得项目的名称 + private String incomeCategoryName; + + //个税的对应关系 + private List taxRules; + + @Data + @AllArgsConstructor + @NoArgsConstructor + @Builder + public static class TaxRuleDTO { + + //个税字段 + private String name; + + //个税索引 + private String taxIndex; + + //个税字段和薪资项目的对应关系 + private Map salaryItem; + + //个税字段的值 + private String value; + + //对应关系是否可以编辑 + private boolean canEdit; + } +} diff --git a/src/com/engine/salary/entity/salarysob/param/SalarySobTaxRuleSaveParam.java b/src/com/engine/salary/entity/salarysob/param/SalarySobTaxRuleSaveParam.java new file mode 100644 index 000000000..bf3be6fc6 --- /dev/null +++ b/src/com/engine/salary/entity/salarysob/param/SalarySobTaxRuleSaveParam.java @@ -0,0 +1,43 @@ +package com.engine.salary.entity.salarysob.param; + +import lombok.Data; + +import java.util.List; + +/** + * 薪资账套的个税规则 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +public class SalarySobTaxRuleSaveParam { + + //薪资账套的id + private Long salarySobId; + + //不同所得项目的个税的对应关系 + private List incomeCategoryParams; + + @Data + public static class TaxReportRuleIncomeCategoryParam { + + //所得项目 + private String incomeCategory; + + //个税的对应关系 + private List taxRuleParams; + } + + @Data + public static class TaxRuleParam { + + //个税的列索引 + private String taxIndex; + + //薪资项目的id + private Long salaryItemId; + } +} diff --git a/src/com/engine/salary/entity/salarysob/po/SalarySobTaxRulePO.java b/src/com/engine/salary/entity/salarysob/po/SalarySobTaxRulePO.java new file mode 100644 index 000000000..4bd4c0613 --- /dev/null +++ b/src/com/engine/salary/entity/salarysob/po/SalarySobTaxRulePO.java @@ -0,0 +1,60 @@ +package com.engine.salary.entity.salarysob.po; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Collection; +import java.util.Date; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalarySobTaxRulePO { + /** + * ID + */ + private Long id; + /** + * 创建时间 + */ + private Date createTime; + /** + * 修改时间 + */ + private Date updateTime; + /** + * 创建人id + */ + private Long creator; + /** + * 是否删除 + */ + private Integer deleteType; + /** + * 租户KEY + */ + private String tenantKey; + /** + * 薪资账套的id + */ + private Long salarySobId; + /** + * 所得项目 + */ + private String incomeCategory; + /** + * 个税列索引 + */ + private String taxIndex; + /** + * 薪资项目id + */ + private Long salaryItemId; + + //主键id集合 + private Collection ids; + +} \ No newline at end of file diff --git a/src/com/engine/salary/enums/salarysob/DeclareReportTypeEnum.java b/src/com/engine/salary/enums/salarysob/DeclareReportTypeEnum.java index 2d99b4ebc..f54e7bc86 100644 --- a/src/com/engine/salary/enums/salarysob/DeclareReportTypeEnum.java +++ b/src/com/engine/salary/enums/salarysob/DeclareReportTypeEnum.java @@ -1,8 +1,14 @@ package com.engine.salary.enums.salarysob; +import com.engine.salary.annotation.TaxField; +import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; import com.engine.salary.enums.BaseEnum; +import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTaxFeedbackResponse; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; import java.util.Objects; /** @@ -14,10 +20,30 @@ import java.util.Objects; * @version 1.0 **/ public enum DeclareReportTypeEnum implements BaseEnum { - COMPREHENSIVE_INCOME(1, "综合所得", 100133), - CLASSIFIED_INCOME(2, "分类所得", 86185), - NONRESIDENT_INCOME(3, "非居民所得", 107369), - RESTRICTED_SHARES_INCOME(4, "限售股所得", 90633); + COMPREHENSIVE_INCOME(1, "综合所得", 100133) { + @Override + public List getTaxRules() { + return buildRules(GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result.class); + } + }, + CLASSIFIED_INCOME(2, "分类所得", 86185) { + @Override + public List getTaxRules() { + return buildRules(null); + } + }, + NONRESIDENT_INCOME(3, "非居民所得", 107369) { + @Override + public List getTaxRules() { + return buildRules(GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result.class); + } + }, + RESTRICTED_SHARES_INCOME(4, "限售股所得", 90633) { + @Override + public List getTaxRules() { + return buildRules(null); + } + }; private int value; @@ -47,6 +73,28 @@ public enum DeclareReportTypeEnum implements BaseEnum { return defaultLabel; } + public abstract List getTaxRules(); + + public static List buildRules(Class clazz) { + if (clazz == null) { + return new ArrayList<>(); + } + List rules = new ArrayList<>(); + Field[] fields = clazz.getDeclaredFields(); + for (Field f : fields) { + boolean isanno = f.isAnnotationPresent(TaxField.class); + if (isanno) { + TaxField annotation = f.getAnnotation(TaxField.class); + String name = annotation.name(); + String taxIndex = annotation.taxIndex(); + SalarySobTaxRuleDTO.TaxRuleDTO taxRuleDTO = SalarySobTaxRuleDTO.TaxRuleDTO.builder().name(name).taxIndex(taxIndex).build(); + rules.add(taxRuleDTO); + } + } + return rules; + } + + public static DeclareReportTypeEnum parseByValue(Integer value) { for (DeclareReportTypeEnum targetTypeEnum : DeclareReportTypeEnum.values()) { if (Objects.equals(targetTypeEnum.getValue(), value)) { diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index 9d7c9c427..4eed6daa9 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -1,14 +1,19 @@ package com.engine.salary.enums.salarysob; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; +import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; import com.engine.salary.enums.BaseEnum; import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTaxFeedbackResponse; import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import weaver.general.Util; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; import java.util.*; /** @@ -19,6 +24,7 @@ import java.util.*; * @author qiantao * @version 1.0 **/ +@Slf4j public enum IncomeCategoryEnum implements BaseEnum { // todo 多语言 @@ -31,12 +37,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + SalarySobTaxRuleDTO salarySobTaxRuleDTO = SalarySobTaxRuleDTO.builder().incomeCategoryId(this.getValue().toString()).incomeCategoryName(this.getDefaultLabel()).build(); + List taxRules = this.getReportType().getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule->{ + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = rule.getClass().getMethod(getter); + Object invoke = method.invoke(rule); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("no such method", ex); + } + }); + salarySobTaxRuleDTO.setTaxRules(taxRules); + resultMap.put(employeeDeclare.getEmployeeId(),salarySobTaxRuleDTO ); } return resultMap; } @@ -50,15 +71,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getLwbclb().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, ONETIME_ANNUAL_BONUS(2, "0103", "全年一次性奖金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160489) { @Override @@ -69,15 +85,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQnycxjjsslb().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, COMPENSATION_FOR_RETIRE(107, "0107", "内退一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181936) { @Override @@ -88,15 +99,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getNtycxbcjlb().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, COMPENSATION_FOR_DISMISS(108, "0108", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181937) { @Override @@ -107,15 +113,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getJcldhtycxbcjlb().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE(109, "0109", "个人股权激励收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181938) { @Override @@ -126,15 +127,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getGrgqjl().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, ANNUITY_RECEIPT(110, "0110", "年金领取", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181939) { @Override @@ -145,15 +141,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQynj().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, INCOME_FOR_INSURANCE_SALESMAN(402, "0402", "保险营销员佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181940) { @Override @@ -164,15 +155,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getBxyxy().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, INCOME_FOR_SECURITIES_BROKER(403, "0403", "证券经纪人佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181942) { @Override @@ -183,15 +169,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getZqjjr().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR(489, "0489", "其他连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181943) { @Override @@ -202,15 +183,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtlxlwbc().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, REMUNERATION_FOR_OTHER_LABOR(499, "0499", "其他非连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 175330) { @Override @@ -221,15 +197,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtflxlwbc().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, REMUNERATION_FOR_AUTHOR(500, "0500", "稿酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181944) { @Override @@ -240,15 +211,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getGcsdlb().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, ROYALTIES(600, "0600", "特许权使用费所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181945) { @Override @@ -259,15 +225,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getTxq().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, NON_RESIDENT_INCOME_WAGES_AND_SALARIES(700, "0700", "无住所个人正常工资薪金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override @@ -278,15 +239,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjgzxjlb().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, NON_RESIDENT_INCOME_MONTHLY_BONUS(710, "0710", "无住所个人数月奖金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override @@ -297,15 +253,10 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjrysyjjlb().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } + }, NON_RESIDENT_INCOME_REMUNERATION_FOR_LABOR(720, "0720", "一般劳务报酬所得", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override @@ -314,17 +265,11 @@ public enum IncomeCategoryEnum implements BaseEnum { List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); result.put(this.getDefaultLabel(), sheetData); } - @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getLwbclb().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; - } + @Override + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; + } }, NON_RESIDENT_INCOME_COMPENSATION_FOR_DISMISS(730, "0730", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override @@ -335,14 +280,8 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getJcldhtycxbcjlb().getSscglb(); - Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.result::getZzhm); - Map resultMap = new HashMap<>(); - for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { - resultMap.put(employeeDeclare.getEmployeeId(), idNoResultMap.get(employeeDeclare.getCardNum())); - } - return resultMap; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { + return null; } }; @@ -368,7 +307,7 @@ public enum IncomeCategoryEnum implements BaseEnum { public abstract void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse); - public abstract Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares); + public abstract Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares); @Override diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobTaxRuleMapper.java b/src/com/engine/salary/mapper/salarysob/SalarySobTaxRuleMapper.java new file mode 100644 index 000000000..cd2db6677 --- /dev/null +++ b/src/com/engine/salary/mapper/salarysob/SalarySobTaxRuleMapper.java @@ -0,0 +1,73 @@ +package com.engine.salary.mapper.salarysob; + +import com.engine.salary.entity.salarysob.po.SalarySobTaxRulePO; +import org.apache.ibatis.annotations.Param; + +import java.util.Collection; +import java.util.List; + +public interface SalarySobTaxRuleMapper { + + /** + * 查询所有记录 + * + * @return 返回集合,没有返回空List + */ + List listAll(); + + /** + * 条件查询 + * + * @return 返回集合,没有返回空List + */ + List listSome(SalarySobTaxRulePO sobTaxRule); + + + /** + * 根据主键查询 + * + * @param id 主键 + * @return 返回记录,没有返回null + */ + SalarySobTaxRulePO getById(Long id); + + /** + * 新增,忽略null字段 + * + * @param sobTaxRule 新增的记录 + * @return 返回影响行数 + */ + int insertIgnoreNull(SalarySobTaxRulePO sobTaxRule); + + /** + * 修改,修改所有字段 + * + * @param sobTaxRule 修改的记录 + * @return 返回影响行数 + */ + int update(SalarySobTaxRulePO sobTaxRule); + + /** + * 修改,忽略null字段 + * + * @param sobTaxRule 修改的记录 + * @return 返回影响行数 + */ + int updateIgnoreNull(SalarySobTaxRulePO sobTaxRule); + + /** + * 删除记录 + * + * @param sobTaxRule 待删除的记录 + * @return 返回影响行数 + */ + int delete(SalarySobTaxRulePO sobTaxRule); + + /** + * 批量删除记录 + * @param ids 主键id集合 + */ + void deleteByIds(@Param("ids") Collection ids); + + void deleteBySalarySobIds(@Param("salarySobIds") Collection salarySobIds); +} \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobTaxRuleMapper.xml b/src/com/engine/salary/mapper/salarysob/SalarySobTaxRuleMapper.xml new file mode 100644 index 000000000..53277c457 --- /dev/null +++ b/src/com/engine/salary/mapper/salarysob/SalarySobTaxRuleMapper.xml @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + t + . + id + , t.create_time + , t.update_time + , t.creator + , t.delete_type + , t.tenant_key + , t.salary_sob_id + , t.income_category + , t.tax_index + , t.salary_item_id + + + + + + + + + + + + + + + INSERT INTO hrsa_sob_tax_rule + + + + id, + + + create_time, + + + update_time, + + + creator, + + + delete_type, + + + tenant_key, + + + salary_sob_id, + + + income_category, + + + tax_index, + + + salary_item_id, + + + + + #{id}, + + + #{createTime}, + + + #{updateTime}, + + + #{creator}, + + + #{deleteType}, + + + #{tenantKey}, + + + #{salarySobId}, + + + #{incomeCategory}, + + + #{taxIndex}, + + + #{salaryItemId}, + + + + + + + UPDATE hrsa_sob_tax_rule + + create_time=#{createTime}, + update_time=#{updateTime}, + creator=#{creator}, + delete_type=#{deleteType}, + tenant_key=#{tenantKey}, + salary_sob_id=#{salarySobId}, + income_category=#{incomeCategory}, + tax_index=#{taxIndex}, + salary_item_id=#{salaryItemId}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_sob_tax_rule + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + tenant_key=#{tenantKey}, + + + salary_sob_id=#{salarySobId}, + + + income_category=#{incomeCategory}, + + + tax_index=#{taxIndex}, + + + salary_item_id=#{salaryItemId}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_sob_tax_rule + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + UPDATE hrsa_sob_tax_rule + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + + UPDATE hrsa_sob_tax_rule + SET delete_type = 1 + WHERE delete_type = 0 + AND salary_sob_id IN + + #{salarySobId} + + + + \ No newline at end of file diff --git a/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java index 7c1e13b6d..6801b8767 100644 --- a/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java +++ b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java @@ -1,6 +1,7 @@ package com.engine.salary.remote.tax.response.calculate; import com.engine.salary.annotation.TableTitle; +import com.engine.salary.annotation.TaxField; import com.engine.salary.entity.taxpayment.response.BaseResponse; import lombok.Data; import lombok.EqualsAndHashCode; @@ -210,6 +211,291 @@ public class GetASynIndividualIncomeTaxFeedbackResponse extends BaseResponse { * 企业上月是否已申报 0:上月未申报 1:上月已申报 2:上上月未申报 */ private String qysysfysb; + + + @Data + public static class result { + /** + * 是否明细申报 必填:否 是或者否 + */ + private String sfmxsb; + /** + * 姓名 必填:否 如果是汇总申报返回空 + */ + private String xm; + /** + * 证件类型 必填:否 见证件类型字典 如果是汇总申报返回空 + */ + private String zzlx; + /** + * 证件号码 必填:否 如果是汇总申报返回空 + */ + private String zzhm; + /** + * 任职受雇日期 必填:是 格式YYYY-MM-DD + */ + private String rzsgrq; + /** + * 离职日期 必填:否 格式YYYY-MM-DD + */ + private String lzrq; + /** + * 当期收入额 必填:是 不填写默认为0 + */ + private BigDecimal sre; + /** + * 当期免税收入 必填:否 + */ + private BigDecimal mssd; + /** + * 基本养老保险 必填:否 + */ + private BigDecimal jbylaobxf; + /** + * 基本医疗保险 必填:否 + */ + private BigDecimal jbylbxf; + /** + * 失业保险 必填:否 + */ + private BigDecimal sybxf; + /** + * 住房公积金 必填:否 + */ + private BigDecimal zfgjj; + /** + * 子女教育支出 必填:否 + */ + private BigDecimal znjyzc; + /** + * 赡养老人支出 必填:否 + */ + private BigDecimal sylrzc; + /** + * 住房贷款利息支出 必填:否 + */ + private BigDecimal zfdklxzc; + /** + * 住房租金支出 必填:否 + */ + private BigDecimal zfzjzc; + /** + * 继续教育支出 必填:否 + */ + private BigDecimal jxjyzc; + /** + * 非学历继续教育支出 必填:否 + */ + private BigDecimal fxljxjyzc; + /** + * 3岁以下婴幼儿照护支出 必填:否 + */ + private BigDecimal yyezhzc; + /** + * 年金 必填:否 + */ + private BigDecimal nj; + /** + * 商业健康保险 必填:否 + */ + private BigDecimal syjkbx; + /** + * 税延养老保险 必填:否 + */ + private BigDecimal syylbx; + /** + * 其他 必填:否 按法律规定可以在税前扣除的项目 + */ + private BigDecimal qt; + /** + * 准予扣除的捐赠额 必填:否 + */ + private BigDecimal zykcjze; + /** + * 减免税额 必填:否 + */ + private BigDecimal jmse; + /** + * 备注 必填:否 + */ + private String bz; + /** + * 减除费用 必填:否 正常工资薪金的减除费用。 对应保险营销员、证券经纪人的费用 + */ + private BigDecimal jcfy; + /** + * 其他扣除合计 必填:否 + */ + private BigDecimal qtckhj; + /** + * 应纳税所得额 必填:否 正常工资薪金返回否 + */ + private BigDecimal ynssde; + /** + * 应纳税额 必填:否 正常工资薪金返回否 + */ + private BigDecimal ynse; + /** + * 已缴税额 必填:否 正常工资薪金返回否 + */ + private BigDecimal ykjse; + /** + * 应扣缴税额 必填:否 正常工资薪金返回否 + */ + private BigDecimal yingkjse; + /** + * 税率 必填:否 + */ + private BigDecimal sl; + /** + * 速算扣除数 必填:否 + */ + private BigDecimal sskcs; + /** + * 所得项目名称 必填:是 正常工资薪金;全年一次性奖金收入;稿酬所得;劳务报酬 + */ + private String sdxm; + /** + * 应补退税额 必填:否 应补退税额=累计应扣缴税额-累计已缴税额 + */ + @TaxField(name = "应补退税额", taxIndex = "ybtse") + private BigDecimal ybtse; + /** + * 累计收入额 必填:否 + */ + private BigDecimal ljsre; + /** + * 累计免税收入额 必填:否 + */ + private BigDecimal ljmssd; + /** + * 累计专项扣除额 必填:否 三险一金合计 + */ + private BigDecimal ljzxkce; + /** + * 累计专项附加扣除额 必填:否 专项附加合计 + */ + private BigDecimal ljzxfjkce; + /** + * 累计其他扣除额 必填:否 + */ + private BigDecimal ljqtkce; + /** + * 累计减免税额 必填:否 + */ + private BigDecimal ljjmse; + /** + * 累计减除费用额 必填:否 正常工资薪金累计减除费用 必填:否 对应保险营销员、证券经纪人累计费用 + */ + private BigDecimal ljjcfye; + /** + * 累计月减除费用 必填:否 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 + */ + private BigDecimal ljyjcfy; + /** + * 允许扣除税费 必填:否 保险营销员、证券经纪人 + */ + private BigDecimal yxkcsf; + /** + * 展业成本 必填:否 保险营销员、证券经纪人 + */ + private BigDecimal zycb; + /** + * 月减除费用 必填:否 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 + */ + private BigDecimal yjcfy; + /** + * 累计应纳税所得额 必填:否 + */ + @TableTitle(title = "累计应纳税所得额", dataIndex = "ljynssde", key = "ljynssde") + private BigDecimal ljynssde; + /** + * 累计应纳税额 必填:否 + */ + private BigDecimal ljynse; + /** + * 累计应扣缴税额 必填:否 累计应扣缴税额 = 累计应纳税额 - 累计减免税额 + */ + private BigDecimal ljyingkjse; + /** + * 累计已缴税额 必填:否 + */ + private BigDecimal ljykjse; + /** + * 累计子女教育支出 必填:否 + */ + private BigDecimal ljznjyzc; + /** + * 累计继续教育支出 必填:否 + */ + private BigDecimal ljjxjyzc; + /** + * 累计非学历继续教育支持 必填:否 + */ + private BigDecimal ljfxljxjyzc; + /** + * 累计学历继续教育支持 必填:否 + */ + private BigDecimal ljxljxjyzc; + /** + * 累计住房租金支出 必填:否 + */ + private BigDecimal ljzfzjzc; + /** + * 累计房屋贷款支出 必填:否 + */ + private BigDecimal ljzfdklxzc; + /** + * 累计赡养老人支出 必填:否 + */ + private BigDecimal ljsylrzc; + /** + * 累计3岁以下婴幼儿照护支出 必填:否 + */ + private BigDecimal ljyyezhzc; + /** + * 累计准予扣除的捐赠额 必填:否 + */ + private BigDecimal ljzykcjze; + /** + * 累计个人养老金 必填:否 + */ + private BigDecimal ljgrylj; + /** + * 累计个人养老金校验码 必填:否 + */ + private String ljgryljjym; + /** + * 仅在两个月算税场景时使用,当前月分为N月: + * 0表示N-1月(上月)未申报 + * 1表示N-1月(上月)已申报 + * 2表示N-2月(上上个月)未申报 + */ + private String qysysfysb; + + /** + * 当前月分为N,如果N-1(上月)已申报,则返回N-1月员工在税局累计已扣缴的税额; + * 如果N-1月未申报,则返回N-2月工在税局累计已扣缴的税额; + */ + private BigDecimal ygzsjljykjse; + /** + * 本月已累计扣除税额 必填:否 针对一月多次算税的场景字段 + */ + private BigDecimal byyljkjse; + /** + * 本次应扣缴税额 必填:否 针对一月多次算税的场景字段,本次应扣缴税额=本月应扣缴税额-本月已累计税额 + */ + private BigDecimal bcykjse; + /** + * 分摊年度数 必填:否 + */ + private Integer ftnds; + /** + * 年减除费用 必填:否 默认为60000 + */ + private BigDecimal njcfy; + + } } } @@ -296,410 +582,122 @@ public class GetASynIndividualIncomeTaxFeedbackResponse extends BaseResponse { * 非居民算税失败总人数 */ private int sssbrs; + + @Data + public static class result { + + /** + * 姓名 必填:是 + */ + private String xm; + /** + * 证件类型名称 必填:是 + */ + private String zzlx; + /** + * 证件号码 必填:是 + */ + private String zzhm; + /** + * 收入额 必填:是 + */ + private String sre; + /** + * 累计收入(不含本次) 必填:是 + */ + private String ljsre; + /** + * 免税收入 必填:是 + */ + private String mssd; + /** + * 财产原值 必填:是 + */ + private String ccyz; + /** + * 允许扣除的税费 必填:是 + */ + private String yxkcsf; + /** + * 投资抵扣 必填:是 + */ + private String tzdk; + /** + * 其他 必填:是 + */ + private String qt; + /** + * 备注 必填:是 + */ + private String bz; + /** + * 实际工作年限 必填:是 + */ + private String sjgznxs; + /** + * 减除费用 必填:是 + */ + private String jcfy; + /** + * 准予扣除的捐赠额 必填:是 + */ + private String zykcjze; + /** + * 税前扣除项目合计 必填:是 + */ + private String sqkcxmhj; + /** + * 应纳税额所得额 必填:是 + */ + private String ynssde; + /** + * 应纳税额 必填:是 + */ + private String ynse; + /** + * 减免税额 必填:是 + */ + private String jmse; + /** + * 应扣缴税额 必填:是 + */ + private String yingkjse; + /** + * 已扣缴税额 必填:是 无需填写该值,按0处理 + */ + private String ykjse; + /** + * 税率 必填:是 + */ + private String sl; + /** + * 速算扣除数 必填:是 + */ + private String sskcs; + /** + * 代报方式 必填:是 + */ + private String sbfs; + /** + * 应补退税额 必填:是 + */ + private String ybtse; + /** + * 非居民所得项目名字 必填:是  非居民所得薪金类别-无住所个人正常工资薪金、全年一次性奖金收入 + */ + private String sdxm; + /** + * 所得期间起 必填:是 YYYY-MM + */ + private String sdqjq; + /** + * 所得期间止 必填:是 YYYY-MM + */ + private String sdqjz; + } } } - @Data - public static class result { - - //--------------综合所得输出结果报文------------------------------ - - /** - * 是否明细申报 必填:否 是或者否 - */ - private String sfmxsb; - /** - * 姓名 必填:否 如果是汇总申报返回空 - */ - @TableTitle(title = "姓名", dataIndex = "xm",key = "xm") - private String xm; - /** - * 证件类型 必填:否 见证件类型字典 如果是汇总申报返回空 - */ - private String zzlx; - /** - * 证件号码 必填:否 如果是汇总申报返回空 - */ - private String zzhm; - /** - * 任职受雇日期 必填:是 格式YYYY-MM-DD - */ - private String rzsgrq; - /** - * 离职日期 必填:否 格式YYYY-MM-DD - */ - private String lzrq; - /** - * 当期收入额 必填:是 不填写默认为0 - */ - @TableTitle(title = "当期收入额", dataIndex = "sre",key = "sre") - private BigDecimal sre; - /** - * 当期免税收入 必填:否 - */ - private BigDecimal mssd; - /** - * 基本养老保险 必填:否 - */ - private BigDecimal jbylaobxf; - /** - * 基本医疗保险 必填:否 - */ - private BigDecimal jbylbxf; - /** - * 失业保险 必填:否 - */ - private BigDecimal sybxf; - /** - * 住房公积金 必填:否 - */ - private BigDecimal zfgjj; - /** - * 子女教育支出 必填:否 - */ - private BigDecimal znjyzc; - /** - * 赡养老人支出 必填:否 - */ - private BigDecimal sylrzc; - /** - * 住房贷款利息支出 必填:否 - */ - private BigDecimal zfdklxzc; - /** - * 住房租金支出 必填:否 - */ - private BigDecimal zfzjzc; - /** - * 继续教育支出 必填:否 - */ - private BigDecimal jxjyzc; - /** - * 非学历继续教育支出 必填:否 - */ - private BigDecimal fxljxjyzc; - /** - * 3岁以下婴幼儿照护支出 必填:否 - */ - private BigDecimal yyezhzc; - /** - * 年金 必填:否 - */ - private BigDecimal nj; - /** - * 商业健康保险 必填:否 - */ - private BigDecimal syjkbx; - /** - * 税延养老保险 必填:否 - */ - private BigDecimal syylbx; - /** - * 其他 必填:否 按法律规定可以在税前扣除的项目 - */ - private BigDecimal qt; - /** - * 准予扣除的捐赠额 必填:否 - */ - private BigDecimal zykcjze; - /** - * 减免税额 必填:否 - */ - private BigDecimal jmse; - /** - * 备注 必填:否 - */ - private String bz; - /** - * 减除费用 必填:否 正常工资薪金的减除费用。 对应保险营销员、证券经纪人的费用 - */ - private BigDecimal jcfy; - /** - * 其他扣除合计 必填:否 - */ - private BigDecimal qtckhj; - /** - * 应纳税所得额 必填:否 正常工资薪金返回否 - */ - @TableTitle(title = "应纳税所得额", dataIndex = "ynssde",key = "ynssde") - private BigDecimal ynssde; - /** - * 应纳税额 必填:否 正常工资薪金返回否 - */ - private BigDecimal ynse; - /** - * 已缴税额 必填:否 正常工资薪金返回否 - */ - private BigDecimal ykjse; - /** - * 应扣缴税额 必填:否 正常工资薪金返回否 - */ - private BigDecimal yingkjse; - /** - * 税率 必填:否 - */ - private BigDecimal sl; - /** - * 速算扣除数 必填:否 - */ - private BigDecimal sskcs; - /** - * 所得项目名称 必填:是 正常工资薪金;全年一次性奖金收入;稿酬所得;劳务报酬 - */ - private String sdxm; - /** - * 应补退税额 必填:否 应补退税额=累计应扣缴税额-累计已缴税额 - */ - @TableTitle(title = "应补退税额", dataIndex = "ybtse",key = "ybtse") - private BigDecimal ybtse; - /** - * 累计收入额 必填:否 - */ - private BigDecimal ljsre; - /** - * 累计免税收入额 必填:否 - */ - private BigDecimal ljmssd; - /** - * 累计专项扣除额 必填:否 三险一金合计 - */ - private BigDecimal ljzxkce; - /** - * 累计专项附加扣除额 必填:否 专项附加合计 - */ - private BigDecimal ljzxfjkce; - /** - * 累计其他扣除额 必填:否 - */ - private BigDecimal ljqtkce; - /** - * 累计减免税额 必填:否 - */ - private BigDecimal ljjmse; - /** - * 累计减除费用额 必填:否 正常工资薪金累计减除费用 必填:否 对应保险营销员、证券经纪人累计费用 - */ - private BigDecimal ljjcfye; - /** - * 累计月减除费用 必填:否 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 - */ - private BigDecimal ljyjcfy; - /** - * 允许扣除税费 必填:否 保险营销员、证券经纪人 - */ - private BigDecimal yxkcsf; - /** - * 展业成本 必填:否 保险营销员、证券经纪人 - */ - private BigDecimal zycb; - /** - * 月减除费用 必填:否 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 - */ - private BigDecimal yjcfy; - /** - * 累计应纳税所得额 必填:否 - */ - @TableTitle(title = "累计应纳税所得额", dataIndex = "ljynssde",key = "ljynssde") - private BigDecimal ljynssde; - /** - * 累计应纳税额 必填:否 - */ - private BigDecimal ljynse; - /** - * 累计应扣缴税额 必填:否 累计应扣缴税额 = 累计应纳税额 - 累计减免税额 - */ - private BigDecimal ljyingkjse; - /** - * 累计已缴税额 必填:否 - */ - private BigDecimal ljykjse; - /** - * 累计子女教育支出 必填:否 - */ - private BigDecimal ljznjyzc; - /** - * 累计继续教育支出 必填:否 - */ - private BigDecimal ljjxjyzc; - /** - * 累计非学历继续教育支持 必填:否 - */ - private BigDecimal ljfxljxjyzc; - /** - * 累计学历继续教育支持 必填:否 - */ - private BigDecimal ljxljxjyzc; - /** - * 累计住房租金支出 必填:否 - */ - private BigDecimal ljzfzjzc; - /** - * 累计房屋贷款支出 必填:否 - */ - private BigDecimal ljzfdklxzc; - /** - * 累计赡养老人支出 必填:否 - */ - private BigDecimal ljsylrzc; - /** - * 累计3岁以下婴幼儿照护支出 必填:否 - */ - private BigDecimal ljyyezhzc; - /** - * 累计准予扣除的捐赠额 必填:否 - */ - private BigDecimal ljzykcjze; - /** - * 累计个人养老金 必填:否 - */ - private BigDecimal ljgrylj; - /** - * 累计个人养老金校验码 必填:否 - */ - private String ljgryljjym; - /** - * 仅在两个月算税场景时使用,当前月分为N月: - * 0表示N-1月(上月)未申报 - * 1表示N-1月(上月)已申报 - * 2表示N-2月(上上个月)未申报 - */ - private String qysysfysb; - - /** - * 当前月分为N,如果N-1(上月)已申报,则返回N-1月员工在税局累计已扣缴的税额; - * 如果N-1月未申报,则返回N-2月工在税局累计已扣缴的税额; - */ - private BigDecimal ygzsjljykjse; - /** - * 本月已累计扣除税额 必填:否 针对一月多次算税的场景字段 - */ - private BigDecimal byyljkjse; - /** - * 本次应扣缴税额 必填:否 针对一月多次算税的场景字段,本次应扣缴税额=本月应扣缴税额-本月已累计税额 - */ - private BigDecimal bcykjse; - /** - * 分摊年度数 必填:否 - */ - private Integer ftnds; - /** - * 年减除费用 必填:否 默认为60000 - */ - private BigDecimal njcfy; - - - //----------非居民所得输出结果报文------------------------------- - - /* - * 姓名 必填:是 - */ -// private String xm; - /* - * 证件类型名称 必填:是 - */ -// private String zzlx; - /* - * 证件号码 必填:是 - */ -// private String zzhm; - /* - * 收入额 必填:是 - */ -// private String sre; - /* - * 累计收入(不含本次) 必填:是 - */ -// private String ljsre; - /* - * 免税收入 必填:是 - */ -// private String mssd; - /** - * 财产原值 必填:是 - */ - private String ccyz; - /* - * 允许扣除的税费 必填:是 - */ -// private String yxkcsf; - /** - * 投资抵扣 必填:是 - */ - private String tzdk; - /* - * 其他 必填:是 - */ -// private String qt; - /* - * 备注 必填:是 - */ -// private String bz; - /** - * 实际工作年限 必填:是 - */ - private String sjgznxs; - /* - * 减除费用 必填:是 - */ -// private String jcfy; - /* - * 准予扣除的捐赠额 必填:是 - */ -// private String zykcjze; - /* - * 税前扣除项目合计 必填:是 - */ -// private String sqkcxmhj; - /* - * 应纳税额所得额 必填:是 - */ -// private String ynssde; - /* - * 应纳税额 必填:是 - */ -// private String ynse; - /* - * 减免税额 必填:是 - */ -// private String jmse; - /* - * 应扣缴税额 必填:是 - */ -// private String yingkjse; - /* - * 已扣缴税额 必填:是 无需填写该值,按0处理 - */ -// private String ykjse; - /* - * 税率 必填:是 - */ -// private String sl; - /* - * 速算扣除数 必填:是 - */ - // private String sskcs; - /** - * 代报方式 必填:是 - */ - private String sbfs; - /* - * 应补退税额 必填:是 - */ - // private String ybtse; - /* - * 非居民所得项目名字 必填:是  非居民所得薪金类别-无住所个人正常工资薪金、全年一次性奖金收入 - */ - // private String sdxm; - /** - * 所得期间起 必填:是 YYYY-MM - */ - private String sdqjq; - /** - * 所得期间止 必填:是 YYYY-MM - */ - private String sdqjz; - - } /** * 算税失败原因对象 diff --git a/src/com/engine/salary/service/SalarySobTaxRuleService.java b/src/com/engine/salary/service/SalarySobTaxRuleService.java new file mode 100644 index 000000000..b4d15c58b --- /dev/null +++ b/src/com/engine/salary/service/SalarySobTaxRuleService.java @@ -0,0 +1,51 @@ +package com.engine.salary.service; + +import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; +import com.engine.salary.entity.salarysob.param.SalarySobTaxRuleSaveParam; +import com.engine.salary.entity.salarysob.po.SalarySobTaxRulePO; + +import java.util.Collection; +import java.util.List; + +/** + * 薪资账套的个税规则 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public interface SalarySobTaxRuleService { + + /** + * 根据薪资账套id查询薪资账套的个税规则 + * + * @param salarySobIds + * @return + */ + List listBySalarySobId(Long salarySobIds); + + /** + * 根据薪资账套id查询薪资账套的个税规则 + * + * @param salarySobId + * @return + */ + List getSalarySobTaxRuleDTO(Long salarySobId); + + /** + * 保存 + * + * @param saveParam + */ + void saveByParam(SalarySobTaxRuleSaveParam saveParam); + + /** + * 按薪资账套id删除 + * + * @param salarySobIds + */ + void deleteBySalarySobIds(Collection salarySobIds); + + void saveBatch(List salarySobTaxReportRules); +} diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index 4edb5b06a..9134fd988 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -230,7 +230,7 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe continue; } - Map empIdResult = incomeCategoryEnum.parseGetASynIndividualIncomeTaxFeedbackResponse(feedbackResponse, subEmployeeDeclares); +// Map empIdResult = incomeCategoryEnum.parseGetASynIndividualIncomeTaxFeedbackResponse(feedbackResponse, subEmployeeDeclares); Map dataMap = null; diff --git a/src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java new file mode 100644 index 000000000..59a390f1a --- /dev/null +++ b/src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java @@ -0,0 +1,160 @@ +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.Maps; +import com.google.common.collect.Sets; +import org.apache.commons.collections4.CollectionUtils; +import weaver.hrm.User; + +import java.util.*; + +/** + * 薪资账套的个税申报表规则 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @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 listBySalarySobId(Long salarySobId) { + if (salarySobId == null) { + return Collections.emptyList(); + } + return salarySobTaxRuleMapper().listSome(SalarySobTaxRulePO.builder().salarySobId(salarySobId).build()); + } + + @Override + public List getSalarySobTaxRuleDTO(Long salarySobId) { + List resultList = Lists.newArrayList(); + // 查询薪资账套 + SalarySobPO salarySob = getSalarySobService(user).getById(salarySobId); + Integer incomeCategory = salarySob.getIncomeCategory(); + List incomeCategoryIds = Collections.singletonList(incomeCategory); + // 薪资账套的薪资项目 + List salarySobItems = getSalarySobItemService(user).listBySalarySobId(salarySobId); + // 薪资账套的回算薪资项目 + List salarySobBackItems = getSalarySobBackItemService(user).listBySalarySobId(salarySobId); + // 薪资项目 + Set salaryItemIds = Sets.newHashSet(); + salaryItemIds.addAll(SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId)); + salaryItemIds.addAll(SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId)); + List salaryItems = getSalaryItemService(user).listByIds(salaryItemIds); + Map idKeySalaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId); + // 薪资账套中已经存在的对应关系 + List salarySobTaxReportRules = listBySalarySobId(salarySobId); + Map salarySobTaxReportRuleMap = SalaryEntityUtil.convert2Map(salarySobTaxReportRules, + e -> e.getIncomeCategory() + "-" + e.getTaxIndex(), SalarySobTaxRulePO::getSalaryItemId); + + for (Integer incomeCategoryId : incomeCategoryIds) { + IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(incomeCategoryId); + List taxRules = incomeCategoryEnum.getReportType().getTaxRules(); + for (SalarySobTaxRuleDTO.TaxRuleDTO taxRule : taxRules) { + Long salaryItemId = salarySobTaxReportRuleMap.get(incomeCategoryId + "-" + taxRule.getTaxIndex()); + SalaryItemPO salaryItem = idKeySalaryItemMap.get(salaryItemId); + if (Objects.nonNull(salaryItem)) { + Map dataMap = Maps.newHashMap(); + dataMap.put("id", salaryItem.getId().toString()); + dataMap.put("name", salaryItem.getName()); + taxRule.setSalaryItem(dataMap); + } + } + + 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 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 salarySobIds) { + if (CollectionUtils.isEmpty(salarySobIds)) { + return; + } + salarySobTaxRuleMapper().deleteBySalarySobIds(salarySobIds); + } + + @Override + public void saveBatch(List salarySobTaxReportRules) { + if (CollectionUtils.isEmpty(salarySobTaxReportRules)) { + return; + } +// salarySobTaxReportRules.forEach(salarySobTaxReportRuleMapper()::insertIgnoreNull); + } +} diff --git a/src/com/engine/salary/web/SalarySobController.java b/src/com/engine/salary/web/SalarySobController.java index 904d1a472..7bdd6a0ea 100644 --- a/src/com/engine/salary/web/SalarySobController.java +++ b/src/com/engine/salary/web/SalarySobController.java @@ -81,6 +81,11 @@ public class SalarySobController { private SalarySobAddUpRuleWrapper getSalarySobAddUpRuleWrapper(User user) { return ServiceUtil.getService(SalarySobAddUpRuleWrapper.class, user); } + + private SalarySobTaxRuleWrapper getSalarySobTaxRuleWrapper(User user) { + return ServiceUtil.getService(SalarySobTaxRuleWrapper.class, user); + } + /**********************************薪资账套 start*********************************/ /** @@ -548,6 +553,40 @@ public class SalarySobController { /**********************************薪资账套的个税申报表规则 end*********************************/ + /**********************************薪资账套的个税申报表规则 start*********************************/ + + /** + * 薪资账套下的个税规则的详情 + * + * @param id 薪资账套id + * @return + */ + @GET + @Path("/taxrule/getForm") + @ApiOperation("薪资账套下的个税规则的详情") + @Produces(MediaType.APPLICATION_JSON) + public String getSalarySobTaxRuleForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySobTaxRuleWrapper(user)::getForm, id); + } + + /** + * 保存薪资账套下的个税规则 + * + * @param saveParam 保存参数 + * @return + */ + @POST + @Path("/taxrule/save") + @ApiOperation("保存薪资账套下的个税规则的") + @Produces(MediaType.APPLICATION_JSON) + public String saveSalarySobTaxRule(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySobTaxRuleSaveParam saveParam) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalarySobTaxRuleWrapper(user)::save, saveParam); + } + + /**********************************薪资账套的个税申报表规则 end*********************************/ + /**********************************调薪计薪规则 start*********************************/ diff --git a/src/com/engine/salary/wrapper/SalarySobTaxRuleWrapper.java b/src/com/engine/salary/wrapper/SalarySobTaxRuleWrapper.java new file mode 100644 index 000000000..493b2ed36 --- /dev/null +++ b/src/com/engine/salary/wrapper/SalarySobTaxRuleWrapper.java @@ -0,0 +1,45 @@ +package com.engine.salary.wrapper; + +import com.engine.common.util.ServiceUtil; +import com.engine.core.impl.Service; +import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; +import com.engine.salary.entity.salarysob.param.SalarySobTaxRuleSaveParam; +import com.engine.salary.service.SalarySobTaxRuleService; +import com.engine.salary.service.impl.SalarySobTaxRuleServiceImpl; +import weaver.hrm.User; + +import java.util.List; + +/** + * 薪资账套的个税规则 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +public class SalarySobTaxRuleWrapper extends Service { + + private SalarySobTaxRuleService getSalarySobTaxRuleService(User user) { + return ServiceUtil.getService(SalarySobTaxRuleServiceImpl.class, user); + } + + /** + * 薪资账套的个税规则 + * + * @param salarySobId + * @return + */ + public List getForm(Long salarySobId) { + return getSalarySobTaxRuleService(user).getSalarySobTaxRuleDTO(salarySobId); + } + + /** + * 保存薪资账套的个税规则 + * + * @param saveParam + */ + public void save(SalarySobTaxRuleSaveParam saveParam) { + getSalarySobTaxRuleService(user).saveByParam(saveParam); + } +} From dc85ba6043bb9daf291ce7c40a73404f0e5adc47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 11 Jun 2024 10:09:18 +0800 Subject: [PATCH 05/96] =?UTF-8?q?=E4=B8=AA=E7=A8=8E=E5=AD=97=E6=AE=B5?= =?UTF-8?q?=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salarysob/dto/SalarySobTaxRuleDTO.java | 6 +- .../enums/salarysob/IncomeCategoryEnum.java | 388 ++++++++++++++++-- .../impl/SalaryCalcTaxServiceImpl.java | 87 +--- .../impl/SalarySobTaxRuleServiceImpl.java | 7 +- test/ParseTaxApi.java | 4 +- 5 files changed, 369 insertions(+), 123 deletions(-) diff --git a/src/com/engine/salary/entity/salarysob/dto/SalarySobTaxRuleDTO.java b/src/com/engine/salary/entity/salarysob/dto/SalarySobTaxRuleDTO.java index a39c1abbf..787d71271 100644 --- a/src/com/engine/salary/entity/salarysob/dto/SalarySobTaxRuleDTO.java +++ b/src/com/engine/salary/entity/salarysob/dto/SalarySobTaxRuleDTO.java @@ -6,7 +6,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.util.List; -import java.util.Map; /** * 薪资账套的个税规则 @@ -44,12 +43,15 @@ public class SalarySobTaxRuleDTO { private String taxIndex; //个税字段和薪资项目的对应关系 - private Map salaryItem; + private Long salaryItemId; + private String salaryItemName; //个税字段的值 private String value; //对应关系是否可以编辑 private boolean canEdit; + + } } diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index 4eed6daa9..fcdacf5cd 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -37,27 +37,25 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - SalarySobTaxRuleDTO salarySobTaxRuleDTO = SalarySobTaxRuleDTO.builder().incomeCategoryId(this.getValue().toString()).incomeCategoryName(this.getDefaultLabel()).build(); - List taxRules = this.getReportType().getTaxRules(); + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); - Map resultMap = new HashMap<>(); + Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); - taxRules.forEach(rule->{ + taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { - Method method = rule.getClass().getMethod(getter); - Object invoke = method.invoke(rule); + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); rule.setValue(Util.null2String(invoke)); } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { - log.error("no such method", ex); + log.error("getTaxErr no such method {}", getter, ex); } }); - salarySobTaxRuleDTO.setTaxRules(taxRules); - resultMap.put(employeeDeclare.getEmployeeId(),salarySobTaxRuleDTO ); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); } return resultMap; } @@ -71,8 +69,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getLwbclb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -85,8 +102,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQnycxjjsslb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -99,8 +135,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getNtycxbcjlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -113,8 +168,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getJcldhtycxbcjlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -127,8 +201,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getGrgqjl().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -141,8 +234,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQynj().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -155,8 +267,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getBxyxy().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -169,8 +300,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getZqjjr().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -183,8 +333,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtlxlwbc().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -197,8 +366,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtflxlwbc().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -211,8 +399,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getGcsdlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -225,8 +432,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getTxq().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -239,8 +465,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjgzxjlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -253,8 +498,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjrysyjjlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, @@ -267,8 +531,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getLwbclb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }, NON_RESIDENT_INCOME_COMPENSATION_FOR_DISMISS(730, "0730", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @@ -280,8 +563,27 @@ public enum IncomeCategoryEnum implements BaseEnum { } @Override - public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares) { - return null; + public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + List taxRules = taxRuleDTO.getTaxRules(); + + List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getJcldhtycxbcjlb().getSscglb(); + Map idNoResultMap = SalaryEntityUtil.convert2Map(sscglb, GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result::getZzhm); + Map resultMap = new HashMap<>(); + for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { + GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + taxRules.forEach(rule -> { + String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); + try { + Method method = result.getClass().getMethod(getter); + Object invoke = method.invoke(result); + rule.setValue(Util.null2String(invoke)); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException ex) { + log.error("getTaxErr no such method {}", getter, ex); + } + }); + resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + } + return resultMap; } }; @@ -307,7 +609,7 @@ public enum IncomeCategoryEnum implements BaseEnum { public abstract void parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse); - public abstract Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares); + public abstract Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO); @Override diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index 9134fd988..ef221cba5 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -6,10 +6,10 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.constant.SzyhApiConstant; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.entity.salaryacct.bo.SalaryCalcTax; -import com.engine.salary.entity.salaryacct.bo.SalaryCalcTaxFeedback; import com.engine.salary.entity.salaryacct.dto.SalaryCalcTaxInfoDTO; import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxParam; import com.engine.salary.entity.salaryacct.po.*; +import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; import com.engine.salary.entity.salarysob.po.SalarySobTaxReportRulePO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; @@ -27,7 +27,6 @@ import com.engine.salary.util.db.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import weaver.hrm.User; -import java.time.LocalDateTime; import java.util.*; public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxService { @@ -61,6 +60,10 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe return ServiceUtil.getService(SalarySobTaxReportRuleServiceImpl.class, user); } + private SalarySobTaxRuleService getSalarySobTaxRuleService(User user) { + return ServiceUtil.getService(SalarySobTaxRuleServiceImpl.class, user); + } + private EmployeeDeclareService getEmployeeDeclareService(User user) { return ServiceUtil.getService(EmployeeDeclareServiceImpl.class, user); } @@ -196,15 +199,13 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe if (CollectionUtils.isEmpty(salaryAcctCalcTaxReqs)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(268184, "请先计算个税再获取反馈")); } - // 查询薪资核算记录关联的薪资账套个税申报表字段对应 - List salarySobTaxReportRules = getSalarySobTaxReportRuleService(user).listBySalarySobIds(Collections.singleton(salaryAcctRecord.getSalarySobId())); - Map salarySobTaxReportRuleMap = SalaryEntityUtil.convert2Map(salarySobTaxReportRules, SalarySobTaxReportRulePO::getReportColumnDataIndex); + // 查询薪资核算记录关联的薪资账套个税字段对应 + List salarySobTaxRules = getSalarySobTaxRuleService(user).getSalarySobTaxRuleDTO(salaryAcctRecord.getSalarySobId()); + Map salarySobTaxRuleMap = SalaryEntityUtil.convert2Map(salarySobTaxRules, SalarySobTaxRuleDTO::getIncomeCategoryId); // 查询报送人员 List employeeDeclares = getEmployeeDeclareService(user).listBySalaryAcctTaxAgent(salaryAcctTaxAgents); Map> employeeDeclareMap = SalaryEntityUtil.group2Map(employeeDeclares, EmployeeDeclarePO::getTaxAgentId); - String url = apiConfig.getHost() + SzyhApiConstant.ASYN_INDIVIDUAL_INCOME_TAX_FEEDBACK; - Map header = SingnatureData.initHeader(Collections.emptyMap(), apiConfig.getAppKey(), apiConfig.getAppSecret()); List resultPOS = new ArrayList<>(); for (SalaryAcctCalcTaxReqPO salaryAcctCalcTaxReq : salaryAcctCalcTaxReqs) { @@ -229,65 +230,8 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe if (incomeCategoryEnum == null) { continue; } - -// Map empIdResult = incomeCategoryEnum.parseGetASynIndividualIncomeTaxFeedbackResponse(feedbackResponse, subEmployeeDeclares); - - - Map dataMap = null; -// switch (incomeCategoryEnum) { -// case WAGES_AND_SALARIES: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("zcgzxj"), Object.class); -// break; -// case ONETIME_ANNUAL_BONUS: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("qnycxjjsslb"), Object.class); -// break; -// case COMPENSATION_FOR_RETIRE: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("ntycxbcjlb"), Object.class); -// break; -// case COMPENSATION_FOR_DISMISS: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("jcldhtycxbcjlb"), Object.class); -// break; -// case INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("grgqjl"), Object.class); -// break; -// case ANNUITY_RECEIPT: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("qynj"), Object.class); -// break; -// case REMUNERATION_FOR_LABOR: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("lwbclb"), Object.class); -// break; -// case INCOME_FOR_INSURANCE_SALESMAN: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("bxyxy"), Object.class); -// break; -// case INCOME_FOR_SECURITIES_BROKER: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("zqjjr"), Object.class); -// break; -// case REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("qtlxlwbc"), Object.class); -// break; -// case REMUNERATION_FOR_OTHER_LABOR: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("qtflxlwbc"), Object.class); -// break; -// case REMUNERATION_FOR_AUTHOR: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("gcsdlb"), Object.class); -// break; -// case ROYALTIES: -// dataMap = JsonUtil.parseMap(ZHSDMap.get("txq"), Object.class); -// break; -// default: -// dataMap = Collections.emptyMap(); -// break; -// } - - Map employeeIdKeyTaxMap; - SalaryCalcTaxFeedback salaryCalcTaxFeedback = new SalaryCalcTaxFeedback(dataMap, subEmployeeDeclares); - if (incomeCategoryEnum == IncomeCategoryEnum.WAGES_AND_SALARIES) { - employeeIdKeyTaxMap = salaryCalcTaxFeedback.buildZCGZXJFeedback(); - } else { - employeeIdKeyTaxMap = salaryCalcTaxFeedback.buildOtherFeedback(); - } - - LocalDateTime now = LocalDateTime.now(); + SalarySobTaxRuleDTO taxRuleDTO = salarySobTaxRuleMap.get(incomeCategoryEnum.getValue().toString()); + Map empIdResult = incomeCategoryEnum.parseGetASynIndividualIncomeTaxFeedbackResponse(feedbackResponse, subEmployeeDeclares,taxRuleDTO); List subSalaryAcctEmployees = salaryAcctEmployeeMap.get(salaryAcctTaxAgent.getTaxAgentId() + "-" + salaryAcctTaxAgent.getIncomeCategory()); if (CollectionUtils.isEmpty(subSalaryAcctEmployees)) { continue; @@ -297,12 +241,13 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe if (salaryAcctResultValue == null) { continue; } - SalarySobTaxReportRulePO salarySobTaxReportRule = salarySobTaxReportRuleMap.get("refundedOrSupplementedTax" + salaryAcctEmployee.getIncomeCategory()); - if (salarySobTaxReportRule != null) { - SalaryAcctResultPO salaryAcctResultPO = salaryAcctResultValue.get(salarySobTaxReportRule.getSalaryItemId()); - salaryAcctResultPO.setResultValue(employeeIdKeyTaxMap.get(salaryAcctEmployee.getEmployeeId())); + SalarySobTaxRuleDTO salarySobTaxRuleDTO = empIdResult.get(salaryAcctEmployee.getEmployeeId()); + List taxRules = salarySobTaxRuleDTO.getTaxRules(); + taxRules.forEach(rule->{ + SalaryAcctResultPO salaryAcctResultPO = salaryAcctResultValue.get(rule.getSalaryItemId()); + salaryAcctResultPO.setResultValue(rule.getValue()); resultPOS.add(salaryAcctResultPO); - } + }); } } } diff --git a/src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java index 59a390f1a..65e81008f 100644 --- a/src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java @@ -19,7 +19,6 @@ 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.Maps; import com.google.common.collect.Sets; import org.apache.commons.collections4.CollectionUtils; import weaver.hrm.User; @@ -98,10 +97,8 @@ public class SalarySobTaxRuleServiceImpl extends Service implements SalarySobTax Long salaryItemId = salarySobTaxReportRuleMap.get(incomeCategoryId + "-" + taxRule.getTaxIndex()); SalaryItemPO salaryItem = idKeySalaryItemMap.get(salaryItemId); if (Objects.nonNull(salaryItem)) { - Map dataMap = Maps.newHashMap(); - dataMap.put("id", salaryItem.getId().toString()); - dataMap.put("name", salaryItem.getName()); - taxRule.setSalaryItem(dataMap); + taxRule.setSalaryItemId(salaryItem.getId()); + taxRule.setSalaryItemName(salaryItem.getName()); } } diff --git a/test/ParseTaxApi.java b/test/ParseTaxApi.java index 716d56807..56bb4a986 100644 --- a/test/ParseTaxApi.java +++ b/test/ParseTaxApi.java @@ -7,9 +7,9 @@ import java.util.List; public class ParseTaxApi { public static void main(String[] args) { -// readExcel("H:\\code\\salary\\test\\ApiDes.xlsx"); + readExcel("H:\\code\\salary\\test\\ApiDes.xlsx"); - readExcel2("H:\\code\\salary\\test\\ApiDes.xlsx"); +// readExcel2("H:\\code\\salary\\test\\ApiDes.xlsx"); } From a1e7ec160c2ba9c08514a229ffabf2f31ca767cb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 11 Jun 2024 10:10:45 +0800 Subject: [PATCH 06/96] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SalaryTemplateServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java index f8ee03c5a..f6f7e8b18 100644 --- a/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryTemplateServiceImpl.java @@ -317,7 +317,7 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate List newItems = new ArrayList<>(); for (SalaryTemplateSalaryItemListDTO templateItem : salaryItemSetting.getItems()) { SalarySobEmpFieldPO empFieldPO = getSalarySobEmpFieldMapper().getById(Long.valueOf(templateItem.getSalaryItemId())); - if (empFieldCodeList.contains(empFieldPO.getFieldCode()) && empFieldCodeWithIdMap.get(empFieldPO.getFieldCode()) != null) { + if (empFieldPO != null && empFieldCodeList.contains(empFieldPO.getFieldCode()) && empFieldCodeWithIdMap.get(empFieldPO.getFieldCode()) != null) { templateItem.setId(empFieldCodeWithIdMap.get(empFieldPO.getFieldCode()).toString()); templateItem.setSalaryItemId(empFieldCodeWithIdMap.get(empFieldPO.getFieldCode()).toString()); newItems.add(templateItem); @@ -341,7 +341,7 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate List newItems = new ArrayList<>(); for (SalaryTemplateSalaryItemListDTO templateItem : salaryItemSetting.getItems()) { SalarySobEmpFieldPO empFieldPO = getSalarySobEmpFieldMapper().getById(Long.valueOf(templateItem.getSalaryItemId())); - if (empFieldCodeList.contains(empFieldPO.getFieldCode()) && empFieldCodeWithIdMap.get(empFieldPO.getFieldCode()) != null) { + if (empFieldPO != null && empFieldCodeList.contains(empFieldPO.getFieldCode()) && empFieldCodeWithIdMap.get(empFieldPO.getFieldCode()) != null) { templateItem.setId(empFieldCodeWithIdMap.get(empFieldPO.getFieldCode()).toString()); templateItem.setSalaryItemId(empFieldCodeWithIdMap.get(empFieldPO.getFieldCode()).toString()); newItems.add(templateItem); From f073f6d90cadb0897ee628fcac9a935499309e2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 11 Jun 2024 15:48:07 +0800 Subject: [PATCH 07/96] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E9=9D=9E=E6=AD=A3=E5=B8=B8=E4=BA=BA=E5=91=98=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java index f4d5b3643..e7cc9af35 100644 --- a/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java +++ b/src/com/engine/salary/entity/salaryBill/bo/SalaryBillBO.java @@ -261,7 +261,7 @@ public class SalaryBillBO { } Util_Message.store(messageBean); } catch (IOException e) { - e.printStackTrace(); + log.error("消息发送失败",e); } } From 853482141fb0dbe6a27d43a35a9ed929ed6475f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 12 Jun 2024 10:45:32 +0800 Subject: [PATCH 08/96] =?UTF-8?q?=E5=B0=8F=E6=95=B0=E4=BD=8D=E6=94=AF?= =?UTF-8?q?=E6=8C=8110=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryitem/param/SalaryItemSaveParam.java | 2 +- .../salary/entity/salarysob/dto/SalarySobItemFormDTO.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java b/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java index a200cea77..5cf5c64b9 100644 --- a/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java +++ b/src/com/engine/salary/entity/salaryitem/param/SalaryItemSaveParam.java @@ -63,7 +63,7 @@ public class SalaryItemSaveParam { private Integer roundingMode; //保留小数位 - @DataCheck(require = true, type = ValidTypeEnum.NUMBER, max = 8, message = "小数位最多为8") + @DataCheck(require = true, type = ValidTypeEnum.NUMBER, max = 10, message = "小数位最多为10") private Integer pattern; /** diff --git a/src/com/engine/salary/entity/salarysob/dto/SalarySobItemFormDTO.java b/src/com/engine/salary/entity/salarysob/dto/SalarySobItemFormDTO.java index f23df1512..3f797c9bf 100644 --- a/src/com/engine/salary/entity/salarysob/dto/SalarySobItemFormDTO.java +++ b/src/com/engine/salary/entity/salarysob/dto/SalarySobItemFormDTO.java @@ -53,7 +53,7 @@ public class SalarySobItemFormDTO { private Integer roundingMode; //保留小数位") - @DataCheck(require = true, type = ValidTypeEnum.NUMBER, max = 8, message = "小数位最多为8") + @DataCheck(require = true, type = ValidTypeEnum.NUMBER, max = 10, message = "小数位最多为10") private Integer pattern; //取值方式") From 7e988193c6b3536f84388ecce63ac6a645e660a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 12 Jun 2024 14:31:50 +0800 Subject: [PATCH 09/96] =?UTF-8?q?=E5=85=AC=E5=BC=8F=E6=89=A9=E5=B1=95?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=9C=88=E6=9C=89=E5=A4=9A=E5=B0=91=E5=A4=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/wiki/常用查询.md | 2 +- src/com/engine/salary/constant/des.json | 26 ++++++++++++++- .../formlua/constant/FormluaConstant.java | 26 ++++++++++++++- .../engine/salary/formlua/core/QlExpress.java | 1 + .../formlua/func/date/DateTimeService.java | 7 ++++ .../func/date/DateTimeServiceImpl.java | 32 +++++++++++++++++++ 6 files changed, 91 insertions(+), 3 deletions(-) diff --git a/resource/wiki/常用查询.md b/resource/wiki/常用查询.md index 594b14bf8..13ba2242f 100644 --- a/resource/wiki/常用查询.md +++ b/resource/wiki/常用查询.md @@ -18,4 +18,4 @@ left join hrmresource e on e.id= result.employee_id left join hrsa_tax_agent t on a.tax_agent_id=t.id where a.delete_type=0 and i.delete_type=0 and t.delete_type=0 and c.delete_type=0 and a.employee_id=人员id and t.name=扣缴义务人名称 - and effective_time <= now() and c.name='基本工资' order by effective_time desc \ No newline at end of file + c.name='基本工资' order by effective_time desc \ No newline at end of file diff --git a/src/com/engine/salary/constant/des.json b/src/com/engine/salary/constant/des.json index 0b35d5f80..f970e4448 100644 --- a/src/com/engine/salary/constant/des.json +++ b/src/com/engine/salary/constant/des.json @@ -980,7 +980,31 @@ "infinite": true } ] - } + }, + { + "name": "DAYSINMONTH", + "chineseName": "返回指定月的天数", + "description": "返回指定月的天数。", + "example": "DAYSINMONTH('2024-01-01')", + "result": "31", + "paramDescs": [ + "*日期*(必选)" + ], + "formatString": "DAYSINMONTH(日期)", + "paramArray": [], + "paramData": [], + "returnType": "number", + "type": "function", + "validForm": "days_in_month", + "paramCount": -1, + "paramStatuses": [ + { + "dataType": "date", + "must": true, + "infinite": true + } + ] + }, ], "dataType": "date", "name": "日期函数", diff --git a/src/com/engine/salary/formlua/constant/FormluaConstant.java b/src/com/engine/salary/formlua/constant/FormluaConstant.java index c3d7f4cb7..c88d7090d 100644 --- a/src/com/engine/salary/formlua/constant/FormluaConstant.java +++ b/src/com/engine/salary/formlua/constant/FormluaConstant.java @@ -985,7 +985,31 @@ public class FormluaConstant { " \"infinite\": true\n" + " }\n" + " ]\n" + - " }\n" + + " },\n" + + " {\n" + + " \"name\": \"DAYSINMONTH\",\n" + + " \"chineseName\": \"返回指定月的天数\",\n" + + " \"description\": \"返回指定月的天数。\",\n" + + " \"example\": \"DAYSINMONTH('2024-01-01')\",\n" + + " \"result\": \"31\",\n" + + " \"paramDescs\": [\n" + + " \"*日期*(必选)\"\n" + + " ],\n" + + " \"formatString\": \"DAYSINMONTH(日期)\",\n" + + " \"paramArray\": [],\n" + + " \"paramData\": [],\n" + + " \"returnType\": \"number\",\n" + + " \"type\": \"function\",\n" + + " \"validForm\": \"days_in_month\",\n" + + " \"paramCount\": -1,\n" + + " \"paramStatuses\": [\n" + + " {\n" + + " \"dataType\": \"date\",\n" + + " \"must\": true,\n" + + " \"infinite\": true\n" + + " }\n" + + " ]\n" + + " },\n" + " ],\n" + " \"dataType\": \"date\",\n" + " \"name\": \"日期函数\",\n" + diff --git a/src/com/engine/salary/formlua/core/QlExpress.java b/src/com/engine/salary/formlua/core/QlExpress.java index 68cd238d9..9660ff1fe 100644 --- a/src/com/engine/salary/formlua/core/QlExpress.java +++ b/src/com/engine/salary/formlua/core/QlExpress.java @@ -189,6 +189,7 @@ public class QlExpress { runner.addFunctionOfServiceMethod("CURRSECOND", dateTimeService, "currSecond", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("MAXDATE", dateTimeService, "maxDate", new Class[]{Object[].class}, ""); runner.addFunctionOfServiceMethod("MINDATE", dateTimeService, "minDate", new Class[]{Object[].class}, ""); + runner.addFunctionOfServiceMethod("DAYSINMONTH", dateTimeService, "daysInMonth", new Class[]{Object[].class}, ""); // runner.addFunctionOfServiceMethod("DAYOFMONTH", dateTimeService, "dayOfMonth", new Class[]{Object[].class}, ""); //聚合函数 diff --git a/src/com/engine/salary/formlua/func/date/DateTimeService.java b/src/com/engine/salary/formlua/func/date/DateTimeService.java index 2b7dca962..7fbf04508 100644 --- a/src/com/engine/salary/formlua/func/date/DateTimeService.java +++ b/src/com/engine/salary/formlua/func/date/DateTimeService.java @@ -89,4 +89,11 @@ import com.engine.salary.formlua.entity.parameter.DataType; */ DataType currSecond(Object... objects); + /** + * 获取月有多少天 + * @param objects + * @return + */ + DataType daysInMonth(Object... objects); + } diff --git a/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java b/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java index 07fa4c8ae..2220ff86c 100644 --- a/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java +++ b/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java @@ -13,6 +13,7 @@ import org.slf4j.LoggerFactory; import java.math.BigDecimal; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.YearMonth; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; @@ -998,6 +999,37 @@ public class DateTimeServiceImpl implements DateTimeService { int year = cal.get(Calendar.SECOND); return new DataType(DataType.NUMBER, year); } + + @Override + public DataType daysInMonth(Object... objects) { + Class[] typeObjects = new Class[]{DateAndString.class}; + IgnoreParamFilter.commonFilter("YEAR", 1, 1, typeObjects, objects); + Object obj = objects[0]; + Object date = DateUtil.getContent(obj, formatter); + if (ExcelParamUtil.checkIsNull(date, ExcelParamUtil.CHECKLEVEL_STRING)) { + return new DataType(DataType.NUMBER, 0); + } + int year = 0; + try { + year = getDateTimeValue(date, "Y", "YEAR"); + } catch (ParseException e) { + logger.error("err", e); + throw new RuntimeException(e); + } + + IgnoreParamFilter.commonFilter("MONTH", 1, 1, typeObjects, objects); + int month = 0; + try { + month = getDateTimeValue(date, "M", "MONTH") + 1; + } catch (ParseException e) { + logger.error("err", e); + throw new RuntimeException(e); + } + + YearMonth yearMonth = YearMonth.of(year, month); + int daysInMonth = yearMonth.lengthOfMonth(); + return new DataType(DataType.NUMBER, daysInMonth); + } /*******以下为日期函数的一些公共逻辑********/ From 1983ba968c73513ab75eb1fd0e9cb00e8f210b49 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 12 Jun 2024 15:35:40 +0800 Subject: [PATCH 10/96] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E6=97=A5=E5=BF=97=20?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F=E8=96=AA=E8=B5=84=E9=A1=B9=E7=9B=AE=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E4=B8=8D=E9=9C=80=E8=A6=81=E9=87=8D=E5=90=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryitem/bo/SalaryItemBO.java | 9 +++++++-- .../salary/formlua/func/compare/EqOperator.java | 4 ---- .../salary/formlua/func/compare/GreaterOperator.java | 4 ---- .../salary/formlua/func/compare/WOperatorDiv.java | 3 +-- .../salary/formlua/func/date/DateTimeServiceImpl.java | 3 +-- .../formlua/func/finance/FinanceServiceImpl.java | 1 - .../engine/salary/formlua/func/logic/IfOperator.java | 2 -- .../salary/formlua/func/logic/LogicServiceImpl.java | 1 - .../formlua/func/string/StringFormulaServiceImpl.java | 11 +---------- src/com/engine/salary/formlua/util/DateUtil.java | 1 - .../engine/salary/formlua/util/IgnoreParamFilter.java | 3 --- 11 files changed, 10 insertions(+), 32 deletions(-) diff --git a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java index 1048360fa..990ab41e8 100644 --- a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java +++ b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java @@ -40,8 +40,6 @@ public class SalaryItemBO { private static final BaseBean baseBean = new BaseBean(); - //强制开启账套的公式配置 - private static final Boolean openFormulaForcedEditing = "true".equals(baseBean.getPropValue("hrmSalary", "openFormulaForcedEditing")); @@ -86,6 +84,10 @@ public class SalaryItemBO { if (CollectionUtils.isEmpty(salaryItems)) { return Collections.emptyList(); } + + //强制开启账套的公式配置 + boolean openFormulaForcedEditing = "true".equals(baseBean.getPropValue("hrmSalary", "openFormulaForcedEditing")); + Map formulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId, ExpressFormula::getFormula); Map sysSalaryItemNameMap = SalaryEntityUtil.convert2Map(sysSalaryItemPOS, SysSalaryItemPO::getId, SysSalaryItemPO::getName); return salaryItems.stream().map(salaryItemPO -> { @@ -134,6 +136,9 @@ public class SalaryItemBO { if (CollectionUtils.isEmpty(salaryItems)) { return Collections.emptyList(); } + //强制开启账套的公式配置 + boolean openFormulaForcedEditing = "true".equals(baseBean.getPropValue("hrmSalary", "openFormulaForcedEditing")); + Map formulaMap = SalaryEntityUtil.convert2Map(expressFormulas, ExpressFormula::getId, ExpressFormula::getFormula); Map sysSalaryItemNameMap = SalaryEntityUtil.convert2Map(sysSalaryItemPOS, SysSalaryItemPO::getId, SysSalaryItemPO::getName); return salaryItems.stream().map(salaryItemPO -> { diff --git a/src/com/engine/salary/formlua/func/compare/EqOperator.java b/src/com/engine/salary/formlua/func/compare/EqOperator.java index 24ee31946..679149b83 100644 --- a/src/com/engine/salary/formlua/func/compare/EqOperator.java +++ b/src/com/engine/salary/formlua/func/compare/EqOperator.java @@ -1,6 +1,5 @@ package com.engine.salary.formlua.func.compare; -import com.alibaba.fastjson.JSON; import com.engine.salary.formlua.core.exception.ErrorType; import com.engine.salary.formlua.entity.parameter.DataType; import com.engine.salary.formlua.util.CompareUtil; @@ -37,7 +36,6 @@ public class EqOperator extends OperatorEqualsLessMore { public Object executeInner(Object... list) throws Exception { DataType result=new DataType(); result.setDataType(DataType.BOOL); - logger.info("等于号参数:"+JSON.toJSONString(list)); String oper="="; if(list.length!=2){ throw new RuntimeException("[=]"+ ErrorType.MAX_VAR_COUNT.name()); @@ -75,7 +73,6 @@ public class EqOperator extends OperatorEqualsLessMore { int i=0; for (;i"+secondParam); if((firstParam instanceof String || firstParam instanceof Character) && (secondParam instanceof String || secondParam instanceof Character)){ if(firstParam.toString().length()==1&&secondParam.toString().length()==1){ boolean r=firstParam.toString().equals(secondParam.toString()); diff --git a/src/com/engine/salary/formlua/func/compare/GreaterOperator.java b/src/com/engine/salary/formlua/func/compare/GreaterOperator.java index f33b7dd5a..1540b887c 100644 --- a/src/com/engine/salary/formlua/func/compare/GreaterOperator.java +++ b/src/com/engine/salary/formlua/func/compare/GreaterOperator.java @@ -1,6 +1,5 @@ package com.engine.salary.formlua.func.compare; -import com.alibaba.fastjson.JSON; import com.engine.salary.formlua.entity.parameter.DataType; import com.engine.salary.formlua.util.CompareUtil; import com.engine.salary.formlua.util.DateUtil; @@ -22,7 +21,6 @@ public class GreaterOperator extends OperatorEqualsLessMore { result.setDataType(DataType.BOOL); // IgnoreParamFilter.filterCompareFunc(op1,op2,">"); String datatype = ExcelParamUtil.checkParamType(op1); - logger.info("大于号比较:" + JSON.toJSONString(op1) + "-->" + JSON.toJSONString(op2)); //对option的特殊处理,获取option的字符串后根据逗号分割,然后排序数组,数组长度不一致返回false,一致则循环对比直到同样下标的数据不一致返回false,否则为true try { if (datatype.equals(DataType.OPTION)) { @@ -77,8 +75,6 @@ public class GreaterOperator extends OperatorEqualsLessMore { } result.setContent(dateResult); } else { - logger.info("参数1:" + ExcelParamUtil.convertParamValToNumber(op1) + ""); - logger.info("参数2:" + ExcelParamUtil.convertParamValToNumber(op2) + ""); boolean r; if (ExcelParamUtil.getParamType(op1).toLowerCase().equals("double") || ExcelParamUtil.getParamType(op2).toLowerCase().equals("double")) { r = OperatorEqualsLessMore.executeInner(">", ExcelParamUtil.convertParamValToNumber(op1), ExcelParamUtil.convertParamValToNumber(op2)); diff --git a/src/com/engine/salary/formlua/func/compare/WOperatorDiv.java b/src/com/engine/salary/formlua/func/compare/WOperatorDiv.java index d4d612bf8..8011e3649 100644 --- a/src/com/engine/salary/formlua/func/compare/WOperatorDiv.java +++ b/src/com/engine/salary/formlua/func/compare/WOperatorDiv.java @@ -52,10 +52,9 @@ public class WOperatorDiv extends OperatorMultiDiv { newList[1] = secondParam; try { Object r = super.executeInner(newList); - logger.info("乘法运算:" + r.toString()); result.setContent(new BigDecimal(r + "")); } catch (Exception e) { - logger.info("除法计算异常返回0:" + e.getMessage()); + logger.error("除法计算异常返回0:" + e.getMessage()); result.setContent(0); } return result; diff --git a/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java b/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java index 2220ff86c..5f2ffedd0 100644 --- a/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java +++ b/src/com/engine/salary/formlua/func/date/DateTimeServiceImpl.java @@ -550,7 +550,6 @@ public class DateTimeServiceImpl implements DateTimeService { date = lastday; break; } - logger.info("firstday:" + firstday + " lastday:" + lastday); return new DataType(DataType.STRING, date); } @@ -1288,7 +1287,7 @@ public class DateTimeServiceImpl implements DateTimeService { r = true; break; } catch (ParseException e) { - logger.info(e.getMessage()); + logger.error(e.getMessage()); r = false; } } diff --git a/src/com/engine/salary/formlua/func/finance/FinanceServiceImpl.java b/src/com/engine/salary/formlua/func/finance/FinanceServiceImpl.java index acda12221..e3b4f1d24 100644 --- a/src/com/engine/salary/formlua/func/finance/FinanceServiceImpl.java +++ b/src/com/engine/salary/formlua/func/finance/FinanceServiceImpl.java @@ -79,7 +79,6 @@ public class FinanceServiceImpl implements FinanceService{ int intLen = integerNum.length(); for (int i = 0; i < intLen; i++) { String n = integerNum.substring(i, i+1); - logger.info("转换中文:"+n); int p = intLen - i - 1; int q = p / 4; int m = p % 4; diff --git a/src/com/engine/salary/formlua/func/logic/IfOperator.java b/src/com/engine/salary/formlua/func/logic/IfOperator.java index 44430d341..b826836fb 100644 --- a/src/com/engine/salary/formlua/func/logic/IfOperator.java +++ b/src/com/engine/salary/formlua/func/logic/IfOperator.java @@ -1,6 +1,5 @@ package com.engine.salary.formlua.func.logic; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.engine.salary.formlua.core.exception.ExcelRunTimeException; import com.engine.salary.formlua.entity.parameter.DataType; @@ -26,7 +25,6 @@ public class IfOperator extends OperatorIf { throw new ExcelRunTimeException("IF函数只允许三个参数"); } Object obj = list.get(0).getObject(parent); - logger.info("IF参数:" + JSON.toJSONString(obj)); boolean isDataTypeBool = false; DataType boolDtaType = null; if (obj != null && obj instanceof DataType) { diff --git a/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java b/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java index 395b9acdf..f550fd861 100644 --- a/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java +++ b/src/com/engine/salary/formlua/func/logic/LogicServiceImpl.java @@ -477,7 +477,6 @@ public class LogicServiceImpl implements LogicService { Object obj = objects[i - 1]; String typeStr = ExcelParamUtil.getParamType(obj); typeStr = ExcelParamUtil.checkParamType(typeStr); - logger.info(typeStr); if (type == null) { type = typeStr; } else { diff --git a/src/com/engine/salary/formlua/func/string/StringFormulaServiceImpl.java b/src/com/engine/salary/formlua/func/string/StringFormulaServiceImpl.java index bf96613c3..f18557327 100644 --- a/src/com/engine/salary/formlua/func/string/StringFormulaServiceImpl.java +++ b/src/com/engine/salary/formlua/func/string/StringFormulaServiceImpl.java @@ -236,7 +236,6 @@ public class StringFormulaServiceImpl implements StringFormulaService { int replaceLength=(repIdx-1)+repLenth; if(replaceLength>sourceStr.length()){ // throw new RunTimeException(errorJson.getString("msg")); - logger.info("REPLACE函数替换位置超过了字符长度"); replaceLength=sourceStr.length(); } String cutStr=sourceStr.substring(repIdx-1,replaceLength); @@ -463,7 +462,6 @@ public class StringFormulaServiceImpl implements StringFormulaService { sex = "男"; } } - logger.info(sex); return new DataType(DataType.STRING,sex); } @@ -471,7 +469,6 @@ public class StringFormulaServiceImpl implements StringFormulaService { public DataType nativePlace(String idCard){ int nativePlaceCode=Integer.parseInt(idCard.substring(0, 6)); String nativePlace= NativePlace.getNativePlace(nativePlaceCode); - logger.info("您所在的地区为:\n" + nativePlace); return new DataType(DataType.STRING,nativePlace); } @@ -489,7 +486,6 @@ public class StringFormulaServiceImpl implements StringFormulaService { if(dataType!=null && dataType.getContent()!=null){ age=dataType.getContent(); } - logger.info("年龄:"+age); } } catch (ParseException e) { logger.error("err",e); @@ -526,7 +522,6 @@ public class StringFormulaServiceImpl implements StringFormulaService { } String birth=year+"-"+month+"-"+day; - logger.info("生日为:"+birth); result=birth; break; @@ -756,12 +751,10 @@ public class StringFormulaServiceImpl implements StringFormulaService { if(fieldType.equalsIgnoreCase("string")){ if(content!=null){ try { - logger.info("isJson函数的JSON字符转换:"+content+""); JSON.parseObject(content+""); resultDataType=new DataType(DataType.BOOL,true); } catch (Exception e) { - logger.info("err",e); - logger.info("不是正常的JSON字符"); + logger.error("err",e); resultDataType=new DataType(DataType.BOOL,false); } }else{ @@ -800,13 +793,11 @@ public class StringFormulaServiceImpl implements StringFormulaService { if(fieldType.equalsIgnoreCase("string")){ if(content!=null){ try { - logger.info("isJson函数的JSON字符转换:"+content+""); JSONObject jsonObject=JSON.parseObject(content+""); Object jsonValue=jsonObject.get(objectKey+""); resultDataType=new DataType(DataType.STRING,jsonValue==null?"":jsonValue.toString()); } catch (Exception e) { logger.info("err",e); - logger.info("不是正常的JSON字符"); resultDataType=new DataType(DataType.STRING,""); } }else{ diff --git a/src/com/engine/salary/formlua/util/DateUtil.java b/src/com/engine/salary/formlua/util/DateUtil.java index 64e97e2bd..5eddb6eb0 100644 --- a/src/com/engine/salary/formlua/util/DateUtil.java +++ b/src/com/engine/salary/formlua/util/DateUtil.java @@ -87,7 +87,6 @@ public class DateUtil { try { format.setLenient(false); format.parse(dateString); - logger.info(dateString); } catch (ParseException e) { // logger.error("err",e); convertSuccess=false; diff --git a/src/com/engine/salary/formlua/util/IgnoreParamFilter.java b/src/com/engine/salary/formlua/util/IgnoreParamFilter.java index 31f670347..b8db227e4 100644 --- a/src/com/engine/salary/formlua/util/IgnoreParamFilter.java +++ b/src/com/engine/salary/formlua/util/IgnoreParamFilter.java @@ -1,6 +1,5 @@ package com.engine.salary.formlua.util; -import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.engine.salary.formlua.core.exception.ErrorType; import com.engine.salary.formlua.entity.parameter.DataType; @@ -39,7 +38,6 @@ public class IgnoreParamFilter { * @return */ public static boolean isEmployee(Object object) { - logger.info("校验人员参数" + JSON.toJSONString(object)); // if (object instanceof DataType) { // DataType dataType = (DataType) object; // if (dataType.getComponentKey() != null && dataType.getComponentKey().equalsIgnoreCase(ComponentType.Employee.toString())) { @@ -227,7 +225,6 @@ public class IgnoreParamFilter { * @throws RuntimeException */ public static void filterAggFunc(String func, Object... objects) throws RuntimeException { - logger.info("聚合参数:" + JSON.toJSONString(objects)); Integer number = getSetFuncNumber(func); Map map = new HashMap<>(); boolean mustNumber = false; From e249de9a59c3e3ee92a31302227a8c909ce24022 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 12 Jun 2024 16:01:09 +0800 Subject: [PATCH 11/96] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E5=8D=95=E5=85=83=E6=A0=BC=E6=A0=BC=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportWrapper.java | 22 ++++++++++++++++++- .../salary/util/excel/ExcelUtilPlus.java | 3 +++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 0ccb7df05..1abf7c36b 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -14,6 +14,7 @@ import com.engine.salary.config.SalaryElogConfig; import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.enums.OperateTypeEnum; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; @@ -40,6 +41,7 @@ import weaver.general.PageIdConst; import weaver.hrm.User; import weaver.wechat.util.Utils; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -418,10 +420,28 @@ public class SalaryStatisticsReportWrapper extends Service { } }); + List itemIds = salaryStatisticsItemList.stream().map(item -> item.getItemValue().split(",")).flatMap(Arrays::stream).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); + List salaryItemPOList = getSalaryItemService(user).listByIds(itemIds); + List numberItemIds = salaryItemPOList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).map(salaryItemPO -> salaryItemPO.getId().toString()).collect(Collectors.toList()); + Map salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, statisticsItemPO -> statisticsItemPO.getId().toString()); + for (Map map : records) { List row = Lists.newArrayListWithExpectedSize(records.size()); head.forEach(k -> { - row.add(map.getOrDefault(k, StringUtils.EMPTY)); + // 获取是数值还是文本 + if (k.contains(SalaryStatisticsReportBO.UD)) { + String[] split = k.split(SalaryStatisticsReportBO.UD); + String salaryItemId = split[0]; + SalaryStatisticsItemPO salaryStatisticsItemPO = salaryStatisticsItemMap.get(salaryItemId); + if (salaryStatisticsItemPO != null) { + Optional textItemOptional = Arrays.stream(salaryStatisticsItemPO.getItemValue().split(",")).filter(id -> !numberItemIds.contains(id)).findFirst(); + row.add( (!textItemOptional.isPresent() && NumberUtils.isCreatable(map.getOrDefault(k, StringUtils.EMPTY).replace(",", ""))) ? new BigDecimal(map.get(k).replace(",", "")) : map.getOrDefault(k, StringUtils.EMPTY)); + } else { + row.add(map.getOrDefault(k, StringUtils.EMPTY)); + } + } else { + row.add(map.getOrDefault(k, StringUtils.EMPTY)); + } }); rows.add(row); } diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index bfb2cf92e..3707f2f7c 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -784,6 +784,9 @@ public class ExcelUtilPlus { if (o instanceof String) { cell.setCellType(CellType.STRING); cell.setCellValue(String.valueOf(o)); + } else if (o instanceof BigDecimal) { + cell.setCellType(CellType.NUMERIC); + cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); } else if (o instanceof Boolean) { cell.setCellType(CellType.BOOLEAN); cell.setCellValue(String.valueOf(o)); From 4798f5d4a6f35b8e907b85a702bfb21c7092683d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 12 Jun 2024 17:35:06 +0800 Subject: [PATCH 12/96] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=A4=A7=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=86=85=E5=AD=98=E6=BA=A2=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctResultServiceImpl.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index c3d96f1ef..a1c7b9b90 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -219,10 +219,11 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe List> partition = Lists.partition((List) salaryAcctEmployeeIds, 500); List salaryAcctResultPOS = new ArrayList<>(); partition.forEach(empIds -> { - salaryAcctResultPOS.addAll(getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpIds(empIds).build())); + List resultPOS = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpIds(empIds).build()); + encryptUtil.decryptList(resultPOS, SalaryAcctResultPO.class); + salaryAcctResultPOS.addAll(resultPOS); }); // 解密 - encryptUtil.decryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); return salaryAcctResultPOS; } @@ -789,7 +790,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe acctResults = Optional.ofNullable(acctResultPOS).orElse(new ArrayList<>()).stream().filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId())).collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); } List lockEmpIds = salaryAcctEmployeePOS.stream().filter(po -> LockStatusEnum.LOCK.getValue().equals(po.getLockStatus())).map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); - if(CollUtil.isNotEmpty(lockEmpIds)){ + if (CollUtil.isNotEmpty(lockEmpIds)) { List acctResultPOS = listBySalaryAcctEmployeeIds(lockEmpIds); Map acctResultMaps = Optional.ofNullable(acctResultPOS).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); acctResults.putAll(acctResultMaps); From db391f01c4b212f234817c7e44f193e2f359ffd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 13 Jun 2024 13:39:24 +0800 Subject: [PATCH 13/96] =?UTF-8?q?=E5=A4=84=E7=90=86=E5=A4=A7=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E5=86=85=E5=AD=98=E6=BA=A2=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsEmployeeWrapper.java | 51 ++++++++++++------- 1 file changed, 33 insertions(+), 18 deletions(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index 46ade27fb..1350df88a 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -24,6 +24,7 @@ import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; +import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; @@ -137,6 +138,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service { /** * 获取员工发薪明细列表 + * * @param queryParam */ public Map salaryList(SalaryStatisticsEmployeeSalaryQueryParam queryParam) { @@ -147,7 +149,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service { // 获取发薪人员 PageInfo salaryAcctEmployeePageInfo = getSalaryStatisticsEmployeeService(user).listSalaryAcctEmp(queryParam); // 获取薪资核算结果 - SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult = getSalaryStatisticsEmployeeService(user).getDetailSalaryAcctResultByAcctEmp(salaryAcctEmployeePageInfo.getList()); + SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult = getSalaryStatisticsEmployeeService(user).getDetailSalaryAcctResultByAcctEmp(salaryAcctEmployeePageInfo.getList()); List> records = getSalaryStatisticsEmployeeService(user).listDetailPage(salaryStatisticsEmployeeDetailResult, null); Map countResultMap = Maps.newHashMap(); @@ -183,7 +185,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service { // 结果 if (queryParam.isExport()) { resultMap.put("columns", weaTableColumns); - resultMap.put("salaryItems",salaryStatisticsEmployeeDetailResult.getSalaryItemList()); + resultMap.put("salaryItems", salaryStatisticsEmployeeDetailResult.getSalaryItemList()); resultMap.put("countResult", countResultMap); } else { WeaTable table = new WeaTable(); @@ -205,6 +207,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service { /** * 获取员工发薪明细列表 + * * @param queryParam */ public Map salaryListSum(SalaryStatisticsEmployeeSalaryQueryParam queryParam) { @@ -215,25 +218,37 @@ public class SalaryStatisticsEmployeeWrapper extends Service { queryParam.setExport(true); // 获取发薪人员 PageInfo salaryAcctEmployeePageInfo = getSalaryStatisticsEmployeeService(user).listSalaryAcctEmp(queryParam); - // 获取薪资核算结果 - SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult = getSalaryStatisticsEmployeeService(user).getDetailSalaryAcctResultByAcctEmp(salaryAcctEmployeePageInfo.getList()); - List> records = getSalaryStatisticsEmployeeService(user).listDetailPage(salaryStatisticsEmployeeDetailResult, null); + List employeePOS = salaryAcctEmployeePageInfo.getList(); Map sumResultMap = Maps.newHashMap(); - if (CollectionUtils.isNotEmpty(records)) { - List salaryItems = salaryStatisticsEmployeeDetailResult.getSalaryItemList(); - for (SalaryItemPO item : salaryItems) { - BigDecimal sumBigDecimal = new BigDecimal(SalaryStatisticsReportBO.ZERO); - String itemKey = item.getId() + SalaryConstant.DYNAMIC_SUFFIX; - for (Map record : records) { - if (record.containsKey(itemKey)) { - if (Objects.nonNull(record.get(itemKey)) && StringUtils.isNotEmpty(record.get(itemKey).toString()) && NumberUtils.isCreatable(record.get(itemKey).toString())) { - sumBigDecimal = sumBigDecimal.add(new BigDecimal(record.get(itemKey).toString())); + + List> empParts = Lists.partition(employeePOS, 500); + + for (int i = 0; i < empParts.size(); i++) { + // 获取薪资核算结果 + SalaryStatisticsEmployeeDetailResultDTO salaryStatisticsEmployeeDetailResult = getSalaryStatisticsEmployeeService(user).getDetailSalaryAcctResultByAcctEmp(empParts.get(i)); + List> records = getSalaryStatisticsEmployeeService(user).listDetailPage(salaryStatisticsEmployeeDetailResult, null); + + if (CollectionUtils.isNotEmpty(records)) { + List salaryItems = salaryStatisticsEmployeeDetailResult.getSalaryItemList(); + for (SalaryItemPO item : salaryItems) { + BigDecimal sumBigDecimal = new BigDecimal(SalaryStatisticsReportBO.ZERO); + String itemKey = item.getId() + SalaryConstant.DYNAMIC_SUFFIX; + for (Map record : records) { + if (record.containsKey(itemKey)) { + if (Objects.nonNull(record.get(itemKey)) && StringUtils.isNotEmpty(record.get(itemKey).toString()) && NumberUtils.isCreatable(record.get(itemKey).toString())) { + sumBigDecimal = sumBigDecimal.add(new BigDecimal(record.get(itemKey).toString())); + } } } + Object o = sumResultMap.get(itemKey + "_n"); + if (o != null) { + sumBigDecimal = sumBigDecimal.add((BigDecimal) o); + } + sumResultMap.put(itemKey + "_n", sumBigDecimal); + // 薪资项目合计 + sumResultMap.put(itemKey, ReportDataUtil.thousandthConvert(sumBigDecimal.toString())); } - // 薪资项目合计 - sumResultMap.put(itemKey, ReportDataUtil.thousandthConvert(sumBigDecimal.toString())); } } resultMap.put("sumRow", sumResultMap); @@ -263,12 +278,12 @@ public class SalaryStatisticsEmployeeWrapper extends Service { // 合计 List sumRow = new ArrayList<>(); sumRow.add("总计"); - for (int i=1; i exportDetailList(SalaryStatisticsEmployeeDetailQueryParam queryParam) { From 1dd3439ce3133bff85d41c8b9c0bc196da0dcb5d Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 13 Jun 2024 13:59:43 +0800 Subject: [PATCH 14/96] =?UTF-8?q?=E7=A4=BE=E4=BF=9D=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E5=B0=8F=E6=95=B0=E4=BD=8D=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SIAccountServiceImpl.java | 51 +++++++++++++++++-- .../service/impl/SIBalanceServiceImpl.java | 4 +- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index 66273cc37..f95fb8244 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -3502,11 +3502,56 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { Map resultMap = new HashMap<>(); // resultMap.put("data", dataMap); // resultMap.put("items", addGroups); + + // 获取当前放方案信息 + InsuranceArchivesSocialSchemePO socialSchemePO = new InsuranceArchivesSocialSchemePO(); + InsuranceArchivesFundSchemePO fundSchemePO = new InsuranceArchivesFundSchemePO(); + InsuranceArchivesOtherSchemePO otherSchemePO = new InsuranceArchivesOtherSchemePO(); + List insuranceSchemeDetailPOS = new ArrayList<>(); List schemeIdList = new ArrayList<>(); - schemeIdList.add(insuranceAccountDetailPO.getSocialSchemeId()); - schemeIdList.add(insuranceAccountDetailPO.getFundSchemeId()); - schemeIdList.add(insuranceAccountDetailPO.getOtherSchemeId()); + if (insuranceAccountDetailPO.getSocialSchemeId() == null) { + List socialSchemePOList = getSocialSchemeMapper().getSocialByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(insuranceAccountDetailPO.getEmployeeId()) + .paymentOrganization(insuranceAccountDetailPO.getPaymentOrganization()) + .build()); + if (socialSchemePOList.size() > 0) { + encryptUtil.decryptList(socialSchemePOList, InsuranceArchivesSocialSchemePO.class); + socialSchemePO = socialSchemePOList.get(0); + } + schemeIdList.add(socialSchemePO.getSocialSchemeId()); + } else { + schemeIdList.add(insuranceAccountDetailPO.getSocialSchemeId()); + } + + if (insuranceAccountDetailPO.getFundSchemeId() == null) { + List fundSchemePOList = getFundSchemeMapper().getFundByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(insuranceAccountDetailPO.getEmployeeId()) + .paymentOrganization(insuranceAccountDetailPO.getPaymentOrganization()) + .build()); + if (fundSchemePOList.size() > 0) { + encryptUtil.decryptList(fundSchemePOList, InsuranceArchivesFundSchemePO.class); + fundSchemePO = fundSchemePOList.get(0); + } + schemeIdList.add(fundSchemePO.getFundSchemeId()); + } else { + schemeIdList.add(insuranceAccountDetailPO.getFundSchemeId()); + } + + if (insuranceAccountDetailPO.getOtherSchemeId() == null) { + List otherSchemePOList = getOtherSchemeMapper().getOtherByEmployeeIdAndPayOrg(InsuranceArchivesEmployeePO.builder() + .employeeId(insuranceAccountDetailPO.getEmployeeId()) + .paymentOrganization(insuranceAccountDetailPO.getPaymentOrganization()) + .build()); + if (otherSchemePOList.size() > 0) { + encryptUtil.decryptList(otherSchemePOList, InsuranceArchivesOtherSchemePO.class); + otherSchemePO = otherSchemePOList.get(0); + } + schemeIdList.add(otherSchemePO.getOtherSchemeId()); + } else { + schemeIdList.add(insuranceAccountDetailPO.getOtherSchemeId()); + } + schemeIdList = schemeIdList.stream().filter(schemeId -> schemeId != null).collect(Collectors.toList()); if (CollectionUtils.isNotEmpty(schemeIdList)) { insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().listBySchemeIds(schemeIdList); diff --git a/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java b/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java index 29464725d..b9ec0de27 100644 --- a/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java @@ -207,7 +207,7 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { Map fundMap = JSON.parseObject(fundSchemePO.getFundPaymentBaseString(), new HashMap().getClass()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(fundSchemePO.getFundSchemeId()); - List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().listBySchemeIds(Collections.singletonList(socialSchemePO.getSocialSchemeId())); + List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().listBySchemeIds(Collections.singletonList(fundSchemePO.getFundSchemeId())); Map schemeValidNumMap = SalaryEntityUtil.convert2Map(insuranceSchemeDetailPOS, po -> po.getInsuranceId() + "-" + po.getPaymentScope(), InsuranceSchemeDetailPO::getValidNum); fundMap.forEach((k, v) -> { String welfareTypeName = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "社保" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "公积金" : "企业年金及其它福利" ); @@ -243,7 +243,7 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { Map otherMap = JSON.parseObject(otherSchemePO.getOtherPaymentBaseString(), new HashMap().getClass()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(otherSchemePO.getOtherSchemeId()); - List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().listBySchemeIds(Collections.singletonList(socialSchemePO.getSocialSchemeId())); + List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().listBySchemeIds(Collections.singletonList(otherSchemePO.getOtherSchemeId())); Map schemeValidNumMap = SalaryEntityUtil.convert2Map(insuranceSchemeDetailPOS, po -> po.getInsuranceId() + "-" + po.getPaymentScope(), InsuranceSchemeDetailPO::getValidNum); otherMap.forEach((k, v) -> { From 64e34d6d085e2f2bb3fc7dcb8f94861a39f831dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 13 Jun 2024 17:46:37 +0800 Subject: [PATCH 15/96] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E9=A2=84?= =?UTF-8?q?=E8=A7=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryBill/param/SalaryPreviewParam.java | 32 +++ .../salary/service/SalaryBillService.java | 12 ++ .../salary/service/SalarySendService.java | 7 + .../service/impl/SalaryBillServiceImpl.java | 2 +- .../service/impl/SalarySendServiceImpl.java | 186 ++++++++++++++++++ .../salary/web/SalaryBillController.java | 15 ++ .../salary/wrapper/SalarySendWrapper.java | 4 + 7 files changed, 257 insertions(+), 1 deletion(-) create mode 100644 src/com/engine/salary/entity/salaryBill/param/SalaryPreviewParam.java diff --git a/src/com/engine/salary/entity/salaryBill/param/SalaryPreviewParam.java b/src/com/engine/salary/entity/salaryBill/param/SalaryPreviewParam.java new file mode 100644 index 000000000..8d48e5118 --- /dev/null +++ b/src/com/engine/salary/entity/salaryBill/param/SalaryPreviewParam.java @@ -0,0 +1,32 @@ +package com.engine.salary.entity.salaryBill.param; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 工资单预览参数 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryPreviewParam { + + /** + * 工资单id + */ + private Long salaryInfoId; + + /** + * 员工id + */ + private Long recipient; + +} diff --git a/src/com/engine/salary/service/SalaryBillService.java b/src/com/engine/salary/service/SalaryBillService.java index 530c3080e..4878df87b 100644 --- a/src/com/engine/salary/service/SalaryBillService.java +++ b/src/com/engine/salary/service/SalaryBillService.java @@ -1,7 +1,10 @@ package com.engine.salary.service; +import com.engine.salary.entity.salaryBill.dto.SalaryBillSendDTO; import com.engine.salary.entity.salaryBill.param.SalaryExportPdfParam; import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam; +import com.engine.salary.entity.salaryBill.po.SalarySendPO; +import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; import java.util.List; import java.util.Map; @@ -52,6 +55,15 @@ public interface SalaryBillService { String genPdfBeforeExport(SalaryExportPdfParam salaryExportPdfParam); + /** + * 构建发放参数 + * @param salarySend + * @param taxAgentName + * @param salaryTemplate + * @return + */ + SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, String taxAgentName, SalaryTemplatePO salaryTemplate); + /** * 工资单撤回 * diff --git a/src/com/engine/salary/service/SalarySendService.java b/src/com/engine/salary/service/SalarySendService.java index 72fc71423..4f570039b 100644 --- a/src/com/engine/salary/service/SalarySendService.java +++ b/src/com/engine/salary/service/SalarySendService.java @@ -218,4 +218,11 @@ public interface SalarySendService { List getByIds(List salarySendId); List listSome(SalarySendPO param); + + /** + * 工资单预览 + * @param param + * @return + */ + Map preview(SalaryPreviewParam param); } diff --git a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java index eaf9c0be1..060f15cb2 100644 --- a/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillServiceImpl.java @@ -337,7 +337,7 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService * @param salaryTemplate * @return */ - private SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, String taxAgentName, SalaryTemplatePO salaryTemplate) { + public SalaryBillSendDTO buildSendParams(SalarySendPO salarySend, String taxAgentName, SalaryTemplatePO salaryTemplate) { // 发送通道 Set sendChannels = SalaryBillBO.buildSendChannels(salaryTemplate); if (CollectionUtils.isEmpty(sendChannels)) { diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index efd438444..5e61fec2d 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1834,4 +1834,190 @@ public class SalarySendServiceImpl extends Service implements SalarySendService public List listSome(SalarySendPO param) { return getSalarySendMapper().listSome(param); } + + @Override + public Map preview(SalaryPreviewParam param) { + Long salaryInfoId = param.getSalaryInfoId(); + Long recipient = param.getRecipient(); + + if (salaryInfoId == null) { + throw new SalaryRunTimeException("工资单记录不存在!"); + } + SalarySendInfoPO po = new SalarySendInfoPO(); + po.setDeleteType(0); + po.setId(salaryInfoId); + + List salarySendInfos = salarySendInfoMapper.listSome(po); + if (CollectionUtils.isEmpty(salarySendInfos)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "工资单信息不存在")); + } + + SalarySendInfoPO salarySendInfo = salarySendInfos.get(0); + + // 获取默认模板信息 + SalarySendPO salarySendPO = getSalarySendMapper().getById(salarySendInfo.getSalarySendId()); + if (salarySendPO == null) { + throw new SalaryRunTimeException("工资单不存在"); + } + + + SalarySendPO sendPo = new SalarySendPO(); + sendPo.setDeleteType(0); + sendPo.setId(salarySendInfo.getSalarySendId()); + List salarySends = mapper.listSome(sendPo); + if (CollectionUtils.isEmpty(salarySends)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100512, "工资单发放不存在")); + } + SalarySendPO salarySend = salarySends.get(0); + Date salaryMonth = salarySend.getSalaryMonth(); + + + // 获取模板 + SalarySobPO salarySob = getSalarySobService(user).getById(salarySend.getSalarySobId()); + TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salarySendInfo.getTaxAgentId()); + List salaryTemplates = getSalaryTemplateService(user).getDefaultTemplates(Arrays.asList(salarySend.getSalarySobId(), salarySob.getId())); + if (CollectionUtils.isEmpty(salaryTemplates)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100518, "没有默认模板,无法发送")); + } + SalaryBillSendDTO salaryBillSendDTO = getSalaryBillService(user).buildSendParams(sendPo, taxAgentPO.getName(), salaryTemplates.get(0)); + + SalaryTemplatePO salaryTemplate = salaryBillSendDTO.getSalaryTemplate(); + if (salaryTemplate==null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100513, "没有默认模板,无法查看")); + } + + // 判断是否是补发 + boolean isReplenish = NumberUtils.INTEGER_ONE.equals(salarySendInfo.getSalaryAcctType()); + + SalaryAcctResultPO acctPo = new SalaryAcctResultPO(); + acctPo.setDeleteType(0); + acctPo.setSalaryAcctRecordId(salarySendInfo.getSalaryAcctRecordId()); + acctPo.setEmployeeId(recipient); + List salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(acctPo); + encryptUtil.decryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); + + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salarySendInfo.getSalaryAcctRecordId()); + if (salaryAcctRecordPO == null) { + throw new SalaryRunTimeException("薪资核算记录不存在!"); + } + List> salaryAcctResultS = null; + if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), NumberUtils.INTEGER_ONE) && !isReplenish) { + // 该记录回算过,并且获取的不是回算后的工资单 + salaryAcctResultS = salaryAcctResultPOS.stream().map(m -> { + Map map = new LinkedHashMap<>(); + map.put("salaryItemId", m.getSalaryItemId()); + map.put("resultValue", m.getOriginResultValue()); + return map; + }).collect(Collectors.toList()); + } else { + salaryAcctResultS = salaryAcctResultPOS.stream().map(m -> { + Map map = new LinkedHashMap<>(); + map.put("salaryItemId", m.getSalaryItemId()); + map.put("resultValue", m.getResultValue()); + return map; + }).collect(Collectors.toList()); + } + + + Map map = new LinkedHashMap<>(); + map.put("tenantName", ""); + map.put("sendTime", SalaryDateUtil.getFormatLocalDateTime(salarySendInfo.getSendTime())); + List listDTOS = JSONArray.parseArray(isReplenish ? salaryTemplate.getReplenishSalaryItemSetting() : salaryTemplate.getSalaryItemSetting(), SalaryTemplateSalaryItemSetListDTO.class); + Optional optionalEmployeeInformation = listDTOS.stream().filter(e -> SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).findFirst(); + SalaryTemplateSalaryItemSetListDTO employeeInformation = optionalEmployeeInformation.orElse(null); + List itemSetListDTOS = listDTOS.stream().filter(e -> !SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID.equals(e.getGroupId())).collect(Collectors.toList()); + List> finalSalaryAcctResultS = salaryAcctResultS; + itemSetListDTOS.stream().forEach(item -> { + item.getItems() + .forEach(e -> { + if (CollectionUtils.isEmpty(finalSalaryAcctResultS)) { + e.setSalaryItemValue(""); + } else { + Object o = finalSalaryAcctResultS.stream() + .filter(f -> f.get("salaryItemId") != null && String.valueOf(f.get("salaryItemId")).equals(e.getSalaryItemId())).findFirst() + .orElse(new HashMap<>()) + .get("resultValue"); + e.setSalaryItemValue(o == null ? "" : (String) o); + } + }); + }); + + + /** + * 过滤空 + */ + if (Objects.equals(1, salaryTemplate.getSalaryItemNullStatus())) { + for (SalaryTemplateSalaryItemSetListDTO itemSetListDTO : itemSetListDTOS) { + List items = itemSetListDTO.getItems(); + List collect = items.stream().filter(item -> StringUtils.isNotBlank(item.getSalaryItemValue())).collect(Collectors.toList()); + itemSetListDTO.setItems(collect); + } + } + + /** + * 过滤0 + */ + if (Objects.equals(1, salaryTemplate.getSalaryItemZeroStatus())) { + for (SalaryTemplateSalaryItemSetListDTO itemSetListDTO : itemSetListDTOS) { + List items = itemSetListDTO.getItems(); + List collect = items.stream() + .filter(item -> SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue()) == null + || BigDecimal.ZERO.compareTo(SalaryEntityUtil.string2BigDecimal(item.getSalaryItemValue())) != 0) + .collect(Collectors.toList()); + itemSetListDTO.setItems(collect); + } + } + + DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salarySendInfo.getEmployeeId()); + buildEmployeeInfo(employeeInformation, simpleEmployee, taxAgentPO.getName(), SalaryAcctResultBO.buildEmployeeFieldName()); + map.put("employeeInformation", employeeInformation); + map.put("salaryGroups", itemSetListDTOS); + + salaryTemplate.setTheme(getBillTitle(salaryTemplate.getTheme(), salaryMonth, recipient)); + // 工资单水印文本型动态变量 == 处理 + handleSalaryWatermark(salaryTemplate, salarySendInfo, recipient); + map.put("salaryTemplate", salaryTemplate); + map.put("salaryAcctResult", salaryAcctResultS); + + // 工资单确认按钮 + if (NumberUtils.compare(salaryTemplate.getAckFeedbackStatus(), 1) == 0) { + // 开启了工资单确认 + Integer ackStatus = salarySendInfo.getBillConfirmStatus(); + if (ackStatus == null || ackStatus != BillConfimStatusEnum.CONFIRMED.getValue()) { + map.put("showAck", "1"); + } else { + map.put("showAck", "0"); + } + map.put("sendEmployeeId", salarySendInfo.getSendEmployeeId()); + } else { + map.put("showAck", "0"); + } + + + // 工资单反馈 + if (NumberUtils.compare(salaryTemplate.getFeedbackStatus(), 1) == 0) { + // 开启了工资单反馈按钮 + Integer confirmStatus = salarySendInfo.getBillConfirmStatus(); + map.put("showFeedback", "1"); + // 除非确认状态为已确认否则可以一直反馈 + if (NumberUtils.compare(salaryTemplate.getAckFeedbackStatus(), 1) == 0 && confirmStatus != null && confirmStatus == BillConfimStatusEnum.CONFIRMED.getValue()) { + map.put("showFeedback", "0"); + } + map.put("sendEmployeeId", salarySendInfo.getSendEmployeeId()); + } else { + map.put("showFeedback", "0"); + } + + // 记录查看日志 + String targetName = taxAgentPO.getName() + "-" + SalaryDateUtil.getFormatYearMonth(salarySendInfo.getSalaryMonth()); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salarySendInfo.getId())); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.READ.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "预览工资单") + ": " + targetName + " " + salaryInfoId); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "预览工资单") + ": " + targetName); + SalaryElogConfig.mySalaryBillLoggerTemplate.write(loggerContext); + return map; + } } diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index c94be9966..10c6d9c31 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -323,6 +323,20 @@ public class SalaryBillController { return new ResponseResult(user).run(getSalarySendWrapper(user)::getBaseInfo, id); } + /** + * 预览工资单 + * + * @param param + * @return + */ + @POST + @Path("/preview") + @Produces(MediaType.APPLICATION_JSON) + public String preview(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryPreviewParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalarySendWrapper(user)::preview, param); + } + /** * 工资单发放信息列表的高级搜索 * @@ -563,6 +577,7 @@ public class SalaryBillController { /** * 下载pdf前先进行校验 生成 + * * @param request * @param response * @return diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 210c69501..725931b80 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -219,6 +219,10 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy return getSalarySendService(user).getBaseInfo(id); } + public Map preview(SalaryPreviewParam param) { + return getSalarySendService(user).preview(param); + } + /** * 工资单发放信息列表的高级搜索 * From 063322564855b1c77bc4170894449d49a466e34d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 14 Jun 2024 13:34:21 +0800 Subject: [PATCH 16/96] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=81=87=E6=9C=9F?= =?UTF-8?q?=E4=BD=99=E9=A2=9D=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../attend/service/impl/RemoteAttend4SalaryServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java b/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java index 6aeab513e..99553f193 100644 --- a/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java +++ b/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java @@ -18,6 +18,7 @@ import org.apache.commons.lang3.math.NumberUtils; import weaver.general.BaseBean; import weaver.general.Util; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -172,7 +173,7 @@ public class RemoteAttend4SalaryServiceImpl extends Service implements RemoteAtt public List> getBalanceOfLeaveColumns() { Map paramsMap = new HashMap(); paramsMap.put("dateScope", "6"); - paramsMap.put("selectedYear", 2023); + paramsMap.put("selectedYear", LocalDate.now().getYear()); paramsMap.put("dataScope", "3"); paramsMap.put("resourceId", 92); paramsMap.put("status", "9"); From 5b7533e908edaf9adfb7ba87ba9509b4215bf80e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 14 Jun 2024 13:46:59 +0800 Subject: [PATCH 17/96] =?UTF-8?q?=E5=90=8C=E6=AD=A5=E5=81=87=E6=9C=9F?= =?UTF-8?q?=E4=BD=99=E9=A2=9D=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../attend/service/impl/RemoteAttend4SalaryServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java b/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java index 6aeab513e..99553f193 100644 --- a/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java +++ b/src/com/engine/salary/remote/attend/service/impl/RemoteAttend4SalaryServiceImpl.java @@ -18,6 +18,7 @@ import org.apache.commons.lang3.math.NumberUtils; import weaver.general.BaseBean; import weaver.general.Util; +import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; @@ -172,7 +173,7 @@ public class RemoteAttend4SalaryServiceImpl extends Service implements RemoteAtt public List> getBalanceOfLeaveColumns() { Map paramsMap = new HashMap(); paramsMap.put("dateScope", "6"); - paramsMap.put("selectedYear", 2023); + paramsMap.put("selectedYear", LocalDate.now().getYear()); paramsMap.put("dataScope", "3"); paramsMap.put("resourceId", 92); paramsMap.put("status", "9"); From 6648e4140ed3cd224221782fae25f9ce0ca66886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 17 Jun 2024 10:26:17 +0800 Subject: [PATCH 18/96] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=AE=97=E7=A8=8Esql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202406170103.sql | 14 ++++++++++++++ resource/sqlupgrade/GS/sql202406170103.sql | 14 ++++++++++++++ resource/sqlupgrade/JC/sql202406170103.sql | 14 ++++++++++++++ resource/sqlupgrade/Mysql/sql202406170103.sql | 13 +++++++++++++ resource/sqlupgrade/Oracle/sql202406170103.sql | 13 +++++++++++++ resource/sqlupgrade/PG/sql202406170103.sql | 13 +++++++++++++ resource/sqlupgrade/SQLServer/sql202406170103.sql | 14 ++++++++++++++ resource/sqlupgrade/ST/sql202406170103.sql | 14 ++++++++++++++ 8 files changed, 109 insertions(+) create mode 100644 resource/sqlupgrade/DM/sql202406170103.sql create mode 100644 resource/sqlupgrade/GS/sql202406170103.sql create mode 100644 resource/sqlupgrade/JC/sql202406170103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202406170103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202406170103.sql create mode 100644 resource/sqlupgrade/PG/sql202406170103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202406170103.sql create mode 100644 resource/sqlupgrade/ST/sql202406170103.sql diff --git a/resource/sqlupgrade/DM/sql202406170103.sql b/resource/sqlupgrade/DM/sql202406170103.sql new file mode 100644 index 000000000..159a2e240 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202406170103.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_sob_tax_rule ( +id NUMBER(38,0) primary key NOT NULL, +salary_sob_id NUMBER(38,0) NULL , +income_category varchar2(100) , +tax_index varchar2(100) , +salary_item_id NUMBER(38,0) NULL , +creator NUMBER(38,0) DEFAULT 0, +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate, +delete_type number DEFAULT 0, +tenant_key varchar2(10) DEFAULT '' +); +/ + diff --git a/resource/sqlupgrade/GS/sql202406170103.sql b/resource/sqlupgrade/GS/sql202406170103.sql new file mode 100644 index 000000000..159a2e240 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202406170103.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_sob_tax_rule ( +id NUMBER(38,0) primary key NOT NULL, +salary_sob_id NUMBER(38,0) NULL , +income_category varchar2(100) , +tax_index varchar2(100) , +salary_item_id NUMBER(38,0) NULL , +creator NUMBER(38,0) DEFAULT 0, +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate, +delete_type number DEFAULT 0, +tenant_key varchar2(10) DEFAULT '' +); +/ + diff --git a/resource/sqlupgrade/JC/sql202406170103.sql b/resource/sqlupgrade/JC/sql202406170103.sql new file mode 100644 index 000000000..159a2e240 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202406170103.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_sob_tax_rule ( +id NUMBER(38,0) primary key NOT NULL, +salary_sob_id NUMBER(38,0) NULL , +income_category varchar2(100) , +tax_index varchar2(100) , +salary_item_id NUMBER(38,0) NULL , +creator NUMBER(38,0) DEFAULT 0, +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate, +delete_type number DEFAULT 0, +tenant_key varchar2(10) DEFAULT '' +); +/ + diff --git a/resource/sqlupgrade/Mysql/sql202406170103.sql b/resource/sqlupgrade/Mysql/sql202406170103.sql new file mode 100644 index 000000000..be09a90f9 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202406170103.sql @@ -0,0 +1,13 @@ +CREATE TABLE hrsa_sob_tax_rule ( + id bigint(0) NOT NULL, + create_time datetime(0) , + update_time datetime(0) , + creator bigint(0) , + delete_type int(0) , + tenant_key varchar(10), + salary_sob_id bigint(0), + income_category varchar(100) , + tax_index varchar(100) , + salary_item_id bigint(0) , + PRIMARY KEY (id) +) ; diff --git a/resource/sqlupgrade/Oracle/sql202406170103.sql b/resource/sqlupgrade/Oracle/sql202406170103.sql new file mode 100644 index 000000000..1abe248d6 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202406170103.sql @@ -0,0 +1,13 @@ +CREATE TABLE hrsa_sob_tax_rule ( +id NUMBER(38,0) primary key NOT NULL, +salary_sob_id NUMBER(38,0) NULL , +income_category varchar2(100) , +tax_index varchar2(100) , +salary_item_id NUMBER(38,0) NULL , +creator NUMBER(38,0) DEFAULT 0, +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate, +delete_type number DEFAULT 0, +tenant_key varchar2(10) DEFAULT '' +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202406170103.sql b/resource/sqlupgrade/PG/sql202406170103.sql new file mode 100644 index 000000000..848173fc6 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202406170103.sql @@ -0,0 +1,13 @@ +CREATE TABLE hrsa_sob_tax_rule ( + id bigserial NOT NULL, + salary_sob_id bigint , + income_category varchar(100) , + tax_index varchar(100) , + salary_item_id bigint , + creator bigint NOT NULL DEFAULT 0 , + create_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + update_time timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP , + delete_type int NOT NULL DEFAULT 0 , + tenant_key varchar(10) NOT NULL DEFAULT '' , + PRIMARY KEY (id) +); \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202406170103.sql b/resource/sqlupgrade/SQLServer/sql202406170103.sql new file mode 100644 index 000000000..c84a374f4 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202406170103.sql @@ -0,0 +1,14 @@ +create table hrsa_sob_tax_rule +( + id bigint primary key , + create_time datetime, + update_time datetime, + creator bigint, + delete_type int, + tenant_key nvarchar(10), + salary_sob_id bigint, + income_category varchar(100), + tax_index varchar(100), + salary_item_id bigint +) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202406170103.sql b/resource/sqlupgrade/ST/sql202406170103.sql new file mode 100644 index 000000000..159a2e240 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202406170103.sql @@ -0,0 +1,14 @@ +CREATE TABLE hrsa_sob_tax_rule ( +id NUMBER(38,0) primary key NOT NULL, +salary_sob_id NUMBER(38,0) NULL , +income_category varchar2(100) , +tax_index varchar2(100) , +salary_item_id NUMBER(38,0) NULL , +creator NUMBER(38,0) DEFAULT 0, +create_time DATE DEFAULT sysdate, +update_time DATE DEFAULT sysdate, +delete_type number DEFAULT 0, +tenant_key varchar2(10) DEFAULT '' +); +/ + From af8cce85257bb672a55a5435601b2f196f7963bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 17 Jun 2024 17:03:48 +0800 Subject: [PATCH 19/96] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=AE=97=E7=A8=8E?= =?UTF-8?q?=EF=BC=8C=E4=B8=AA=E7=A8=8E=E5=AF=B9=E5=BA=94=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ynIndividualIncomeTaxFeedbackResponse.java | 85 ++++++++++++------- 1 file changed, 54 insertions(+), 31 deletions(-) diff --git a/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java index 6801b8767..d4d1c0b53 100644 --- a/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java +++ b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java @@ -1,6 +1,5 @@ package com.engine.salary.remote.tax.response.calculate; -import com.engine.salary.annotation.TableTitle; import com.engine.salary.annotation.TaxField; import com.engine.salary.entity.taxpayment.response.BaseResponse; import lombok.Data; @@ -343,46 +342,40 @@ public class GetASynIndividualIncomeTaxFeedbackResponse extends BaseResponse { * 应扣缴税额 必填:否 正常工资薪金返回否 */ private BigDecimal yingkjse; - /** - * 税率 必填:否 - */ - private BigDecimal sl; - /** - * 速算扣除数 必填:否 - */ - private BigDecimal sskcs; /** * 所得项目名称 必填:是 正常工资薪金;全年一次性奖金收入;稿酬所得;劳务报酬 */ private String sdxm; - /** - * 应补退税额 必填:否 应补退税额=累计应扣缴税额-累计已缴税额 - */ - @TaxField(name = "应补退税额", taxIndex = "ybtse") - private BigDecimal ybtse; + /** * 累计收入额 必填:否 */ + @TaxField(name = "累计收入额", taxIndex = "ljsre") private BigDecimal ljsre; /** * 累计免税收入额 必填:否 */ + @TaxField(name = "累计免税收入额", taxIndex = "ljmssd") private BigDecimal ljmssd; /** * 累计专项扣除额 必填:否 三险一金合计 */ + @TaxField(name = "累计专项扣除额", taxIndex = "ljzxkce") private BigDecimal ljzxkce; /** * 累计专项附加扣除额 必填:否 专项附加合计 */ + @TaxField(name = "累计专项附加扣除额", taxIndex = "ljzxfjkce") private BigDecimal ljzxfjkce; /** * 累计其他扣除额 必填:否 */ + @TaxField(name = "累计其他扣除额", taxIndex = "ljqtkce") private BigDecimal ljqtkce; /** * 累计减免税额 必填:否 */ + @TaxField(name = "累计减免税额", taxIndex = "ljjmse") private BigDecimal ljjmse; /** * 累计减除费用额 必填:否 正常工资薪金累计减除费用 必填:否 对应保险营销员、证券经纪人累计费用 @@ -404,31 +397,17 @@ public class GetASynIndividualIncomeTaxFeedbackResponse extends BaseResponse { * 月减除费用 必填:否 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 */ private BigDecimal yjcfy; - /** - * 累计应纳税所得额 必填:否 - */ - @TableTitle(title = "累计应纳税所得额", dataIndex = "ljynssde", key = "ljynssde") - private BigDecimal ljynssde; - /** - * 累计应纳税额 必填:否 - */ - private BigDecimal ljynse; - /** - * 累计应扣缴税额 必填:否 累计应扣缴税额 = 累计应纳税额 - 累计减免税额 - */ - private BigDecimal ljyingkjse; - /** - * 累计已缴税额 必填:否 - */ - private BigDecimal ljykjse; /** * 累计子女教育支出 必填:否 */ + @TaxField(name = "累计子女教育", taxIndex = "ljznjyzc") private BigDecimal ljznjyzc; /** * 累计继续教育支出 必填:否 */ + @TaxField(name = "累计继续教育", taxIndex = "ljjxjyzc") private BigDecimal ljjxjyzc; + /** * 累计非学历继续教育支持 必填:否 */ @@ -440,26 +419,32 @@ public class GetASynIndividualIncomeTaxFeedbackResponse extends BaseResponse { /** * 累计住房租金支出 必填:否 */ + @TaxField(name = "累计住房租金", taxIndex = "ljzfzjzc") private BigDecimal ljzfzjzc; /** * 累计房屋贷款支出 必填:否 */ + @TaxField(name = "累计房屋贷款", taxIndex = "ljzfdklxzc") private BigDecimal ljzfdklxzc; /** * 累计赡养老人支出 必填:否 */ + @TaxField(name = "累计赡养老人", taxIndex = "ljsylrzc") private BigDecimal ljsylrzc; /** * 累计3岁以下婴幼儿照护支出 必填:否 */ + @TaxField(name = "累计3岁以下婴幼儿照护", taxIndex = "ljyyezhzc") private BigDecimal ljyyezhzc; /** * 累计准予扣除的捐赠额 必填:否 */ + @TaxField(name = "累计准予扣除的捐赠额", taxIndex = "ljzykcjze") private BigDecimal ljzykcjze; /** * 累计个人养老金 必填:否 */ + @TaxField(name = "累计个人养老金", taxIndex = "ljgrylj") private BigDecimal ljgrylj; /** * 累计个人养老金校验码 必填:否 @@ -495,6 +480,44 @@ public class GetASynIndividualIncomeTaxFeedbackResponse extends BaseResponse { */ private BigDecimal njcfy; + /** + * 累计应纳税所得额 必填:否 + */ + @TaxField(name = "累计应纳税所得额", taxIndex = "ljynssde") + private BigDecimal ljynssde; + + /** + * 税率 必填:否 + */ + @TaxField(name = "税率", taxIndex = "sl") + private BigDecimal sl; + /** + * 速算扣除数 必填:否 + */ + @TaxField(name = "速算扣除数", taxIndex = "sskcs ") + private BigDecimal sskcs; + + /** + * 累计应纳税额 必填:否 + */ + @TaxField(name = "累计应纳税额", taxIndex = "ljynse") + private BigDecimal ljynse; + /** + * 累计应扣缴税额 必填:否 累计应扣缴税额 = 累计应纳税额 - 累计减免税额 + */ + @TaxField(name = "累计应扣缴税额", taxIndex = "ljyingkjse") + private BigDecimal ljyingkjse; + /** + * 累计已缴税额 必填:否 + */ + @TaxField(name = "累计已缴税额", taxIndex = "ljykjse") + private BigDecimal ljykjse; + + /** + * 应补退税额 必填:否 应补退税额=累计应扣缴税额-累计已缴税额 + */ + @TaxField(name = "应补退税额", taxIndex = "ybtse") + private BigDecimal ybtse; } } From 216c4cee84ef7d436f5a1e9694475b8c03e59566 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 17 Jun 2024 17:58:01 +0800 Subject: [PATCH 20/96] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BCtemp?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryitem/bo/SalaryItemBO.java | 1 + .../salaryitem/dto/SalaryItemSobListDTO.java | 3 +++ .../salarysob/bo/SalarySobItemAggregateBO.java | 1 + .../entity/salarysob/dto/SalarySobItemDTO.java | 3 +++ .../mapper/salarysob/SalarySobItemMapper.xml | 15 +++++++++------ 5 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java index 49c1a9300..ab2e04bcd 100644 --- a/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java +++ b/src/com/engine/salary/entity/salaryitem/bo/SalaryItemBO.java @@ -171,6 +171,7 @@ public class SalaryItemBO { .sortedIndex(salaryItemPO.getSortedIndex()) .description(salaryItemPO.getDescription()) .salaryItemType(salaryItemPO.getUseInEmployeeSalary() == 0 ? "薪资项目" : "档案字段") + .defaultValue(salaryItemPO.getDefaultValue()) .build(); } ).collect(Collectors.toList()); diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java index 10aaa12bc..f90b6ff41 100644 --- a/src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryItemSobListDTO.java @@ -113,6 +113,9 @@ public class SalaryItemSobListDTO { //排序 private Integer sortedIndex; + // 默认值 + private String defaultValue; + @SalaryTableColumn(text = "操作", width = "20%", column = "operate") private String operate; diff --git a/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java b/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java index 511e946c7..b1a76a4a4 100644 --- a/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java +++ b/src/com/engine/salary/entity/salarysob/bo/SalarySobItemAggregateBO.java @@ -144,6 +144,7 @@ public class SalarySobItemAggregateBO { .canEdit(openFormulaForcedEditing || Objects.equals(salaryItemPO.getCanEdit(), 1)) .canDelete(openFormulaForcedEditing || salaryItemPO.getCanDelete() == null || Objects.equals(salaryItemPO.getCanDelete(), 1)) .width(salaryItemPO.getWidth()) + .defaultValue(salaryItemPO.getDefaultValue()) .build()); } } diff --git a/src/com/engine/salary/entity/salarysob/dto/SalarySobItemDTO.java b/src/com/engine/salary/entity/salarysob/dto/SalarySobItemDTO.java index 8b23d6446..9429f1522 100644 --- a/src/com/engine/salary/entity/salarysob/dto/SalarySobItemDTO.java +++ b/src/com/engine/salary/entity/salarysob/dto/SalarySobItemDTO.java @@ -112,4 +112,7 @@ public class SalarySobItemDTO { // 显示宽度 private Integer width; + + // 默认值 + private String defaultValue; } diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml index 98fe7f070..7f0267fc1 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml +++ b/src/com/engine/salary/mapper/salarysob/SalarySobItemMapper.xml @@ -386,7 +386,7 @@ INSERT INTO hrsa_salary_sob_item(salary_sob_id, salary_item_id, salary_sob_item_group_id, formula_id, - sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,default_value) VALUES ( @@ -404,13 +404,14 @@ #{item.canDelete}, #{item.roundingMode}, #{item.pattern}, - #{item.valueType} + #{item.valueType}, + #{item.defaultValue} ) INSERT INTO hrsa_salary_sob_item( salary_sob_id, salary_item_id, salary_sob_item_group_id, formula_id, - sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,default_value) select @@ -428,14 +429,15 @@ #{item.canDelete,jdbcType=INTEGER}, #{item.roundingMode,jdbcType=INTEGER}, #{item.pattern,jdbcType=INTEGER}, - #{item.valueType,jdbcType=INTEGER} + #{item.valueType,jdbcType=INTEGER}, + #{item.defaultValue,jdbcType=VARCHAR} from dual INSERT INTO hrsa_salary_sob_item( salary_sob_id, salary_item_id, salary_sob_item_group_id, formula_id, - sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type) + sorted_index, description, create_time, update_time, creator, delete_type, tenant_key,can_delete,rounding_mode,pattern,value_type,default_value) VALUES ( #{item.salarySobId}, @@ -452,7 +454,8 @@ #{item.canDelete}, #{item.roundingMode}, #{item.pattern}, - #{item.valueType} + #{item.valueType}, + #{item.defaultValue} ) From 0c0c754a9d94fd77e3baefcdece1979719e45107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 18 Jun 2024 11:01:58 +0800 Subject: [PATCH 21/96] =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=BF=AB=E7=85=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202406180103.sql | 27 ++++++ resource/sqlupgrade/DM/sql202406180403.sql | 70 +++++++++++++++ resource/sqlupgrade/GS/sql202406180103.sql | 27 ++++++ resource/sqlupgrade/GS/sql202406180403.sql | 70 +++++++++++++++ resource/sqlupgrade/JC/sql202406180103.sql | 27 ++++++ resource/sqlupgrade/JC/sql202406180403.sql | 70 +++++++++++++++ resource/sqlupgrade/Mysql/sql202406180103.sql | 10 +++ resource/sqlupgrade/Mysql/sql202406180403.sql | 29 +++++++ .../sqlupgrade/Oracle/sql202406180103.sql | 18 ++++ .../sqlupgrade/Oracle/sql202406180403.sql | 69 +++++++++++++++ resource/sqlupgrade/PG/sql202406180103.sql | 9 ++ resource/sqlupgrade/PG/sql202406180403.sql | 68 +++++++++++++++ .../sqlupgrade/SQLServer/sql202406180103.sql | 11 +++ .../sqlupgrade/SQLServer/sql202406180403.sql | 31 +++++++ resource/sqlupgrade/ST/sql202406180103.sql | 27 ++++++ resource/sqlupgrade/ST/sql202406180403.sql | 70 +++++++++++++++ .../salaryacct/bo/SalaryAcctEmployeeBO.java | 9 ++ .../salaryacct/bo/SalaryAcctResultBO.java | 25 +++++- .../salaryacct/po/SalaryAcctEmployeePO.java | 30 +++++++ .../mapper/datacollection/EmployMapper.xml | 24 ++--- .../salaryacct/SalaryAcctEmployeeMapper.xml | 87 +++++++++++++++++-- .../impl/SalaryEmployeeServiceImpl.java | 4 +- 22 files changed, 784 insertions(+), 28 deletions(-) create mode 100644 resource/sqlupgrade/DM/sql202406180103.sql create mode 100644 resource/sqlupgrade/DM/sql202406180403.sql create mode 100644 resource/sqlupgrade/GS/sql202406180103.sql create mode 100644 resource/sqlupgrade/GS/sql202406180403.sql create mode 100644 resource/sqlupgrade/JC/sql202406180103.sql create mode 100644 resource/sqlupgrade/JC/sql202406180403.sql create mode 100644 resource/sqlupgrade/Mysql/sql202406180103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202406180403.sql create mode 100644 resource/sqlupgrade/Oracle/sql202406180103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202406180403.sql create mode 100644 resource/sqlupgrade/PG/sql202406180103.sql create mode 100644 resource/sqlupgrade/PG/sql202406180403.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202406180103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202406180403.sql create mode 100644 resource/sqlupgrade/ST/sql202406180103.sql create mode 100644 resource/sqlupgrade/ST/sql202406180403.sql diff --git a/resource/sqlupgrade/DM/sql202406180103.sql b/resource/sqlupgrade/DM/sql202406180103.sql new file mode 100644 index 000000000..0f51111b9 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202406180103.sql @@ -0,0 +1,27 @@ +alter table hrsa_salary_acct_emp add subcompany_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add subcompany_id NUMBER null; +/ + +alter table hrsa_salary_acct_emp add department_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add department_id NUMBER null; +/ + +alter table hrsa_salary_acct_emp add jobtitle_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add jobtitle_id NUMBER NULL; +/ + +alter table hrsa_salary_acct_emp add jobcall varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add jobcall_id NUMBER NULL; +/ + +alter table hrsa_salary_acct_emp add status varchar2(200) NULL; +/ + diff --git a/resource/sqlupgrade/DM/sql202406180403.sql b/resource/sqlupgrade/DM/sql202406180403.sql new file mode 100644 index 000000000..5e12f2f77 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202406180403.sql @@ -0,0 +1,70 @@ +update hrsa_salary_acct_emp a +set +( + department_id , + department_name, + subcompany_id , + subcompany_name, + jobtitle_id , + jobtitle_name , + jobcall_id, + jobcall, + status +) + = +( + select + b.departmentId, + b.departmentName, + b.subcompanyid, + b.subcompanyName, + b.jobtitleId, + b.jobtitleName, + b.jobcallId, + b.jobcall, + b.status from + ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId +) +where a.delete_type=0 and + exists (select 1 from ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId + ); +/ + diff --git a/resource/sqlupgrade/GS/sql202406180103.sql b/resource/sqlupgrade/GS/sql202406180103.sql new file mode 100644 index 000000000..0f51111b9 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202406180103.sql @@ -0,0 +1,27 @@ +alter table hrsa_salary_acct_emp add subcompany_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add subcompany_id NUMBER null; +/ + +alter table hrsa_salary_acct_emp add department_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add department_id NUMBER null; +/ + +alter table hrsa_salary_acct_emp add jobtitle_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add jobtitle_id NUMBER NULL; +/ + +alter table hrsa_salary_acct_emp add jobcall varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add jobcall_id NUMBER NULL; +/ + +alter table hrsa_salary_acct_emp add status varchar2(200) NULL; +/ + diff --git a/resource/sqlupgrade/GS/sql202406180403.sql b/resource/sqlupgrade/GS/sql202406180403.sql new file mode 100644 index 000000000..5e12f2f77 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202406180403.sql @@ -0,0 +1,70 @@ +update hrsa_salary_acct_emp a +set +( + department_id , + department_name, + subcompany_id , + subcompany_name, + jobtitle_id , + jobtitle_name , + jobcall_id, + jobcall, + status +) + = +( + select + b.departmentId, + b.departmentName, + b.subcompanyid, + b.subcompanyName, + b.jobtitleId, + b.jobtitleName, + b.jobcallId, + b.jobcall, + b.status from + ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId +) +where a.delete_type=0 and + exists (select 1 from ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId + ); +/ + diff --git a/resource/sqlupgrade/JC/sql202406180103.sql b/resource/sqlupgrade/JC/sql202406180103.sql new file mode 100644 index 000000000..0f51111b9 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202406180103.sql @@ -0,0 +1,27 @@ +alter table hrsa_salary_acct_emp add subcompany_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add subcompany_id NUMBER null; +/ + +alter table hrsa_salary_acct_emp add department_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add department_id NUMBER null; +/ + +alter table hrsa_salary_acct_emp add jobtitle_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add jobtitle_id NUMBER NULL; +/ + +alter table hrsa_salary_acct_emp add jobcall varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add jobcall_id NUMBER NULL; +/ + +alter table hrsa_salary_acct_emp add status varchar2(200) NULL; +/ + diff --git a/resource/sqlupgrade/JC/sql202406180403.sql b/resource/sqlupgrade/JC/sql202406180403.sql new file mode 100644 index 000000000..5e12f2f77 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202406180403.sql @@ -0,0 +1,70 @@ +update hrsa_salary_acct_emp a +set +( + department_id , + department_name, + subcompany_id , + subcompany_name, + jobtitle_id , + jobtitle_name , + jobcall_id, + jobcall, + status +) + = +( + select + b.departmentId, + b.departmentName, + b.subcompanyid, + b.subcompanyName, + b.jobtitleId, + b.jobtitleName, + b.jobcallId, + b.jobcall, + b.status from + ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId +) +where a.delete_type=0 and + exists (select 1 from ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId + ); +/ + diff --git a/resource/sqlupgrade/Mysql/sql202406180103.sql b/resource/sqlupgrade/Mysql/sql202406180103.sql new file mode 100644 index 000000000..4217d5d31 --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202406180103.sql @@ -0,0 +1,10 @@ +ALTER TABLE hrsa_salary_acct_emp +ADD COLUMN subcompany_name varchar(200) , +ADD COLUMN subcompany_id bigint(0), +ADD COLUMN department_name varchar(200), +ADD COLUMN department_id bigint(0), +ADD COLUMN jobtitle_name varchar(200) , +ADD COLUMN jobtitle_id bigint(0) , +ADD COLUMN jobcall varchar(200), +ADD COLUMN jobcall_id bigint(0), +ADD COLUMN status varchar(200); \ No newline at end of file diff --git a/resource/sqlupgrade/Mysql/sql202406180403.sql b/resource/sqlupgrade/Mysql/sql202406180403.sql new file mode 100644 index 000000000..c81607e2b --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202406180403.sql @@ -0,0 +1,29 @@ +update hrsa_salary_acct_emp a INNER JOIN ( + select e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) as b +on a.employee_id = b.employeeId + set a.department_id = b.departmentId, + a.department_name = b.departmentName, + a.subcompany_id = b.subcompanyid, + a.subcompany_name = b.subcompanyName, + a.jobtitle_id = b.jobtitleId, + a.jobtitle_name = b.jobtitleName, + a.jobcall_id = b.jobcallId, + a.jobcall = b.jobcall, + a.status = b.status +where a.delete_type=0; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202406180103.sql b/resource/sqlupgrade/Oracle/sql202406180103.sql new file mode 100644 index 000000000..ee99ea754 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202406180103.sql @@ -0,0 +1,18 @@ +alter table hrsa_salary_acct_emp add subcompany_name varchar2(200) NULL +/ +alter table hrsa_salary_acct_emp add subcompany_id NUMBER null +/ +alter table hrsa_salary_acct_emp add department_name varchar2(200) NULL +/ +alter table hrsa_salary_acct_emp add department_id NUMBER null +/ +alter table hrsa_salary_acct_emp add jobtitle_name varchar2(200) NULL +/ +alter table hrsa_salary_acct_emp add jobtitle_id NUMBER NULL +/ +alter table hrsa_salary_acct_emp add jobcall varchar2(200) NULL +/ +alter table hrsa_salary_acct_emp add jobcall_id NUMBER NULL +/ +alter table hrsa_salary_acct_emp add status varchar2(200) NULL +/ \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202406180403.sql b/resource/sqlupgrade/Oracle/sql202406180403.sql new file mode 100644 index 000000000..246694499 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202406180403.sql @@ -0,0 +1,69 @@ +update hrsa_salary_acct_emp a +set +( + department_id , + department_name, + subcompany_id , + subcompany_name, + jobtitle_id , + jobtitle_name , + jobcall_id, + jobcall, + status +) + = +( + select + b.departmentId, + b.departmentName, + b.subcompanyid, + b.subcompanyName, + b.jobtitleId, + b.jobtitleName, + b.jobcallId, + b.jobcall, + b.status from + ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId +) +where a.delete_type=0 and + exists (select 1 from ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId + ) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202406180103.sql b/resource/sqlupgrade/PG/sql202406180103.sql new file mode 100644 index 000000000..59a96d245 --- /dev/null +++ b/resource/sqlupgrade/PG/sql202406180103.sql @@ -0,0 +1,9 @@ +alter table hrsa_salary_acct_emp add subcompany_name varchar(200); +alter table hrsa_salary_acct_emp add subcompany_id bigint; +alter table hrsa_salary_acct_emp add department_name varchar(200); +alter table hrsa_salary_acct_emp add department_id bigint; +alter table hrsa_salary_acct_emp add jobtitle_name varchar(200); +alter table hrsa_salary_acct_emp add jobtitle_id bigint; +alter table hrsa_salary_acct_emp add jobcall varchar(200); +alter table hrsa_salary_acct_emp add jobcall_id bigint; +alter table hrsa_salary_acct_emp add status varchar(200); \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202406180403.sql b/resource/sqlupgrade/PG/sql202406180403.sql new file mode 100644 index 000000000..a15174c5f --- /dev/null +++ b/resource/sqlupgrade/PG/sql202406180403.sql @@ -0,0 +1,68 @@ +update hrsa_salary_acct_emp a +set +( + department_id , + department_name, + subcompany_id , + subcompany_name, + jobtitle_id , + jobtitle_name , + jobcall_id, + jobcall, + status +) + = +( + select + b.departmentId, + b.departmentName, + b.subcompanyid, + b.subcompanyName, + b.jobtitleId, + b.jobtitleName, + b.jobcallId, + b.jobcall, + b.status from + ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId +) +where a.delete_type=0 and + exists (select 1 from ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId + ); \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202406180103.sql b/resource/sqlupgrade/SQLServer/sql202406180103.sql new file mode 100644 index 000000000..87973812c --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202406180103.sql @@ -0,0 +1,11 @@ +ALTER TABLE hrsa_salary_acct_emp +ADD subcompany_name varchar(200), +subcompany_id bigint, +department_name varchar(200), +department_id bigint, +jobtitle_name varchar(200), +jobtitle_id bigint, +jobcall varchar(200), +jobcall_id bigint, +status varchar(200) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202406180403.sql b/resource/sqlupgrade/SQLServer/sql202406180403.sql new file mode 100644 index 000000000..02b5785e9 --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202406180403.sql @@ -0,0 +1,31 @@ +UPDATE hrsa_salary_acct_emp +set department_id = b.departmentId, + department_name = b.departmentName, + subcompany_id = b.subcompanyid, + subcompany_name = b.subcompanyName, + jobtitle_id = b.jobtitleId, + jobtitle_name = b.jobtitleName, + jobcall_id = b.jobcallId, + jobcall = b.jobcall, + status = b.status +FROM hrsa_salary_acct_emp a INNER JOIN ( + select e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) as b +on a.employee_id = b.employeeId +WHERE a.delete_type=0 +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202406180103.sql b/resource/sqlupgrade/ST/sql202406180103.sql new file mode 100644 index 000000000..0f51111b9 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202406180103.sql @@ -0,0 +1,27 @@ +alter table hrsa_salary_acct_emp add subcompany_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add subcompany_id NUMBER null; +/ + +alter table hrsa_salary_acct_emp add department_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add department_id NUMBER null; +/ + +alter table hrsa_salary_acct_emp add jobtitle_name varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add jobtitle_id NUMBER NULL; +/ + +alter table hrsa_salary_acct_emp add jobcall varchar2(200) NULL; +/ + +alter table hrsa_salary_acct_emp add jobcall_id NUMBER NULL; +/ + +alter table hrsa_salary_acct_emp add status varchar2(200) NULL; +/ + diff --git a/resource/sqlupgrade/ST/sql202406180403.sql b/resource/sqlupgrade/ST/sql202406180403.sql new file mode 100644 index 000000000..5e12f2f77 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202406180403.sql @@ -0,0 +1,70 @@ +update hrsa_salary_acct_emp a +set +( + department_id , + department_name, + subcompany_id , + subcompany_name, + jobtitle_id , + jobtitle_name , + jobcall_id, + jobcall, + status +) + = +( + select + b.departmentId, + b.departmentName, + b.subcompanyid, + b.subcompanyName, + b.jobtitleId, + b.jobtitleName, + b.jobcallId, + b.jobcall, + b.status from + ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId +) +where a.delete_type=0 and + exists (select 1 from ( + select + e.id as employeeId, + d.departmentname as departmentName, + d.id as departmentId, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + c.jobtitlename as jobtitleName, + c.id as jobtitleId, + e.status as status, + e.jobcall as jobcallId, + job.name as jobcall + from hrmresource e + left join hrmdepartment d on e.departmentid = d.id + left join hrmjobtitles c on e.jobtitle = c.id + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id + left join hrmjobcall job on e.jobcall=job.id + where e.status not in (7) and (e.accounttype is null or e.accounttype = 0) + ) b + where a.employee_id = b.employeeId + ); +/ + diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java index 39499174c..dbbe56104 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java @@ -147,6 +147,15 @@ public class SalaryAcctEmployeeBO { .employeeId(emp.getEmployeeId()) .employeeType(emp.isExtEmp() ? 1 : 0) .taxAgentId(taxAgentId) + .departmentId(emp.getDepartmentId()) + .departmentName(emp.getDepartmentName()) + .jobcall(emp.getJobcall()) + .jobcallId(emp.getJobcallId()) + .jobtitleId(emp.getJobtitleId()) + .jobtitleName(emp.getJobtitleName()) + .subcompanyId(emp.getSubcompanyid()) + .subcompanyName(emp.getSubcompanyName()) + .status(emp.getStatus()) .creator(employeeId) .createTime(now) .updateTime(now) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 121092602..d68ab0330 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -20,6 +20,7 @@ import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO; import com.engine.salary.entity.salarysob.po.*; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.enums.SalaryValueTypeEnum; +import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.salaryaccounting.LockStatusEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.util.SalaryEntityUtil; @@ -267,6 +268,7 @@ public class SalaryAcctResultBO { if (CollectionUtils.isEmpty(salaryAcctEmployees)) { return Collections.emptyList(); } + SalaryI18nUtil.i18nList(salaryAcctEmployees); Map employeeMap = SalaryEntityUtil.convert2Map(simpleEmployees, DataCollectionEmployee::getEmployeeId); Map> acctResultMap = SalaryEntityUtil.group2Map(salaryAccountingResults, SalaryAcctResultPO::getEmployeeId); Map taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getId, TaxAgentPO::getName); @@ -278,12 +280,31 @@ public class SalaryAcctResultBO { // 薪资项目的字段类型(前端依据这个判断是否需要展示千分位) Map dataTypeMap = SalaryEntityUtil.convert2Map(salaryItems, salaryItemPO -> salaryItemPO.getId() + DATA_TYPE_SUFFIX, SalaryItemPO::getDataType); map.putAll(dataTypeMap); - // TODO ?看一下如果不是回算这会不会有回算的东西? // 人员信息字段的值 Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(e.getEmployeeId())); for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) { - map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); // 员工信息字段的字段类型 + if ("departmentName".equals(salarySobEmpField.getFieldCode())) { + map.put("departmentName", e.getDepartmentName()); + } else if ("departmentId".equals(salarySobEmpField.getFieldCode())) { + map.put("departmentId", e.getDepartmentId()); + } else if ("subcompanyName".equals(salarySobEmpField.getFieldCode())) { + map.put("subcompanyName", e.getSubcompanyName()); + } else if ("jobcall".equals(salarySobEmpField.getFieldCode())) { + map.put("jobcall", e.getJobcall()); + } else if ("jobcallId".equals(salarySobEmpField.getFieldCode())) { + map.put("jobcallId", e.getJobcallId()); + } else if ("jobtitleName".equals(salarySobEmpField.getFieldCode())) { + map.put("jobtitleName", e.getJobtitleName()); + } else if ("jobtitleId".equals(salarySobEmpField.getFieldCode())) { + map.put("jobtitleId", e.getJobtitleId()); + } else if ("status".equals(salarySobEmpField.getFieldCode())) { + map.put("status", e.getStatus()); + } else if ("statusName".equals(salarySobEmpField.getFieldCode())) { + map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(e.getStatus()))); + } else { + map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); + } map.put(salarySobEmpField.getFieldCode() + DATA_TYPE_SUFFIX, SalaryDataTypeEnum.STRING.getValue()); } // 主键id diff --git a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java index cc67bfe05..d86941b8b 100644 --- a/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java +++ b/src/com/engine/salary/entity/salaryacct/po/SalaryAcctEmployeePO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.salaryacct.po; import com.engine.hrmelog.annotation.ElogTransform; +import com.engine.salary.annotation.I18n; import com.engine.salary.annotation.SalaryFormulaVar; import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum; import lombok.AllArgsConstructor; @@ -112,6 +113,35 @@ public class SalaryAcctEmployeePO { @ElogTransform(name = "锁定状态") private Integer lockStatus; + /** + * 分部 + */ + @I18n + private String subcompanyName; + private Long subcompanyId; + /** + * 部门 + */ + @I18n + private String departmentName; + private Long departmentId; + /** + * 岗位 + */ + @I18n + private String jobtitleName; + private Long jobtitleId; + /** + * 职称 + */ + @I18n + private String jobcall; + private Long jobcallId; + /** + * 状态 + */ + private String status; + //--------条件---------- //主键id集合 diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index db4af3bf7..4beb41bfc 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -99,10 +99,16 @@ c.jobtitlename as jobtitleName, c.id as jobtitleId, e.companystartdate as companystartdate, - e.mobile as mobile + e.mobile as mobile, + sc.SUBCOMPANYNAME as subcompanyName, + sc.id as subcompanyid, + job.id as jobcallId, + job.name as jobcall from hrmresource e + left join HrmSubCompany sc on e.SUBCOMPANYID1=sc.id left join hrmdepartment d on e.departmentid = d.id left join hrmjobtitles c on e.jobtitle = c.id + left join hrmjobcall job on e.jobcall=job.id WHERE e.status not in (7) and (e.accounttype is null or e.accounttype = 0) AND ( 1=2 @@ -139,14 +145,6 @@ #{status} - - - - - - - - ) ) @@ -187,14 +185,6 @@ #{status} - - - - - - - - ) ) diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index cc1dc0e33..76cb2dd0d 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -16,6 +16,15 @@ + + + + + + + + + @@ -54,7 +72,16 @@ INSERT INTO hrsa_salary_acct_emp( salary_acct_record_id, salary_sob_id, employee_id, tax_agent_id, salary_month, - creator, create_time, update_time, delete_type, tenant_key,employee_type,lock_status) + creator, create_time, update_time, delete_type, tenant_key,employee_type,lock_status, + subcompany_name, + subcompany_id, + department_name, + department_id, + jobtitle_name, + jobtitle_id, + jobcall, + jobcall_id, + status) VALUES ( @@ -69,15 +96,32 @@ #{emp.deleteType}, #{emp.tenantKey}, #{emp.employeeType}, - #{emp.lockStatus} + #{emp.lockStatus}, + #{emp.subcompanyName}, + #{emp.subcompanyId}, + #{emp.departmentName}, + #{emp.departmentId}, + #{emp.jobtitleName}, + #{emp.jobtitleId}, + #{emp.jobcall}, + #{emp.jobcallId}, + #{emp.status} ) INSERT INTO hrsa_salary_acct_emp( salary_acct_record_id, salary_sob_id, employee_id, tax_agent_id, salary_month, - creator, create_time, update_time, delete_type, tenant_key,employee_type,lock_status) - + creator, create_time, update_time, delete_type, tenant_key,employee_type,lock_status, + subcompany_name, + subcompany_id, + department_name, + department_id, + jobtitle_name, + jobtitle_id, + jobcall, + jobcall_id, + status) select #{emp.salaryAcctRecordId,jdbcType=DOUBLE}, @@ -92,6 +136,15 @@ #{emp.tenantKey,jdbcType=VARCHAR}, #{emp.employeeType,jdbcType=INTEGER}, #{emp.lockStatus,jdbcType=INTEGER} + #{emp.subcompanyName,jdbcType=VARCHAR}, + #{emp.subcompanyId,jdbcType=DOUBLE}, + #{emp.departmentName,jdbcType=VARCHAR}, + #{emp.departmentId,jdbcType=DOUBLE}, + #{emp.jobtitleName,jdbcType=VARCHAR}, + #{emp.jobtitleId,jdbcType=DOUBLE}, + #{emp.jobcall,jdbcType=VARCHAR}, + #{emp.jobcallId,jdbcType=DOUBLE}, + #{emp.status,jdbcType=VARCHAR} from dual @@ -99,7 +152,16 @@ INSERT INTO hrsa_salary_acct_emp( salary_acct_record_id, salary_sob_id, employee_id, tax_agent_id, salary_month, - creator, create_time, update_time, delete_type, tenant_key,employee_type,lock_status) + creator, create_time, update_time, delete_type, tenant_key,employee_type,lock_status, + subcompany_name, + subcompany_id, + department_name, + department_id, + jobtitle_name, + jobtitle_id, + jobcall, + jobcall_id, + status) VALUES ( #{emp.salaryAcctRecordId}, @@ -113,7 +175,16 @@ #{emp.deleteType}, #{emp.tenantKey}, #{emp.employeeType}, - #{emp.lockStatus} + #{emp.lockStatus}, + #{emp.subcompanyName}, + #{emp.subcompanyId}, + #{emp.departmentName}, + #{emp.departmentId}, + #{emp.jobtitleName}, + #{emp.jobtitleId}, + #{emp.jobcall}, + #{emp.jobcallId}, + #{emp.status} ) @@ -1274,7 +1345,7 @@ UPDATE hrsa_salary_acct_emp SET lock_status = #{lockStatus} WHERE delete_type = 0 - AND salary_acct_record_id =#{recordId} + AND salary_acct_record_id = #{recordId} diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index 29635dc60..10c025dce 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -328,7 +328,9 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee // 从hrmresource和hrmresourcevirtual可能获取到重复人员数据,需要根据人员id去重 result = result.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparingLong(DataCollectionEmployee::getEmployeeId))), ArrayList::new)); - return SalaryI18nUtil.i18nList(result); + //部门分部等信息备份到核算人员表中,不进行多语言处理 + // return SalaryI18nUtil.i18nList(result); + return result; } /** From 81c768b7b9a0ecb2d49562d107139b4b438eabf5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 18 Jun 2024 15:28:31 +0800 Subject: [PATCH 22/96] =?UTF-8?q?=E4=BA=BA=E5=91=98=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=BF=AB=E7=85=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctEmployeeBO.java | 25 +++++- .../salaryacct/bo/SalaryAcctResultBO.java | 76 +++++++++++++------ .../param/SalaryAcctResultQueryParam.java | 5 ++ .../salaryacct/SalaryAcctEmployeeMapper.xml | 18 +++++ .../impl/SalaryAcctEmployeeServiceImpl.java | 4 +- .../impl/SalaryAcctExcelServiceImpl.java | 2 + .../impl/SalaryAcctResultServiceImpl.java | 2 +- .../SalaryComparisonResultServiceImpl.java | 4 +- .../service/impl/SalarySendServiceImpl.java | 30 ++++---- 9 files changed, 123 insertions(+), 43 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java index dbbe56104..60058a59c 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctEmployeeBO.java @@ -15,6 +15,7 @@ import com.google.common.collect.Sets; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import weaver.general.Util; import java.util.*; import java.util.stream.Collectors; @@ -121,9 +122,9 @@ public class SalaryAcctEmployeeBO { } public static List convert2Employee(Collection employee, - SalaryAcctRecordPO salaryAcctRecord, - List salaryArchiveTaxAgentData, - Long employeeId) { + SalaryAcctRecordPO salaryAcctRecord, + List salaryArchiveTaxAgentData, + Long employeeId) { if (CollectionUtils.isEmpty(employee)) { return Collections.emptyList(); } @@ -168,6 +169,24 @@ public class SalaryAcctEmployeeBO { return resultList; } + /** + * 核算人员信息替换实时信息 + * @param simpleEmployee + * @param acctEmployeePO + */ + public static void copyAcctEmp(DataCollectionEmployee simpleEmployee, SalaryAcctEmployeePO acctEmployeePO) { + simpleEmployee.setDepartmentId(acctEmployeePO.getDepartmentId()); + simpleEmployee.setDepartmentName(acctEmployeePO.getDepartmentName()); + simpleEmployee.setSubcompanyid(acctEmployeePO.getSubcompanyId()); + simpleEmployee.setSubcompanyName(acctEmployeePO.getSubcompanyName()); + simpleEmployee.setJobcallId(acctEmployeePO.getJobcallId()); + simpleEmployee.setJobcall(acctEmployeePO.getJobcall()); + simpleEmployee.setJobtitleId(acctEmployeePO.getJobtitleId()); + simpleEmployee.setJobtitleName(acctEmployeePO.getJobtitleName()); + simpleEmployee.setStatusName(UserStatusEnum.getDefaultLabelByValue(new Integer(Util.null2s(acctEmployeePO.getStatus(), "1")))); + simpleEmployee.setStatus(acctEmployeePO.getStatus()); + } + public static List> partitionByEmployeeId(List salaryAcctEmployees) { if (CollectionUtils.isEmpty(salaryAcctEmployees)) { diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index d68ab0330..4989bd7f2 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -32,6 +32,7 @@ import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.beans.BeanUtils; +import weaver.general.Util; import java.lang.reflect.Field; import java.util.*; @@ -252,7 +253,7 @@ public class SalaryAcctResultBO { * @param taxAgents * @param consolidatedTaxSalaryAcctEmpIds * @param customBackCalcParameters - * @param isBackCalc + * @param dynamicEmpInfo * @return */ public static List> buildTableData(List salaryItems, @@ -264,7 +265,7 @@ public class SalaryAcctResultBO { Set consolidatedTaxSalaryAcctEmpIds, Map customParameters, Map customBackCalcParameters, - boolean isBackCalc) { + boolean dynamicEmpInfo) { if (CollectionUtils.isEmpty(salaryAcctEmployees)) { return Collections.emptyList(); } @@ -284,26 +285,30 @@ public class SalaryAcctResultBO { Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(e.getEmployeeId())); for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) { // 员工信息字段的字段类型 - if ("departmentName".equals(salarySobEmpField.getFieldCode())) { - map.put("departmentName", e.getDepartmentName()); - } else if ("departmentId".equals(salarySobEmpField.getFieldCode())) { - map.put("departmentId", e.getDepartmentId()); - } else if ("subcompanyName".equals(salarySobEmpField.getFieldCode())) { - map.put("subcompanyName", e.getSubcompanyName()); - } else if ("jobcall".equals(salarySobEmpField.getFieldCode())) { - map.put("jobcall", e.getJobcall()); - } else if ("jobcallId".equals(salarySobEmpField.getFieldCode())) { - map.put("jobcallId", e.getJobcallId()); - } else if ("jobtitleName".equals(salarySobEmpField.getFieldCode())) { - map.put("jobtitleName", e.getJobtitleName()); - } else if ("jobtitleId".equals(salarySobEmpField.getFieldCode())) { - map.put("jobtitleId", e.getJobtitleId()); - } else if ("status".equals(salarySobEmpField.getFieldCode())) { - map.put("status", e.getStatus()); - } else if ("statusName".equals(salarySobEmpField.getFieldCode())) { - map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(e.getStatus()))); - } else { + if (dynamicEmpInfo) { map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); + } else { + if ("departmentName".equals(salarySobEmpField.getFieldCode())) { + map.put("departmentName", e.getDepartmentName()); + } else if ("departmentId".equals(salarySobEmpField.getFieldCode())) { + map.put("departmentId", e.getDepartmentId()); + } else if ("subcompanyName".equals(salarySobEmpField.getFieldCode())) { + map.put("subcompanyName", e.getSubcompanyName()); + } else if ("jobcall".equals(salarySobEmpField.getFieldCode())) { + map.put("jobcall", e.getJobcall()); + } else if ("jobcallId".equals(salarySobEmpField.getFieldCode())) { + map.put("jobcallId", e.getJobcallId()); + } else if ("jobtitleName".equals(salarySobEmpField.getFieldCode())) { + map.put("jobtitleName", e.getJobtitleName()); + } else if ("jobtitleId".equals(salarySobEmpField.getFieldCode())) { + map.put("jobtitleId", e.getJobtitleId()); + } else if ("status".equals(salarySobEmpField.getFieldCode())) { + map.put("status", e.getStatus()); + } else if ("statusName".equals(salarySobEmpField.getFieldCode())) { + map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(e.getStatus()))); + } else { + map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); + } } map.put(salarySobEmpField.getFieldCode() + DATA_TYPE_SUFFIX, SalaryDataTypeEnum.STRING.getValue()); } @@ -349,7 +354,8 @@ public class SalaryAcctResultBO { List taxAgents, Map customParameters, Set consolidatedTaxSalaryAcctEmpIds, - Set includeSalaryItemIds) { + Set includeSalaryItemIds, + boolean dynamicEmpInfo) { if (CollectionUtils.isEmpty(simpleEmployees)) { return Collections.emptyList(); } @@ -365,8 +371,32 @@ public class SalaryAcctResultBO { // 员工信息字段的值 Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(salaryAcctEmployee.getEmployeeId())); for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) { - map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); // 员工信息字段的字段类型 + if (dynamicEmpInfo) { + map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); + } else { + if ("departmentName".equals(salarySobEmpField.getFieldCode())) { + map.put("departmentName", salaryAcctEmployee.getDepartmentName()); + } else if ("departmentId".equals(salarySobEmpField.getFieldCode())) { + map.put("departmentId", salaryAcctEmployee.getDepartmentId()); + } else if ("subcompanyName".equals(salarySobEmpField.getFieldCode())) { + map.put("subcompanyName", salaryAcctEmployee.getSubcompanyName()); + } else if ("jobcall".equals(salarySobEmpField.getFieldCode())) { + map.put("jobcall", salaryAcctEmployee.getJobcall()); + } else if ("jobcallId".equals(salarySobEmpField.getFieldCode())) { + map.put("jobcallId", salaryAcctEmployee.getJobcallId()); + } else if ("jobtitleName".equals(salarySobEmpField.getFieldCode())) { + map.put("jobtitleName", salaryAcctEmployee.getJobtitleName()); + } else if ("jobtitleId".equals(salarySobEmpField.getFieldCode())) { + map.put("jobtitleId", salaryAcctEmployee.getJobtitleId()); + } else if ("status".equals(salarySobEmpField.getFieldCode())) { + map.put("status", salaryAcctEmployee.getStatus()); + } else if ("statusName".equals(salarySobEmpField.getFieldCode())) { + map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(Util.null2s(salaryAcctEmployee.getStatus(), "1")))); + } else { + map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); + } + } map.put(salarySobEmpField.getFieldCode() + DATA_TYPE_SUFFIX, SalaryDataTypeEnum.STRING.getValue()); } // 系统值 diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java index 8ebe19131..5f5749ac7 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultQueryParam.java @@ -65,6 +65,11 @@ public class SalaryAcctResultQueryParam extends BaseQueryParam { //薪资项目id private Collection salaryItemIds; + /** + * 是否需要实时人员信息 + */ + private boolean dynamicEmpInfo; + //其他条件 private List otherConditions; diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index 76cb2dd0d..fd451cda5 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -1221,6 +1221,15 @@ + + + + + + + + + @@ -1240,6 +1249,15 @@ , t.tenant_key , t.employee_type , t.lock_status + , t.subcompany_name + , t.subcompany_id + , t.department_name + , t.department_id + , t.jobtitle_name + , t.jobtitle_id + , t.jobcall + , t.jobcall_id + , t.status diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 86ee45d37..984c5f100 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -112,7 +112,9 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct @Override public SalaryAcctEmployeePO getById(Long id) { - return getSalaryAcctEmployeeMapper().getById(id); + SalaryAcctEmployeePO po = getSalaryAcctEmployeeMapper().getById(id); + SalaryI18nUtil.i18n(po); + return po; } @Override diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index d21fe8d56..bab6f297d 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -389,6 +389,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // List headerList = new ArrayList<>(weaTableColumns); List headerList = new ArrayList<>(finalWeaTableColumns); // 查询薪资核算结果 + queryParam.setDynamicEmpInfo(true); List> resultMapList = getSalaryAcctResultService(user).listByParam(queryParam); @@ -757,6 +758,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc rows.add(headerList); if (param.getImportType() != null && param.getImportType().equals("true")) { // 需要导出现有数据,查询薪资核算结果 + param.setDynamicEmpInfo(true); List> resultMapList = getSalaryAcctResultService(user).listByParam(param); for (Map map : resultMapList) { List row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size()); diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index a1c7b9b90..1c59cceb4 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -496,7 +496,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe }); // 转换成薪资核算结果列表 - return SalaryAcctResultBO.buildTableData(salaryItemPOS, salarySobEmpFieldPOS, simpleEmployees, salaryAcctEmployeePOS, salaryAcctResultPOS, taxAgentPOS, salaryAcctEmployeeIds4ConsolidatedTax, customParameters, customBackCalcParameters, isBackCalc); + return SalaryAcctResultBO.buildTableData(salaryItemPOS, salarySobEmpFieldPOS, simpleEmployees, salaryAcctEmployeePOS, salaryAcctResultPOS, taxAgentPOS, salaryAcctEmployeeIds4ConsolidatedTax, customParameters, customBackCalcParameters, queryParam.isDynamicEmpInfo()); } diff --git a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java index 688eba134..2fd26a4b3 100644 --- a/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryComparisonResultServiceImpl.java @@ -160,7 +160,7 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary // 查询薪资核算所用薪资账套的薪资项目副本 List salarySobItemPOS = salaryAcctConfig.getSalarySobItems(); // 过滤在账套中隐藏的薪资项目 - salarySobItemPOS = salarySobItemPOS.stream().filter(po -> po.getItemHide()==null || po.getItemHide() == 0).collect(Collectors.toList()); + salarySobItemPOS = salarySobItemPOS.stream().filter(po -> po.getItemHide() == null || po.getItemHide() == 0).collect(Collectors.toList()); // 查询公式详情 Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); @@ -230,7 +230,7 @@ public class SalaryComparisonResultServiceImpl extends Service implements Salary Set includeSalaryItemIds = Sets.newHashSetWithExpectedSize(salaryItemPOS.size()); // 转换成薪资核算线下对比结果 List> resultMapList = SalaryAcctResultBO.buildComparisonTableData(salaryItemPOS, salarySobEmpFieldPOS, simpleEmployees, - salaryAcctEmployeePOS, salaryAcctResultPOS, excelAcctResultPOS, taxAgentPOS, customParameters, salaryAcctEmployeeIds4ConsolidatedTax, includeSalaryItemIds); + salaryAcctEmployeePOS, salaryAcctResultPOS, excelAcctResultPOS, taxAgentPOS, customParameters, salaryAcctEmployeeIds4ConsolidatedTax, includeSalaryItemIds, queryParam.isDynamicEmpInfo()); // 系统值和线下值一致的人员 if (queryParam.isOnlyDiffEmployee()) { // 过滤系统值和线下值一致的薪资核算人员 diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 5e61fec2d..be430e0a4 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.collection.CollUtil; import cn.hutool.core.lang.Validator; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; @@ -25,6 +26,7 @@ import com.engine.salary.entity.salaryBill.param.*; import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctFormulaBO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctResultBO; import com.engine.salary.entity.salaryacct.param.SalaryAcctResultQueryParam; @@ -564,13 +566,10 @@ public class SalarySendServiceImpl extends Service implements SalarySendService // } // 获取薪资项目数据 - - - SalaryAcctResultPO acctPo = new SalaryAcctResultPO(); - acctPo.setDeleteType(0); - acctPo.setSalaryAcctRecordId(salarySendInfo.getSalaryAcctRecordId()); - acctPo.setEmployeeId(currentEmployeeId); - List salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(acctPo); + List salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordId(salarySendInfo.getSalaryAcctRecordId()).employeeId(currentEmployeeId).build()); + if (CollUtil.isEmpty(salaryAcctResultPOS)) { + throw new SalaryRunTimeException("薪资核算结果不存在!"); + } encryptUtil.decryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salarySendInfo.getSalaryAcctRecordId()); @@ -647,6 +646,8 @@ public class SalarySendServiceImpl extends Service implements SalarySendService TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salarySendInfo.getTaxAgentId()); DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salarySendInfo.getEmployeeId()); + SalaryAcctEmployeePO acctEmployeePO = getSalaryAcctEmployeeService(user).getById(salaryAcctResultPOS.get(0).getSalaryAcctEmpId()); + SalaryAcctEmployeeBO.copyAcctEmp(simpleEmployee, acctEmployeePO); buildEmployeeInfo(employeeInformation, simpleEmployee, taxAgentPO.getName(), SalaryAcctResultBO.buildEmployeeFieldName()); map.put("employeeInformation", employeeInformation); map.put("salaryGroups", itemSetListDTOS); @@ -700,6 +701,8 @@ public class SalarySendServiceImpl extends Service implements SalarySendService return map; } + + private Date getLimitMonth() { //工资单时效性 salaryBillViewingLimitSetting salaryBillViewingLimitSetting = getSalaryBillBaseSetService(user).getSalaryBillViewingLimitSetting(); @@ -941,7 +944,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService .jobtitleName(simpleEmployee.getJobtitleName()) .jobtitleId(simpleEmployee.getJobtitleId()) .status(simpleEmployee.getStatus() == null ? "" : simpleEmployee.getStatus()) - .statusName(simpleEmployee.getStatus() == null ? "" : UserStatusEnum.parseByValue(new Integer(simpleEmployee.getStatus())).getDefaultLabel()) + .statusName(simpleEmployee.getStatus() == null ? "" : UserStatusEnum.parseByValue(new Integer(Util.null2s(simpleEmployee.getStatus(),"1"))).getDefaultLabel()) .telephone(StringUtils.isEmpty(simpleEmployee.getTelephone()) ? "" : simpleEmployee.getTelephone()) .username(StringUtils.isEmpty(simpleEmployee.getUsername()) ? "" : simpleEmployee.getUsername()) .workcode(StringUtils.isEmpty(simpleEmployee.getWorkcode()) ? "" : simpleEmployee.getWorkcode()) @@ -1889,11 +1892,10 @@ public class SalarySendServiceImpl extends Service implements SalarySendService // 判断是否是补发 boolean isReplenish = NumberUtils.INTEGER_ONE.equals(salarySendInfo.getSalaryAcctType()); - SalaryAcctResultPO acctPo = new SalaryAcctResultPO(); - acctPo.setDeleteType(0); - acctPo.setSalaryAcctRecordId(salarySendInfo.getSalaryAcctRecordId()); - acctPo.setEmployeeId(recipient); - List salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(acctPo); + List salaryAcctResultPOS = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctRecordId(salarySendInfo.getSalaryAcctRecordId()).employeeId(recipient).build()); + if (CollUtil.isEmpty(salaryAcctResultPOS)) { + throw new SalaryRunTimeException("薪资核算结果不存在!"); + } encryptUtil.decryptList(salaryAcctResultPOS, SalaryAcctResultPO.class); SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salarySendInfo.getSalaryAcctRecordId()); @@ -1969,6 +1971,8 @@ public class SalarySendServiceImpl extends Service implements SalarySendService } DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(salarySendInfo.getEmployeeId()); + SalaryAcctEmployeePO acctEmployeePO = getSalaryAcctEmployeeService(user).getById(salaryAcctResultPOS.get(0).getSalaryAcctEmpId()); + SalaryAcctEmployeeBO.copyAcctEmp(simpleEmployee, acctEmployeePO); buildEmployeeInfo(employeeInformation, simpleEmployee, taxAgentPO.getName(), SalaryAcctResultBO.buildEmployeeFieldName()); map.put("employeeInformation", employeeInformation); map.put("salaryGroups", itemSetListDTOS); From d52e1460018d00b86942d1e314259293edb47bb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 19 Jun 2024 09:53:46 +0800 Subject: [PATCH 23/96] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=AE=97=E7=A8=8E?= =?UTF-8?q?=E6=97=B6=E6=A0=A1=E9=AA=8C=E4=BA=BA=E5=91=98=E6=98=AF=E5=90=A6?= =?UTF-8?q?=E5=B7=B2=E6=8A=A5=E9=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/AbnormalEmployeeListDTO.java | 37 +++++++ .../param/AbnormalEmployeeListQueryParam.java | 39 +++++++ .../salarysob/dto/SalarySobCycleDTO.java | 4 + .../enums/salarysob/IncomeCategoryEnum.java | 104 +++++++++++++++--- .../salaryacct/SalaryAcctEmployeeMapper.java | 6 + .../salaryacct/SalaryAcctEmployeeMapper.xml | 42 ++++++- ...ynIndividualIncomeTaxFeedbackResponse.java | 2 +- .../service/SalaryAcctEmployeeService.java | 11 ++ .../impl/SalaryAcctEmployeeServiceImpl.java | 29 ++++- .../impl/SalaryAcctRecordServiceImpl.java | 14 +-- .../impl/SalaryCalcTaxServiceImpl.java | 16 ++- .../salary/web/SalaryAcctController.java | 11 ++ .../wrapper/SalaryAcctEmployeeWrapper.java | 11 ++ 13 files changed, 295 insertions(+), 31 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryacct/dto/AbnormalEmployeeListDTO.java create mode 100644 src/com/engine/salary/entity/salaryacct/param/AbnormalEmployeeListQueryParam.java diff --git a/src/com/engine/salary/entity/salaryacct/dto/AbnormalEmployeeListDTO.java b/src/com/engine/salary/entity/salaryacct/dto/AbnormalEmployeeListDTO.java new file mode 100644 index 000000000..f6292f980 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/dto/AbnormalEmployeeListDTO.java @@ -0,0 +1,37 @@ +package com.engine.salary.entity.salaryacct.dto; + +import com.engine.salary.annotation.TableTitle; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 未报送人员列表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AbnormalEmployeeListDTO { + + //主键id + private Long id; + + //人员id + private Long employeeId; + + //姓名 + @TableTitle(title = "姓名", dataIndex = "employeeName", key = "employeeName") + private String employeeName; + + //工号") + @TableTitle(title = "工号", dataIndex = "jobNum", key = "jobNum") + private String jobNum; + +} diff --git a/src/com/engine/salary/entity/salaryacct/param/AbnormalEmployeeListQueryParam.java b/src/com/engine/salary/entity/salaryacct/param/AbnormalEmployeeListQueryParam.java new file mode 100644 index 000000000..0e129b8c9 --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/AbnormalEmployeeListQueryParam.java @@ -0,0 +1,39 @@ +package com.engine.salary.entity.salaryacct.param; + +import com.engine.salary.common.BaseQueryParam; +import com.fasterxml.jackson.annotation.JsonIgnore; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.Date; + +/** + * 未报送人员列表 + *

Copyright: Copyright (c) 2023

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AbnormalEmployeeListQueryParam extends BaseQueryParam { + + //工号、姓名、身份证号码") + private String keyword; + + //个税申报记录id") + private Long recordId; + + @JsonIgnore + //个税扣缴义务人id") + private Long taxAgentId; + + @JsonIgnore + //税款所属期") + private Date taxCycle; +} diff --git a/src/com/engine/salary/entity/salarysob/dto/SalarySobCycleDTO.java b/src/com/engine/salary/entity/salarysob/dto/SalarySobCycleDTO.java index 70a688b10..5a1f4ed2b 100644 --- a/src/com/engine/salary/entity/salarysob/dto/SalarySobCycleDTO.java +++ b/src/com/engine/salary/entity/salarysob/dto/SalarySobCycleDTO.java @@ -65,4 +65,8 @@ public class SalarySobCycleDTO { private Date attendCycleFromDate; @SalaryFormulaVar(defaultLabel = "考勤周期结束日期", labelId = 86321, dataType = "string") private Date attendCycleEndDate; + + + //存在异常人员数量 + private Integer abnormalEmployeeNum; } diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index fcdacf5cd..2ce01f8c3 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -8,12 +8,14 @@ import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedback import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; +import com.google.gson.Gson; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import weaver.general.Util; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.lang.reflect.Type; import java.util.*; /** @@ -38,6 +40,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); @@ -45,6 +48,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -55,7 +61,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -70,6 +76,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getLwbclb().getSscglb(); @@ -77,6 +84,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -87,7 +97,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -103,6 +113,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQnycxjjsslb().getSscglb(); @@ -110,6 +121,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -120,7 +134,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -136,6 +150,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getNtycxbcjlb().getSscglb(); @@ -143,6 +158,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -153,7 +171,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -169,6 +187,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getJcldhtycxbcjlb().getSscglb(); @@ -176,6 +195,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -186,7 +208,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -202,6 +224,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getGrgqjl().getSscglb(); @@ -209,6 +232,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -219,7 +245,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -235,6 +261,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQynj().getSscglb(); @@ -242,6 +269,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -252,7 +282,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -268,6 +298,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getBxyxy().getSscglb(); @@ -275,6 +306,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -285,7 +319,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -301,6 +335,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getZqjjr().getSscglb(); @@ -308,6 +343,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -318,7 +356,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -334,6 +372,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtlxlwbc().getSscglb(); @@ -341,6 +380,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -351,7 +393,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -367,6 +409,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtflxlwbc().getSscglb(); @@ -374,6 +417,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -384,7 +430,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -400,6 +446,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getGcsdlb().getSscglb(); @@ -407,6 +454,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -417,7 +467,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -433,6 +483,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getTxq().getSscglb(); @@ -440,6 +491,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.zhsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -450,7 +504,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -466,6 +520,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjgzxjlb().getSscglb(); @@ -473,6 +528,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -483,7 +541,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -499,6 +557,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjrysyjjlb().getSscglb(); @@ -506,6 +565,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -516,7 +578,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -532,6 +594,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getLwbclb().getSscglb(); @@ -539,6 +602,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -549,7 +615,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } @@ -564,6 +630,7 @@ public enum IncomeCategoryEnum implements BaseEnum { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); List sscglb = declareTaxResultFeedbackResponse.getBody().getFjmsd().getJcldhtycxbcjlb().getSscglb(); @@ -571,6 +638,9 @@ public enum IncomeCategoryEnum implements BaseEnum { Map resultMap = new HashMap<>(); for (EmployeeDeclarePO employeeDeclare : employeeDeclares) { GetASynIndividualIncomeTaxFeedbackResponse.Body.fjmsd.ssjgdx.result result = idNoResultMap.get(employeeDeclare.getCardNum()); + if (result == null) { + continue; + } taxRules.forEach(rule -> { String getter = "get" + rule.getTaxIndex().substring(0, 1).toUpperCase() + rule.getTaxIndex().substring(1); try { @@ -581,7 +651,7 @@ public enum IncomeCategoryEnum implements BaseEnum { log.error("getTaxErr no such method {}", getter, ex); } }); - resultMap.put(employeeDeclare.getEmployeeId(), taxRuleDTO); + resultMap.put(employeeDeclare.getEmployeeId(), gs.fromJson(gs.toJson(taxRuleDTO), (Type) SalarySobTaxRuleDTO.class)); } return resultMap; } diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java index 3b97e3084..b8244909f 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java @@ -1,6 +1,8 @@ package com.engine.salary.mapper.salaryacct; +import com.engine.salary.entity.salaryacct.dto.AbnormalEmployeeListDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; +import com.engine.salary.entity.salaryacct.param.AbnormalEmployeeListQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctEmployeeQueryParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import org.apache.ibatis.annotations.Param; @@ -122,4 +124,8 @@ public interface SalaryAcctEmployeeMapper { void lockByAcctEmpIds(@Param("lockStatus") Integer lockStatus, @Param("acctEmpIds") Set acctEmpIds); void lockByRecordId(@Param("lockStatus") Integer lockStatus, @Param("recordId") Long recordId); + + List listPage4NotDeclareByParam(@Param("param") AbnormalEmployeeListQueryParam queryParam); + + int countNotDeclareByParam(@Param("param") AbnormalEmployeeListQueryParam queryParam); } diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index f39b5bc53..8ea42d36e 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -1281,7 +1281,47 @@ UPDATE hrsa_salary_acct_emp SET lock_status = #{lockStatus} WHERE delete_type = 0 - AND salary_acct_record_id =#{recordId} + AND salary_acct_record_id = #{recordId} + + + + + diff --git a/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java index d4d1c0b53..0657a790f 100644 --- a/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java +++ b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java @@ -494,7 +494,7 @@ public class GetASynIndividualIncomeTaxFeedbackResponse extends BaseResponse { /** * 速算扣除数 必填:否 */ - @TaxField(name = "速算扣除数", taxIndex = "sskcs ") + @TaxField(name = "速算扣除数", taxIndex = "sskcs") private BigDecimal sskcs; /** diff --git a/src/com/engine/salary/service/SalaryAcctEmployeeService.java b/src/com/engine/salary/service/SalaryAcctEmployeeService.java index 10bdf5bd5..505befd94 100644 --- a/src/com/engine/salary/service/SalaryAcctEmployeeService.java +++ b/src/com/engine/salary/service/SalaryAcctEmployeeService.java @@ -1,5 +1,6 @@ package com.engine.salary.service; +import com.engine.salary.entity.salaryacct.dto.AbnormalEmployeeListDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; @@ -264,4 +265,14 @@ public interface SalaryAcctEmployeeService { */ void lockEmp(SalaryAcctResultUpdateLockStatusParam updateParam); + /** + * 未报送人员 + * @param queryParam + * @return + */ + PageInfo listPage4NotDeclareByParam(AbnormalEmployeeListQueryParam queryParam); + + + int countNotDeclareByParam(AbnormalEmployeeListQueryParam queryParam); + } diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 412858d08..3144966ab 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -5,11 +5,12 @@ import cn.hutool.core.date.DateUtil; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; +import com.engine.salary.entity.salaryacct.dto.AbnormalEmployeeListDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO; import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; @@ -788,4 +789,30 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct } } + + @Override + public PageInfo listPage4NotDeclareByParam(AbnormalEmployeeListQueryParam queryParam) { + + Long recordId = queryParam.getRecordId(); + SalaryAcctRecordPO recordPO = getSalaryAcctRecordService(user).getById(recordId); + SalarySobPO sobPO = getSalarySobService(user).getById(recordPO.getSalarySobId()); + queryParam.setTaxCycle(recordPO.getTaxCycle()); + queryParam.setTaxAgentId(sobPO.getTaxAgentId()); + + List list = getSalaryAcctEmployeeMapper().listPage4NotDeclareByParam(queryParam); + return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), list, AbnormalEmployeeListDTO.class); + } + + @Override + public int countNotDeclareByParam(AbnormalEmployeeListQueryParam queryParam) { + + Long recordId = queryParam.getRecordId(); + SalaryAcctRecordPO recordPO = getSalaryAcctRecordService(user).getById(recordId); + SalarySobPO sobPO = getSalarySobService(user).getById(recordPO.getSalarySobId()); + queryParam.setTaxCycle(recordPO.getTaxCycle()); + queryParam.setTaxAgentId(sobPO.getTaxAgentId()); + + return getSalaryAcctEmployeeMapper().countNotDeclareByParam(queryParam); + } + } diff --git a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java index 546cbf3c9..deb771892 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctRecordServiceImpl.java @@ -3,15 +3,13 @@ package com.engine.salary.service.impl; import com.api.formmode.mybatis.util.SqlProxyHandle; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.common.LocalDateRange; import com.engine.salary.common.YearMonthRange; -import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.salary.entity.datacollection.DataCollectionEmployee; -import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; import com.engine.salary.config.SalaryElogConfig; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.salaryBill.po.SalarySendPO; import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO; +import com.engine.salary.entity.salaryacct.param.AbnormalEmployeeListQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; @@ -20,9 +18,9 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO; import com.engine.salary.entity.salaryacct.po.SalaryAcctTaxAgentPO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; import com.engine.salary.entity.salarysob.po.SalarySobPO; -import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; +import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -41,7 +39,6 @@ import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.engine.salary.util.valid.ValidUtil; -import com.engine.salary.util.db.IdGenerator; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import org.apache.commons.collections4.CollectionUtils; @@ -286,8 +283,11 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); } // 查询薪资核算所用薪资账套的薪资周期、考勤周期…… - return getSalarySobService(user).getSalarySobCycle(salaryAcctRecordPO.getSalarySobId(), SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth())); + SalarySobCycleDTO salarySobCycle = getSalarySobService(user).getSalarySobCycle(salaryAcctRecordPO.getSalarySobId(), SalaryDateUtil.localDate2YearMonth(salaryAcctRecordPO.getSalaryMonth())); + int i = getSalaryAcctEmployeeService(user).countNotDeclareByParam(AbnormalEmployeeListQueryParam.builder().recordId(id).build()); + salarySobCycle.setAbnormalEmployeeNum(i); + return salarySobCycle; } @Override diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index ef221cba5..1eedb6ae5 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -7,6 +7,7 @@ import com.engine.salary.constant.SzyhApiConstant; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.entity.salaryacct.bo.SalaryCalcTax; import com.engine.salary.entity.salaryacct.dto.SalaryCalcTaxInfoDTO; +import com.engine.salary.entity.salaryacct.param.AbnormalEmployeeListQueryParam; import com.engine.salary.entity.salaryacct.param.SalaryCalcTaxParam; import com.engine.salary.entity.salaryacct.po.*; import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; @@ -110,6 +111,11 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160525, "接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量")); } + int i = getSalaryAcctEmployeeService(user).countNotDeclareByParam(AbnormalEmployeeListQueryParam.builder().recordId(salaryCalcTaxParam.getSalaryAcctRecordId()).build()); + if (i > 0) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(11111, "存在未报送的人员,请先进行人员报送")); + } + // 查询薪资核算记录 SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryCalcTaxParam.getSalaryAcctRecordId()); // 查询薪资核算记录关联的个税扣缴义务人 @@ -231,7 +237,7 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe continue; } SalarySobTaxRuleDTO taxRuleDTO = salarySobTaxRuleMap.get(incomeCategoryEnum.getValue().toString()); - Map empIdResult = incomeCategoryEnum.parseGetASynIndividualIncomeTaxFeedbackResponse(feedbackResponse, subEmployeeDeclares,taxRuleDTO); + Map empIdResult = incomeCategoryEnum.parseGetASynIndividualIncomeTaxFeedbackResponse(feedbackResponse, subEmployeeDeclares, taxRuleDTO); List subSalaryAcctEmployees = salaryAcctEmployeeMap.get(salaryAcctTaxAgent.getTaxAgentId() + "-" + salaryAcctTaxAgent.getIncomeCategory()); if (CollectionUtils.isEmpty(subSalaryAcctEmployees)) { continue; @@ -243,10 +249,12 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe } SalarySobTaxRuleDTO salarySobTaxRuleDTO = empIdResult.get(salaryAcctEmployee.getEmployeeId()); List taxRules = salarySobTaxRuleDTO.getTaxRules(); - taxRules.forEach(rule->{ + taxRules.forEach(rule -> { SalaryAcctResultPO salaryAcctResultPO = salaryAcctResultValue.get(rule.getSalaryItemId()); - salaryAcctResultPO.setResultValue(rule.getValue()); - resultPOS.add(salaryAcctResultPO); + if (salaryAcctResultPO != null) { + salaryAcctResultPO.setResultValue(rule.getValue()); + resultPOS.add(salaryAcctResultPO); + } }); } } diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 5897976db..39a9a2245 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -400,6 +400,17 @@ public class SalaryAcctController { } } + /** + * 未报送人员列表 + */ + @POST + @Path("/acctemployee/listPage4NotDeclare") + @Produces(MediaType.APPLICATION_JSON) + public String listPage4NotDeclare(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AbnormalEmployeeListQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getSalaryAcctEmployeeWrapper(user)::listPage4NotDeclareByParam, param); + } + // **********************************薪资核算人员相关 end*********************************/ diff --git a/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java index 095935fd5..b010175a9 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctEmployeeWrapper.java @@ -4,6 +4,7 @@ import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; +import com.engine.salary.entity.salaryacct.dto.AbnormalEmployeeListDTO; import com.engine.salary.entity.salaryacct.dto.SalaryAccEmployeeListDTO; import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; @@ -195,4 +196,14 @@ public class SalaryAcctEmployeeWrapper extends Service { public void lockEmp(SalaryAcctResultUpdateLockStatusParam salaryAcctResultUpdateLockStatusParam) { getSalaryAcctEmployeeService(user).lockEmp(salaryAcctResultUpdateLockStatusParam); } + + + /** + * 未报送人员列表 + * @param param + * @return + */ + public PageInfo listPage4NotDeclareByParam(AbnormalEmployeeListQueryParam param) { + return getSalaryAcctEmployeeService(user).listPage4NotDeclareByParam(param); + } } From fe8dcd0ccdc85cf7fadfbdcfeb827a5c0ea533fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 19 Jun 2024 11:21:00 +0800 Subject: [PATCH 24/96] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E9=BB=98=E8=AE=A4?= =?UTF-8?q?=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SalaryAcctCalculateServiceImpl.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index c70f3ad81..b83ceb4cb 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -1,5 +1,6 @@ package com.engine.salary.service.impl; +import cn.hutool.core.util.StrUtil; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.cache.SalaryCacheKey; @@ -35,6 +36,7 @@ import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; import org.springframework.util.StopWatch; import weaver.general.BaseBean; +import weaver.general.Util; import weaver.hrm.User; import weaver.wechat.util.Utils; @@ -111,7 +113,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc @Override public void calculate(SalaryAcctCalculateBO salaryAcctCalculateBO, DataCollectionEmployee simpleEmployee, List salarySobBackItems) { - StopWatch sw = new StopWatch("核算耗时明细,id:"+salaryAcctCalculateBO.getSalaryAcctRecordPO().getId()+""); + StopWatch sw = new StopWatch("核算耗时明细,id:" + salaryAcctCalculateBO.getSalaryAcctRecordPO().getId() + ""); Date now = new Date(); try { // 数据库字段加密用 @@ -213,16 +215,20 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc String resultValue; SalaryItemPO salaryItemPO = salaryItemMap.get(salaryItemId); ExpressFormula expressFormula; + String defaultValue; if (salarySobBackItemMap.containsKey(salaryItemId)) { // 如果薪资账套的回算项目中重新定义了回算项目公式,则使用薪资账套下的公式 SalarySobBackItemPO salarySobBackItemPO = salarySobBackItemMap.get(salaryItemId); expressFormula = expressFormulaMap.get(salarySobBackItemPO.getFormulaId()); + defaultValue = salarySobBackItemPO.getDefaultValue(); } else if (salaryItemIdKeySalarySobItemPOMap.containsKey(salaryItemId)) { // 如果薪资账套下重新定义了薪资项目的公式,则使用薪资账套下的公式,否则使用薪资项目本身的公式 SalarySobItemPO salarySobItemPO = salaryItemIdKeySalarySobItemPOMap.get(salaryItemId); expressFormula = expressFormulaMap.get(salarySobItemPO.getFormulaId()); + defaultValue = salarySobItemPO.getDefaultValue(); } else { expressFormula = expressFormulaMap.get(salaryItemPO.getFormulaId()); + defaultValue = salaryItemPO.getDefaultValue(); } if (Objects.nonNull(expressFormula)) { // 运行公式 @@ -244,6 +250,9 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc // 处理取值类型为“输入/导入”的薪资项目 String key = SalaryFormulaReferenceEnum.SALARY_ITEM.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + salaryItemPO.getCode(); resultValue = formulaVarValueMap.getOrDefault(key, StringUtils.EMPTY); + if (StrUtil.isBlank(resultValue)) { + resultValue = Util.null2String(defaultValue); + } } // 处理薪资档案 if (Objects.equals(salaryItemPO.getUseInEmployeeSalary(), NumberUtils.INTEGER_ONE)) { From 24a979507a29aa2b4419dfb5b175fbad96751724 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 19 Jun 2024 11:37:31 +0800 Subject: [PATCH 25/96] =?UTF-8?q?=E6=9C=AA=E6=8A=A5=E9=80=81=E4=BA=BA?= =?UTF-8?q?=E5=91=98=E5=88=97=E8=A1=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index 8ea42d36e..63102bbe9 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -1287,9 +1287,10 @@ + + + SELECT + + FROM hrsa_api_task_record t + WHERE delete_type = 0 + + + + + + + + + + + + INSERT INTO hrsa_api_task_record + + + + api, + + + create_time, + + + delete_type, + + + id, + + + param, + + + response, + + + source, + + + tenant_key, + + + update_time, + + + + + #{api}, + + + #{createTime}, + + + #{deleteType}, + + + #{id}, + + + #{param}, + + + #{response}, + + + #{source}, + + + #{tenantKey}, + + + #{updateTime}, + + + + + + + UPDATE hrsa_api_task_record + + api=#{api}, + create_time=#{createTime}, + delete_type=#{deleteType}, + param=#{param}, + response=#{response}, + source=#{source}, + tenant_key=#{tenantKey}, + update_time=#{updateTime}, + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_api_task_record + + + api=#{api}, + + + create_time=#{createTime}, + + + creator=#{creator}, + + + delete_type=#{deleteType}, + + + param=#{param}, + + + response=#{response}, + + + source=#{source}, + + + tenant_key=#{tenantKey}, + + + update_time=#{updateTime}, + + + WHERE id = #{id} AND delete_type = 0 + + + + + + UPDATE hrsa_api_task_record + SET delete_type=1 + WHERE id = #{id} + AND delete_type = 0 + + + + UPDATE hrsa_api_task_record + SET delete_type = 1 + WHERE delete_type = 0 + AND id IN + + #{id} + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/remote/tax/client/CompanyClient.java b/src/com/engine/salary/remote/tax/client/CompanyClient.java new file mode 100644 index 000000000..502f5db81 --- /dev/null +++ b/src/com/engine/salary/remote/tax/client/CompanyClient.java @@ -0,0 +1,40 @@ +package com.engine.salary.remote.tax.client; + +import com.engine.salary.constant.SzyhApiConstant; +import com.engine.salary.entity.taxagent.response.CheckPasswordResponse; +import com.engine.salary.entity.taxagent.response.CompanyRegisterInfoResponse; +import lombok.extern.slf4j.Slf4j; +import weaver.hrm.User; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +public class CompanyClient extends TaxBaseClient { + + + public CompanyClient(Long taxAgentId, User user) { + super(taxAgentId, user); + } + + public CompanyRegisterInfoResponse getCompanyRegisterInfo(Map requestParam) { + String url = apiConfig.getHost() + SzyhApiConstant.GET_REGISTER_INFO_URL; + String requestId = request(url, requestParam); + + String getRegisterInfoFeedbackUrl = apiConfig.getHost() + SzyhApiConstant.GET_REGISTER_INFO_FEEDBACK_URL; + Map map = new HashMap<>(1); + map.put("requestId", requestId); + return response(getRegisterInfoFeedbackUrl, map, CompanyRegisterInfoResponse.class); + } + + public CheckPasswordResponse checkPassword(Map requestParam) { + + String url = apiConfig.getHost() + SzyhApiConstant.CHECK_PASSWORD_URL; + String requestId = request(url, requestParam); + + String checkPasswordFeedbackUrl = apiConfig.getHost() + SzyhApiConstant.CHECK_PASSWORD_FEEDBACK_URL; + Map map = new HashMap<>(1); + map.put("requestId", requestId); + return response(checkPasswordFeedbackUrl, map, CheckPasswordResponse.class); + } +} diff --git a/src/com/engine/salary/remote/tax/client/TaxBaseClient.java b/src/com/engine/salary/remote/tax/client/TaxBaseClient.java index 1eae80e88..41a5f3cbf 100644 --- a/src/com/engine/salary/remote/tax/client/TaxBaseClient.java +++ b/src/com/engine/salary/remote/tax/client/TaxBaseClient.java @@ -1,12 +1,21 @@ package com.engine.salary.remote.tax.client; +import com.engine.salary.constant.SzyhApiConstant; +import com.engine.salary.remote.tax.response.RequestIdResponse; import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; +import com.engine.salary.entity.taxpayment.response.BaseResponse; +import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxagent.TaxAgentTaxReturnMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareApiConfigMapper; -import com.engine.salary.util.Sm4Utils; +import com.engine.salary.util.*; import com.engine.salary.util.db.MapperProxyFactory; import lombok.extern.slf4j.Slf4j; +import weaver.general.Util; +import weaver.hrm.User; + +import java.util.HashMap; +import java.util.Map; @Slf4j public class TaxBaseClient { @@ -20,8 +29,9 @@ public class TaxBaseClient { } public Long taxAgentId; - public TaxDeclarationApiConfigPO apiConfig ; - public TaxAgentTaxReturnPO returnPO ; + public User user; + public TaxDeclarationApiConfigPO apiConfig; + public TaxAgentTaxReturnPO returnPO; public TaxBaseClient(Long taxAgentId) { this.taxAgentId = taxAgentId; @@ -35,4 +45,61 @@ public class TaxBaseClient { } this.returnPO = taxReturnPO; } + + public TaxBaseClient(Long taxAgentId, User user) { + this.taxAgentId = taxAgentId; + this.apiConfig = getTaxDeclareApiConfigMapper().getOne(); + TaxAgentTaxReturnPO taxReturnPO = getTaxAgentTaxReturnMapper().selectOneByTaxAgentId(taxAgentId); + try { + // 密码解密 + taxReturnPO.setPwd(Sm4Utils.decryptEcb(apiConfig.getAppSecret(), taxReturnPO.getPwd())); + } catch (Exception e) { + log.error("Sm4Utils.decryptEcb ---- error: {}", e.getMessage()); + } + this.returnPO = taxReturnPO; + this.user = user; + } + + public String request(String url, Map requestParam) { + String reqJson = JsonUtil.toJsonString(requestParam); + Map header = SingnatureData.initHeader(new HashMap<>(1), apiConfig.getAppKey(), apiConfig.getAppSecret()); + String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); + //记录接口 + TaskUtil taskUtil = new TaskUtil(); + taskUtil.writeApiTaskRecord(Util.null2String(taxAgentId), url, reqJson, res); + + RequestIdResponse response = JsonUtil.parseObject(res, RequestIdResponse.class); + if (response == null || response.getHead() == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "服务异常,请稍后重试")); + } + if (!SzyhApiConstant.SUCCESS_CODE.equals(response.getHead().getCode()) || response.getBody() == null) { + // 如果返回错误 + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, response.getHead().getMsg())); + } + return response.getBody().getRequestId(); + } + + public T response(String url, Map param, Class clazz) { + TaskUtil taskUtil = new TaskUtil(); + T response = null; + for (int i = 0; i < 5; i++) { + Map header = SingnatureData.initHeader(new HashMap<>(1), apiConfig.getAppKey(), apiConfig.getAppSecret()); + String res = HttpUtil.getRequest(url, header, param); + response = JsonUtil.parseBean(res, clazz); + //记录接口 + taskUtil.writeApiTaskRecord(Util.null2String(taxAgentId), url, JsonUtil.toJsonString(param), res); + // 如果税友返回错误信息 + String code = response.getHead().getCode(); + if (SzyhApiConstant.HANDLING_CODE.equals(code)) { + try { + Thread.sleep(5 * 1000); + } catch (InterruptedException e) { + log.error("", e); + } + } else { + break; + } + } + return response; + } } diff --git a/src/com/engine/salary/entity/taxagent/response/GetRequestIdResponse.java b/src/com/engine/salary/remote/tax/response/RequestIdResponse.java similarity index 75% rename from src/com/engine/salary/entity/taxagent/response/GetRequestIdResponse.java rename to src/com/engine/salary/remote/tax/response/RequestIdResponse.java index f69bf8844..ef5505021 100644 --- a/src/com/engine/salary/entity/taxagent/response/GetRequestIdResponse.java +++ b/src/com/engine/salary/remote/tax/response/RequestIdResponse.java @@ -1,5 +1,6 @@ -package com.engine.salary.entity.taxagent.response; +package com.engine.salary.remote.tax.response; +import com.engine.salary.entity.taxagent.response.SzyhResponseHead; import lombok.Data; /** @@ -11,7 +12,7 @@ import lombok.Data; * @version 1.0 **/ @Data -public class GetRequestIdResponse { +public class RequestIdResponse { /** * 接口状态 */ diff --git a/src/com/engine/salary/service/ApiTaskService.java b/src/com/engine/salary/service/ApiTaskService.java new file mode 100644 index 000000000..bdf3ac137 --- /dev/null +++ b/src/com/engine/salary/service/ApiTaskService.java @@ -0,0 +1,7 @@ +package com.engine.salary.service; + +public interface ApiTaskService { + + void writeApiTaskRecord (String source,String api,String param,String response); + +} diff --git a/src/com/engine/salary/service/impl/AbstractTaxAgentTaxReturnCheckService.java b/src/com/engine/salary/service/impl/AbstractTaxAgentTaxReturnCheckService.java index 8698d8e26..9bfef4bbb 100644 --- a/src/com/engine/salary/service/impl/AbstractTaxAgentTaxReturnCheckService.java +++ b/src/com/engine/salary/service/impl/AbstractTaxAgentTaxReturnCheckService.java @@ -10,18 +10,16 @@ import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; import com.engine.salary.entity.taxagent.response.CheckPasswordResponse; import com.engine.salary.entity.taxagent.response.CompanyRegisterInfoResponse; -import com.engine.salary.entity.taxagent.response.GetRequestIdResponse; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.enums.SalaryOnOffEnum; import com.engine.salary.enums.taxagent.TaxAgentTaxReturnPasswordTypeEnum; import com.engine.salary.enums.taxagent.TaxAgentTaxReturnStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxagent.TaxAgentTaxReturnMapper; -import com.engine.salary.service.TaxAgentService; -import com.engine.salary.service.TaxAgentTaxReturnCheckService; -import com.engine.salary.service.TaxAgentTaxReturnService; -import com.engine.salary.service.TaxDeclarationApiConfigService; -import com.engine.salary.util.*; +import com.engine.salary.remote.tax.client.CompanyClient; +import com.engine.salary.service.*; +import com.engine.salary.util.SalaryAssert; +import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; import lombok.extern.slf4j.Slf4j; @@ -57,6 +55,10 @@ public abstract class AbstractTaxAgentTaxReturnCheckService extends Service impl return ServiceUtil.getService(TaxDeclarationApiConfigServiceImpl.class, user); } + protected ApiTaskService getApiTaskService(User user) { + return ServiceUtil.getService(ApiTaskServiceImpl.class, user); + } + /** * 获取验证类型 * @@ -83,9 +85,7 @@ public abstract class AbstractTaxAgentTaxReturnCheckService extends Service impl po.setUpdateTime(new Date()); // 如果税友返回错误信息 if (!SzyhApiConstant.SUCCESS_CODE.equals(response.getHead().getCode()) || CollectionUtils.isEmpty(response.getBody())) { - po.setCheckStatus(TaxAgentTaxReturnStatusEnum.FAIL.getValue()); - po.setFailReason(response.getHead().getMsg()); - return new ArrayList<>(); + throw new SalaryRunTimeException(response.getHead().getMsg()); } // 如果税友返回验证信息 List checkFormDTOList = buildCheckDTO(saveParam, response.getBody()); @@ -109,11 +109,11 @@ public abstract class AbstractTaxAgentTaxReturnCheckService extends Service impl * @return */ protected CompanyRegisterInfoResponse getCompanyRegisterInfo(TaxDeclarationApiConfigPO apiConfig, TaxAgentTaxReturnPO taxAgentTaxReturnPO, TaxAgentTaxReturnSaveParam saveParam) { - TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxAgentTaxReturnPO.getTaxAgentId()); + Long taxAgentId = taxAgentTaxReturnPO.getTaxAgentId(); + TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(taxAgentId); if (taxAgentPO == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100545, "个税扣缴义务人不存在")); } - String url = apiConfig.getHost() + SzyhApiConstant.GET_REGISTER_INFO_URL; Map requestParam = new HashMap<>(4); requestParam.put("bizNo", IdGenerator.generate()); requestParam.put("qymc", taxAgentPO.getName()); @@ -122,40 +122,11 @@ public abstract class AbstractTaxAgentTaxReturnCheckService extends Service impl if (StringUtils.isNotEmpty(saveParam.getTaxRegistrationNumber())) { requestParam.put("djxhid", saveParam.getTaxRegistrationNumber()); } - String reqJson = JsonUtil.toJsonString(requestParam); - Map params = new HashMap<>(1); - Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); - String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); - log.info("getCompanyRegisterInfo1 === params:{} === res : {}", reqJson, res); - GetRequestIdResponse getRequestIdResponse = JsonUtil.parseBean(res, GetRequestIdResponse.class); - if (getRequestIdResponse == null || getRequestIdResponse.getHead() == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "服务异常,请稍后重试")); - } - taxAgentTaxReturnPO.setCheckStatus(TaxAgentTaxReturnStatusEnum.NOT_COMMIT.getValue()); - taxAgentTaxReturnPO.setUpdateTime(new Date()); - // 如果税友返回错误信息 - if (!SzyhApiConstant.SUCCESS_CODE.equals(getRequestIdResponse.getHead().getCode()) || getRequestIdResponse.getBody() == null) { - taxAgentTaxReturnPO.setCheckStatus(TaxAgentTaxReturnStatusEnum.FAIL.getValue()); - taxAgentTaxReturnPO.setFailReason(getRequestIdResponse.getHead().getMsg()); - return null; - } - try { - Thread.sleep(5 * 1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - String requestId = getRequestIdResponse.getBody().getRequestId(); - String getRegisterInfoFeedbackUrl = apiConfig.getHost() + SzyhApiConstant.GET_REGISTER_INFO_FEEDBACK_URL; - Map feedbackHeader = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); - Map map = new HashMap<>(1); - map.put("requestId", requestId); - String companyRegisterInfoResponseRes = HttpUtil.getRequest(getRegisterInfoFeedbackUrl, feedbackHeader, map); - log.info("getCompanyRegisterInfo2 === requestId:{} === res : {}", requestId, companyRegisterInfoResponseRes); - return JsonUtil.parseBean(companyRegisterInfoResponseRes, CompanyRegisterInfoResponse.class); + return new CompanyClient(taxAgentId, user).getCompanyRegisterInfo(requestParam); } + private List buildCheckDTO(TaxAgentTaxReturnSaveParam saveParam, List registerInfos) { List checkFormDTOList = new ArrayList<>(); for (int i = 1; i <= registerInfos.size(); i++) { @@ -194,7 +165,7 @@ public abstract class AbstractTaxAgentTaxReturnCheckService extends Service impl if (taxAgentPO == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100545, "个税扣缴义务人不存在")); } - String url = apiConfig.getHost() + SzyhApiConstant.CHECK_PASSWORD_URL; + Long taxAgentId = taxAgentPO.getId(); Map requestParam = new HashMap<>(16); requestParam.put("bizNo", IdGenerator.generate()); requestParam.put("qymc", taxAgentPO.getName()); @@ -214,38 +185,8 @@ public abstract class AbstractTaxAgentTaxReturnCheckService extends Service impl requestParam.put("bmbh", saveParam.getDepartmentCode()); requestParam.put("bmmc", saveParam.getDepartmentName()); } - String reqJson = JsonUtil.toJsonString(requestParam); - Map params = new HashMap<>(1); - Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); - String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); - log.info("checkPassword1 === reqJson :{} === res : {}", reqJson, res); - GetRequestIdResponse response = JsonUtil.parseObject(res, GetRequestIdResponse.class); - if (response == null || response.getHead() == null) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "服务异常,请稍后重试")); - } - taxAgentTaxReturnPO.setUpdateTime(new Date()); - if (!SzyhApiConstant.SUCCESS_CODE.equals(response.getHead().getCode()) || response.getBody() == null) { - // 如果返回错误 - taxAgentTaxReturnPO.setCheckStatus(TaxAgentTaxReturnStatusEnum.FAIL.getValue()); - taxAgentTaxReturnPO.setFailReason(response.getHead().getMsg()); - return null; - } - - try { - Thread.sleep(5 * 1000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - - String checkPasswordFeedbackUrl = apiConfig.getHost() + SzyhApiConstant.CHECK_PASSWORD_FEEDBACK_URL; - Map feedbackHeader = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); - Map map = new HashMap<>(1); - String requestId = response.getBody().getRequestId(); - map.put("requestId", requestId); - res = HttpUtil.getRequest(checkPasswordFeedbackUrl, feedbackHeader, map); - log.info("checkPassword2 === requestId :{} === res : {}", requestId, res); - return JsonUtil.parseBean(res, CheckPasswordResponse.class); + return new CompanyClient(taxAgentId, user).checkPassword(requestParam); } /** diff --git a/src/com/engine/salary/service/impl/ApiTaskServiceImpl.java b/src/com/engine/salary/service/impl/ApiTaskServiceImpl.java new file mode 100644 index 000000000..107edf704 --- /dev/null +++ b/src/com/engine/salary/service/impl/ApiTaskServiceImpl.java @@ -0,0 +1,53 @@ +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.api.ApiTaskRecordPO; +import com.engine.salary.mapper.api.ApiTaskRecordMapper; +import com.engine.salary.service.ApiTaskService; +import com.engine.salary.service.TaxAgentService; +import com.engine.salary.util.db.IdGenerator; +import com.engine.salary.util.db.MapperProxyFactory; +import lombok.extern.slf4j.Slf4j; +import weaver.hrm.User; + +import java.util.Date; + +/** + * api任务调度服务 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Slf4j +public class ApiTaskServiceImpl extends Service implements ApiTaskService { + + private ApiTaskRecordMapper getApiTaskRecordMapper() { + return MapperProxyFactory.getProxy(ApiTaskRecordMapper.class); + } + + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + @Override + public void writeApiTaskRecord(String source, String api, String param, String response) { + log.info("source:{} , api:{} , param:{} , response : {}", source, api, param, response); + Date now = new Date(); + ApiTaskRecordPO build = ApiTaskRecordPO.builder() + .id(IdGenerator.generate()) + .source(source) + .api(api) + .param(param) + .response(response) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + getApiTaskRecordMapper().insertIgnoreNull(build); + } +} diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 10785a692..9da19ccfb 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -23,7 +23,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobTaxReportRulePO; import com.engine.salary.entity.taxagent.bo.TaxAgentTaxReturnBO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; -import com.engine.salary.entity.taxagent.response.GetRequestIdResponse; +import com.engine.salary.remote.tax.response.RequestIdResponse; import com.engine.salary.entity.taxapiflow.bo.TaxApiFlowBO; import com.engine.salary.entity.taxapiflow.po.TaxDeclarationApiFlowRecordPO; import com.engine.salary.entity.taxdeclaration.bo.*; @@ -1008,6 +1008,9 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe requestParam.put("skssq", SalaryDateUtil.getFormatYYYYMM(taxDeclareRecord.getTaxCycle())); // 申报类型 requestParam.put("sblx", reportType + ""); + + + // 请求 String reqJson = JsonUtil.toJsonString(requestParam); @@ -1015,7 +1018,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe Map params = new HashMap<>(1); Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); - GetRequestIdResponse getRequestIdResponse = JsonUtil.parseObject(res, GetRequestIdResponse.class); + RequestIdResponse getRequestIdResponse = JsonUtil.parseObject(res, RequestIdResponse.class); log.info("更正申报请求数据1:=== params:{} ,getRequestIdResponse:{}", res, getRequestIdResponse); diff --git a/src/com/engine/salary/util/TaskUtil.java b/src/com/engine/salary/util/TaskUtil.java new file mode 100644 index 000000000..9b498d316 --- /dev/null +++ b/src/com/engine/salary/util/TaskUtil.java @@ -0,0 +1,37 @@ +package com.engine.salary.util; + +import com.engine.salary.constant.SalaryDefaultTenantConstant; +import com.engine.salary.entity.api.ApiTaskRecordPO; +import com.engine.salary.mapper.api.ApiTaskRecordMapper; +import com.engine.salary.util.db.IdGenerator; +import com.engine.salary.util.db.MapperProxyFactory; +import lombok.extern.slf4j.Slf4j; + +import java.util.Date; + +@Slf4j +public class TaskUtil { + + private ApiTaskRecordMapper getApiTaskRecordMapper() { + return MapperProxyFactory.getProxy(ApiTaskRecordMapper.class); + } + + public void writeApiTaskRecord(String source, String api, String param, String response) { + log.info("source:{} , api:{} , param:{} , response : {}", source, api, param, response); + Date now = new Date(); + ApiTaskRecordPO build = ApiTaskRecordPO.builder() + .id(IdGenerator.generate()) + .source(source) + .api(api) + .param(param) + .response(response) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + getApiTaskRecordMapper().insertIgnoreNull(build); + } + + +} From 65fcfb8face298cec7ca302ffeda3f37caeea591 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 27 Jun 2024 09:30:25 +0800 Subject: [PATCH 49/96] =?UTF-8?q?=E6=9B=B4=E6=AD=A3=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/wiki/待添加sql | 56 +++++++++++++++++++ .../salary/constant/SzyhApiConstant.java | 8 ++- .../response/UpdateDeclareResponse.java | 9 +-- .../remote/tax/client/CompanyClient.java | 5 +- .../remote/tax/client/DeclareClient.java | 19 +++++++ .../remote/tax/client/TaxBaseClient.java | 38 ++++++------- ...AbstractTaxAgentTaxReturnCheckService.java | 4 +- .../impl/TaxDeclareRecordServiceImpl.java | 39 +------------ .../salary/wrapper/TaxPaymentWrapper.java | 20 ++++--- 9 files changed, 120 insertions(+), 78 deletions(-) diff --git a/resource/wiki/待添加sql b/resource/wiki/待添加sql index 44d2fbec2..8452d9a87 100644 --- a/resource/wiki/待添加sql +++ b/resource/wiki/待添加sql @@ -3,3 +3,59 @@ INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label, contrast_type) VALUES (700000000000000003, NULL, NULL, NULL, 0, 'all_teams', '1', '700', '其他', 'royaltiesOther', 'number', 'qt', NULL, 0); INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label, contrast_type) VALUES (700000000000000004, NULL, NULL, NULL, 0, 'all_teams', '1', '700', '备注', 'royaltiesRemark', 'string', 'bz', NULL, 0); INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label, contrast_type) VALUES (700000000000000005, NULL, NULL, NULL, 0, 'all_teams', '1', '700', '减免税额', 'royaltiesTaxDeduction', 'number', 'jmse', NULL, 0); + + +CREATE TABLE hrsa_api_task_record ( + id bigint(0) NOT NULL , + source varchar(500) , + api varchar(500), + param text , + response text, + tenant_key varchar(255) , + delete_type int(0) , + create_time datetime(0), + update_time datetime(0), + PRIMARY KEY (id) USING BTREE +); + +create table hrsa_api_task_record +( + id number primary key , + source varchar2(500) , + api varchar2(500), + param clob , + response clob, + create_time date, + update_time date, + delete_type int default 0, + tenant_key varchar2(10) +) +/ + +create table hrsa_api_task_record +( + id bigint primary key , + source varchar(500) , + api varchar(500), + param ntext , + response ntext, + create_time datetime, + update_time datetime, + delete_type int default 0, + tenant_key nvarchar(10) +) +GO + +create table hrsa_api_task_record +( + id bigint primary key , + source varchar(500) , + api varchar(500), + param text , + response text, + create_time timestamp, + update_time timestamp, + delete_type int default 0, + tenant_key varchar(10) +); +/ \ No newline at end of file diff --git a/src/com/engine/salary/constant/SzyhApiConstant.java b/src/com/engine/salary/constant/SzyhApiConstant.java index 1e2ff14b0..5b22a491c 100644 --- a/src/com/engine/salary/constant/SzyhApiConstant.java +++ b/src/com/engine/salary/constant/SzyhApiConstant.java @@ -139,7 +139,13 @@ public class SzyhApiConstant { /** * 缴款凭证作废 */ - public static final String CANCEL_WITHHOLDING_VOUCHER = "gateway/iit/payment/cancelWithholdingVoucher"; +// public static final String CANCEL_WITHHOLDING_VOUCHER = "gateway/iit/payment/cancelWithholdingVoucher"; + public static final String CANCEL_WITHHOLDING_VOUCHER = "gateway/iit/service/cancelWithholdingVoucher"; + + /** + * 缴款凭证作废反馈 + */ + public static final String CANCEL_WITHHOLDING_VOUCHER_FEEDBACK = "gateway/iit/service/getCancelWithholdingVoucher"; /** * 完税证明 */ diff --git a/src/com/engine/salary/entity/taxdeclaration/response/UpdateDeclareResponse.java b/src/com/engine/salary/entity/taxdeclaration/response/UpdateDeclareResponse.java index e2b77f90c..7c586658c 100644 --- a/src/com/engine/salary/entity/taxdeclaration/response/UpdateDeclareResponse.java +++ b/src/com/engine/salary/entity/taxdeclaration/response/UpdateDeclareResponse.java @@ -1,7 +1,6 @@ package com.engine.salary.entity.taxdeclaration.response; -import com.engine.salary.entity.taxagent.response.SzyhResponseHead; -import io.swagger.annotations.ApiModel; +import com.engine.salary.entity.taxpayment.response.BaseResponse; import lombok.Data; /** @@ -13,9 +12,5 @@ import lombok.Data; * @version 1.0 **/ @Data -@ApiModel("更正申报的返回数据") -public class UpdateDeclareResponse { - - //接口状态") - private SzyhResponseHead head; +public class UpdateDeclareResponse extends BaseResponse { } diff --git a/src/com/engine/salary/remote/tax/client/CompanyClient.java b/src/com/engine/salary/remote/tax/client/CompanyClient.java index 502f5db81..b57a2d726 100644 --- a/src/com/engine/salary/remote/tax/client/CompanyClient.java +++ b/src/com/engine/salary/remote/tax/client/CompanyClient.java @@ -4,7 +4,6 @@ import com.engine.salary.constant.SzyhApiConstant; import com.engine.salary.entity.taxagent.response.CheckPasswordResponse; import com.engine.salary.entity.taxagent.response.CompanyRegisterInfoResponse; import lombok.extern.slf4j.Slf4j; -import weaver.hrm.User; import java.util.HashMap; import java.util.Map; @@ -13,8 +12,8 @@ import java.util.Map; public class CompanyClient extends TaxBaseClient { - public CompanyClient(Long taxAgentId, User user) { - super(taxAgentId, user); + public CompanyClient(Long taxAgentId) { + super(taxAgentId); } public CompanyRegisterInfoResponse getCompanyRegisterInfo(Map requestParam) { diff --git a/src/com/engine/salary/remote/tax/client/DeclareClient.java b/src/com/engine/salary/remote/tax/client/DeclareClient.java index 45ee201ae..33a5e6be0 100644 --- a/src/com/engine/salary/remote/tax/client/DeclareClient.java +++ b/src/com/engine/salary/remote/tax/client/DeclareClient.java @@ -1,7 +1,12 @@ package com.engine.salary.remote.tax.client; +import com.engine.salary.constant.SzyhApiConstant; +import com.engine.salary.entity.taxdeclaration.response.UpdateDeclareResponse; import lombok.extern.slf4j.Slf4j; +import java.util.HashMap; +import java.util.Map; + /** * 个税申报客户端 *

Copyright: Copyright (c) 2023

@@ -17,4 +22,18 @@ public class DeclareClient extends TaxBaseClient{ } + /** + * 更正申报 + * @param requestParam + */ + public UpdateDeclareResponse correct(Map requestParam){ + String url = apiConfig.getHost() + SzyhApiConstant.UPDATE_DECLARE; + String requestId = request(url, requestParam); + String feedbackUrl = apiConfig.getHost() + SzyhApiConstant.UPDATE_DECLARE_FEEDBACK; + + Map map = new HashMap<>(1); + map.put("requestId", requestId); + return response(feedbackUrl, map, UpdateDeclareResponse.class); + } + } diff --git a/src/com/engine/salary/remote/tax/client/TaxBaseClient.java b/src/com/engine/salary/remote/tax/client/TaxBaseClient.java index 41a5f3cbf..3057b55fb 100644 --- a/src/com/engine/salary/remote/tax/client/TaxBaseClient.java +++ b/src/com/engine/salary/remote/tax/client/TaxBaseClient.java @@ -1,18 +1,17 @@ package com.engine.salary.remote.tax.client; import com.engine.salary.constant.SzyhApiConstant; -import com.engine.salary.remote.tax.response.RequestIdResponse; import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.entity.taxpayment.response.BaseResponse; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxagent.TaxAgentTaxReturnMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareApiConfigMapper; +import com.engine.salary.remote.tax.response.RequestIdResponse; import com.engine.salary.util.*; import com.engine.salary.util.db.MapperProxyFactory; import lombok.extern.slf4j.Slf4j; import weaver.general.Util; -import weaver.hrm.User; import java.util.HashMap; import java.util.Map; @@ -23,16 +22,16 @@ public class TaxBaseClient { return MapperProxyFactory.getProxy(TaxDeclareApiConfigMapper.class); } - private TaxAgentTaxReturnMapper getTaxAgentTaxReturnMapper() { return MapperProxyFactory.getProxy(TaxAgentTaxReturnMapper.class); } public Long taxAgentId; - public User user; public TaxDeclarationApiConfigPO apiConfig; public TaxAgentTaxReturnPO returnPO; + public static final int threshold = 600; + public TaxBaseClient(Long taxAgentId) { this.taxAgentId = taxAgentId; this.apiConfig = getTaxDeclareApiConfigMapper().getOne(); @@ -46,20 +45,6 @@ public class TaxBaseClient { this.returnPO = taxReturnPO; } - public TaxBaseClient(Long taxAgentId, User user) { - this.taxAgentId = taxAgentId; - this.apiConfig = getTaxDeclareApiConfigMapper().getOne(); - TaxAgentTaxReturnPO taxReturnPO = getTaxAgentTaxReturnMapper().selectOneByTaxAgentId(taxAgentId); - try { - // 密码解密 - taxReturnPO.setPwd(Sm4Utils.decryptEcb(apiConfig.getAppSecret(), taxReturnPO.getPwd())); - } catch (Exception e) { - log.error("Sm4Utils.decryptEcb ---- error: {}", e.getMessage()); - } - this.returnPO = taxReturnPO; - this.user = user; - } - public String request(String url, Map requestParam) { String reqJson = JsonUtil.toJsonString(requestParam); Map header = SingnatureData.initHeader(new HashMap<>(1), apiConfig.getAppKey(), apiConfig.getAppSecret()); @@ -82,22 +67,33 @@ public class TaxBaseClient { public T response(String url, Map param, Class clazz) { TaskUtil taskUtil = new TaskUtil(); T response = null; - for (int i = 0; i < 5; i++) { + for (int i = 0; i <= threshold; ++i) { Map header = SingnatureData.initHeader(new HashMap<>(1), apiConfig.getAppKey(), apiConfig.getAppSecret()); String res = HttpUtil.getRequest(url, header, param); response = JsonUtil.parseBean(res, clazz); //记录接口 taskUtil.writeApiTaskRecord(Util.null2String(taxAgentId), url, JsonUtil.toJsonString(param), res); + if (response == null || response.getHead() == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "服务异常,请稍后重试")); + } // 如果税友返回错误信息 String code = response.getHead().getCode(); if (SzyhApiConstant.HANDLING_CODE.equals(code)) { + //进行中的任务,重试 try { - Thread.sleep(5 * 1000); + Thread.sleep(6 * 1000); } catch (InterruptedException e) { log.error("", e); } - } else { + if (threshold == i) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "未在预期时间内完成任务,请稍后重试!阀值:" + threshold)); + } + } else if (SzyhApiConstant.SUCCESS_CODE.equals(response.getHead().getCode())) { + //成功的任务,返回结果 break; + } else { + //错误任务,提示 + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, response.getHead().getMsg())); } } return response; diff --git a/src/com/engine/salary/service/impl/AbstractTaxAgentTaxReturnCheckService.java b/src/com/engine/salary/service/impl/AbstractTaxAgentTaxReturnCheckService.java index 9bfef4bbb..ea1684fac 100644 --- a/src/com/engine/salary/service/impl/AbstractTaxAgentTaxReturnCheckService.java +++ b/src/com/engine/salary/service/impl/AbstractTaxAgentTaxReturnCheckService.java @@ -123,7 +123,7 @@ public abstract class AbstractTaxAgentTaxReturnCheckService extends Service impl requestParam.put("djxhid", saveParam.getTaxRegistrationNumber()); } - return new CompanyClient(taxAgentId, user).getCompanyRegisterInfo(requestParam); + return new CompanyClient(taxAgentId).getCompanyRegisterInfo(requestParam); } @@ -186,7 +186,7 @@ public abstract class AbstractTaxAgentTaxReturnCheckService extends Service impl requestParam.put("bmmc", saveParam.getDepartmentName()); } - return new CompanyClient(taxAgentId, user).checkPassword(requestParam); + return new CompanyClient(taxAgentId).checkPassword(requestParam); } /** diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 9da19ccfb..8047f6783 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -23,7 +23,6 @@ import com.engine.salary.entity.salarysob.po.SalarySobTaxReportRulePO; import com.engine.salary.entity.taxagent.bo.TaxAgentTaxReturnBO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; -import com.engine.salary.remote.tax.response.RequestIdResponse; import com.engine.salary.entity.taxapiflow.bo.TaxApiFlowBO; import com.engine.salary.entity.taxapiflow.po.TaxDeclarationApiFlowRecordPO; import com.engine.salary.entity.taxdeclaration.bo.*; @@ -46,6 +45,7 @@ import com.engine.salary.enums.taxdeclaration.*; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxdeclaration.TaxDeclareRecordMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareStatusMapper; +import com.engine.salary.remote.tax.client.DeclareClient; import com.engine.salary.service.*; import com.engine.salary.service.factory.TaxPaymentServiceFactory; import com.engine.salary.util.*; @@ -1009,41 +1009,8 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 申报类型 requestParam.put("sblx", reportType + ""); - - - // 请求 - String reqJson = JsonUtil.toJsonString(requestParam); - - String url = apiConfig.getHost() + SzyhApiConstant.UPDATE_DECLARE; - Map params = new HashMap<>(1); - Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); - String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); - RequestIdResponse getRequestIdResponse = JsonUtil.parseObject(res, RequestIdResponse.class); - log.info("更正申报请求数据1:=== params:{} ,getRequestIdResponse:{}", res, getRequestIdResponse); - - - if (Objects.isNull(getRequestIdResponse) || Objects.isNull(getRequestIdResponse.getHead())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); - } - if (!Objects.equals(getRequestIdResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE) || getRequestIdResponse.getBody() == null) { - throw new SalaryRunTimeException(getRequestIdResponse.getHead().getMsg()); - } - - String feedbackUrl = apiConfig.getHost() + SzyhApiConstant.UPDATE_DECLARE_FEEDBACK; - Map feedbackHeader = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); - Map map = new HashMap<>(1); - String requestId = getRequestIdResponse.getBody().getRequestId(); - map.put("requestId", requestId); - res = HttpUtil.getRequest(feedbackUrl, feedbackHeader, map); - log.info("更正申报请求数据2: === requestId :{} === res : {}", requestId, res); - - UpdateDeclareResponse updateDeclareResponse = JsonUtil.parseObject(res, UpdateDeclareResponse.class); - if (Objects.isNull(updateDeclareResponse) || Objects.isNull(updateDeclareResponse.getHead())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); - } - if (!Objects.equals(updateDeclareResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { - throw new SalaryRunTimeException(updateDeclareResponse.getHead().getMsg()); - } + DeclareClient declareClient = new DeclareClient(taxDeclareRecord.getTaxAgentId()); + declareClient.correct(requestParam); //更新申报状态 declareStatus.setTaxDeclareType(TaxDeclareTypeEnum.UPDATE_DECLARE.getValue()); diff --git a/src/com/engine/salary/wrapper/TaxPaymentWrapper.java b/src/com/engine/salary/wrapper/TaxPaymentWrapper.java index f90f62713..41e153802 100644 --- a/src/com/engine/salary/wrapper/TaxPaymentWrapper.java +++ b/src/com/engine/salary/wrapper/TaxPaymentWrapper.java @@ -1,12 +1,16 @@ package com.engine.salary.wrapper; +import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.entity.taxpayment.dto.TaxAmountFormDTO; import com.engine.salary.entity.taxpayment.dto.TaxFeedbackResultDTO; import com.engine.salary.entity.taxpayment.dto.TaxWithheldVoucherResultDTO; import com.engine.salary.entity.taxpayment.param.TaxPaymentQueryParam; -import com.engine.salary.enums.taxdeclaration.TaxPaymentServiceTypeEnum; import com.engine.salary.service.factory.TaxPaymentServiceFactory; +import com.engine.salary.service.impl.TaxPaymentAgreementServiceImpl; +import com.engine.salary.service.impl.TaxPaymentWithheldVoucherServiceImpl; +import com.engine.salary.service.impl.TaxPaymentWithholdingServiceImpl; +import com.engine.salary.service.impl.TaxPaymentWithholdingVoucherServiceImpl; import lombok.extern.slf4j.Slf4j; /** @@ -22,15 +26,15 @@ public class TaxPaymentWrapper extends Service { private final TaxPaymentServiceFactory taxPaymentServiceFactory = new TaxPaymentServiceFactory(user); public TaxFeedbackResultDTO getAgreementFeedback(TaxPaymentQueryParam param) { - return taxPaymentServiceFactory.get(TaxPaymentServiceTypeEnum.QUERY_AGREEMENT.getValue()).getFeedback(param); + return ServiceUtil.getService(TaxPaymentAgreementServiceImpl.class, user).getFeedback(param); } public TaxFeedbackResultDTO payAgreementFeedback(TaxPaymentQueryParam param) { - return taxPaymentServiceFactory.get(TaxPaymentServiceTypeEnum.WITHHOLDING_PAY.getValue()).getFeedback(param); + return ServiceUtil.getService(TaxPaymentWithholdingServiceImpl.class, user).getFeedback(param); } public TaxFeedbackResultDTO printVoucherFeedback(TaxPaymentQueryParam param) { - return taxPaymentServiceFactory.get(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()).getFeedback(param); + return ServiceUtil.getService(TaxPaymentWithholdingVoucherServiceImpl.class, user).getFeedback(param); } public String getRequestId(TaxPaymentQueryParam param) { @@ -38,18 +42,18 @@ public class TaxPaymentWrapper extends Service { } public TaxAmountFormDTO queryTaxAmount(TaxPaymentQueryParam param) { - return taxPaymentServiceFactory.get(TaxPaymentServiceTypeEnum.QUERY_AGREEMENT.getValue()).queryTaxAmount(param); + return ServiceUtil.getService(TaxPaymentAgreementServiceImpl.class, user).queryTaxAmount(param); } public TaxWithheldVoucherResultDTO getWithheldVoucher(TaxPaymentQueryParam param) { - return taxPaymentServiceFactory.get(TaxPaymentServiceTypeEnum.WITHHELD_VOUCHER.getValue()).getWithheldVoucher(param); + return ServiceUtil.getService(TaxPaymentWithheldVoucherServiceImpl.class, user).getWithheldVoucher(param); } public void getSyncWithholdingFeedback(TaxPaymentQueryParam param) { - taxPaymentServiceFactory.get(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()).syncWithholdingFeedback(param); + ServiceUtil.getService(TaxPaymentWithholdingVoucherServiceImpl.class, user).syncWithholdingFeedback(param); } public void cancelVoucher(TaxPaymentQueryParam param) { - taxPaymentServiceFactory.get(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()).cancelWithholdingVoucher(param); + ServiceUtil.getService(TaxPaymentWithholdingVoucherServiceImpl.class, user).cancelWithholdingVoucher(param); } } From ea07fe1a59d455d2d29e5da365b7ecc7a1b3110c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 27 Jun 2024 10:38:30 +0800 Subject: [PATCH 50/96] =?UTF-8?q?=E5=A4=84=E7=90=86sqlserver=20=202100=20?= =?UTF-8?q?=E4=B8=AA=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryAcctEmployeeServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 984c5f100..84bb51777 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -435,7 +435,7 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { return; } - List> partition = Lists.partition((List) salaryAcctEmployeePOS, 100); + List> partition = Lists.partition((List) salaryAcctEmployeePOS, 50); partition.forEach(getSalaryAcctEmployeeMapper()::batchInsert); } From 68467fbe4650d2f325f05394f6d44fcd99bfa4b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 27 Jun 2024 11:19:34 +0800 Subject: [PATCH 51/96] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E4=BD=9C=E5=BA=9F?= =?UTF-8?q?=E7=94=B3=E6=8A=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../CancelDeclareFeedbackResponse.java | 7 +--- .../remote/tax/client/DeclareClient.java | 23 ++++++++--- .../service/TaxDeclareRecordService.java | 2 +- .../impl/TaxDeclareRecordServiceImpl.java | 40 ++++++++++--------- .../wrapper/TaxDeclareRecordWrapper.java | 2 +- 5 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/response/CancelDeclareFeedbackResponse.java b/src/com/engine/salary/entity/taxdeclaration/response/CancelDeclareFeedbackResponse.java index 564edd0b7..d22edac56 100644 --- a/src/com/engine/salary/entity/taxdeclaration/response/CancelDeclareFeedbackResponse.java +++ b/src/com/engine/salary/entity/taxdeclaration/response/CancelDeclareFeedbackResponse.java @@ -1,6 +1,6 @@ package com.engine.salary.entity.taxdeclaration.response; -import com.engine.salary.entity.taxagent.response.SzyhResponseHead; +import com.engine.salary.entity.taxpayment.response.BaseResponse; import lombok.Data; import java.util.Map; @@ -14,10 +14,7 @@ import java.util.Map; * @version 1.0 **/ @Data -public class CancelDeclareFeedbackResponse { - - //接口状态") - private SzyhResponseHead head; +public class CancelDeclareFeedbackResponse extends BaseResponse { //接口状态") private Map body; diff --git a/src/com/engine/salary/remote/tax/client/DeclareClient.java b/src/com/engine/salary/remote/tax/client/DeclareClient.java index 33a5e6be0..4049eb679 100644 --- a/src/com/engine/salary/remote/tax/client/DeclareClient.java +++ b/src/com/engine/salary/remote/tax/client/DeclareClient.java @@ -1,6 +1,7 @@ package com.engine.salary.remote.tax.client; import com.engine.salary.constant.SzyhApiConstant; +import com.engine.salary.entity.taxdeclaration.response.CancelDeclareFeedbackResponse; import com.engine.salary.entity.taxdeclaration.response.UpdateDeclareResponse; import lombok.extern.slf4j.Slf4j; @@ -16,24 +17,34 @@ import java.util.Map; * @version 1.0 **/ @Slf4j -public class DeclareClient extends TaxBaseClient{ +public class DeclareClient extends TaxBaseClient { public DeclareClient(Long taxAgentId) { super(taxAgentId); } + public CancelDeclareFeedbackResponse cancel(Map requestParam, Map responseParam) { + String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_DECLARE; + String requestId = request(url, requestParam); + + String feedbackUrl = apiConfig.getHost() + SzyhApiConstant.CANCEL_DECLARE_FEEDBACK; + responseParam.put("requestId", requestId); + return response(feedbackUrl, responseParam, CancelDeclareFeedbackResponse.class); + } + /** * 更正申报 + * * @param requestParam */ - public UpdateDeclareResponse correct(Map requestParam){ + public UpdateDeclareResponse correct(Map requestParam) { String url = apiConfig.getHost() + SzyhApiConstant.UPDATE_DECLARE; String requestId = request(url, requestParam); - String feedbackUrl = apiConfig.getHost() + SzyhApiConstant.UPDATE_DECLARE_FEEDBACK; - Map map = new HashMap<>(1); - map.put("requestId", requestId); - return response(feedbackUrl, map, UpdateDeclareResponse.class); + String feedbackUrl = apiConfig.getHost() + SzyhApiConstant.UPDATE_DECLARE_FEEDBACK; + Map responseParam = new HashMap<>(1); + responseParam.put("requestId", requestId); + return response(feedbackUrl, responseParam, UpdateDeclareResponse.class); } } diff --git a/src/com/engine/salary/service/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index 0af1b0767..35b387f7b 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -136,7 +136,7 @@ public interface TaxDeclareRecordService { * * @param id */ - void cancelDeclare(Long id, Integer reportType); + void cancelDeclare(Long id, Integer reportType,TaxDeclarationRateDTO taxDeclarationRate); /** * 获取作废反馈 diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 8047f6783..25bcdfcaf 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -873,9 +873,10 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } @Override - public void cancelDeclare(Long id, Integer reportType) { + public void cancelDeclare(Long id, Integer reportType, TaxDeclarationRateDTO taxDeclarationRate) { TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); + Long taxAgentId = taxDeclareRecord.getTaxAgentId(); TaxDeclareStatusPO declareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(id, reportType); // 更正申报成功后不能作废 @@ -886,8 +887,6 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe if (!Objects.equals(declareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_SUCCESS_NO_PAY.getValue()) && !Objects.equals(declareStatus.getTaxDeclareStatus(), TaxDeclareStatusEnum.DECLARE_SUCCESS_UNPAID.getValue())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156497, "只有申报成功,无需缴款/申报成功,未缴款的状态才能作废")); } - // 供应商信息 - TaxDeclarationApiConfigPO apiConfig = taxDeclareRequest.getTaxDeclarationApiConfig(); // 注册的企业信息-->请求参数 Map requestParam = taxDeclareRequest.getRequestParam(); // 税款所属期 @@ -895,26 +894,29 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe // 申报类型 requestParam.put("sblx", reportType + ""); // 作废银联缴款凭证 -// taxPaymentServiceFactory.get(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()).cancelWithholdingVoucher(apiConfig, taxDeclareRecord, requestParam); +// ServiceUtil.getService(TaxPaymentWithholdingVoucherServiceImpl.class, user).cancelWithholdingVoucher(apiConfig, taxDeclareRecord, requestParam); // 是否清空所得 requestParam.put("sfqksd", "0"); - // 请求 - String reqJson = JsonUtil.toJsonString(requestParam); - String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_DECLARE; - Map params = new HashMap<>(1); - Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); - String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); - log.info("作废申报返回数据:" + res); - DeclareTaxResponse declareTaxResponse = JsonUtil.parseObject(res, DeclareTaxResponse.class); - if (Objects.isNull(declareTaxResponse) || Objects.isNull(declareTaxResponse.getHead())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); + + Map responseParam = new HashMap<>(); + responseParam.put("reportType",reportType + ""); + DeclareClient declareClient = new DeclareClient(taxAgentId); + CancelDeclareFeedbackResponse cancelDeclareFeedbackResponse = declareClient.cancel(requestParam,responseParam); + + // 作废是否成功 + CancelDeclareStatusEnum cancelDeclareStatusEnum = SalaryEnumUtil.enumMatchByValue(SalaryEntityUtil.getIntValue(cancelDeclareFeedbackResponse.getBody().get("fkztbj"), 10), CancelDeclareStatusEnum.class); + if (cancelDeclareStatusEnum == CancelDeclareStatusEnum.CANCEL_FAIL) { + String feedbackBody = Util.null2String(cancelDeclareFeedbackResponse.getBody().get("fknr")).replace("\\", ""); + List errorMsgList = JsonUtil.parseList(feedbackBody, Map.class).stream().map(e -> Util.null2String(e.get("msg"))).collect(Collectors.toList()); + taxDeclarationRate.setStatus(false).setMsg(SalaryI18nUtil.getI18nLabel(156508, "作废失败:") + StringUtils.join(errorMsgList, ",")); } - if (!Objects.equals(declareTaxResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { - throw new SalaryRunTimeException(declareTaxResponse.getHead().getMsg()); + TaxDeclareStatusEnum taxDeclareStatusEnum = SalaryEnumUtil.enumMatchByValue(SalaryEntityUtil.getIntValue(cancelDeclareFeedbackResponse.getBody().get("sbztbj"), 1), TaxDeclareStatusEnum.class); + if (taxDeclareStatusEnum == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156509, "服务异常,接口返回数据有误")); } - // 更新个税申报状态 - declareStatus.setTaxDeclareStatus(TaxDeclareStatusEnum.DECLARE_CANCELLING.getValue()); - declareStatus.setRequestId(declareTaxResponse.getBody().getRequestId()); + + //更新个税申报状态 + declareStatus.setTaxDeclareStatus(taxDeclareStatusEnum.getValue()); getTaxDeclareStatusService(user).updateTaxDeclareStatus(declareStatus, true); // 记录日志 diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 31a03fa2f..a288693c7 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -523,7 +523,7 @@ public class TaxDeclareRecordWrapper extends Service { @Override public void execute() { try { - getTaxDeclareRecordService(user).cancelDeclare(id, param.getReportType()); + getTaxDeclareRecordService(user).cancelDeclare(id, param.getReportType(),taxDeclarationRate); taxDeclarationRate.setFinish(true); } catch (SalaryRunTimeException e) { taxDeclarationRate.setStatus(false).setFinish(true).setMsg(e.getMessage()); From d267810e5c3e9ae8dd439f2f7ef089eb91c88126 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 27 Jun 2024 11:30:35 +0800 Subject: [PATCH 52/96] =?UTF-8?q?=E5=A4=84=E7=90=86=E6=8A=A5=E8=A1=A8bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index 63102bbe9..37c39a0d5 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -1244,7 +1244,7 @@ - AND salary_sob_id IN + AND t.salary_sob_id IN #{salarySobId} From 9c7c6de614c0713ea6ca83e2685682fadddeb86a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 27 Jun 2024 16:10:30 +0800 Subject: [PATCH 53/96] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=E5=BF=AB=E7=85=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/entity/salaryacct/bo/CalculateFormulaVarBO.java | 3 ++- .../engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java | 2 +- .../engine/salary/service/impl/SalaryAcctExcelServiceImpl.java | 1 - 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java index 8251ea51f..44575341b 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/CalculateFormulaVarBO.java @@ -32,6 +32,7 @@ import lombok.Data; import lombok.experimental.Accessors; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import weaver.general.Util; import java.lang.reflect.Field; import java.math.BigDecimal; @@ -555,7 +556,7 @@ public class CalculateFormulaVarBO { employeeMap.forEach((key, po) -> { // 获取po的状态 if(po.getStatus() != null && NumberUtil.isNumber(po.getStatus())) { - po.setStatusName(UserStatusEnum.getDefaultLabelByValue(new Integer(po.getStatus()))); + po.setStatusName(UserStatusEnum.getDefaultLabelByValue(new Integer(Util.null2s(po.getStatus(),"1")))); } List formulaVarValues = resultMap.computeIfAbsent(key, k -> Lists.newArrayList()); Map map = JsonUtil.parseMap(po, String.class); diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 4989bd7f2..f3a419a20 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -305,7 +305,7 @@ public class SalaryAcctResultBO { } else if ("status".equals(salarySobEmpField.getFieldCode())) { map.put("status", e.getStatus()); } else if ("statusName".equals(salarySobEmpField.getFieldCode())) { - map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(e.getStatus()))); + map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(Util.null2s(e.getStatus(),"1")))); } else { map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java index bab6f297d..7f2e440e1 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctExcelServiceImpl.java @@ -389,7 +389,6 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc // List headerList = new ArrayList<>(weaTableColumns); List headerList = new ArrayList<>(finalWeaTableColumns); // 查询薪资核算结果 - queryParam.setDynamicEmpInfo(true); List> resultMapList = getSalaryAcctResultService(user).listByParam(queryParam); From 77708b96ab7fef106f336be006a0d76772f7f51f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 28 Jun 2024 14:02:05 +0800 Subject: [PATCH 54/96] =?UTF-8?q?=E5=8D=87=E7=BA=A71?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/constant/SzyhApiConstant.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/com/engine/salary/constant/SzyhApiConstant.java b/src/com/engine/salary/constant/SzyhApiConstant.java index 5b22a491c..c4e0711ed 100644 --- a/src/com/engine/salary/constant/SzyhApiConstant.java +++ b/src/com/engine/salary/constant/SzyhApiConstant.java @@ -146,6 +146,8 @@ public class SzyhApiConstant { * 缴款凭证作废反馈 */ public static final String CANCEL_WITHHOLDING_VOUCHER_FEEDBACK = "gateway/iit/service/getCancelWithholdingVoucher"; + + /** * 完税证明 */ From edddf5f5577f15bbd5a1005404531f36b1505914 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 28 Jun 2024 14:42:23 +0800 Subject: [PATCH 55/96] =?UTF-8?q?=E5=A4=84=E7=90=868=E4=BD=8D=E5=B0=8F?= =?UTF-8?q?=E6=95=B0=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryacct/bo/SalaryAcctFormulaBO.java | 2 +- .../salary/formlua/entity/standard/ExcelResult.java | 12 ++++++++++++ .../service/impl/SalaryAcctCalculateServiceImpl.java | 3 +-- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java index 546b1036b..fecdd2999 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java @@ -62,7 +62,7 @@ public class SalaryAcctFormulaBO { salaryItemPattern = salarySobBackItemMap.get(salaryItem.getId()).getPattern(); } BigDecimal bigDecimalValue = SalaryEntityUtil.empty2Zero(value); - return SalaryEntityUtil.carryRule(salaryItemPattern, salaryItemRoundingMode, bigDecimalValue).toString(); + return SalaryEntityUtil.carryRule(salaryItemPattern, salaryItemRoundingMode, bigDecimalValue).toPlainString(); } /** diff --git a/src/com/engine/salary/formlua/entity/standard/ExcelResult.java b/src/com/engine/salary/formlua/entity/standard/ExcelResult.java index 66c5e05a8..defa5cde4 100644 --- a/src/com/engine/salary/formlua/entity/standard/ExcelResult.java +++ b/src/com/engine/salary/formlua/entity/standard/ExcelResult.java @@ -145,6 +145,18 @@ public class ExcelResult implements Serializable { this.runTime = runTime; } + public String getData2String() { + if (data == null) { + return ""; + } else { + if (data instanceof BigDecimal) { + return ((BigDecimal) data).toPlainString(); + } else { + return data.toString(); + } + } + } + @Override public String toString() { return "ExcelResult{" + diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index b83ceb4cb..09927a388 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -38,7 +38,6 @@ import org.springframework.util.StopWatch; import weaver.general.BaseBean; import weaver.general.Util; import weaver.hrm.User; -import weaver.wechat.util.Utils; import java.time.Month; import java.util.*; @@ -233,7 +232,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc if (Objects.nonNull(expressFormula)) { // 运行公式 ExcelResult result = runExpressFormula(expressFormula, formulaVarValueMap, simpleEmployee); - resultValue = Utils.null2String(result.getData()); + resultValue = result.getData2String(); //公式异常信息 if (!result.isStatus()) { String username = empInfo.stream().filter(emp -> StringUtils.equals("employeeInfo_username", emp.getFieldId())).findFirst().map(CalculateFormulaVarBO.FormulaVarValue::getFieldValue).orElse(""); From 458f10d09b21348d8b18f789d681c95c095d385e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Fri, 28 Jun 2024 15:42:10 +0800 Subject: [PATCH 56/96] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=80=83=E5=8B=A4?= =?UTF-8?q?=E5=BC=95=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/AttendQuoteDataServiceImpl.java | 58 +++++++++++-------- 1 file changed, 35 insertions(+), 23 deletions(-) diff --git a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java index 00d29b962..0b95a4a1d 100644 --- a/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java +++ b/src/com/engine/salary/service/impl/AttendQuoteDataServiceImpl.java @@ -9,6 +9,7 @@ import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.biz.AttendQuoteBiz; import com.engine.salary.biz.AttendQuoteDataBiz; import com.engine.salary.biz.AttendQuoteDataValueBiz; @@ -16,7 +17,6 @@ import com.engine.salary.biz.AttendQuoteFieldBiz; import com.engine.salary.common.LocalDateRange; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.bo.AttendQuoteDataBO; import com.engine.salary.entity.datacollection.dto.*; @@ -25,11 +25,12 @@ import com.engine.salary.entity.datacollection.po.AttendQuoteDataPO; import com.engine.salary.entity.datacollection.po.AttendQuoteDataValuePO; import com.engine.salary.entity.datacollection.po.AttendQuoteFieldPO; import com.engine.salary.entity.datacollection.po.AttendQuotePO; -import com.engine.salary.entity.salarysob.bo.SalarySobRangeBO; +import com.engine.salary.entity.salaryacct.bo.SalaryAcctEmployeeBO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; +import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO; +import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveDataDTO; import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO; -import com.engine.salary.entity.salarysob.param.SalarySobRangeEmpQueryParam; import com.engine.salary.entity.salarysob.po.SalarySobPO; -import com.engine.salary.entity.salarysob.po.SalarySobRangePO; import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.UserStatusEnum; import com.engine.salary.enums.datacollection.AttendQuoteSourceTypeEnum; @@ -125,6 +126,11 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa return MapperProxyFactory.getProxy(SalarySobRangeMapper.class); } + private SalaryArchiveService getSalaryArchiveService(User user) { + return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); + } + + private RemoteAttend4SalaryService getRemoteAttend4SalaryService(User user) { return ServiceUtil.getService(RemoteAttend4SalaryServiceImpl.class, user); @@ -328,39 +334,45 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa @Override public String syncAttendQuoteData(AttendQuoteDataSyncParam syncParam) { AttendQuoteDataSyncParam.checkParam(syncParam); - + Long salarySobId = syncParam.getSalarySobId(); String salaryYearMonth = syncParam.getSalaryYearMonth(); int year = Integer.parseInt(salaryYearMonth.split("-")[0]); int month = Integer.parseInt(salaryYearMonth.split("-")[1]); if (!SalaryDateUtil.checkYearMonth(salaryYearMonth)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100365, "薪资所属月格式有误,正确格式示例为'2021-01'")); } + // 1.获取已设置的可同步的考勤字段 List attendQuoteFields = getAttendQuoteSetFields(AttendQuoteSourceTypeEnum.QUOTE); if (CollectionUtils.isEmpty(attendQuoteFields)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100366, "请先设置同步字段")); } - // 获取薪资账套 - SalarySobCycleDTO salarySobCycle = getSalarySobService(user).getSalarySobCycle(syncParam.getSalarySobId(), YearMonth.of(year, month)); - // 2.薪资账套人员 - List employeeIds = new ArrayList<>(); - // 获取薪资账套人员 - List salarySobRanges = getSalarySobRangeMapper().listSome(SalarySobRangePO.builder().includeType(1).salarySobId(salarySobCycle.getSalarySobId()).build()); - List salarySobRangeEmpQueryParams = SalarySobRangeBO.convert2EmployeeQueryParam(salarySobRanges); - List> partition = Lists.partition(salarySobRangeEmpQueryParams, 100); - List employeeSalarySobIds = new ArrayList<>(); - partition.forEach(l -> employeeSalarySobIds.addAll(getSalarySobRangeMapper().listEmployeeIds(l))); - if (CollectionUtils.isEmpty(employeeSalarySobIds) || CollectionUtils.isEmpty(salarySobRangeEmpQueryParams)) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100367, "薪资账套还没有人员")); + // 获取薪资账套 + SalarySobCycleDTO salarySobCycleDTO = getSalarySobService(user).getSalarySobCycle(syncParam.getSalarySobId(), YearMonth.of(year, month)); + + // 根据薪资账套查询人员 + List salaryEmployees = getSalaryEmployeeService(user).listBySalarySobId(salarySobId); + if (CollectionUtils.isEmpty(salaryEmployees)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100367, "薪资账套没有人员")); } - // 账套外人员 - List employeeOtherIds = (List) syncParam.getEmployeeIds(); - employeeIds.addAll(employeeSalarySobIds); - employeeIds.addAll(CollectionUtils.emptyIfNull(employeeOtherIds)); + // 根据薪资账套查询薪资周期 + SalarySobPO salarySobPO = getSalarySobService(user).getById(salarySobId); + Long taxAgentId = salarySobPO.getTaxAgentId(); + + // 查询薪资档案,获取人员的个税扣缴义务人 + List employeeIds = SalaryEntityUtil.properties(salaryEmployees, DataCollectionEmployee::getEmployeeId, Collectors.toList()); + List salaryArchiveDataDTOS = getSalaryArchiveService(user).getSalaryArchiveTaxAgentData(salarySobCycleDTO.getSalaryCycle(), employeeIds, taxAgentId); + // 转换成薪资核算人员po + Date salaryDate = SalaryDateUtil.dateStrToLocalTime(salaryYearMonth + "-01"); + List salaryAcctEmployeePOS = SalaryAcctEmployeeBO.convert2Employee(salaryEmployees, SalaryAcctRecordPO.builder().salarySobId(salarySobId).salaryMonth(salaryDate).build(), salaryArchiveDataDTOS, (long) user.getUID()); + + //过滤掉不属于当前账套扣缴义务人的人员 + employeeIds = salaryAcctEmployeePOS.stream().filter(po -> Objects.equals(taxAgentId, po.getTaxAgentId())).map(SalaryAcctEmployeePO::getEmployeeId).collect(Collectors.toList()); + // 4.获取考勤模块数据 - List> attendQuoteSyncData = getAttendQuoteDataFromRemoteAttend(salarySobCycle.getAttendCycle(), employeeIds, attendQuoteFields); + List> attendQuoteSyncData = getAttendQuoteDataFromRemoteAttend(salarySobCycleDTO.getAttendCycle(), employeeIds, attendQuoteFields); List pos = new ArrayList<>(); List values = new ArrayList<>(); // 5.考勤引用数据处理 @@ -368,7 +380,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa if (CollectionUtils.isNotEmpty(attendQuoteSyncData)) { // 3.生成考勤引用 - AttendQuotePO attendQuote = getAttendQuote(AttendQuoteSourceTypeEnum.QUOTE, syncParam.getSalarySobId(), year, month, syncParam.getDescription()); + AttendQuotePO attendQuote = getAttendQuote(AttendQuoteSourceTypeEnum.QUOTE, salarySobId, year, month, syncParam.getDescription()); for (Long employeeId : employeeIds) { AttendQuoteDataPO po = new AttendQuoteDataPO(); From db93c2b8a840704843438cc7ddd596794201d9db Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Fri, 28 Jun 2024 17:22:34 +0800 Subject: [PATCH 57/96] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E5=88=86=E4=BA=AB=E8=AE=B0=E5=BD=95=E5=88=86=E9=A1=B5=E6=80=BB?= =?UTF-8?q?=E8=AE=A1=E6=95=B0bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/service/impl/SalaryStatisticsPushServiceImpl.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java index 56ae814ba..25f724899 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsPushServiceImpl.java @@ -654,7 +654,7 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt } else { salaryStatisticsPushPOS = getSalaryStatisticsPushMapper().listSome(SalaryStatisticsPushPO.builder().build()); } - + int total = salaryStatisticsPushPOS.size(); salaryStatisticsPushPOS = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), salaryStatisticsPushPOS); PageInfo dtoPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), SalaryStatisticsPushTableDTO.class); if (CollectionUtils.isNotEmpty(salaryStatisticsPushPOS)) { @@ -684,7 +684,7 @@ public class SalaryStatisticsPushServiceImpl extends Service implements SalarySt .build(); }).collect(Collectors.toList()); dtoPageInfo.setList(dtoList); - dtoPageInfo.setTotal(dtoList.size()); + dtoPageInfo.setTotal(total); } return dtoPageInfo; } From bdcdef34c222c2d1297a67a0f4968f5f261f03d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 1 Jul 2024 15:09:40 +0800 Subject: [PATCH 58/96] =?UTF-8?q?=E9=9D=9E=E6=AD=A3=E5=B8=B8=E5=B7=A5?= =?UTF-8?q?=E8=B5=84=E8=96=AA=E9=87=91=E7=9A=84=E4=B8=AA=E7=A8=8E=E8=A7=84?= =?UTF-8?q?=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GetASynIndividualIncomeTaxFeedbackResponse.java | 4 ++-- .../service/impl/SalarySobTaxRuleServiceImpl.java | 10 +++++++++- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java index f1bd7e0c7..741d0a9d5 100644 --- a/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java +++ b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java @@ -495,12 +495,12 @@ public class GetASynIndividualIncomeTaxFeedbackResponse extends BaseResponse { /** * 税率 必填:否 */ - @TaxField(name = "本月(次)工资薪金税税率", taxIndex = "sl") + @TaxField(name = "税率", taxIndex = "sl") private BigDecimal sl; /** * 速算扣除数 必填:否 */ - @TaxField(name = "本月(次)工资薪金税速算扣除数", taxIndex = "sskcs") + @TaxField(name = "速算扣除数", taxIndex = "sskcs") private BigDecimal sskcs; /** diff --git a/src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java b/src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java index 65e81008f..2b95251dc 100644 --- a/src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySobTaxRuleServiceImpl.java @@ -92,7 +92,15 @@ public class SalarySobTaxRuleServiceImpl extends Service implements SalarySobTax for (Integer incomeCategoryId : incomeCategoryIds) { IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(incomeCategoryId); - List taxRules = incomeCategoryEnum.getReportType().getTaxRules(); + List 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); From 39a2684196c878372d5ee501807944ff091974a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 2 Jul 2024 15:39:31 +0800 Subject: [PATCH 59/96] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E7=BC=B4=E6=AC=BE?= =?UTF-8?q?=E5=87=AD=E8=AF=81=E4=BD=9C=E5=BA=9F=E6=8E=A5=E5=8F=A3=20?= =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=AE=8C=E7=A8=8E=E8=AF=81=E6=98=8E=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/constant/SzyhApiConstant.java | 20 ++++++-- .../bo/EmployeeDeclareRefresh.java | 5 -- .../salaryacct/bo/SalaryAcctCalculateBO.java | 5 ++ .../remote/tax/client/CompanyClient.java | 12 ++--- .../remote/tax/client/TaxBaseClient.java | 36 +++++++++++++ .../remote/tax/client/TaxPaymentClient.java | 50 +++++++++++++++++++ .../impl/SalaryAcctCalculateServiceImpl.java | 7 +++ .../impl/SalaryAcctResultServiceImpl.java | 11 +++- .../impl/SalaryCalcTaxServiceImpl.java | 34 ++++++++++--- .../TaxPaymentWithheldVoucherServiceImpl.java | 17 +++---- .../TaxPaymentWithholdingServiceImpl.java | 12 +++-- ...xPaymentWithholdingVoucherServiceImpl.java | 6 +-- 12 files changed, 174 insertions(+), 41 deletions(-) create mode 100644 src/com/engine/salary/remote/tax/client/TaxPaymentClient.java diff --git a/src/com/engine/salary/constant/SzyhApiConstant.java b/src/com/engine/salary/constant/SzyhApiConstant.java index c4e0711ed..0d0ed10a7 100644 --- a/src/com/engine/salary/constant/SzyhApiConstant.java +++ b/src/com/engine/salary/constant/SzyhApiConstant.java @@ -151,11 +151,25 @@ public class SzyhApiConstant { /** * 完税证明 */ - public static final String GET_WITHHELD_VOUCHER = "gateway/iit/payment/getWithheldVoucher"; +// public static final String GET_WITHHELD_VOUCHER = "gateway/iit/payment/getWithheldVoucher"; + public static final String GET_WITHHELD_VOUCHER = "gateway/iit/service/getWithheldVoucher"; + /** - * 刷新缴款状态 + * 完税证明反馈 */ - public static final String GET_SYNC_WITHHOLDING_FEEDBACK = "gateway/iit/payment/getSyncWithholdingFeedback"; + public static final String GET_WITHHELD_VOUCHER_FEEDBACK = "gateway/iit/service/getWithheldVoucher"; + + /** + * 查询缴款状态 + */ +// public static final String GET_SYNC_WITHHOLDING_FEEDBACK = "gateway/iit/payment/getSyncWithholdingFeedback"; + public static final String GET_SYNC_WITHHOLDING_FEEDBACK = "gateway/iit/service/getSyncWithholdingFeedback"; + + /** + * 查询缴款状态反馈 + */ + public static final String GET_SYNC_WITHHOLDING_FEEDBACK_FEEDBACK = "gateway/iit/service/getSyncWithholding"; + /** * 个人养老金下载 diff --git a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java index 78d1f5874..484103c3a 100644 --- a/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java +++ b/src/com/engine/salary/entity/employeedeclare/bo/EmployeeDeclareRefresh.java @@ -125,11 +125,6 @@ public class EmployeeDeclareRefresh { employeeDeclare.setGender(SalaryCardUtil.judgeGender(idNum).getValue()); employeeDeclare.setBirthday(SalaryDateUtil.localDateToDate(SalaryCardUtil.judgeBirthday(idNum))); employeeDeclare.setNationality("中国"); - } else { - // fixme 阿富汗 -// employeeDeclare.setNationality("阿富汗"); -// employeeDeclare.setEntryDate(); -// employeeDeclare.setDepartureDate(); } // 对人员处理「人员状态」、「离职日期」 SalaryArchivePO salaryArchive = salaryArchiveMap.get(employeeDeclare.getEmployeeId()); diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java index f29ccd1ce..57c113390 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctCalculateBO.java @@ -120,6 +120,11 @@ public class SalaryAcctCalculateBO { */ private BlockingDeque results; + /** + * 个税项目 + */ + private List taxIds; + /** * 系统算税启用状态 */ diff --git a/src/com/engine/salary/remote/tax/client/CompanyClient.java b/src/com/engine/salary/remote/tax/client/CompanyClient.java index b57a2d726..3ebf962e9 100644 --- a/src/com/engine/salary/remote/tax/client/CompanyClient.java +++ b/src/com/engine/salary/remote/tax/client/CompanyClient.java @@ -21,9 +21,9 @@ public class CompanyClient extends TaxBaseClient { String requestId = request(url, requestParam); String getRegisterInfoFeedbackUrl = apiConfig.getHost() + SzyhApiConstant.GET_REGISTER_INFO_FEEDBACK_URL; - Map map = new HashMap<>(1); - map.put("requestId", requestId); - return response(getRegisterInfoFeedbackUrl, map, CompanyRegisterInfoResponse.class); + Map responseParam = new HashMap<>(1); + responseParam.put("requestId", requestId); + return response(getRegisterInfoFeedbackUrl, responseParam, CompanyRegisterInfoResponse.class); } public CheckPasswordResponse checkPassword(Map requestParam) { @@ -32,8 +32,8 @@ public class CompanyClient extends TaxBaseClient { String requestId = request(url, requestParam); String checkPasswordFeedbackUrl = apiConfig.getHost() + SzyhApiConstant.CHECK_PASSWORD_FEEDBACK_URL; - Map map = new HashMap<>(1); - map.put("requestId", requestId); - return response(checkPasswordFeedbackUrl, map, CheckPasswordResponse.class); + Map responseParam = new HashMap<>(1); + responseParam.put("requestId", requestId); + return response(checkPasswordFeedbackUrl, responseParam, CheckPasswordResponse.class); } } diff --git a/src/com/engine/salary/remote/tax/client/TaxBaseClient.java b/src/com/engine/salary/remote/tax/client/TaxBaseClient.java index 3057b55fb..b880cc01f 100644 --- a/src/com/engine/salary/remote/tax/client/TaxBaseClient.java +++ b/src/com/engine/salary/remote/tax/client/TaxBaseClient.java @@ -98,4 +98,40 @@ public class TaxBaseClient { } return response; } + + public T postResponse(String url, Map param, Class clazz) { + String reqJson = JsonUtil.toJsonString(param); + TaskUtil taskUtil = new TaskUtil(); + T response = null; + for (int i = 0; i <= threshold; ++i) { + Map header = SingnatureData.initHeader(new HashMap<>(1), apiConfig.getAppKey(), apiConfig.getAppSecret()); + String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); + response = JsonUtil.parseBean(res, clazz); + //记录接口 + taskUtil.writeApiTaskRecord(Util.null2String(taxAgentId), url, JsonUtil.toJsonString(param), res); + if (response == null || response.getHead() == null) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "服务异常,请稍后重试")); + } + // 如果税友返回错误信息 + String code = response.getHead().getCode(); + if (SzyhApiConstant.HANDLING_CODE.equals(code)) { + //进行中的任务,重试 + try { + Thread.sleep(6 * 1000); + } catch (InterruptedException e) { + log.error("", e); + } + if (threshold == i) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "未在预期时间内完成任务,请稍后重试!阀值:" + threshold)); + } + } else if (SzyhApiConstant.SUCCESS_CODE.equals(response.getHead().getCode())) { + //成功的任务,返回结果 + break; + } else { + //错误任务,提示 + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, response.getHead().getMsg())); + } + } + return response; + } } diff --git a/src/com/engine/salary/remote/tax/client/TaxPaymentClient.java b/src/com/engine/salary/remote/tax/client/TaxPaymentClient.java new file mode 100644 index 000000000..403b0e051 --- /dev/null +++ b/src/com/engine/salary/remote/tax/client/TaxPaymentClient.java @@ -0,0 +1,50 @@ +package com.engine.salary.remote.tax.client; + +import com.engine.salary.constant.SzyhApiConstant; +import com.engine.salary.entity.datacollection.response.QuerySpecialAmountResponse; +import com.engine.salary.entity.taxpayment.response.WithheldVoucherResponse; +import lombok.extern.slf4j.Slf4j; + +import java.util.HashMap; +import java.util.Map; + +@Slf4j +public class TaxPaymentClient extends TaxBaseClient { + public TaxPaymentClient(Long taxAgentId) { + super(taxAgentId); + } + + + /** + * 作废缴款凭证 + * + * @param requestParam + * @return + */ + public QuerySpecialAmountResponse cancelWithholdingVoucher(Map requestParam) { + String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER; + String requestId = request(url, requestParam); + + url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER_FEEDBACK + "?requestId=" + requestId; + Map responseParam = new HashMap<>(1); + return postResponse(url, responseParam, QuerySpecialAmountResponse.class); + + } + + + /** + * 开具完税证明 + * @param requestParam + * @return + */ + public WithheldVoucherResponse getWithheldVoucher(Map requestParam) { + String url = apiConfig.getHost() + SzyhApiConstant.GET_WITHHELD_VOUCHER; + String requestId = request(url, requestParam); + + url = apiConfig.getHost() + SzyhApiConstant.GET_WITHHELD_VOUCHER_FEEDBACK + "?requestId=" + requestId; + Map responseParam = new HashMap<>(1); + return postResponse(url, responseParam, WithheldVoucherResponse.class); + + } + +} diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 69c40951c..65821146b 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -196,6 +196,9 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc Set salarySobBackItemIds = SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId); Map salarySobBackItemMap = SalaryEntityUtil.convert2Map(salarySobBackItems, SalarySobBackItemPO::getSalaryItemId); List salaryAcctResultTempPOS = Lists.newArrayList(); + + //个税项目id + List taxIds = salaryAcctCalculateBO.getTaxIds(); sw.stop(); // 开始核算 sw.start("核算耗时"); @@ -225,6 +228,10 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc SalarySobItemPO salarySobItemPO = salaryItemIdKeySalarySobItemPOMap.get(salaryItemId); expressFormula = expressFormulaMap.get(salarySobItemPO.getFormulaId()); defaultValue = salarySobItemPO.getDefaultValue(); + } else if (taxIds.contains(salaryItemId)) { + //个税项目,默认只能从税局取。 + expressFormula = null; + defaultValue = ""; } else { expressFormula = expressFormulaMap.get(salaryItemPO.getFormulaId()); defaultValue = salaryItemPO.getDefaultValue(); diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index bd38b76f3..f68e8b815 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -202,6 +202,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return ServiceUtil.getService(SalaryAcctSobConfigServiceImpl.class, user); } + private SalarySobTaxRuleService getSalarySobTaxRuleService(User user) { + return ServiceUtil.getService(SalarySobTaxRuleServiceImpl.class, user); + } + @Override public List listBySalaryAcctRecordIds(Collection salaryAcctRecordIds) { if (CollectionUtils.isEmpty(salaryAcctRecordIds)) { @@ -786,8 +790,10 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 本次运算的回算薪资项目所涉及的变量 Set issuedFieldIds = getIssuedFieldIds(salarySobBackItems); // 9、计算薪资项目的运算优先级 -// List> salarySobItemsWithPriority = SalaryAcctCalculatePriorityBO.calculatePriority(salarySobItemPOS, salaryItemPOS, expressFormulas, salarySobBackItems, issuedFieldIds); List salarySobItemsWithPriority = sortItems(salarySobItemPOS, salarySobBackItems, salaryItemPOS, expressFormulas); + //账套中配置的个税字段,不需要系统算 + List salarySobTaxRulePOS = getSalarySobTaxRuleService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List taxIds = SalaryEntityUtil.properties(salarySobTaxRulePOS, SalarySobTaxRulePO::getSalaryItemId, Collectors.toList()); // 10、根据id查询其他合并计税的薪资核算记录 List otherSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAcctRecordPO.getId()); @@ -853,7 +859,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe .setChildMonitor(childMonitor) .setResults(calculateResults) .setCalculateKey(calculateKey) - .setTaxDeclarationFunction(taxDeclarationFunction); + .setTaxDeclarationFunction(taxDeclarationFunction) + .setTaxIds(taxIds); List finalSalarySobBackItems = salarySobBackItems; LocalRunnable localRunnable = new LocalRunnable() { @Override diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index 9e41240a4..1777067af 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -194,7 +194,8 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(160525, "接口流量不足,暂无法使用该功能,请先购买智能算薪接口流量")); } // 查询薪资核算记录 - SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryCalcTaxParam.getSalaryAcctRecordId()); + Long salaryAcctRecordId = salaryCalcTaxParam.getSalaryAcctRecordId(); + SalaryAcctRecordPO salaryAcctRecord = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); // 查询薪资核算记录关联的薪资核算人员 List salaryAcctEmployees = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecord.getId()); Map> salaryAcctEmployeeMap = SalaryEntityUtil.group2Map(salaryAcctEmployees, e -> e.getTaxAgentId() + "-" + e.getIncomeCategory()); @@ -218,7 +219,9 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe Map> employeeDeclareMap = SalaryEntityUtil.group2Map(employeeDeclares, EmployeeDeclarePO::getTaxAgentId); - List resultPOS = new ArrayList<>(); + List addResultPOS = new ArrayList<>(); + List updateResultPOS = new ArrayList<>(); + for (SalaryAcctCalcTaxReqPO salaryAcctCalcTaxReq : salaryAcctCalcTaxReqs) { CalculateClient calculateClient = new CalculateClient(salaryAcctCalcTaxReq.getTaxAgentId()); GetASynIndividualIncomeTaxFeedbackResponse feedbackResponse = calculateClient.getASynIndividualIncomeTaxFeedback(salaryAcctCalcTaxReq.getRequestId()); @@ -234,7 +237,7 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe continue; } List subEmployeeDeclares = employeeDeclareMap.get(salaryAcctCalcTaxReq.getTaxAgentId()); - + Date now = new Date(); // 获取不同所得项目的个税 for (SalaryAcctTaxAgentPO salaryAcctTaxAgent : subSalaryAcctTaxAgents) { IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(salaryAcctTaxAgent.getIncomeCategory()); @@ -255,17 +258,36 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe SalarySobTaxRuleDTO salarySobTaxRuleDTO = empIdResult.get(salaryAcctEmployee.getEmployeeId()); List taxRules = salarySobTaxRuleDTO.getTaxRules(); taxRules.forEach(rule -> { - SalaryAcctResultPO salaryAcctResultPO = salaryAcctResultValue.get(rule.getSalaryItemId()); + Long salaryItemId = rule.getSalaryItemId(); + SalaryAcctResultPO salaryAcctResultPO = salaryAcctResultValue.get(salaryItemId); if (salaryAcctResultPO != null) { salaryAcctResultPO.setResultValue(rule.getValue()); - resultPOS.add(salaryAcctResultPO); + updateResultPOS.add(salaryAcctResultPO); + } else { + salaryAcctResultPO = SalaryAcctResultPO.builder() + .salaryAcctRecordId(salaryAcctRecordId) + .salaryAcctEmpId(salaryAcctEmployee.getId()) + .employeeId(salaryAcctEmployee.getEmployeeId()) + .taxAgentId(salaryAcctEmployee.getTaxAgentId()) + .salarySobId(salaryAcctEmployee.getSalarySobId()) + .salaryItemId(salaryItemId) + .resultValue(rule.getValue()) + .originResultValue("") + .creator((long) user.getUID()) + .createTime(now) + .updateTime(now) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .deleteType(0) + .build(); + addResultPOS.add(salaryAcctResultPO); } }); } } } - getSalaryAcctResultService(user).batchUpdate(resultPOS); + getSalaryAcctResultService(user).batchSave(addResultPOS); + getSalaryAcctResultService(user).batchUpdate(updateResultPOS); getSalaryAcctCalcTaxReqService(user).deleteByRecordId(salaryAcctRecord.getId()); // 记录日志 getSalaryAcctResultService(user).writeBatchLog(salaryAcctRecord, Collections.emptyMap(), SalaryLogOperateTypeEnum.GET_CALC_TAX_FEEDBACK); diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java index 235bdeefd..16578143b 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithheldVoucherServiceImpl.java @@ -3,16 +3,14 @@ package com.engine.salary.service.impl; import com.alibaba.fastjson.JSON; import com.engine.salary.constant.SzyhApiConstant; import com.engine.salary.entity.datacollection.bo.DataCollectionBO; -import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; import com.engine.salary.entity.taxagent.response.SzyhResponseHead; -import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.entity.taxpayment.dto.TaxWithheldVoucherResultDTO; import com.engine.salary.entity.taxpayment.param.TaxPaymentQueryParam; -import com.engine.salary.entity.taxpayment.response.BaseResponse; import com.engine.salary.entity.taxpayment.response.WithheldVoucherResponse; import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; import com.engine.salary.enums.taxdeclaration.TaxPaymentServiceTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.remote.tax.client.TaxPaymentClient; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; @@ -35,17 +33,14 @@ public class TaxPaymentWithheldVoucherServiceImpl extends AbstractTaxPaymentServ return TaxPaymentServiceTypeEnum.WITHHELD_VOUCHER.getValue(); } - protected T getRequestIdResponse(TaxAgentTaxReturnPO returnPO, String taxAgentName, TaxPaymentQueryParam param, TaxDeclarationApiConfigPO apiConfig, Class clazz) { - String url = apiConfig.getHost() + SzyhApiConstant.GET_WITHHELD_VOUCHER; - Map requestParam = DataCollectionBO.getApiBaseQueryParams(returnPO, taxAgentName, SalaryDateUtil.getFormatYYYYMM(param.getTaxYearMonth())); - return postRequest(apiConfig, url, requestParam, clazz); - } - @Override public TaxWithheldVoucherResultDTO getWithheldVoucher(TaxPaymentQueryParam param) { TempWrapper tempWrapper = checkBeforeGetRequestIdResponse(param); - WithheldVoucherResponse queryResponse = getRequestIdResponse(tempWrapper.getTaxReturnPO(), tempWrapper.getTaxAgentPO().getName(), - param, tempWrapper.getApiConfigPO(), WithheldVoucherResponse.class); + + TaxPaymentClient taxPaymentClient = new TaxPaymentClient(param.getTaxAgentId()); + Map requestParam = DataCollectionBO.getApiBaseQueryParams(tempWrapper.getTaxReturnPO(), tempWrapper.getTaxAgentPO().getName(), SalaryDateUtil.getFormatYYYYMM(param.getTaxYearMonth())); + WithheldVoucherResponse queryResponse = taxPaymentClient.getWithheldVoucher(requestParam); + // 校验请求结果 String responseCode = Optional.ofNullable(queryResponse).map(WithheldVoucherResponse::getHead).map(SzyhResponseHead::getCode).orElse(null); WithheldVoucherResponse.Feedback feedback = Optional.ofNullable(queryResponse).map(WithheldVoucherResponse::getBody).map(body -> { diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index 743f1631c..4b37d0c0f 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -22,11 +22,15 @@ import com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum; import com.engine.salary.enums.taxdeclaration.TaxPaymentServiceTypeEnum; import com.engine.salary.enums.taxdeclaration.TaxPaymentStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.remote.tax.client.TaxPaymentClient; import com.engine.salary.util.*; import lombok.extern.slf4j.Slf4j; import java.math.BigDecimal; -import java.util.*; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; /** * 三方缴款 @@ -80,7 +84,6 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService Integer paymentStatus = SalaryEntityUtil.getIntValue(feedback.getJkzt(), -1); TaxPaymentStatusEnum paymentStatusEnum = SalaryEnumUtil.enumMatchByValue(paymentStatus, TaxPaymentStatusEnum.class); if (paymentStatusEnum != TaxPaymentStatusEnum.SUCCESS) { - // fixme throw new SalaryRunTimeException(String.format("缴款失败,失败原因:%s,申报状态:%s", feedback.getJksbyy(), feedback.getSbzt())); } // 累计实缴金额 @@ -153,13 +156,12 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService .taxAgentId(taxDeclareRecord.getTaxAgentId()) .taxYearMonth(taxDeclareRecord.getTaxCycle()) .build()); - // if (paymentRequestPO != null) { + TaxPaymentClient taxPaymentClient = new TaxPaymentClient(taxDeclareRecord.getTaxAgentId()); List statuses = getTaxDeclareStatusService(user).getTaxDeclareStatusByTaxDeclareRecordId(taxDeclareRecord.getId()); statuses.forEach(status -> { requestParam.put("sblx", status.getReportType()); - String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER; - QuerySpecialAmountResponse cancelResponse = postRequest(apiConfig, url, requestParam, QuerySpecialAmountResponse.class); + QuerySpecialAmountResponse cancelResponse = taxPaymentClient.cancelWithholdingVoucher(requestParam); SzyhResponseHead head = Optional.ofNullable(cancelResponse).map(QuerySpecialAmountResponse::getHead) .orElse(new SzyhResponseHead("0", SalaryI18nUtil.getI18nLabel(183785, "银联缴款凭证作废失败,请稍后重试"))); SalaryAssert.isTrue(SzyhApiConstant.SUCCESS_CODE.equals(head.getCode()) || SzyhApiConstant.NONE_VOUCHER_CODE.equals(head.getCode()), head.getMsg()); diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java index 028a86c7c..517548901 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java @@ -22,6 +22,7 @@ import com.engine.salary.enums.SalaryOnOffEnum; import com.engine.salary.enums.taxdeclaration.TaxPaymentServiceTypeEnum; import com.engine.salary.enums.taxdeclaration.TaxPaymentStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.remote.tax.client.TaxPaymentClient; import com.engine.salary.util.*; import lombok.extern.slf4j.Slf4j; @@ -115,11 +116,10 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS // if (paymentRequestPO != null) { List statuses = getTaxDeclareStatusService(user).getTaxDeclareStatusByTaxDeclareRecordId(taxDeclareRecord.getId()); + TaxPaymentClient taxPaymentClient = new TaxPaymentClient(taxDeclareRecord.getTaxAgentId()); statuses.forEach(status -> { requestParam.put("sblx", status.getReportType()); - - String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER; - QuerySpecialAmountResponse cancelResponse = postRequest(apiConfig, url, requestParam, QuerySpecialAmountResponse.class); + QuerySpecialAmountResponse cancelResponse = taxPaymentClient.cancelWithholdingVoucher(requestParam); SzyhResponseHead head = Optional.ofNullable(cancelResponse).map(QuerySpecialAmountResponse::getHead) .orElse(new SzyhResponseHead("0", SalaryI18nUtil.getI18nLabel(183785, "银联缴款凭证作废失败,请稍后重试"))); SalaryAssert.isTrue(SzyhApiConstant.SUCCESS_CODE.equals(head.getCode()), head.getMsg()); From 3f723d77508a83d616dffaf217a1bd7c605c0309 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 2 Jul 2024 19:13:14 +0800 Subject: [PATCH 60/96] =?UTF-8?q?=E8=AE=B0=E5=BD=95=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/remote/tax/client/CalculateClient.java | 4 +++- .../service/impl/SalaryAcctCalculateServiceImpl.java | 11 +++++++---- .../salary/service/impl/SalaryCalcTaxServiceImpl.java | 5 +++++ 3 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/com/engine/salary/remote/tax/client/CalculateClient.java b/src/com/engine/salary/remote/tax/client/CalculateClient.java index 6c27ef8fc..4a120a015 100644 --- a/src/com/engine/salary/remote/tax/client/CalculateClient.java +++ b/src/com/engine/salary/remote/tax/client/CalculateClient.java @@ -4,6 +4,7 @@ import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTa import com.engine.salary.util.HttpUtil; import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SingnatureData; +import com.engine.salary.util.TaskUtil; import lombok.extern.slf4j.Slf4j; import java.util.Collections; @@ -23,7 +24,8 @@ public class CalculateClient extends TaxBaseClient{ params.put("requestId", requestId); Map header = SingnatureData.initHeader(Collections.emptyMap(), apiConfig.getAppKey(), apiConfig.getAppSecret()); String res = HttpUtil.getRequest(url, header, params); - + TaskUtil taskUtil = new TaskUtil(); + taskUtil.writeApiTaskRecord(requestId, url, requestId, res); log.info("getDeclareTaxResultFeedback res --- {}", res); return JsonUtil.parseObject(res, GetASynIndividualIncomeTaxFeedbackResponse.class); diff --git a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java index 65821146b..5dd7be258 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctCalculateServiceImpl.java @@ -228,14 +228,17 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc SalarySobItemPO salarySobItemPO = salaryItemIdKeySalarySobItemPOMap.get(salaryItemId); expressFormula = expressFormulaMap.get(salarySobItemPO.getFormulaId()); defaultValue = salarySobItemPO.getDefaultValue(); - } else if (taxIds.contains(salaryItemId)) { - //个税项目,默认只能从税局取。 - expressFormula = null; - defaultValue = ""; } else { expressFormula = expressFormulaMap.get(salaryItemPO.getFormulaId()); defaultValue = salaryItemPO.getDefaultValue(); } + + if (taxIds.contains(salaryItemId)) { + //个税项目,默认只能从税局取。 + expressFormula = null; + defaultValue = ""; + } + if (Objects.nonNull(expressFormula)) { // 运行公式 ExcelResult result = runExpressFormula(expressFormula, formulaVarValueMap, simpleEmployee); diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index 1777067af..f6182ce83 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -158,6 +158,8 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe String reqJson = JsonUtil.toJsonString(entry.getValue()); // 请求第三方供应商 String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); + TaskUtil taskUtil = new TaskUtil(); + taskUtil.writeApiTaskRecord(salaryAcctRecordId+"", url, reqJson, res); DeclareTaxResponse declareTaxResponse = JsonUtil.parseObject(res, DeclareTaxResponse.class); if (Objects.isNull(declareTaxResponse) || Objects.isNull(declareTaxResponse.getHead())) { @@ -256,6 +258,9 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe continue; } SalarySobTaxRuleDTO salarySobTaxRuleDTO = empIdResult.get(salaryAcctEmployee.getEmployeeId()); + if (salarySobTaxRuleDTO == null) { + continue; + } List taxRules = salarySobTaxRuleDTO.getTaxRules(); taxRules.forEach(rule -> { Long salaryItemId = rule.getSalaryItemId(); From 420d0a1fffe0fe48bdf4780382cd5ef6ddb2a85a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 3 Jul 2024 15:34:23 +0800 Subject: [PATCH 61/96] =?UTF-8?q?=E5=8D=87=E7=BA=A7=E5=AE=8C=E7=A8=8E?= =?UTF-8?q?=E8=AF=81=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/constant/SzyhApiConstant.java | 2 +- .../engine/salary/remote/tax/client/TaxPaymentClient.java | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/constant/SzyhApiConstant.java b/src/com/engine/salary/constant/SzyhApiConstant.java index 0d0ed10a7..8a7fe765a 100644 --- a/src/com/engine/salary/constant/SzyhApiConstant.java +++ b/src/com/engine/salary/constant/SzyhApiConstant.java @@ -157,7 +157,7 @@ public class SzyhApiConstant { /** * 完税证明反馈 */ - public static final String GET_WITHHELD_VOUCHER_FEEDBACK = "gateway/iit/service/getWithheldVoucher"; + public static final String GET_WITHHELD_VOUCHER_FEEDBACK = "gateway/iit/service/getWithheldVoucherFeedback"; /** * 查询缴款状态 diff --git a/src/com/engine/salary/remote/tax/client/TaxPaymentClient.java b/src/com/engine/salary/remote/tax/client/TaxPaymentClient.java index 403b0e051..5d06903cc 100644 --- a/src/com/engine/salary/remote/tax/client/TaxPaymentClient.java +++ b/src/com/engine/salary/remote/tax/client/TaxPaymentClient.java @@ -34,16 +34,18 @@ public class TaxPaymentClient extends TaxBaseClient { /** * 开具完税证明 + * * @param requestParam * @return */ - public WithheldVoucherResponse getWithheldVoucher(Map requestParam) { + public WithheldVoucherResponse getWithheldVoucher(Map requestParam) { String url = apiConfig.getHost() + SzyhApiConstant.GET_WITHHELD_VOUCHER; String requestId = request(url, requestParam); - url = apiConfig.getHost() + SzyhApiConstant.GET_WITHHELD_VOUCHER_FEEDBACK + "?requestId=" + requestId; + url = apiConfig.getHost() + SzyhApiConstant.GET_WITHHELD_VOUCHER_FEEDBACK; Map responseParam = new HashMap<>(1); - return postResponse(url, responseParam, WithheldVoucherResponse.class); + responseParam.put("requestId", requestId); + return response(url, responseParam, WithheldVoucherResponse.class); } From 3a7c1c2d29747f85c67a4ffb6174d72fc49c37a3 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 3 Jul 2024 18:00:29 +0800 Subject: [PATCH 62/96] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dsql=E9=9A=90=E8=97=8Fbu?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/mapper/salarysob/SalarySobMapper.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/com/engine/salary/mapper/salarysob/SalarySobMapper.xml b/src/com/engine/salary/mapper/salarysob/SalarySobMapper.xml index 8c89c191b..087eb9a34 100644 --- a/src/com/engine/salary/mapper/salarysob/SalarySobMapper.xml +++ b/src/com/engine/salary/mapper/salarysob/SalarySobMapper.xml @@ -117,15 +117,15 @@ #{id} + + AND tax_agent_id = #{taxAgentId} + AND tax_agent_id IN #{taxAgentId} - - AND tax_agent_id = #{taxAgentId} - ORDER BY create_time DESC From 0c22a57f1961ca85d44c05e5b1dc5e2df86ad25d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 4 Jul 2024 10:32:09 +0800 Subject: [PATCH 63/96] =?UTF-8?q?=E5=8F=96=E6=B6=88=E5=88=B7=E6=96=B0?= =?UTF-8?q?=E7=BC=B4=E6=AC=BE=E7=8A=B6=E6=80=81=20=E5=8F=96=E6=B6=88?= =?UTF-8?q?=E7=BA=BF=E4=B8=8B=E7=BC=B4=E6=AC=BE=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../remote/tax/client/TaxPaymentClient.java | 22 ++++- .../TaxPaymentWithholdingServiceImpl.java | 64 +++++++-------- ...xPaymentWithholdingVoucherServiceImpl.java | 80 ++++++++++--------- src/com/engine/salary/util/TaskUtil.java | 33 ++++---- .../salary/web/TaxPaymentController.java | 4 + .../salary/wrapper/TaxPaymentWrapper.java | 11 ++- 6 files changed, 120 insertions(+), 94 deletions(-) diff --git a/src/com/engine/salary/remote/tax/client/TaxPaymentClient.java b/src/com/engine/salary/remote/tax/client/TaxPaymentClient.java index 5d06903cc..2f80692b1 100644 --- a/src/com/engine/salary/remote/tax/client/TaxPaymentClient.java +++ b/src/com/engine/salary/remote/tax/client/TaxPaymentClient.java @@ -2,6 +2,7 @@ package com.engine.salary.remote.tax.client; import com.engine.salary.constant.SzyhApiConstant; import com.engine.salary.entity.datacollection.response.QuerySpecialAmountResponse; +import com.engine.salary.entity.taxpayment.response.SyncWithholdingFeedbackResponse; import com.engine.salary.entity.taxpayment.response.WithheldVoucherResponse; import lombok.extern.slf4j.Slf4j; @@ -25,9 +26,26 @@ public class TaxPaymentClient extends TaxBaseClient { String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER; String requestId = request(url, requestParam); - url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER_FEEDBACK + "?requestId=" + requestId; + url = apiConfig.getHost() + SzyhApiConstant.CANCEL_WITHHOLDING_VOUCHER_FEEDBACK; Map responseParam = new HashMap<>(1); - return postResponse(url, responseParam, QuerySpecialAmountResponse.class); + responseParam.put("requestId", requestId); + return response(url, responseParam, QuerySpecialAmountResponse.class); + + } + + /** + * 刷新缴款状态 + * @param requestParam + * @return + */ + public SyncWithholdingFeedbackResponse getSyncWithholding(Map requestParam) { + String url = apiConfig.getHost() + SzyhApiConstant.GET_SYNC_WITHHOLDING_FEEDBACK; + String requestId = request(url, requestParam); + + url = apiConfig.getHost() + SzyhApiConstant.GET_SYNC_WITHHOLDING_FEEDBACK_FEEDBACK; + Map responseParam = new HashMap<>(1); + responseParam.put("requestId", requestId); + return response(url, responseParam, SyncWithholdingFeedbackResponse.class); } diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index 4b37d0c0f..678f125da 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -3,7 +3,6 @@ package com.engine.salary.service.impl; import com.alibaba.fastjson.JSON; import com.engine.salary.constant.SzyhApiConstant; import com.engine.salary.entity.datacollection.bo.DataCollectionBO; -import com.engine.salary.entity.datacollection.response.QuerySpecialAmountResponse; import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; import com.engine.salary.entity.taxagent.response.SzyhResponseHead; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; @@ -13,16 +12,13 @@ import com.engine.salary.entity.taxpayment.dto.TaxAgreementFeedbackResultDTO; import com.engine.salary.entity.taxpayment.dto.TaxAmountFormDTO; import com.engine.salary.entity.taxpayment.dto.TaxFeedbackResultDTO; import com.engine.salary.entity.taxpayment.param.TaxPaymentQueryParam; -import com.engine.salary.entity.taxpayment.po.TaxPaymentRequestPO; import com.engine.salary.entity.taxpayment.response.BaseResponse; import com.engine.salary.entity.taxpayment.response.WithholdingFeedbackResponse; -import com.engine.salary.enums.SalaryOnOffEnum; import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; import com.engine.salary.enums.taxdeclaration.TaxDeclareStatusEnum; import com.engine.salary.enums.taxdeclaration.TaxPaymentServiceTypeEnum; import com.engine.salary.enums.taxdeclaration.TaxPaymentStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; -import com.engine.salary.remote.tax.client.TaxPaymentClient; import com.engine.salary.util.*; import lombok.extern.slf4j.Slf4j; @@ -143,40 +139,38 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService @Override protected TempWrapper checkBeforeGetRequestIdResponse(TaxPaymentQueryParam param) { TempWrapper tempWrapper = super.checkBeforeGetRequestIdResponse(param); - Map requestParam = DataCollectionBO.getApiBaseQueryParams(tempWrapper.getTaxReturnPO(), tempWrapper.getTaxAgentPO().getName(), SalaryDateUtil.getFormatYYYYMM(param.getTaxYearMonth())); - cancelWithholdingVoucher(tempWrapper.getApiConfigPO(), tempWrapper.getTaxDeclareRecord(), requestParam); return tempWrapper; } - @Override - public void cancelWithholdingVoucher(TaxDeclarationApiConfigPO apiConfig, TaxDeclareRecordPO taxDeclareRecord, Map requestParam) { - TaxPaymentRequestPO paymentRequestPO = getTaxPaymentRequestMapper().getOne(TaxPaymentRequestPO - .builder() - .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) - .taxAgentId(taxDeclareRecord.getTaxAgentId()) - .taxYearMonth(taxDeclareRecord.getTaxCycle()) - .build()); -// if (paymentRequestPO != null) { - TaxPaymentClient taxPaymentClient = new TaxPaymentClient(taxDeclareRecord.getTaxAgentId()); - List statuses = getTaxDeclareStatusService(user).getTaxDeclareStatusByTaxDeclareRecordId(taxDeclareRecord.getId()); - statuses.forEach(status -> { - requestParam.put("sblx", status.getReportType()); - QuerySpecialAmountResponse cancelResponse = taxPaymentClient.cancelWithholdingVoucher(requestParam); - SzyhResponseHead head = Optional.ofNullable(cancelResponse).map(QuerySpecialAmountResponse::getHead) - .orElse(new SzyhResponseHead("0", SalaryI18nUtil.getI18nLabel(183785, "银联缴款凭证作废失败,请稍后重试"))); - SalaryAssert.isTrue(SzyhApiConstant.SUCCESS_CODE.equals(head.getCode()) || SzyhApiConstant.NONE_VOUCHER_CODE.equals(head.getCode()), head.getMsg()); - - getTaxPaymentRequestMapper().updateFeedbackByRequestTypeTaxAgentIdTaxYearMonth(TaxPaymentRequestPO - .builder() - .feedback(SalaryOnOffEnum.ON.getValue()) - .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) - .taxAgentId(taxDeclareRecord.getTaxAgentId()) - .taxYearMonth(taxDeclareRecord.getTaxCycle()) - .build()); - }); - -// } - } +// @Override +// public void cancelWithholdingVoucher(TaxDeclarationApiConfigPO apiConfig, TaxDeclareRecordPO taxDeclareRecord, Map requestParam) { +// TaxPaymentRequestPO paymentRequestPO = getTaxPaymentRequestMapper().getOne(TaxPaymentRequestPO +// .builder() +// .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) +// .taxAgentId(taxDeclareRecord.getTaxAgentId()) +// .taxYearMonth(taxDeclareRecord.getTaxCycle()) +// .build()); +//// if (paymentRequestPO != null) { +// TaxPaymentClient taxPaymentClient = new TaxPaymentClient(taxDeclareRecord.getTaxAgentId()); +// List statuses = getTaxDeclareStatusService(user).getTaxDeclareStatusByTaxDeclareRecordId(taxDeclareRecord.getId()); +// statuses.forEach(status -> { +// requestParam.put("sblx", status.getReportType()); +// QuerySpecialAmountResponse cancelResponse = taxPaymentClient.cancelWithholdingVoucher(requestParam); +// SzyhResponseHead head = Optional.ofNullable(cancelResponse).map(QuerySpecialAmountResponse::getHead) +// .orElse(new SzyhResponseHead("0", SalaryI18nUtil.getI18nLabel(183785, "银联缴款凭证作废失败,请稍后重试"))); +// SalaryAssert.isTrue(SzyhApiConstant.SUCCESS_CODE.equals(head.getCode()) || SzyhApiConstant.NONE_VOUCHER_CODE.equals(head.getCode()), head.getMsg()); +// +// getTaxPaymentRequestMapper().updateFeedbackByRequestTypeTaxAgentIdTaxYearMonth(TaxPaymentRequestPO +// .builder() +// .feedback(SalaryOnOffEnum.ON.getValue()) +// .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) +// .taxAgentId(taxDeclareRecord.getTaxAgentId()) +// .taxYearMonth(taxDeclareRecord.getTaxCycle()) +// .build()); +// }); +// +//// } +// } protected BaseResponse getFeedbackResponse(TaxDeclarationApiConfigPO apiConfig, String requestId) { String url = apiConfig.getHost() + SzyhApiConstant.DECLARE_WITH_HOLDING_FEEDBACK; diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java index 517548901..6eaabba46 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java @@ -16,20 +16,19 @@ import com.engine.salary.entity.taxpayment.param.TaxPaymentQueryParam; import com.engine.salary.entity.taxpayment.po.TaxPaymentRequestPO; import com.engine.salary.entity.taxpayment.response.BaseResponse; import com.engine.salary.entity.taxpayment.response.SyncWithholdingFeedbackResponse; -import com.engine.salary.entity.taxpayment.response.WithholdingFeedbackResponse; import com.engine.salary.entity.taxpayment.response.WithholdingVoucherFeedbackResponse; import com.engine.salary.enums.SalaryOnOffEnum; import com.engine.salary.enums.taxdeclaration.TaxPaymentServiceTypeEnum; -import com.engine.salary.enums.taxdeclaration.TaxPaymentStatusEnum; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.remote.tax.client.TaxPaymentClient; -import com.engine.salary.util.*; +import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SalaryAssert; +import com.engine.salary.util.SalaryDateUtil; +import com.engine.salary.util.SalaryI18nUtil; import lombok.extern.slf4j.Slf4j; -import java.math.BigDecimal; import java.util.List; import java.util.Map; -import java.util.Objects; import java.util.Optional; import java.util.stream.Collectors; @@ -134,40 +133,43 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS // } } - @Override - public void syncWithholdingFeedback(TaxPaymentQueryParam param) { - TempWrapper tempWrapper = checkBeforeGetRequestIdResponse(param); - SyncWithholdingFeedbackResponse response = getRequestIdResponse(tempWrapper.getTaxReturnPO(), tempWrapper.getTaxAgentPO().getName(), - param, tempWrapper.getApiConfigPO(), SyncWithholdingFeedbackResponse.class); - // 校验请求结果 - String responseCode = Optional.ofNullable(response) - .map(SyncWithholdingFeedbackResponse::getHead) - .map(SzyhResponseHead::getCode) - .orElse(null); - WithholdingFeedbackResponse.Feedback body = Optional.ofNullable(response) - .map(SyncWithholdingFeedbackResponse::getBody) - .orElse(null); - if (!SzyhApiConstant.SUCCESS_CODE.equals(responseCode) || Objects.isNull(body)) { - log.info("syncWithholdingFeedback code error:{}", JSON.toJSONString(response)); - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "税局接口异常,请稍后重试")); - } - Integer paymentStatus = SalaryEntityUtil.getIntValue(body.getJkzt(), -1); - TaxPaymentStatusEnum paymentStatusEnum = SalaryEnumUtil.enumMatchByValue(paymentStatus, TaxPaymentStatusEnum.class); - if (paymentStatusEnum != TaxPaymentStatusEnum.SUCCESS) { - throw new SalaryRunTimeException(String.format("查询失败,失败原因:%s,申报状态:%s", body.getJksbyy(), body.getSbzt())); - } - // 累计实缴金额 - BigDecimal totalPaid = body.getKkfhlb().stream().map(e -> new BigDecimal(e.getSjse())).reduce(BigDecimal.ZERO, BigDecimal::add); - // 更新个税申报记录状态为已缴款 - updateTaxDeclareRecord(param, totalPaid); - // 更新三方缴款反馈状态 - getTaxPaymentRequestMapper().updateFeedbackByTaxDeclareRecordId(TaxPaymentRequestPO - .builder() - .feedback(SalaryOnOffEnum.ON.getValue()) - .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) - .taxDeclareRecordId(param.getTaxDeclareRecordId()) - .build()); - } +// @Override +// public void syncWithholdingFeedback(TaxPaymentQueryParam param) { +// TempWrapper tempWrapper = checkBeforeGetRequestIdResponse(param); +// TaxPaymentClient taxPaymentClient = new TaxPaymentClient(param.getTaxAgentId()); +// Map requestParam = DataCollectionBO.getApiBaseQueryParams(tempWrapper.getTaxReturnPO(), tempWrapper.getTaxAgentPO().getName(), SalaryDateUtil.getFormatYYYYMM(param.getTaxYearMonth())); +// requestParam.put("bblx", param.getReportType()); +// SyncWithholdingFeedbackResponse response = taxPaymentClient.getSyncWithholding(requestParam); +// +// // 校验请求结果 +// String responseCode = Optional.ofNullable(response) +// .map(SyncWithholdingFeedbackResponse::getHead) +// .map(SzyhResponseHead::getCode) +// .orElse(null); +// WithholdingFeedbackResponse.Feedback body = Optional.ofNullable(response) +// .map(SyncWithholdingFeedbackResponse::getBody) +// .orElse(null); +// if (!SzyhApiConstant.SUCCESS_CODE.equals(responseCode) || Objects.isNull(body)) { +// log.info("syncWithholdingFeedback code error:{}", JSON.toJSONString(response)); +// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "税局接口异常,请稍后重试")); +// } +// Integer paymentStatus = SalaryEntityUtil.getIntValue(body.getJkzt(), -1); +// TaxPaymentStatusEnum paymentStatusEnum = SalaryEnumUtil.enumMatchByValue(paymentStatus, TaxPaymentStatusEnum.class); +// if (paymentStatusEnum != TaxPaymentStatusEnum.SUCCESS) { +// throw new SalaryRunTimeException(String.format("查询失败,失败原因:%s,申报状态:%s", body.getJksbyy(), body.getSbzt())); +// } +// // 累计实缴金额 +// BigDecimal totalPaid = body.getKkfhlb().stream().map(e -> new BigDecimal(e.getSjse())).reduce(BigDecimal.ZERO, BigDecimal::add); +// // 更新个税申报记录状态为已缴款 +// updateTaxDeclareRecord(param, totalPaid); +// // 更新三方缴款反馈状态 +// getTaxPaymentRequestMapper().updateFeedbackByTaxDeclareRecordId(TaxPaymentRequestPO +// .builder() +// .feedback(SalaryOnOffEnum.ON.getValue()) +// .requestType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()) +// .taxDeclareRecordId(param.getTaxDeclareRecordId()) +// .build()); +// } @Override public void cancelWithholdingVoucher(TaxPaymentQueryParam param) { diff --git a/src/com/engine/salary/util/TaskUtil.java b/src/com/engine/salary/util/TaskUtil.java index 9b498d316..63df65134 100644 --- a/src/com/engine/salary/util/TaskUtil.java +++ b/src/com/engine/salary/util/TaskUtil.java @@ -17,20 +17,25 @@ public class TaskUtil { } public void writeApiTaskRecord(String source, String api, String param, String response) { - log.info("source:{} , api:{} , param:{} , response : {}", source, api, param, response); - Date now = new Date(); - ApiTaskRecordPO build = ApiTaskRecordPO.builder() - .id(IdGenerator.generate()) - .source(source) - .api(api) - .param(param) - .response(response) - .createTime(now) - .updateTime(now) - .deleteType(0) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .build(); - getApiTaskRecordMapper().insertIgnoreNull(build); + try { + log.info("source:{} , api:{} , param:{} , response : {}", source, api, param, response); + Date now = new Date(); + ApiTaskRecordPO build = ApiTaskRecordPO.builder() + .id(IdGenerator.generate()) + .source(source) + .api(api) + .param(param) + .response(response) + .createTime(now) + .updateTime(now) + .deleteType(0) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .build(); + getApiTaskRecordMapper().insertIgnoreNull(build); + }catch (Exception e){ + log.error("writeApiTaskRecord error", e); + } + } diff --git a/src/com/engine/salary/web/TaxPaymentController.java b/src/com/engine/salary/web/TaxPaymentController.java index 07e5203ca..800e9e91d 100644 --- a/src/com/engine/salary/web/TaxPaymentController.java +++ b/src/com/engine/salary/web/TaxPaymentController.java @@ -103,6 +103,7 @@ public class TaxPaymentController { @Path("/voucher/print") @POST @Produces(MediaType.APPLICATION_JSON) + @Deprecated public String printVoucher(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxPaymentQueryParam param) { param.setType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()); User user = HrmUserVarify.getUser(request, response); @@ -118,6 +119,7 @@ public class TaxPaymentController { @Path("/voucher/print/feedback") @POST @Produces(MediaType.APPLICATION_JSON) + @Deprecated public String printVoucherFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxPaymentQueryParam param) { param.setType(TaxPaymentServiceTypeEnum.WITHHOLDING_VOUCHER.getValue()); User user = HrmUserVarify.getUser(request, response); @@ -133,6 +135,7 @@ public class TaxPaymentController { @Path("/voucher/cancel") @POST @Produces(MediaType.APPLICATION_JSON) + @Deprecated public String cancelVoucher(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxPaymentQueryParam param) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getTaxPaymentWrapper(user)::cancelVoucher, param); @@ -161,6 +164,7 @@ public class TaxPaymentController { @Path("/voucher/status/sync") @POST @Produces(MediaType.APPLICATION_JSON) + @Deprecated public String getSyncWithholdingFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxPaymentQueryParam param) { User user = HrmUserVarify.getUser(request, response); return new ResponseResult(user).run(getTaxPaymentWrapper(user)::getSyncWithholdingFeedback, param); diff --git a/src/com/engine/salary/wrapper/TaxPaymentWrapper.java b/src/com/engine/salary/wrapper/TaxPaymentWrapper.java index 41e153802..258af95af 100644 --- a/src/com/engine/salary/wrapper/TaxPaymentWrapper.java +++ b/src/com/engine/salary/wrapper/TaxPaymentWrapper.java @@ -33,9 +33,6 @@ public class TaxPaymentWrapper extends Service { return ServiceUtil.getService(TaxPaymentWithholdingServiceImpl.class, user).getFeedback(param); } - public TaxFeedbackResultDTO printVoucherFeedback(TaxPaymentQueryParam param) { - return ServiceUtil.getService(TaxPaymentWithholdingVoucherServiceImpl.class, user).getFeedback(param); - } public String getRequestId(TaxPaymentQueryParam param) { return taxPaymentServiceFactory.get(param.getType()).getRequestId(param); @@ -49,11 +46,17 @@ public class TaxPaymentWrapper extends Service { return ServiceUtil.getService(TaxPaymentWithheldVoucherServiceImpl.class, user).getWithheldVoucher(param); } + @Deprecated public void getSyncWithholdingFeedback(TaxPaymentQueryParam param) { ServiceUtil.getService(TaxPaymentWithholdingVoucherServiceImpl.class, user).syncWithholdingFeedback(param); } - + @Deprecated public void cancelVoucher(TaxPaymentQueryParam param) { ServiceUtil.getService(TaxPaymentWithholdingVoucherServiceImpl.class, user).cancelWithholdingVoucher(param); } + @Deprecated + public TaxFeedbackResultDTO printVoucherFeedback(TaxPaymentQueryParam param) { + return ServiceUtil.getService(TaxPaymentWithholdingVoucherServiceImpl.class, user).getFeedback(param); + } + } From 95b9f5452a4e891dfb02eea5a8c79a9a57b9e29f Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 8 Jul 2024 10:20:21 +0800 Subject: [PATCH 64/96] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=A1=A3=E6=A1=88?= =?UTF-8?q?=E5=AF=BC=E5=87=BAfix=E5=A4=9A=E9=80=89=E4=B9=89=E5=8A=A1?= =?UTF-8?q?=E4=BA=BAbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/web/SalaryArchiveController.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/com/engine/salary/web/SalaryArchiveController.java b/src/com/engine/salary/web/SalaryArchiveController.java index 6b6e59ae1..0fbe3797c 100644 --- a/src/com/engine/salary/web/SalaryArchiveController.java +++ b/src/com/engine/salary/web/SalaryArchiveController.java @@ -16,6 +16,7 @@ import com.engine.salary.wrapper.SalaryArchiveWrapper; import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -486,6 +487,11 @@ public class SalaryArchiveController { if (StringUtils.isNotBlank(taxAgentId)) { param.setTaxAgentId(Long.valueOf(taxAgentId)); } + String taxAgentIdsStr = request.getParameter("taxAgentIds"); + if (StringUtils.isNotBlank(taxAgentIdsStr)) { + List taxAgentIds = Arrays.stream(taxAgentIdsStr.split(",")).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); + param.setTaxAgentIds(taxAgentIds); + } String departmentIds = request.getParameter("departmentIds"); if (StringUtils.isNotBlank(departmentIds)) { param.setDepartmentIds(Arrays.stream(departmentIds.split(",")).map(Long::valueOf).collect(Collectors.toList())); From 7ef229dfde4f1c1137886e5f6da50ff6b243d8b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 10 Jul 2024 10:43:11 +0800 Subject: [PATCH 65/96] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E8=B0=83=E5=B7=AEbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/service/impl/SICompensationServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java index 25bf127a0..a6c4cb5d8 100644 --- a/src/com/engine/salary/service/impl/SICompensationServiceImpl.java +++ b/src/com/engine/salary/service/impl/SICompensationServiceImpl.java @@ -470,7 +470,7 @@ public class SICompensationServiceImpl extends Service implements SICompensation //记录操作日志 InsuranceAccountBatchPO targetPO = getInsuranceAccountBatchMapper().getByBillMonth(insuranceAccountDetailPO.getBillMonth(), insuranceAccountDetailPO.getPaymentOrganization()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(insuranceAccountDetailPO.getPaymentOrganization()); - DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(insuranceAccountDetailPO.getEmployeeId()); + DataCollectionEmployee empInfo = getSalaryEmployeeService(user).getEmployeeById(insuranceAccountDetailPO.getEmployeeId()); LoggerContext loggerContext = new LoggerContext(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); From 84ce2821f66cb94af8792414359062677b5e63ab Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 10 Jul 2024 14:01:09 +0800 Subject: [PATCH 66/96] =?UTF-8?q?1=E3=80=81=E5=AE=9A=E8=96=AA=E3=80=81?= =?UTF-8?q?=E8=BF=94=E8=81=98action=E4=BC=98=E5=8C=96=202=E3=80=81?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=AF=BC=E5=87=BA=E6=97=B6excel=E4=B8=AD?= =?UTF-8?q?=E5=8F=8C=E5=87=BB=E5=8D=95=E5=85=83=E6=A0=BC=E5=8F=98=E6=88=90?= =?UTF-8?q?=E9=BB=91=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/action/CheckInitSalaryAction.java | 110 +++++++++++++---- .../salary/action/InitSalaryAction.java | 115 +++++++++++++----- .../engine/salary/action/RehireAction.java | 105 +++++++++------- .../bo/SalaryArchiveExcelBO.java | 12 +- .../mapper/archive/SalaryArchiveMapper.java | 8 ++ .../mapper/archive/SalaryArchiveMapper.xml | 7 ++ .../impl/SalaryArchiveExcelServiceImpl.java | 4 +- .../salary/util/excel/ExcelUtilPlus.java | 23 +++- 8 files changed, 276 insertions(+), 108 deletions(-) diff --git a/src/com/engine/salary/action/CheckInitSalaryAction.java b/src/com/engine/salary/action/CheckInitSalaryAction.java index d93217792..34dd5782a 100644 --- a/src/com/engine/salary/action/CheckInitSalaryAction.java +++ b/src/com/engine/salary/action/CheckInitSalaryAction.java @@ -2,11 +2,23 @@ package com.engine.salary.action; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; +import com.engine.salary.mapper.archive.SalaryArchiveMapper; +import com.engine.salary.service.SalaryArchiveService; +import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.impl.SalaryArchiveServiceImpl; +import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.wrapper.SalaryArchiveWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import weaver.conn.RecordSet; import weaver.general.Util; import weaver.hrm.User; @@ -25,6 +37,18 @@ public class CheckInitSalaryAction implements Action { return ServiceUtil.getService(SalaryArchiveWrapper.class, user); } + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + private SalaryArchiveService getSalaryArchiveService(User user) { + return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); + } + + private SalaryArchiveMapper getSalaryArchiveMapper() { + return MapperProxyFactory.getProxy(SalaryArchiveMapper.class); + } + private String tableName; @@ -57,40 +81,72 @@ public class CheckInitSalaryAction implements Action { String value = fieldMap.get(processField); list.add(new SalaryField(processField, salaryName, value)); } - List> importData = new ArrayList<>(); Map importDataMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); - if(!importDataMap.containsKey("生效日期")){ - importDataMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); - } - if(!importDataMap.containsKey("最后发薪日期")){ - importDataMap.put("最后发薪日期", ""); - } - importData.add(importDataMap); - SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() - .importDatas(importData) - .build(); - - //操作人 - String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(SalaryField::getValue).orElse("1"); - Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).checkSalaryArchiveInit(build); - - List errorNotice = (List) map.get("errorNotice"); - if (CollectionUtils.isNotEmpty(errorNotice)) { - log.error("定薪检查存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); - List> excelComments = (List>) map.get("errorNotice"); - StringBuilder message = new StringBuilder(""); - for (Map comments : excelComments) { - message.append(comments.get("message")).append("\n"); - } - requestInfo.getRequestManager().setMessage(message.toString()); - return FAILURE_AND_CONTINUE; - } + return doSalaryArchiveInit(requestInfo, importDataMap); } catch (Exception e) { log.error("定薪检查异常", e); requestInfo.getRequestManager().setMessage(e.getMessage()); return FAILURE_AND_CONTINUE; } + } + + public String doSalaryArchiveInit(RequestInfo requestInfo, Map importDataMap) { + User user = new User(); + user.setLoginid("sysadmin"); + user.setUid(1); + List> importData = new ArrayList<>(); + if(!importDataMap.containsKey("生效日期")){ + importDataMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); + } + if(!importDataMap.containsKey("最后发薪日期")){ + importDataMap.put("最后发薪日期", ""); + } + importData.add(importDataMap); + + // 首先判断是否已经存在薪资档案,且薪资档案状态为待定薪 + String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); + String empIdStr = importDataMap.getOrDefault("员工id", "").toString(); + if (StringUtils.isBlank(taxAgentName)) { + requestInfo.getRequestManager().setMessage("个税扣缴义务人不能为空"); + return FAILURE_AND_CONTINUE; + } + // 获取义务人信息 + List taxAgentPOS = getTaxAgentService(user).list(TaxAgentQueryParam.builder().name(taxAgentName).build()); + if (CollectionUtils.isEmpty(taxAgentPOS)) { + requestInfo.getRequestManager().setMessage("个税扣缴义务人不存在"); + return FAILURE_AND_CONTINUE; + } + Long taxAgentId = taxAgentPOS.get(0).getId(); + // 获取员工id + if (NumberUtils.isCreatable(empIdStr)) { + List salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(taxAgentId).employeeId(Long.valueOf(empIdStr)).build()); + if (CollectionUtils.isNotEmpty(salaryArchivePOList) && !salaryArchivePOList.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.PENDING.getValue())) { + // 存在薪资档案,且薪资档案状态不是待定薪,修改状态为待定薪 + salaryArchivePOList.get(0).setRunStatus(SalaryArchiveStatusEnum.PENDING.getValue()); + salaryArchivePOList.get(0).setPayEndDate(null); + getSalaryArchiveMapper().update(salaryArchivePOList.get(0)); + } + } + + SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() + .importDatas(importData) + .build(); + + //操作人 + Map map = getSalaryArchiveWrapper(user).checkSalaryArchiveInit(build); + + List errorNotice = (List) map.get("errorNotice"); + if (CollectionUtils.isNotEmpty(errorNotice)) { + log.error("定薪检查存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); + List> excelComments = (List>) map.get("errorNotice"); + StringBuilder message = new StringBuilder(""); + for (Map comments : excelComments) { + message.append(comments.get("message")).append("\n"); + } + requestInfo.getRequestManager().setMessage(message.toString()); + return FAILURE_AND_CONTINUE; + } return SUCCESS; } diff --git a/src/com/engine/salary/action/InitSalaryAction.java b/src/com/engine/salary/action/InitSalaryAction.java index 4b2b0472b..3593dcb9b 100644 --- a/src/com/engine/salary/action/InitSalaryAction.java +++ b/src/com/engine/salary/action/InitSalaryAction.java @@ -2,11 +2,23 @@ package com.engine.salary.action; import com.engine.common.util.ServiceUtil; import com.engine.salary.entity.salaryarchive.param.SalaryArchiveImportActionParam; +import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; +import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.salaryarchive.SalaryArchiveStatusEnum; +import com.engine.salary.mapper.archive.SalaryArchiveMapper; +import com.engine.salary.service.SalaryArchiveService; +import com.engine.salary.service.TaxAgentService; +import com.engine.salary.service.impl.SalaryArchiveServiceImpl; +import com.engine.salary.service.impl.TaxAgentServiceImpl; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.wrapper.SalaryArchiveWrapper; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.lang3.math.NumberUtils; import weaver.conn.RecordSet; import weaver.general.Util; import weaver.hrm.User; @@ -25,6 +37,18 @@ public class InitSalaryAction implements Action { return ServiceUtil.getService(SalaryArchiveWrapper.class, user); } + private SalaryArchiveService getSalaryArchiveService(User user) { + return ServiceUtil.getService(SalaryArchiveServiceImpl.class, user); + } + + private TaxAgentService getTaxAgentService(User user) { + return ServiceUtil.getService(TaxAgentServiceImpl.class, user); + } + + private SalaryArchiveMapper getSalaryArchiveMapper() { + return MapperProxyFactory.getProxy(SalaryArchiveMapper.class); + } + private String tableName; @@ -39,12 +63,10 @@ public class InitSalaryAction implements Action { @Override public String execute(RequestInfo requestInfo) { try { - Property[] properties = requestInfo.getMainTableInfo().getProperty(); Map fieldMap = Arrays.stream(properties).collect(Collectors.toMap(Property::getName, property -> Util.null2String(property.getValue()))); - RecordSet rs = new RecordSet(); String queryImageId = "select salaryname,processfield from " + tableName + " where workflowid = ?"; @@ -57,44 +79,79 @@ public class InitSalaryAction implements Action { String value = fieldMap.get(processField); list.add(new SalaryField(processField, salaryName, value)); } - List> importData = new ArrayList<>(); + Map importDataMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); - if(!importDataMap.containsKey("生效日期")){ - importDataMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); - } - if(!importDataMap.containsKey("最后发薪日期")){ - importDataMap.put("最后发薪日期", ""); - } - importData.add(importDataMap); - SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() - .importDatas(importData) - .build(); - - //操作人 - String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(SalaryField::getValue).orElse("1"); - Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).importSalaryArchiveInit(build); - - List errorNotice = (List) map.get("errorNotice"); - if (CollectionUtils.isNotEmpty(errorNotice)) { - log.error("定薪存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); - List> excelComments = (List>) map.get("errorNotice"); - StringBuilder message = new StringBuilder(""); - for (Map comments : excelComments) { - message.append(comments.get("message")).append("\n"); - } - requestInfo.getRequestManager().setMessage(message.toString()); - return FAILURE_AND_CONTINUE; - } + return doSalaryArchiveInit(requestInfo, importDataMap); } catch (Exception e) { log.error("定薪异常", e); requestInfo.getRequestManager().setMessage(e.getMessage()); return FAILURE_AND_CONTINUE; } + } + + public String doSalaryArchiveInit(RequestInfo requestInfo, Map importDataMap) { + User user = new User(); + user.setLoginid("sysadmin"); + user.setUid(1); + List> importData = new ArrayList<>(); + if(!importDataMap.containsKey("生效日期")){ + importDataMap.put("生效日期", SalaryDateUtil.getFormatDate(new Date())); + } + if(!importDataMap.containsKey("最后发薪日期")){ + importDataMap.put("最后发薪日期", ""); + } + importData.add(importDataMap); + + // 首先判断是否已经存在薪资档案,且薪资档案状态为待定薪 + String taxAgentName = importDataMap.getOrDefault("个税扣缴义务人", "").toString(); + String empIdStr = importDataMap.getOrDefault("员工id", "").toString(); + if (StringUtils.isBlank(taxAgentName)) { + requestInfo.getRequestManager().setMessage("个税扣缴义务人不能为空"); + return FAILURE_AND_CONTINUE; + } + // 获取义务人信息 + List taxAgentPOS = getTaxAgentService(user).list(TaxAgentQueryParam.builder().name(taxAgentName).build()); + if (CollectionUtils.isEmpty(taxAgentPOS)) { + requestInfo.getRequestManager().setMessage("个税扣缴义务人不存在"); + return FAILURE_AND_CONTINUE; + } + Long taxAgentId = taxAgentPOS.get(0).getId(); + // 获取员工id + if (NumberUtils.isCreatable(empIdStr)) { + List salaryArchivePOList = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(taxAgentId).employeeId(Long.valueOf(empIdStr)).build()); + if (CollectionUtils.isNotEmpty(salaryArchivePOList) && !salaryArchivePOList.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.PENDING.getValue())) { + // 存在薪资档案,且薪资档案状态不是待定薪,修改状态为待定薪 + salaryArchivePOList.get(0).setRunStatus(SalaryArchiveStatusEnum.PENDING.getValue()); + salaryArchivePOList.get(0).setPayEndDate(null); + getSalaryArchiveMapper().update(salaryArchivePOList.get(0)); + } + } + + SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() + .importDatas(importData) + .build(); + + //操作人 + String uid = importDataMap.getOrDefault("操作人", "1").toString(); + Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).importSalaryArchiveInit(build); + + List errorNotice = (List) map.get("errorNotice"); + if (CollectionUtils.isNotEmpty(errorNotice)) { + log.error("定薪存在异常 requestId:{} ,参数:{}, map:{}", requestInfo.getRequestid(), build, map); + List> excelComments = (List>) map.get("errorNotice"); + StringBuilder message = new StringBuilder(""); + for (Map comments : excelComments) { + message.append(comments.get("message")).append("\n"); + } + requestInfo.getRequestManager().setMessage(message.toString()); + return FAILURE_AND_CONTINUE; + } return SUCCESS; } + class SalaryField { private String processField; diff --git a/src/com/engine/salary/action/RehireAction.java b/src/com/engine/salary/action/RehireAction.java index d0acd6e27..ac236b54a 100644 --- a/src/com/engine/salary/action/RehireAction.java +++ b/src/com/engine/salary/action/RehireAction.java @@ -16,6 +16,7 @@ import com.engine.salary.service.TaxAgentService; import com.engine.salary.service.impl.SalaryArchiveServiceImpl; import com.engine.salary.service.impl.TaxAgentManageRangeServiceImpl; import com.engine.salary.service.impl.TaxAgentServiceImpl; +import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.db.MapperProxyFactory; import com.engine.salary.wrapper.SalaryArchiveWrapper; @@ -89,9 +90,9 @@ public class RehireAction implements Action { String value = fieldMap.get(processField); list.add(new SalaryField(processField, salaryName, value)); } - Map salaryFieldMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); - String taxAgentName = salaryFieldMap.get("个税扣缴义务人"); - String empIdStr = salaryFieldMap.get("员工id"); + Map salaryFieldMap = SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue); + String taxAgentName = salaryFieldMap.getOrDefault("个税扣缴义务人", "").toString(); + String empIdStr = salaryFieldMap.getOrDefault("员工id", "").toString(); if (StringUtils.isBlank(taxAgentName) || StringUtils.isBlank(empIdStr)) { requestInfo.getRequestManager().setMessage("个税扣缴义务人、或员工id不能为空"); return FAILURE_AND_CONTINUE; @@ -107,47 +108,69 @@ public class RehireAction implements Action { Long employeeId = Long.valueOf(empIdStr); List salaryArchivePOS = getSalaryArchiveService(user).listSome(SalaryArchivePO.builder().taxAgentId(taxAgentId).employeeId(employeeId).build()); if (CollectionUtils.isEmpty(salaryArchivePOS)){ - requestInfo.getRequestManager().setMessage("该个税扣缴义务人下,该员工不存在薪资档案!"); - return FAILURE_AND_CONTINUE; + // 直接走定薪action生成档案 + InitSalaryAction initSalaryAction = new InitSalaryAction(); + return initSalaryAction.doSalaryArchiveInit(requestInfo, salaryFieldMap); + + // requestInfo.getRequestManager().setMessage("该个税扣缴义务人下,该员工不存在薪资档案!"); + // return FAILURE_AND_CONTINUE; } else if (salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue())) { - requestInfo.getRequestManager().setMessage("该个税扣缴义务人下,该员工没有发过薪。需取消停薪后,申请定薪流程!"); - return FAILURE_AND_CONTINUE; - } - - if (salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue())) { - // 停薪来自待停薪 1、取消停薪 - getSalaryArchiveWrapper(user).cancelStop(Collections.singletonList(salaryArchivePOS.get(0).getId())); - } - if (salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()) || salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.SUSPEND.getValue())) { - // 1、如果不在人员范围内则把他加入义务人的人员范围,2、删除待办 - addTaxAgentRangeIfNotExist(taxAgentId, employeeId, user); - getSalaryArchiveWrapper(user).deleteSuspendTodo(Collections.singletonList(salaryArchivePOS.get(0).getId())); - } - - // 调薪 - List> importData = new ArrayList<>(); - importData.add(SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue)); - - SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() - .importDatas(importData) - .build(); - - //操作人 - String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(RehireAction.SalaryField::getValue).orElse("1"); - Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).adjustmentSalaryArchive(build); - - List errorNotice = (List) map.get("errorNotice"); - if (CollectionUtils.isNotEmpty(errorNotice)) { - // 回滚档案状态 + // 先把状态变成待定薪然后走定薪action + salaryArchivePOS.get(0).setRunStatus(SalaryArchiveStatusEnum.PENDING.getValue()); + salaryArchivePOS.get(0).setPayEndDate(null); getSalaryArchiveMapper().update(salaryArchivePOS.get(0)); - log.error("调薪存在异常 requestId:{} map:{}", requestInfo.getRequestid(), map); - List> excelComments = (List>) map.get("errorNotice"); - StringBuilder message = new StringBuilder(""); - for (Map comments : excelComments) { - message.append(comments.get("message")).append("\n"); + InitSalaryAction initSalaryAction = new InitSalaryAction(); + return initSalaryAction.doSalaryArchiveInit(requestInfo, salaryFieldMap); + + // requestInfo.getRequestManager().setMessage("该个税扣缴义务人下,该员工没有发过薪。需取消停薪后,申请定薪流程!"); + // return FAILURE_AND_CONTINUE; + } else { + if (salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue())) { + // 停薪来自待停薪 1、取消停薪 + getSalaryArchiveWrapper(user).cancelStop(Collections.singletonList(salaryArchivePOS.get(0).getId())); + } + if (salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.STOP_FROM_SUSPEND.getValue()) || + salaryArchivePOS.get(0).getRunStatus().equals(SalaryArchiveStatusEnum.SUSPEND.getValue())) { + // 1、如果不在人员范围内则把他加入义务人的人员范围,2、删除待办 + addTaxAgentRangeIfNotExist(taxAgentId, employeeId, user); + getSalaryArchiveWrapper(user).deleteSuspendTodo(Collections.singletonList(salaryArchivePOS.get(0).getId())); + } + + // 调薪 + List> importData = new ArrayList<>(); + importData.add(SalaryEntityUtil.convert2Map(list, SalaryField::getSalaryName, SalaryField::getValue)); + + SalaryArchiveImportActionParam build = SalaryArchiveImportActionParam.builder() + .importDatas(importData) + .build(); + + //操作人 + String uid = list.stream().filter(f -> f.salaryName.equals("操作人")).findFirst().map(RehireAction.SalaryField::getValue).orElse("1"); + Map map = getSalaryArchiveWrapper(new User(Integer.parseInt(uid))).adjustmentSalaryArchive(build); + + List errorNotice = (List) map.get("errorNotice"); + if (CollectionUtils.isNotEmpty(errorNotice)) { + // 回滚档案状态 + getSalaryArchiveMapper().update(salaryArchivePOS.get(0)); + log.error("调薪存在异常 requestId:{} map:{}", requestInfo.getRequestid(), map); + List> excelComments = (List>) map.get("errorNotice"); + StringBuilder message = new StringBuilder(""); + for (Map comments : excelComments) { + message.append(comments.get("message")).append("\n"); + } + requestInfo.getRequestManager().setMessage(message.toString()); + return FAILURE_AND_CONTINUE; + } + // 如果有起始发薪日期字段,则更新档案的起始发薪日期 + String startPayDate = salaryFieldMap.getOrDefault("起始发薪日期", "").toString(); + if (StringUtils.isNotBlank(startPayDate)) { + Date date = SalaryDateUtil.dateStrToLocalDate(startPayDate); + if (date != null) { + Long salaryArchiveId = salaryArchivePOS.get(0).getId(); + getSalaryArchiveMapper().updatePayStartDateById(salaryArchiveId, date); + } + } - requestInfo.getRequestManager().setMessage(message.toString()); - return FAILURE_AND_CONTINUE; } } catch (Exception e) { log.error("返聘调薪异常", e); diff --git a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java index 3332fff79..58eaabcad 100644 --- a/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java +++ b/src/com/engine/salary/entity/salaryarchive/bo/SalaryArchiveExcelBO.java @@ -21,14 +21,16 @@ import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum; import com.engine.salary.enums.salarysob.TargetTypeEnum; import com.engine.salary.util.SalaryDateUtil; import com.engine.salary.util.SalaryI18nUtil; +import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.excel.ExcelComment; import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.common.collect.Maps; -import com.engine.salary.util.db.IdGenerator; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.math.NumberUtils; +import weaver.general.Util; +import weaver.hrm.User; import java.time.LocalDate; import java.util.*; @@ -338,7 +340,7 @@ public class SalaryArchiveExcelBO extends Service { * @param importHandleParam * @return */ - public static boolean singleRowCheck(List allTodoSalaryArchives, Map map, List headers, int effectiveTimeIndex, List> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam) { + public static boolean singleRowCheck(List allTodoSalaryArchives, Map map, List headers, int effectiveTimeIndex, List> excelComments, int errorCount, SalaryArchiveImportHandleParam importHandleParam, User user) { //是否是流程 boolean process = importHandleParam.isProcess(); @@ -655,7 +657,7 @@ public class SalaryArchiveExcelBO extends Service { // 7.薪资项目列处理(待定薪\定薪的初始化\定薪的调薪) } else { isError = handleSalaryItem(isError, effectiveTimeIndex, excelComments, errorCount, j, - effectiveTime, finalSalaryArchive, adjustReason, importHandleParam, key.toString(), cellVal, map); + effectiveTime, finalSalaryArchive, adjustReason, importHandleParam, key.toString(), cellVal, map, user); } } @@ -805,14 +807,14 @@ public class SalaryArchiveExcelBO extends Service { public static boolean handleSalaryItem(boolean isError, int effectiveTimeIndex, List> excelComments, int errorCount, int j, Date effectiveTime, SalaryArchivePO finalSalaryArchive, String salaryItemAdjustReason, SalaryArchiveImportHandleParam importHandleParam, - String key, String cellVal, Map map) { + String key, String cellVal, Map map, User user) { String rowindex = "第" + map.get("index") + "行"; // 薪资项目数据 if (isError || importHandleParam.isSuspendList() || (importHandleParam.isSalaryItemAdjust() && effectiveTime == null) || finalSalaryArchive == null) { return isError; } - Optional optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e -> e.getName().equals(key)).findFirst(); + Optional optionalSalaryItem = importHandleParam.getSalaryItems().stream().filter(e -> Util.formatMultiLang(e.getName(), String.valueOf(user.getLanguage())).equals(key)).findFirst(); // 可以处理薪资项目的条件:有薪资项目+待定薪列表+定薪列表(调薪和初始化导入) boolean isEnable = optionalSalaryItem.isPresent() && (importHandleParam.isPendingList() || importHandleParam.isInit() || importHandleParam.isSalaryItemAdjust()); if (isEnable) { diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java index 79f7dcf30..a11f48491 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.java @@ -6,6 +6,7 @@ import com.engine.salary.entity.salaryarchive.po.SalaryArchivePO; import org.apache.ibatis.annotations.Param; import java.util.Collection; +import java.util.Date; import java.util.List; public interface SalaryArchiveMapper { @@ -135,4 +136,11 @@ public interface SalaryArchiveMapper { List listPayEndDateIsNull(@Param("ids")List employeeIds); List listPayStartDateIsNull(@Param("runStatus")String runStatus); + + /** + * 更新起始发薪日期 + * @param salaryArchiveId + * @param date + */ + void updatePayStartDateById(@Param("id")Long salaryArchiveId, @Param("payStartDate")Date date); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml index 951429b32..259cb45d1 100644 --- a/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml +++ b/src/com/engine/salary/mapper/archive/SalaryArchiveMapper.xml @@ -871,5 +871,12 @@ #{id} + + UPDATE hrsa_salary_archive + + pay_start_date= #{payStartDate} + + WHERE id = #{id} + \ No newline at end of file diff --git a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java index c655d2d93..acc81e362 100644 --- a/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryArchiveExcelServiceImpl.java @@ -492,7 +492,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch map = data.get(i); map.put("index", i + 2); // 3.校验行内容 - boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam); + boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam, user); if (isError) { errorCount += 1; // 添加错误数据 @@ -600,7 +600,7 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch map = data.get(i); map.put("index", i + 2); // 3.校验行内容 - boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam); + boolean isError = SalaryArchiveExcelBO.singleRowCheck(allTodoSalaryArchives, map, headers, effectiveTimeIndex, excelComments, errorCount, importHandleParam, user); if (isError) { errorCount += 1; // 添加错误数据 diff --git a/src/com/engine/salary/util/excel/ExcelUtilPlus.java b/src/com/engine/salary/util/excel/ExcelUtilPlus.java index 3707f2f7c..748c12c79 100644 --- a/src/com/engine/salary/util/excel/ExcelUtilPlus.java +++ b/src/com/engine/salary/util/excel/ExcelUtilPlus.java @@ -587,14 +587,27 @@ public class ExcelUtilPlus { start = "0"; } XSSFCellStyle numberRedCellStyle = workbook.createCellStyle(); - BeanUtils.copyProperties(redCellStyle, numberRedCellStyle); + // 不能copy,在excel里编辑时背景变成了黑色 + // BeanUtils.copyProperties(redCellStyle, numberRedCellStyle); + numberRedCellStyle.setWrapText(true); + numberRedCellStyle.setBorderLeft(BorderStyle.THIN); + numberRedCellStyle.setBorderRight(BorderStyle.THIN); + numberRedCellStyle.setBorderTop(BorderStyle.THIN); + numberRedCellStyle.setBorderBottom(BorderStyle.THIN); numberRedCellStyle.setFont(redFont); short format = df.getFormat(start + Stream.generate(() -> "0").limit(p).collect(Collectors.joining()) + "_ "); numberRedCellStyle.setDataFormat(format); // 最后一行红色 numberRedCellStyleMap.put(p, numberRedCellStyle); XSSFCellStyle numberCellStyle = workbook.createCellStyle(); - BeanUtils.copyProperties(cellStyle, numberCellStyle); + // BeanUtils.copyProperties(cellStyle, numberCellStyle); + numberCellStyle.setFont(font);// 选择需要用到的字体格式 + numberCellStyle.setWrapText(true); + numberCellStyle.setBorderLeft(BorderStyle.THIN); + numberCellStyle.setBorderRight(BorderStyle.THIN); + numberCellStyle.setBorderTop(BorderStyle.THIN); + numberCellStyle.setBorderBottom(BorderStyle.THIN); + numberCellStyle.setDataFormat(format); numberCellStyleMap.put(p, numberCellStyle); }); @@ -622,13 +635,14 @@ public class ExcelUtilPlus { cell.setCellType(CellType.STRING); cell.setCellValue(String.valueOf(o)); } else if (o instanceof BigDecimal) { - cell.setCellType(CellType.NUMERIC); - cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue()); if (lastRowRed && rowIndex == rowList.size() - 1) { cell.setCellStyle(numberRedCellStyleMap.get(patternList.get(cellIndex))); } else { cell.setCellStyle(numberCellStyleMap.get(patternList.get(cellIndex))); } + cell.setCellType(CellType.NUMERIC); + double value = o == null ? 0 : ((BigDecimal) o).doubleValue(); + cell.setCellValue(value); } else if (o instanceof Boolean) { cell.setCellType(CellType.BOOLEAN); cell.setCellValue(String.valueOf(o)); @@ -692,6 +706,7 @@ public class ExcelUtilPlus { cellStyle.setBorderRight(BorderStyle.THIN); cellStyle.setBorderTop(BorderStyle.THIN); cellStyle.setBorderBottom(BorderStyle.THIN); + cellStyle.setFillPattern(FillPatternType.NO_FILL); XSSFCellStyle redCellStyle = workbook.createCellStyle(); XSSFFont redFont = workbook.createFont(); From a6f02082d84b644246db7dde098215bab3869836 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Wed, 10 Jul 2024 15:01:49 +0800 Subject: [PATCH 67/96] =?UTF-8?q?fix=E7=A4=BE=E4=BF=9D=E7=A6=8F=E5=88=A9?= =?UTF-8?q?=E5=8F=B0=E8=B4=A6=E9=9D=9E=E7=B3=BB=E7=BB=9F=E4=BA=BA=E5=91=98?= =?UTF-8?q?=E6=97=A5=E5=BF=97=E7=A9=BA=E6=8C=87=E9=92=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/service/impl/SIAccountServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java index f95fb8244..56d7898c6 100644 --- a/src/com/engine/salary/service/impl/SIAccountServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIAccountServiceImpl.java @@ -3699,7 +3699,7 @@ public class SIAccountServiceImpl extends Service implements SIAccountService { encryptUtil.decrypt(insuranceAccountDetailPO, InsuranceAccountDetailPO.class); InsuranceAccountBatchPO targetPO = getInsuranceAccountBatchMapper().getByBillMonth(insuranceAccountDetailPO.getBillMonth(), insuranceAccountDetailPO.getPaymentOrganization()); TaxAgentPO taxAgentInfo = getTaxAgentMapper().getById(targetPO.getPaymentOrganization()); - DataCollectionEmployee empInfo = getEmployMapper().getEmployeeById(insuranceAccountDetailPO.getEmployeeId()); + DataCollectionEmployee empInfo = getSalaryEmployeeService(user).getEmployeeById(insuranceAccountDetailPO.getEmployeeId()); LoggerContext loggerContext = new LoggerContext(); loggerContext.setUser(user); loggerContext.setTargetId(String.valueOf(targetPO.getId())); From a259a5204434bbedeccc6c1f64a053d2280481f6 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 11 Jul 2024 11:28:54 +0800 Subject: [PATCH 68/96] =?UTF-8?q?=E4=BA=BA=E5=91=98=E7=BB=B4=E5=BA=A6?= =?UTF-8?q?=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportDataQueryParam.java | 24 +++++++++++++ .../SalaryStatisticsReportWrapper.java | 34 ++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java index 8fe73f9a5..481d6d887 100644 --- a/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java +++ b/src/com/engine/salary/report/entity/param/SalaryStatisticsReportDataQueryParam.java @@ -88,4 +88,28 @@ public class SalaryStatisticsReportDataQueryParam extends BaseQueryParam { // "分享批次id private Long batchId; + + @Override + public String toString() { + return "SalaryStatisticsReportDataQueryParam{" + + "id=" + id + + ", dimensionId=" + dimensionId + + ", salaryStartMonth='" + salaryStartMonth + '\'' + + ", salaryEndMonth='" + salaryEndMonth + '\'' + + ", taxAgent=" + taxAgent + + ", salarySob=" + salarySob + + ", incomeCategory=" + incomeCategory + + ", subCompany=" + subCompany + + ", depart=" + depart + + ", grade=" + grade + + ", position=" + position + + ", status=" + status + + ", employee=" + employee + + ", hiredate=" + hiredate + + ", leavedate=" + leavedate + + ", unitType=" + unitType + + ", isShare=" + isShare + + ", batchId=" + batchId + + '}'; + } } diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 5e7ac7edb..18cbb1f71 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -30,6 +30,7 @@ import com.engine.salary.service.impl.*; import com.engine.salary.util.*; import com.engine.salary.util.excel.ExcelUtilPlus; import com.engine.salary.util.page.PageInfo; +import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import org.apache.commons.collections4.CollectionUtils; @@ -325,11 +326,28 @@ public class SalaryStatisticsReportWrapper extends Service { //已缓存的报表id String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS)); String salaryReportConditions = ""; + // 人员维度id + Long empDimensionId = 1683696782745L; if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { //报表中缓存的条件 salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { - return getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); + Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); + if (param.getDimensionId().equals(empDimensionId)) { + // 人员维度需要分页 + Map finalResultMap = new HashMap<>(); + PageInfo> pageInfo = (PageInfo>)result.get("pageInfo"); + PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); + finalPageInfo.setTotal(pageInfo.getList().size()); + finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); + finalResultMap.put("pageInfo", finalPageInfo); + finalResultMap.put("columns", result.get("columns")); + finalResultMap.put("countResult", result.get("countResult")); + finalResultMap.put("reportId", id); + return finalResultMap; + } + + return result; } } @@ -356,6 +374,20 @@ public class SalaryStatisticsReportWrapper extends Service { getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id, salaryReportConditions + "," + paramMd5); getSalaryCacheService(user).set(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5, resultMap); + Map finalResultMap = Maps.newHashMap(); + // 缓存完之后结果分页 + if (param.getDimensionId().equals(empDimensionId)) { + // 只有是人员维度才分页 + PageInfo> pageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); + pageInfo.setTotal(page.getList().size()); + pageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), page.getList())); + finalResultMap.put("pageInfo", pageInfo); + finalResultMap.put("columns", weaTableColumns); + finalResultMap.put("countResult", countResultMap); + finalResultMap.put("reportId", id); + + return finalResultMap; + } return resultMap; } From 50e3be607d7917b3e31fafcab2bdbfac281a3fd8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 11 Jul 2024 16:30:00 +0800 Subject: [PATCH 69/96] =?UTF-8?q?=E4=BF=AE=E5=A4=8Doracle=20bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index fd451cda5..935089f71 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -135,7 +135,7 @@ #{emp.deleteType,jdbcType=INTEGER}, #{emp.tenantKey,jdbcType=VARCHAR}, #{emp.employeeType,jdbcType=INTEGER}, - #{emp.lockStatus,jdbcType=INTEGER} + #{emp.lockStatus,jdbcType=INTEGER}, #{emp.subcompanyName,jdbcType=VARCHAR}, #{emp.subcompanyId,jdbcType=DOUBLE}, #{emp.departmentName,jdbcType=VARCHAR}, From b91818f2dc750eebf9c59fea1acd79ed7c4e602e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 15 Jul 2024 09:36:40 +0800 Subject: [PATCH 70/96] =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/WEB-INF/prop/hrmSalary.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/resource/WEB-INF/prop/hrmSalary.properties b/resource/WEB-INF/prop/hrmSalary.properties index 86aac0d39..5c9223804 100644 --- a/resource/WEB-INF/prop/hrmSalary.properties +++ b/resource/WEB-INF/prop/hrmSalary.properties @@ -1,5 +1,5 @@ log=false defaultCloseNonStandard149=true AESEncryptScrect=990EB004A1C862721C1513AE90038C9E -version=2.14.5.2406.03 +version=2.15.1.2407.01 openFormulaForcedEditing=false \ No newline at end of file From e579bbc4f21cfa52956da4a2698bdb88e677d6c2 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 15 Jul 2024 11:20:24 +0800 Subject: [PATCH 71/96] =?UTF-8?q?=E4=BA=BA=E5=91=98=E7=BB=B4=E5=BA=A6?= =?UTF-8?q?=E5=88=86=E9=A1=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../report/wrapper/SalaryStatisticsReportWrapper.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 18cbb1f71..879df2f86 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -326,8 +326,12 @@ public class SalaryStatisticsReportWrapper extends Service { //已缓存的报表id String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS)); String salaryReportConditions = ""; - // 人员维度id - Long empDimensionId = 1683696782745L; + // 获取人员维度id + Optional empDimensionOptional = getSalaryStatisticsDimensionService(user).listAllDefaultDimension().stream().filter(dim -> dim.getDimName().equals("人员")).map(SalaryStatisticsDimensionPO::getId).findFirst(); + Long empDimensionId = 0L; + if (empDimensionOptional.isPresent()) { + empDimensionId = empDimensionOptional.get(); + } if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { //报表中缓存的条件 salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); From 0fb8ed179255d7054da87107aa1ecdccad9757f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 15 Jul 2024 16:59:10 +0800 Subject: [PATCH 72/96] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=AA=E7=A8=8E?= =?UTF-8?q?=E6=98=A0=E5=B0=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryCalcTaxServiceImpl.java | 54 ++++++++++--------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index f6182ce83..2ee4b657e 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -159,7 +159,7 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe // 请求第三方供应商 String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); TaskUtil taskUtil = new TaskUtil(); - taskUtil.writeApiTaskRecord(salaryAcctRecordId+"", url, reqJson, res); + taskUtil.writeApiTaskRecord(salaryAcctRecordId + "", url, reqJson, res); DeclareTaxResponse declareTaxResponse = JsonUtil.parseObject(res, DeclareTaxResponse.class); if (Objects.isNull(declareTaxResponse) || Objects.isNull(declareTaxResponse.getHead())) { @@ -262,31 +262,33 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe continue; } List taxRules = salarySobTaxRuleDTO.getTaxRules(); - taxRules.forEach(rule -> { - Long salaryItemId = rule.getSalaryItemId(); - SalaryAcctResultPO salaryAcctResultPO = salaryAcctResultValue.get(salaryItemId); - if (salaryAcctResultPO != null) { - salaryAcctResultPO.setResultValue(rule.getValue()); - updateResultPOS.add(salaryAcctResultPO); - } else { - salaryAcctResultPO = SalaryAcctResultPO.builder() - .salaryAcctRecordId(salaryAcctRecordId) - .salaryAcctEmpId(salaryAcctEmployee.getId()) - .employeeId(salaryAcctEmployee.getEmployeeId()) - .taxAgentId(salaryAcctEmployee.getTaxAgentId()) - .salarySobId(salaryAcctEmployee.getSalarySobId()) - .salaryItemId(salaryItemId) - .resultValue(rule.getValue()) - .originResultValue("") - .creator((long) user.getUID()) - .createTime(now) - .updateTime(now) - .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) - .deleteType(0) - .build(); - addResultPOS.add(salaryAcctResultPO); - } - }); + taxRules.stream() + .filter(rule -> rule.getSalaryItemId() != null) + .forEach(rule -> { + Long salaryItemId = rule.getSalaryItemId(); + SalaryAcctResultPO salaryAcctResultPO = salaryAcctResultValue.get(salaryItemId); + if (salaryAcctResultPO != null) { + salaryAcctResultPO.setResultValue(rule.getValue()); + updateResultPOS.add(salaryAcctResultPO); + } else { + salaryAcctResultPO = SalaryAcctResultPO.builder() + .salaryAcctRecordId(salaryAcctRecordId) + .salaryAcctEmpId(salaryAcctEmployee.getId()) + .employeeId(salaryAcctEmployee.getEmployeeId()) + .taxAgentId(salaryAcctEmployee.getTaxAgentId()) + .salarySobId(salaryAcctEmployee.getSalarySobId()) + .salaryItemId(salaryItemId) + .resultValue(rule.getValue()) + .originResultValue("") + .creator((long) user.getUID()) + .createTime(now) + .updateTime(now) + .tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY) + .deleteType(0) + .build(); + addResultPOS.add(salaryAcctResultPO); + } + }); } } } From 78cdadbb996f7dc8e44c3e24c468d52671452e49 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 16 Jul 2024 11:30:25 +0800 Subject: [PATCH 73/96] =?UTF-8?q?=E5=B7=A5=E8=B5=84=E5=8D=95=E8=AF=A6?= =?UTF-8?q?=E6=83=85=20-=20=E6=98=BE=E7=A4=BA=E5=88=97=E5=AE=9A=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../param/SalarySendDetailQueryParam.java | 4 ++++ .../service/impl/SalarySendServiceImpl.java | 21 ++++++++++++++---- .../salary/web/SalaryBillController.java | 22 +++++++++---------- .../salary/wrapper/SalarySendWrapper.java | 1 + 4 files changed, 33 insertions(+), 15 deletions(-) diff --git a/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java b/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java index 94fb68c32..1b49f639b 100644 --- a/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java +++ b/src/com/engine/salary/entity/salaryBill/param/SalarySendDetailQueryParam.java @@ -68,6 +68,10 @@ public class SalarySendDetailQueryParam extends BaseQueryParam { // @JsonIgnore private List sendStatuss; + + // 导出时显示列定制信息 + List columns; + public static String checkParam(SalarySendDetailQueryParam saveParam) { if (saveParam.getSalarySendId() == null) { throw new SalaryRunTimeException("工资单发放Id必传"); diff --git a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java index 738951a25..30019d8fc 100644 --- a/src/com/engine/salary/service/impl/SalarySendServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalarySendServiceImpl.java @@ -56,6 +56,7 @@ import com.engine.salary.mapper.salaryacct.SalaryAcctRecordMapper; import com.engine.salary.mapper.salaryacct.SalaryAcctResultMapper; import com.engine.salary.mapper.salarybill.SalarySendInfoMapper; import com.engine.salary.mapper.salarybill.SalarySendMapper; +import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.service.*; import com.engine.salary.sys.entity.vo.OrderRuleVO; import com.engine.salary.sys.service.SalarySysConfService; @@ -1570,13 +1571,25 @@ public class SalarySendServiceImpl extends Service implements SalarySendService // 1.工作簿名称 String sheetName = SalaryI18nUtil.getI18nLabel(97036, "工资单发放详情"); List header = new ArrayList<>(); + // 员工信息字段 header.add(SalaryI18nUtil.getI18nLabel(85429, "姓名")); header.add(SalaryI18nUtil.getI18nLabel(86185, "部门")); header.add(SalaryI18nUtil.getI18nLabel(86186, "手机号")); header.add(SalaryI18nUtil.getI18nLabel(86317, "工号")); + Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, dto -> dto.getSalaryItemId() + SalaryConstant.DYNAMIC_SUFFIX); + List sortedSalaryItems = new ArrayList<>(); + for(String column : queryParam.getColumns()) { + if (column.contains(SalaryConstant.DYNAMIC_SUFFIX)) { + SalaryTemplateSalaryItemListDTO salaryTemplateSalaryItemListDTO = salaryItemMap.get(column); + if (salaryTemplateSalaryItemListDTO != null) { + sortedSalaryItems.add(salaryTemplateSalaryItemListDTO); + } + } + } + // 动态列 - if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(salaryItems)) { - for (SalaryTemplateSalaryItemListDTO salaryItem : salaryItems) { + if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(sortedSalaryItems)) { + for (SalaryTemplateSalaryItemListDTO salaryItem : sortedSalaryItems) { header.add(salaryItem.getName()); } } @@ -1595,7 +1608,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService // 动态列 Map mapColumn = listMaps.get(0); - for (SalaryTemplateSalaryItemListDTO salaryItem : salaryItems) { + for (SalaryTemplateSalaryItemListDTO salaryItem : sortedSalaryItems) { if (mapColumn.containsKey(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX)) { row.add(dto.get(salaryItem.getId() + SalaryItemConstant.DYNAMIC_SUFFIX)); } @@ -1706,7 +1719,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService .filter(NumberUtils::isCreatable) .map(BigDecimal::new) .reduce(BigDecimal.ZERO, BigDecimal::add); - map.put(item.getId().toString(), SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), salaryItemIdKeySalarySobItemPOMap)); + map.put(item.getId() + SalaryItemConstant.DYNAMIC_SUFFIX, SalaryAcctFormulaBO.roundResultValue(sum.toString(), item, Collections.emptyList(), Collections.emptyMap(), salaryItemIdKeySalarySobItemPOMap)); }); return map; } diff --git a/src/com/engine/salary/web/SalaryBillController.java b/src/com/engine/salary/web/SalaryBillController.java index 10c6d9c31..94a2ea915 100644 --- a/src/com/engine/salary/web/SalaryBillController.java +++ b/src/com/engine/salary/web/SalaryBillController.java @@ -531,21 +531,21 @@ public class SalaryBillController { * * @return */ - @GET + @POST @Path("/send/exportDetailList") @Produces(MediaType.APPLICATION_OCTET_STREAM) - public Response exportDetailList(@Context HttpServletRequest request, @Context HttpServletResponse response) { + public Response exportDetailList(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody SalarySendDetailQueryParam queryParam) { User user = HrmUserVarify.getUser(request, response); - SalarySendDetailQueryParam queryParam = new SalarySendDetailQueryParam(); - String salarySendId = request.getParameter("salarySendId"); - String ids = request.getParameter("ids"); - if (StringUtils.isNotBlank(ids)) { - queryParam.setIds(Arrays.asList(ids.split(",")).stream().map(Long::new).collect(Collectors.toList())); - } - if (StringUtils.isNotBlank(salarySendId)) { - queryParam.setSalarySendId(Long.parseLong(salarySendId)); - } + // SalarySendDetailQueryParam queryParam = new SalarySendDetailQueryParam(); + // String salarySendId = request.getParameter("salarySendId"); + // String ids = request.getParameter("ids"); + // if (StringUtils.isNotBlank(ids)) { + // queryParam.setIds(Arrays.asList(ids.split(",")).stream().map(Long::new).collect(Collectors.toList())); + // } + // if (StringUtils.isNotBlank(salarySendId)) { + // queryParam.setSalarySendId(Long.parseLong(salarySendId)); + // } XSSFWorkbook workbook = getSalarySendWrapper(user).exportDetailList(queryParam); String fileName = "工资单发放详情列表" + LocalDate.now(); diff --git a/src/com/engine/salary/wrapper/SalarySendWrapper.java b/src/com/engine/salary/wrapper/SalarySendWrapper.java index 725931b80..0fccfecd0 100644 --- a/src/com/engine/salary/wrapper/SalarySendWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySendWrapper.java @@ -562,6 +562,7 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy checkboxpopedom.setPopedompara("column:system_type"); checkboxpopedom.setShowmethod("com.engine.salary.transmethod.TaxRateTransMethod.getCheckBoxPopedom"); checkboxpopedomList.add(checkboxpopedom); + table.setPageUID(queryParam.getSalarySendId().toString()); table.setCheckboxList(checkboxpopedomList); table.setCheckboxpopedom(null); From 6f7ae2506d19891a1c7528c7345ce93b93ff5368 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 16 Jul 2024 14:56:11 +0800 Subject: [PATCH 74/96] =?UTF-8?q?=E9=98=85=E5=90=8E=E5=8D=B3=E7=84=9Aoracl?= =?UTF-8?q?e=E6=95=B0=E6=8D=AE=E5=BA=93=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SalaryBillBaseSetServiceImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java index ea9097e9d..392ddb58c 100644 --- a/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryBillBaseSetServiceImpl.java @@ -113,7 +113,7 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB salaryBillViewingLimitSetting salaryBillViewingLimitDTO = saveParam.getSalaryBillViewingLimitSetting(); if (salaryBillViewingLimitDTO != null) { getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getLimitMonth()), SALARY_BILL_VIEWING_LIMIT_MONTH, "工资单时效性设置", "billSend"); - getSalarySysConfService(user).saveSettingByType(Util.null2String(salaryBillViewingLimitDTO.getBurningAfterReadingMin()), SALARY_BILL_BURNING_AFTER_READING_MIN, "工资单查看后销毁设置", "billSend"); + getSalarySysConfService(user).saveSettingByType(salaryBillViewingLimitDTO.getBurningAfterReadingMin() == null ? " " : salaryBillViewingLimitDTO.getBurningAfterReadingMin().toString(), SALARY_BILL_BURNING_AFTER_READING_MIN, "工资单查看后销毁设置", "billSend"); } return StringUtils.EMPTY; } From 909152decc475b28b12282b47c31bf817e131071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 16 Jul 2024 16:57:58 +0800 Subject: [PATCH 75/96] =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=AF=BC=E5=87=BA?= =?UTF-8?q?=E6=94=B9=E4=B8=BA=E4=BB=8E=E5=86=85=E5=AD=98=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsReportServiceImpl.java | 2 - .../web/SalaryStatisticsReportController.java | 12 +- .../SalaryStatisticsReportWrapper.java | 167 +++++++++--------- 3 files changed, 90 insertions(+), 91 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java index db2f739c0..b75c5c413 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsReportServiceImpl.java @@ -1102,8 +1102,6 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary List fieldSettings = Optional.ofNullable(Optional.ofNullable(employeeInfoExpandDTO).orElse(new EmployeeInfoExpandDTO()).getFieldSettings()).orElse(new ArrayList<>()); Map> expandEmployeeMap = getSalaryEmployeeService(user).expandEmployeeMap(empIds, employeeInfoExpandDTO); - log.info("扩展属性" + expandEmployeeMap); - // List extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()); // Map employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername); diff --git a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java index 1c062650e..219ee67a0 100644 --- a/src/com/engine/salary/report/web/SalaryStatisticsReportController.java +++ b/src/com/engine/salary/report/web/SalaryStatisticsReportController.java @@ -6,7 +6,6 @@ import com.engine.salary.report.wrapper.SalaryStatisticsReportWrapper; import com.engine.salary.util.ResponseResult; import io.swagger.v3.oas.annotations.parameters.RequestBody; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.StringUtils; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.HrmUserVarify; import weaver.hrm.User; @@ -158,17 +157,10 @@ public class SalaryStatisticsReportController { * * @return */ - @GET + @POST @Path("/exportData") @Produces(MediaType.APPLICATION_OCTET_STREAM) - public Response exportData(@Context HttpServletRequest request, @Context HttpServletResponse response) { - SalaryStatisticsReportDataQueryParam param = SalaryStatisticsReportDataQueryParam.builder() - .id(Long.parseLong(request.getParameter("id"))) - .dimensionId(Long.parseLong(request.getParameter("dimensionId"))) - .salaryStartMonth(request.getParameter("salaryStartMonth")) - .salaryEndMonth(request.getParameter("salaryEndMonth")) - .isShare(StringUtils.equals(request.getParameter("isShare"), "true")) - .build(); + public Response exportData(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryStatisticsReportDataQueryParam param) { try { User user = HrmUserVarify.getUser(request, response); Map map = getSalaryStatisticsReportWrapper(user).exportData(param); diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java index 879df2f86..22fb6261f 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsReportWrapper.java @@ -340,7 +340,7 @@ public class SalaryStatisticsReportWrapper extends Service { if (param.getDimensionId().equals(empDimensionId)) { // 人员维度需要分页 Map finalResultMap = new HashMap<>(); - PageInfo> pageInfo = (PageInfo>)result.get("pageInfo"); + PageInfo> pageInfo = (PageInfo>) result.get("pageInfo"); PageInfo> finalPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize()); finalPageInfo.setTotal(pageInfo.getList().size()); finalPageInfo.setList(SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), pageInfo.getList())); @@ -404,11 +404,12 @@ public class SalaryStatisticsReportWrapper extends Service { * @return */ public Map exportData(SalaryStatisticsReportDataQueryParam param) { - if (param.getId() == null || param.getDimensionId() == null) { + Long id = param.getId(); + if (id == null || param.getDimensionId() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); } - SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(param.getId()); + SalaryStatisticsReportPO po = this.getSalaryStatisticsReportService(user).getById(id); if (po == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161845, "薪酬统计报表不存在")); } @@ -417,90 +418,98 @@ public class SalaryStatisticsReportWrapper extends Service { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(161300, "统计维度不存在")); } sharedReportCheck(param.isShare(), po); - // 参数转换 - SalaryStatisticsReportBO.poToQueryParam(param, po); // 查询自定义统计项目 List salaryStatisticsItemList = this.getSalaryStatisticsItemService(user).listByStatisticsReportId(po.getId()); - // 列表data - PageInfo> page = this.getSalaryStatisticsReportService(user).buildReportRecords(dimension, param, salaryStatisticsItemList); - // 组装合计 - Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID()); - List> list = page.getList(); - if (CollectionUtils.isNotEmpty(list) && MapUtils.isNotEmpty(countResultMap)) { - list.add(countResultMap); - } - // 获取数据 - List> records = list.stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); + // 参数转换 + SalaryStatisticsReportBO.poToQueryParam(param, po); + String paramMd5 = SecureUtil.md5(param + salaryStatisticsItemList.toString()); - // 获取列头 - List weaTableColumns = SalaryStatisticsReportBO.buildReportColumns(dimension, salaryStatisticsItemList); + //已缓存的报表id + String salaryReportIds = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_IDS)); + String salaryReportConditions = ""; - // 组装导出参数 -// ExportCommonParam exportParam = SalaryStatisticsReportBO.buildExportParam(dimension.getDimName(), weaTableColumns, records); -// exportParam.setSheetName(SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + exportParam.getDimensionName()); -// - - List rows = new ArrayList<>(); - rows.add(weaTableColumns); - - List head = new ArrayList<>(); - weaTableColumns.forEach(weaTableColumn -> { - String column = weaTableColumn.getColumn(); - if (CollectionUtils.isEmpty(weaTableColumn.getChildren())) { - head.add(column); - } else { - weaTableColumn.getChildren().forEach(children -> { - head.add(children.getColumn()); - }); - } - }); - - List itemIds = salaryStatisticsItemList.stream().map(item -> item.getItemValue().split(",")).flatMap(Arrays::stream).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); - List salaryItemPOList = getSalaryItemService(user).listByIds(itemIds); - List numberItemIds = salaryItemPOList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).map(salaryItemPO -> salaryItemPO.getId().toString()).collect(Collectors.toList()); - Map salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, statisticsItemPO -> statisticsItemPO.getId().toString()); - - for (Map map : records) { - List row = Lists.newArrayListWithExpectedSize(records.size()); - head.forEach(k -> { - // 获取是数值还是文本 - if (k.contains(SalaryStatisticsReportBO.UD)) { - String[] split = k.split(SalaryStatisticsReportBO.UD); - String salaryItemId = split[0]; - SalaryStatisticsItemPO salaryStatisticsItemPO = salaryStatisticsItemMap.get(salaryItemId); - if (salaryStatisticsItemPO != null) { - Optional textItemOptional = Arrays.stream(salaryStatisticsItemPO.getItemValue().split(",")).filter(id -> !numberItemIds.contains(id)).findFirst(); - row.add( (!textItemOptional.isPresent() && NumberUtils.isCreatable(map.getOrDefault(k, StringUtils.EMPTY).replace(",", ""))) ? new BigDecimal(map.get(k).replace(",", "")) : map.getOrDefault(k, StringUtils.EMPTY)); - } else { - row.add(map.getOrDefault(k, StringUtils.EMPTY)); - } - } else { - row.add(map.getOrDefault(k, StringUtils.EMPTY)); + if (StringUtils.isNotBlank(salaryReportIds) && salaryReportIds.contains(id + "")) { + //报表中缓存的条件 + salaryReportConditions = Utils.null2String(getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_CONDITIONS + id)); + if (StringUtils.isNotBlank(salaryReportConditions) && salaryReportConditions.contains(paramMd5)) { + Map result = getSalaryCacheService(user).get(SalaryCacheKey.SALARY_REPORT_DATA + id + "_" + paramMd5); + // 获取列头 + List weaTableColumns = (List) result.get("columns"); + PageInfo> page = (PageInfo>) result.get("pageInfo"); + // 组装合计 + Map countResultMap = SalaryStatisticsReportBO.buildTotal(page, salaryStatisticsItemList, (long) user.getUID()); + List> list = page.getList(); + if (CollectionUtils.isNotEmpty(list) && MapUtils.isNotEmpty(countResultMap)) { + list.add(countResultMap); } - }); - rows.add(row); + // 获取数据 + List> records = list.stream().map(m -> m.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, e -> e.getValue() + StringUtils.EMPTY))).collect(Collectors.toList()); + + List rows = new ArrayList<>(); + rows.add(weaTableColumns); + + List head = new ArrayList<>(); + weaTableColumns.forEach(weaTableColumn -> { + String column = weaTableColumn.getColumn(); + if (CollectionUtils.isEmpty(weaTableColumn.getChildren())) { + head.add(column); + } else { + weaTableColumn.getChildren().forEach(children -> { + head.add(children.getColumn()); + }); + } + }); + + List itemIds = salaryStatisticsItemList.stream().map(item -> item.getItemValue().split(",")).flatMap(Arrays::stream).filter(NumberUtils::isCreatable).map(Long::valueOf).collect(Collectors.toList()); + List salaryItemPOList = getSalaryItemService(user).listByIds(itemIds); + List numberItemIds = salaryItemPOList.stream().filter(item -> item.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).map(salaryItemPO -> salaryItemPO.getId().toString()).collect(Collectors.toList()); + Map salaryStatisticsItemMap = SalaryEntityUtil.convert2Map(salaryStatisticsItemList, statisticsItemPO -> statisticsItemPO.getId().toString()); + + for (Map map : records) { + List row = Lists.newArrayListWithExpectedSize(records.size()); + head.forEach(k -> { + // 获取是数值还是文本 + if (k.contains(SalaryStatisticsReportBO.UD)) { + String[] split = k.split(SalaryStatisticsReportBO.UD); + String salaryItemId = split[0]; + SalaryStatisticsItemPO salaryStatisticsItemPO = salaryStatisticsItemMap.get(salaryItemId); + if (salaryStatisticsItemPO != null) { + Optional textItemOptional = Arrays.stream(salaryStatisticsItemPO.getItemValue().split(",")).filter(itemId -> !numberItemIds.contains(itemId)).findFirst(); + row.add((!textItemOptional.isPresent() && NumberUtils.isCreatable(map.getOrDefault(k, StringUtils.EMPTY).replace(",", ""))) ? new BigDecimal(map.get(k).replace(",", "")) : map.getOrDefault(k, StringUtils.EMPTY)); + } else { + row.add(map.getOrDefault(k, StringUtils.EMPTY)); + } + } else { + row.add(map.getOrDefault(k, StringUtils.EMPTY)); + } + }); + rows.add(row); + } + + String sheetName = SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + dimension.getDimName(); + XSSFWorkbook book = ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, true); + + Map map = new HashMap<>(); + map.put("workbook", book); + map.put("fileName", sheetName); + + // 记录操作日志 + String name = SalaryI18nUtil.getI18nLabel(0, "导出"); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setTargetId(po.getId().toString()); + loggerContext.setTargetName(po.getReportName()); + loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); + loggerContext.setOperateTypeName(name); + loggerContext.setOperatedesc(name + SalaryI18nUtil.getI18nLabel(0, "薪酬统计报表") + "-" + po.getReportName()); + loggerContext.setUser(user); + SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); + + return map; + } } - String sheetName = SalaryI18nUtil.getI18nLabel(179263, "薪酬统计报表") + "-" + dimension.getDimName(); - XSSFWorkbook book = ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, true); - - Map map = new HashMap<>(); - map.put("workbook", book); - map.put("fileName", sheetName); - - // 记录操作日志 - String name = SalaryI18nUtil.getI18nLabel(0, "导出"); - LoggerContext loggerContext = new LoggerContext<>(); - loggerContext.setTargetId(po.getId().toString()); - loggerContext.setTargetName(po.getReportName()); - loggerContext.setOperateType(OperateTypeEnum.EXCEL_EXPORT.getValue()); - loggerContext.setOperateTypeName(name); - loggerContext.setOperatedesc(name + SalaryI18nUtil.getI18nLabel(0, "薪酬统计报表") + "-" + po.getReportName()); - loggerContext.setUser(user); - SalaryElogConfig.salaryStatReportLoggerTemplate.write(loggerContext); - - return map; + throw new SalaryRunTimeException("未查询报表数据!"); } /** From 46b3dde438f6c70851f2ff1c81a2eaf4c0eaa08f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 17 Jul 2024 09:03:31 +0800 Subject: [PATCH 76/96] =?UTF-8?q?=E7=A8=8E=E5=90=8E=E5=B7=A5=E8=B5=84?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/cache/SalaryCacheKey.java | 5 + .../SalaryAfterTaxAcctCalculateParam.java | 24 +++ .../salaryacct/SalaryAcctResultMapper.java | 1 + .../service/SalaryAcctResultService.java | 8 + .../impl/SalaryAcctResultServiceImpl.java | 192 +++++++++++++++++- .../TaxDeclarationApiConfigServiceImpl.java | 18 +- .../salary/web/SalaryAcctController.java | 9 + .../wrapper/SalaryAcctResultWrapper.java | 43 +++- .../proxy/SalaryAcctResultWrapperProxy.java | 2 + 9 files changed, 278 insertions(+), 24 deletions(-) create mode 100644 src/com/engine/salary/entity/salaryacct/param/SalaryAfterTaxAcctCalculateParam.java diff --git a/src/com/engine/salary/cache/SalaryCacheKey.java b/src/com/engine/salary/cache/SalaryCacheKey.java index 642a499c7..2f345fc76 100644 --- a/src/com/engine/salary/cache/SalaryCacheKey.java +++ b/src/com/engine/salary/cache/SalaryCacheKey.java @@ -15,6 +15,11 @@ public class SalaryCacheKey { */ public final static String ACCT_PROGRESS = "ACCT_PROGRESS_"; + /** + * 核算税后工资进度 + */ + public final static String AFTER_TAXA_CCT_PROGRESS = "AFTER_TAX_ACCT_PROGRESS_"; + /** * 薪资核算的账套配置 */ diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAfterTaxAcctCalculateParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAfterTaxAcctCalculateParam.java new file mode 100644 index 000000000..55fd34a0c --- /dev/null +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAfterTaxAcctCalculateParam.java @@ -0,0 +1,24 @@ +package com.engine.salary.entity.salaryacct.param; + +import com.engine.salary.util.valid.DataCheck; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 税后薪资核算的参数 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SalaryAfterTaxAcctCalculateParam { + @DataCheck(require = true,message = "参数错误,薪资核算记录ID不能为空") + private Long salaryAcctRecordId; +} diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java index 545b5a81b..bbc727459 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctResultMapper.java @@ -5,6 +5,7 @@ import org.apache.ibatis.annotations.Param; import java.util.Collection; import java.util.List; +import java.util.Set; public interface SalaryAcctResultMapper { diff --git a/src/com/engine/salary/service/SalaryAcctResultService.java b/src/com/engine/salary/service/SalaryAcctResultService.java index d537c56c6..b4af31089 100644 --- a/src/com/engine/salary/service/SalaryAcctResultService.java +++ b/src/com/engine/salary/service/SalaryAcctResultService.java @@ -151,6 +151,13 @@ public interface SalaryAcctResultService { */ void calculate(SalaryAcctCalculateParam calculateParam, DataCollectionEmployee simpleEmployee); + /** + * 核算税后 + * @param calculateParam + * @param simpleEmployee + */ + void afterTaxAccounting(SalaryAfterTaxAcctCalculateParam calculateParam, DataCollectionEmployee simpleEmployee); + /** * 根据薪资核算记录的id、个税扣缴义务人查询薪资核算结果 * @@ -224,4 +231,5 @@ public interface SalaryAcctResultService { void writeBatchLog(SalaryAcctRecordPO salaryAcctRecord, Map newResultValueMap, SalaryLogOperateTypeEnum operateType); + } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index b049989bc..ea7a59966 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -919,6 +919,181 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe } } + + @Override + public void afterTaxAccounting(SalaryAfterTaxAcctCalculateParam calculateParam, DataCollectionEmployee simpleEmployee) { + Long salaryAcctRecordId = calculateParam.getSalaryAcctRecordId(); + try { + // 1、查询薪资核算记录 + SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryAcctRecordId); + if (Objects.isNull(salaryAcctRecordPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); + } + //查询对应账套 + SalarySobPO salarySobPO = getSalarySobService(user).getById(salaryAcctRecordPO.getSalarySobId()); + if (Objects.isNull(salarySobPO)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资账套不存在或已被删除")); + } + + // 不是查询薪资账套下实时的薪资项目,而是查询发起薪资核算时存储的薪资项目快照 + SalaryAcctConfig salaryAcctSobConfig = getSalaryAcctSobConfigService(user).getSalaryAcctConfig(salaryAcctRecordId); + + // 1.1、如果薪资核算记录已经归档了,就不能继续核算 + if (!Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99148, "当前薪资核算记录已归档,请重新打开后再进行核算")); + } + // 2、查询薪资核算记录的薪资周期、考勤周期等 + SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(salaryAcctRecordId); + // 3、查询薪资核算记录所用薪资账套的薪资项目副本 + List salarySobItemPOS = salaryAcctSobConfig.getSalarySobItems(); + if (CollectionUtils.isEmpty(salarySobItemPOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99151, "当前所用的薪资账套未选择任何薪资项目,无法核算")); + } + // 回算薪资项目 + List salarySobBackItems = Collections.emptyList(); + if (Objects.equals(salaryAcctRecordPO.getBackCalcStatus(), 1)) { + salarySobBackItems = salaryAcctSobConfig.getSalarySobBackItems(); + } + // 4、查询当前租户的所有薪资项目 + List salaryItemPOS = getSalaryItemService(user).listAll(); + // 5、查询薪资核算记录所用薪资账套的调薪计薪规则 + List salarySobAdjustRulePOS = getSalarySobAdjustRuleService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + // 6、查询社保福利的所有字段 + Map welfareColumns = getSIAccountService(user).welfareColumns(); + // 7、查询考勤引用的所有字段 + List attendQuoteFieldListDTOS = getAttendQuoteFieldService(user).listAll(); + + // 8、查询公式详情 + Set formulaIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getFormulaId); + formulaIds.addAll(SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId)); + formulaIds.addAll(SalaryEntityUtil.properties(salarySobBackItems, SalarySobBackItemPO::getFormulaId)); + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); + // 本次运算的回算薪资项目所涉及的变量 + Set issuedFieldIds = getIssuedFieldIds(salarySobBackItems); + // 9、计算薪资项目的运算优先级 + List salarySobItemsWithPriority = sortItems(salarySobItemPOS, salarySobBackItems, salaryItemPOS, expressFormulas); + + //核算税后逻辑,去除非税后项目 + List afterTaxItems = new ArrayList<>(); + afterTaxItems.add(1695204436147L); + salarySobItemsWithPriority = salarySobItemsWithPriority.stream().filter(afterTaxItems::contains).collect(Collectors.toList()); + + //账套中配置的个税字段,不需要系统算 + List salarySobTaxRulePOS = getSalarySobTaxRuleService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); + List taxIds = SalaryEntityUtil.properties(salarySobTaxRulePOS, SalarySobTaxRulePO::getSalaryItemId, Collectors.toList()); + + // 10、根据id查询其他合并计税的薪资核算记录 + List otherSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAcctRecordPO.getId()); + // 11、查询本次核算人员 + List salaryAcctEmployeePOS = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordPO.getId()); + if (CollectionUtils.isEmpty(salaryAcctEmployeePOS)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(103378, "薪资核算人员不能为空")); + } + + //核算锁定值 + List lockSalaryItemIds = salaryAcctRecordPO.getLockSalaryItemIds(); + Map acctResults = new HashMap<>(); + if (CollUtil.isNotEmpty(lockSalaryItemIds)) { + List acctResultPOS = listBySalaryAcctRecordIdsAndSalaryItemIds(Collections.singleton(salaryAcctRecordId), lockSalaryItemIds); + acctResults = Optional.ofNullable(acctResultPOS).orElse(new ArrayList<>()).stream().filter(po -> lockSalaryItemIds.contains(po.getSalaryItemId())).collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); + } + List lockEmpIds = salaryAcctEmployeePOS.stream().filter(po -> LockStatusEnum.LOCK.getValue().equals(po.getLockStatus())).map(SalaryAcctEmployeePO::getId).collect(Collectors.toList()); + if (CollUtil.isNotEmpty(lockEmpIds)) { + List acctResultPOS = listBySalaryAcctEmployeeIds(lockEmpIds); + Map acctResultMaps = Optional.ofNullable(acctResultPOS).orElse(new ArrayList<>()).stream().collect(Collectors.toMap(po -> po.getSalaryItemId() + "_" + po.getSalaryAcctEmpId(), a -> a, (a, b) -> a)); + acctResults.putAll(acctResultMaps); + } + + + // 11.1、初始化进度 + ProgressDTO initProgress = new ProgressDTO().setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")).setTitleLabelId(97515L).setTotalQuantity(salaryAcctEmployeePOS.size() * 2 + 1).setCalculatedQuantity(0).setProgress(BigDecimal.ZERO).setStatus(true).setMessage(StringUtils.EMPTY); + getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.AFTER_TAXA_CCT_PROGRESS + salaryAcctRecordId, initProgress); + // 12、对薪资核算人员进行拆分 + List> partition = Lists.partition(salaryAcctEmployeePOS, 100); + // 12.1、监控子线程的任务执行 + CountDownLatch childMonitor = new CountDownLatch(partition.size()); + // 12.2、记录子线程的执行结果 + BlockingDeque calculateResults = new LinkedBlockingDeque<>(partition.size()); + // 12.3、生成本次运算的key + String calculateKey = UUID.randomUUID().toString(); + // 12.4、是否采用系统算税 + TaxDeclarationFunctionEnum taxDeclarationFunction = getSalarySysConfService(user).getTaxDeclaration(); + // 12.5、多线程运算,运算结果存放在临时表中 + for (List acctEmployeePOS : partition) { + SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO() + .setSalaryAcctRecordPO(salaryAcctRecordPO) + .setSalarySobPO(salarySobPO) + .setSalarySobCycleDTO(salarySobCycleDTO) + .setOtherSalaryAcctRecordPOS(otherSalaryAcctRecordPOS) + .setSalaryAcctLockResultPOS(MapUtils.emptyIfNull(acctResults)) + .setLockSalaryItemIds(lockSalaryItemIds) + .setSalarySobItemPOS(salarySobItemPOS) + .setSalaryItemIdWithPriorityList(salarySobItemsWithPriority) + .setExpressFormulas(expressFormulas) + .setSalaryItemPOS(salaryItemPOS) + .setSalarySobAdjustRulePOS(salarySobAdjustRulePOS) + .setWelfareColumns(MapUtils.emptyIfNull(welfareColumns)) + .setAttendQuoteFieldListDTOS(attendQuoteFieldListDTOS) + .setSalaryAcctEmployeePOS(acctEmployeePOS) + .setIssuedFieldIds(issuedFieldIds) + .setChildMonitor(childMonitor) + .setResults(calculateResults) + .setCalculateKey(calculateKey) + .setTaxDeclarationFunction(taxDeclarationFunction) + .setTaxIds(taxIds); + List finalSalarySobBackItems = salarySobBackItems; + LocalRunnable localRunnable = new LocalRunnable() { + @Override + public void execute() { + getSalaryAcctCalculateService(user).calculate(salaryAcctCalculateBO, simpleEmployee, finalSalarySobBackItems); + } + }; + ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.HRM, "salaryAcctCalculate", localRunnable); + } + // 13、等待所有子线程执行完毕 + childMonitor.await(); + + + // 14、判断子线程执行结果 + boolean allSuccess = calculateResults.stream().allMatch(SalaryAcctCalculateBO.Result::isStatus); + if (!allSuccess) { + // 薪资核算实现的线程的错误信息 + String errorMsg = calculateResults.stream().filter(result -> !result.isStatus()).map(SalaryAcctCalculateBO.Result::getErrMsg).collect(Collectors.joining("|")); + getSalaryAcctProgressService(user).fail(SalaryCacheKey.AFTER_TAXA_CCT_PROGRESS + salaryAcctRecordId, errorMsg); + // 删除薪资核算临时存储表中的数据 + getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); + return; + } + // 15、处理核算结果临时表数据 + handleSalaryAfterTaxAcctResultTemp(salaryAcctRecordId, calculateKey, afterTaxItems); + // 16、开始运行校验规则 +// SalaryAcctCheckParam salaryAcctCheckParam = new SalaryAcctCheckParam() +// .setSalaryAcctRecordId(calculateParam.getSalaryAcctRecordId()) +// .setIds(calculateParam.getIds()); +// salaryCheckResultService.check(salaryAcctCheckParam, true, simpleEmployee); +// Thread.sleep(10); + getSalaryAcctProgressService(user).finish(SalaryCacheKey.AFTER_TAXA_CCT_PROGRESS + salaryAcctRecordId, true); + + + // 记录日志 + // 查询操作日志的targetName + String targetName = getSalaryAcctRecordService(user).getLogTargetNameById(salaryAcctRecordId); + LoggerContext loggerContext = new LoggerContext<>(); + loggerContext.setUser(user); + loggerContext.setTargetId(String.valueOf(salaryAcctRecordId)); + loggerContext.setTargetName(targetName); + loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "核算税后薪资")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "核算税后薪资")); + SalaryElogConfig.salaryAcctRecordLoggerTemplate.write(loggerContext); + } catch (Exception e) { + log.info("核算税后薪资出错:{}", e.getMessage(), e); + getSalaryAcctProgressService(user).fail(SalaryCacheKey.AFTER_TAXA_CCT_PROGRESS + salaryAcctRecordId, SalaryI18nUtil.getI18nLabel(99642, "薪资核算出错") + ": " + e.getMessage()); + } finally { + // 数据库字段加密用 + } + } + @NotNull private List sortItems(List salarySobItemPOS, List salarySobBackItems, List salaryItemPOS, List expressFormulas) { @@ -999,6 +1174,19 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe log.info(sw.prettyPrint()); } + + private void handleSalaryAfterTaxAcctResultTemp(Long salaryAcctRecordId, String calculateKey, List afterTaxItemIds) { + // 查询薪资核算结果的临时存储 + List salaryAcctResultTempPOS = getSalaryAcctResultTempService(user).listByCalculateKey(calculateKey); + // 删除原来的薪资核算结果 + getSalaryAcctResultMapper().deleteBySalaryAcctRecordIdAndSalaryItemIds(salaryAcctRecordId, afterTaxItemIds); + // 保存薪资的薪资核算结果 + List salaryAcctResultPOS = SalaryAcctResultBO.convert2ResultPO(salaryAcctResultTempPOS); + batchSave(salaryAcctResultPOS); + // 删除薪资核算临时存储表中的数据 + getSalaryAcctResultTempService(user).deleteByCalculateKey(calculateKey); + } + @Override public List listBySalaryAcctRecordIdsAndTaxAgentIds(Collection salaryAcctRecordIds, Collection taxAgentIds) { if (CollectionUtils.isEmpty(salaryAcctRecordIds)) { @@ -1254,8 +1442,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe LoggerContext> context = new LoggerContext<>(); context.setUser(user); context.setTargetId(salaryAcctRecord.getId().toString()); - context.setTargetName(SalaryI18nUtil.getI18nLabel( 268573, "全部人员")); - context.setOperator(user.getUID()+""); + context.setTargetName(SalaryI18nUtil.getI18nLabel(268573, "全部人员")); + context.setOperator(user.getUID() + ""); context.setOperateType(operateType.getValue()); context.setOperateTypeName(operateType.getDefaultLabel()); context.setGroupId(SalaryLogGroupTypeEnum.SALARY_ACCT_RESULT_VALUE.getValue()); diff --git a/src/com/engine/salary/service/impl/TaxDeclarationApiConfigServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationApiConfigServiceImpl.java index f307a95c8..9d44300cc 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationApiConfigServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationApiConfigServiceImpl.java @@ -3,14 +3,12 @@ package com.engine.salary.service.impl; import com.engine.core.impl.Service; import com.engine.salary.constant.SzyhApiConstant; import com.engine.salary.entity.datacollection.response.QuerySpecialAmountFeedbackResponse; -import com.engine.salary.entity.taxagent.response.SzyhResponseHead; import com.engine.salary.entity.taxapiflow.bo.TaxApiFlowBO; import com.engine.salary.entity.taxapiflow.param.TaxDeclarationBillingConfigSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiProfilePO; import com.engine.salary.enums.SalaryOnOffEnum; import com.engine.salary.enums.taxdeclaration.TaxDeclareApiProfileEnum; -import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxdeclaration.TaxDeclarationApiProfileMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareApiConfigMapper; import com.engine.salary.service.TaxDeclarationApiConfigService; @@ -19,7 +17,10 @@ import com.engine.salary.util.db.MapperProxyFactory; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import java.util.*; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; /** * chengliming @@ -97,17 +98,6 @@ public class TaxDeclarationApiConfigServiceImpl extends Service implements TaxDe config.setHost(getApiHost()); insert(config); } - if (StringUtils.isNotEmpty(config.getAppKey()) && StringUtils.isNotEmpty(config.getAppSecret())) { - QuerySpecialAmountFeedbackResponse response = getQuerySpecialAmountFeedbackResponse(config); - // 校验请求结果 - String responseCode = Optional.ofNullable(response).map(QuerySpecialAmountFeedbackResponse::getHead).map(SzyhResponseHead::getCode).orElse(null); - - if (SzyhApiConstant.ERROR_CODE.equals(responseCode) - || SzyhApiConstant.APP_DISABLED_CODE.equals(responseCode) - || SzyhApiConstant.APP_PAUSED_CODE.equals(responseCode)) { - throw new SalaryRunTimeException("账号密码错误或账号已停用"); - } - } } private String getApiHost() { diff --git a/src/com/engine/salary/web/SalaryAcctController.java b/src/com/engine/salary/web/SalaryAcctController.java index 39a9a2245..151d0e9e3 100644 --- a/src/com/engine/salary/web/SalaryAcctController.java +++ b/src/com/engine/salary/web/SalaryAcctController.java @@ -541,6 +541,15 @@ public class SalaryAcctController { return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::calcTaxFeedback, salaryCalcTaxParam); } + //计算税后工资 + @POST + @Path("/acctresult/afterTaxAccounting") + @Produces(MediaType.APPLICATION_JSON) + public String afterTaxAccounting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAfterTaxAcctCalculateParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getSalaryAcctResultWrapper(user)::afterTaxAccounting, param); + } + //导出核算结果 @GET @Path("/acctresult/export") diff --git a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java index d8ebc1009..0442df794 100644 --- a/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java +++ b/src/com/engine/salary/wrapper/SalaryAcctResultWrapper.java @@ -236,14 +236,6 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult .setStatus(true) .setMessage(StringUtils.EMPTY); getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.ACCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), initProgress); - // 异步执行薪资核算 -// LocalRunnable localRunnable = new LocalRunnable() { -// @Override -// public void execute() { -// getSalaryAcctResultService(user).calculate(calculateParam, simpleEmployee); -// } -// }; -// ThreadPoolUtil.fixedPoolExecute(ModulePoolEnum.HRM, "salaryAcctCalculateV1", localRunnable); new Thread() { public void run() { getSalaryAcctResultService(user).calculate(calculateParam, simpleEmployee); @@ -252,6 +244,41 @@ public class SalaryAcctResultWrapper extends Service implements SalaryAcctResult } + /** + * 核算税后 + * + * @param calculateParam 薪资核算的参数 + */ + public void afterTaxAccounting(SalaryAfterTaxAcctCalculateParam calculateParam) { + //当前登陆人员 + DataCollectionEmployee simpleEmployee = new DataCollectionEmployee(); + simpleEmployee.setEmployeeId((long) user.getUID()); + // 检查薪资核算人员的个税扣缴义务人 + getSalaryAcctEmployeeWrapper(user).checkTaxAgent(calculateParam.getSalaryAcctRecordId()); + // 检查是否正在核算中 + ProgressDTO salaryAcctProgressDTO = getSalaryAcctProgressService(user).getProgress(SalaryCacheKey.AFTER_TAXA_CCT_PROGRESS + calculateParam.getSalaryAcctRecordId()); + if (Objects.nonNull(salaryAcctProgressDTO) && salaryAcctProgressDTO.isStatus() && Optional.ofNullable(salaryAcctProgressDTO.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) { + return; + } + // 初始化进度 + ProgressDTO initProgress = new ProgressDTO() + .setTitle(SalaryI18nUtil.getI18nLabel(97515, "核算中")) + .setTitleLabelId(97515L) + .setTotalQuantity(NumberUtils.INTEGER_ONE) + .setCalculatedQuantity(NumberUtils.INTEGER_ZERO) + .setProgress(BigDecimal.ZERO) + .setStatus(true) + .setMessage(StringUtils.EMPTY); + getSalaryAcctProgressService(user).initProgress(SalaryCacheKey.AFTER_TAXA_CCT_PROGRESS + calculateParam.getSalaryAcctRecordId(), initProgress); + new Thread() { + public void run() { + getSalaryAcctResultService(user).afterTaxAccounting(calculateParam, simpleEmployee); + } + }.start(); + + } + + /** * 检查是否有薪资核算结果的查看权限 * @param salaryAcctRecordId diff --git a/src/com/engine/salary/wrapper/proxy/SalaryAcctResultWrapperProxy.java b/src/com/engine/salary/wrapper/proxy/SalaryAcctResultWrapperProxy.java index 7a984d1c4..4334ed9ba 100644 --- a/src/com/engine/salary/wrapper/proxy/SalaryAcctResultWrapperProxy.java +++ b/src/com/engine/salary/wrapper/proxy/SalaryAcctResultWrapperProxy.java @@ -19,5 +19,7 @@ public interface SalaryAcctResultWrapperProxy { void calculate(SalaryAcctCalculateParam calculateParam); + void afterTaxAccounting(SalaryAfterTaxAcctCalculateParam calculateParam); + void batchUpdate(SalaryAcctResultBatchUpdateParam param); } From d518b86c82f1bc6e4016a5de5eae8696f53d73ff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 17 Jul 2024 10:04:49 +0800 Subject: [PATCH 77/96] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=AE=97=E7=A8=8Esql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202407170103.sql | 14 ++++++++++++++ resource/sqlupgrade/GS/sql202407170103.sql | 14 ++++++++++++++ resource/sqlupgrade/JC/sql202407170103.sql | 14 ++++++++++++++ resource/sqlupgrade/Mysql/sql202407170103.sql | 13 +++++++++++++ resource/sqlupgrade/Oracle/sql202407170103.sql | 13 +++++++++++++ resource/sqlupgrade/PG/sql202407170103.sql | 13 +++++++++++++ resource/sqlupgrade/SQLServer/sql202407170103.sql | 13 +++++++++++++ resource/sqlupgrade/ST/sql202407170103.sql | 14 ++++++++++++++ 8 files changed, 108 insertions(+) create mode 100644 resource/sqlupgrade/DM/sql202407170103.sql create mode 100644 resource/sqlupgrade/GS/sql202407170103.sql create mode 100644 resource/sqlupgrade/JC/sql202407170103.sql create mode 100644 resource/sqlupgrade/Mysql/sql202407170103.sql create mode 100644 resource/sqlupgrade/Oracle/sql202407170103.sql create mode 100644 resource/sqlupgrade/PG/sql202407170103.sql create mode 100644 resource/sqlupgrade/SQLServer/sql202407170103.sql create mode 100644 resource/sqlupgrade/ST/sql202407170103.sql diff --git a/resource/sqlupgrade/DM/sql202407170103.sql b/resource/sqlupgrade/DM/sql202407170103.sql new file mode 100644 index 000000000..6326041b7 --- /dev/null +++ b/resource/sqlupgrade/DM/sql202407170103.sql @@ -0,0 +1,14 @@ +create table hrsa_acct_calc_tax_req +( + id number primary key , + create_time date default sysdate, + update_time date default sysdate, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + salary_acct_record_id number, + tax_agent_id number, + request_id varchar2(100) +); +/ + diff --git a/resource/sqlupgrade/GS/sql202407170103.sql b/resource/sqlupgrade/GS/sql202407170103.sql new file mode 100644 index 000000000..6326041b7 --- /dev/null +++ b/resource/sqlupgrade/GS/sql202407170103.sql @@ -0,0 +1,14 @@ +create table hrsa_acct_calc_tax_req +( + id number primary key , + create_time date default sysdate, + update_time date default sysdate, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + salary_acct_record_id number, + tax_agent_id number, + request_id varchar2(100) +); +/ + diff --git a/resource/sqlupgrade/JC/sql202407170103.sql b/resource/sqlupgrade/JC/sql202407170103.sql new file mode 100644 index 000000000..6326041b7 --- /dev/null +++ b/resource/sqlupgrade/JC/sql202407170103.sql @@ -0,0 +1,14 @@ +create table hrsa_acct_calc_tax_req +( + id number primary key , + create_time date default sysdate, + update_time date default sysdate, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + salary_acct_record_id number, + tax_agent_id number, + request_id varchar2(100) +); +/ + diff --git a/resource/sqlupgrade/Mysql/sql202407170103.sql b/resource/sqlupgrade/Mysql/sql202407170103.sql new file mode 100644 index 000000000..10ccaaadd --- /dev/null +++ b/resource/sqlupgrade/Mysql/sql202407170103.sql @@ -0,0 +1,13 @@ +create table hrsa_acct_calc_tax_req +( + id bigint primary key comment 'ID' , + create_time datetime default now() comment 'ʱ' , + update_time datetime default now() comment '޸ʱ' , + creator bigint comment 'id' , + delete_type int default 0 comment 'Ƿɾ' , + tenant_key varchar(10) comment '⻧KEY' , + salary_acct_record_id bigint comment 'нʺ¼id' , + tax_agent_id bigint comment '˰۽id' , + request_id varchar(100) comment 'requestId' +) +; \ No newline at end of file diff --git a/resource/sqlupgrade/Oracle/sql202407170103.sql b/resource/sqlupgrade/Oracle/sql202407170103.sql new file mode 100644 index 000000000..906e14906 --- /dev/null +++ b/resource/sqlupgrade/Oracle/sql202407170103.sql @@ -0,0 +1,13 @@ +create table hrsa_acct_calc_tax_req +( + id number primary key , + create_time date default sysdate, + update_time date default sysdate, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + salary_acct_record_id number, + tax_agent_id number, + request_id varchar2(100) +) +/ \ No newline at end of file diff --git a/resource/sqlupgrade/PG/sql202407170103.sql b/resource/sqlupgrade/PG/sql202407170103.sql new file mode 100644 index 000000000..47f27e07f --- /dev/null +++ b/resource/sqlupgrade/PG/sql202407170103.sql @@ -0,0 +1,13 @@ +create table hrsa_acct_calc_tax_req +( + id bigint primary key , + create_time timestamp default now(), + update_time timestamp default now(), + creator bigint, + delete_type int default 0, + tenant_key varchar(10), + salary_acct_record_id bigint, + tax_agent_id bigint, + request_id varchar(100) +); +/ \ No newline at end of file diff --git a/resource/sqlupgrade/SQLServer/sql202407170103.sql b/resource/sqlupgrade/SQLServer/sql202407170103.sql new file mode 100644 index 000000000..a8734ab0c --- /dev/null +++ b/resource/sqlupgrade/SQLServer/sql202407170103.sql @@ -0,0 +1,13 @@ +create table hrsa_acct_calc_tax_req +( + id bigint primary key , + create_time datetime default getdate(), + update_time datetime default getdate(), + creator bigint, + delete_type int default 0, + tenant_key nvarchar(10), + salary_acct_record_id bigint, + tax_agent_id bigint, + request_id nvarchar(100) +) +GO \ No newline at end of file diff --git a/resource/sqlupgrade/ST/sql202407170103.sql b/resource/sqlupgrade/ST/sql202407170103.sql new file mode 100644 index 000000000..6326041b7 --- /dev/null +++ b/resource/sqlupgrade/ST/sql202407170103.sql @@ -0,0 +1,14 @@ +create table hrsa_acct_calc_tax_req +( + id number primary key , + create_time date default sysdate, + update_time date default sysdate, + creator number, + delete_type int default 0, + tenant_key varchar2(10), + salary_acct_record_id number, + tax_agent_id number, + request_id varchar2(100) +); +/ + From 08c30c292b613692e9b704d1c5565afb5e6db3cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 17 Jul 2024 11:05:30 +0800 Subject: [PATCH 78/96] =?UTF-8?q?=E6=8C=89=E9=92=AE=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../entity/salaryacct/dto/SalaryCalcTaxInfoDTO.java | 10 +++++----- .../salary/service/impl/SalaryCalcTaxServiceImpl.java | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryCalcTaxInfoDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryCalcTaxInfoDTO.java index 554f98f9d..ff19dd7ec 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryCalcTaxInfoDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryCalcTaxInfoDTO.java @@ -10,11 +10,6 @@ import lombok.Data; @Data public class SalaryCalcTaxInfoDTO { - /** - * 是否开启智能算薪 - */ - private boolean enableTaxDeclarationApiConfig; - /** * 是否显示计算个税按钮 */ @@ -24,4 +19,9 @@ public class SalaryCalcTaxInfoDTO { * 是否显示获取个税计算反馈按钮 */ private boolean showCalcTaxFeedbackButton; + + /** + * 是否显示核算税后薪资按钮 + */ + private boolean showCalcAfterTaxButton; } diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index 2ee4b657e..ce13407f1 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -98,9 +98,9 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe boolean showCalcTaxFeedbackButton = enableTaxDeclarationApiConfig && CollectionUtils.isNotEmpty(salaryAcctCalcTaxReqs); SalaryCalcTaxInfoDTO salaryCalcTaxInfo = new SalaryCalcTaxInfoDTO(); - salaryCalcTaxInfo.setEnableTaxDeclarationApiConfig(enableTaxDeclarationApiConfig); salaryCalcTaxInfo.setShowCalcTaxButton(showCalcTaxButton); salaryCalcTaxInfo.setShowCalcTaxFeedbackButton(showCalcTaxFeedbackButton); + salaryCalcTaxInfo.setShowCalcAfterTaxButton(showCalcTaxFeedbackButton); return salaryCalcTaxInfo; } From f40d2bec9168bf4043c625f83ce1909bd14fe175 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 17 Jul 2024 13:37:39 +0800 Subject: [PATCH 79/96] =?UTF-8?q?=E7=A8=8E=E5=90=8E=E5=B7=A5=E8=B5=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/SalaryAcctResultServiceImpl.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index ea7a59966..b42c9ce8c 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -973,15 +973,22 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe // 9、计算薪资项目的运算优先级 List salarySobItemsWithPriority = sortItems(salarySobItemPOS, salarySobBackItems, salaryItemPOS, expressFormulas); - //核算税后逻辑,去除非税后项目 - List afterTaxItems = new ArrayList<>(); - afterTaxItems.add(1695204436147L); - salarySobItemsWithPriority = salarySobItemsWithPriority.stream().filter(afterTaxItems::contains).collect(Collectors.toList()); - //账套中配置的个税字段,不需要系统算 List salarySobTaxRulePOS = getSalarySobTaxRuleService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId()); List taxIds = SalaryEntityUtil.properties(salarySobTaxRulePOS, SalarySobTaxRulePO::getSalaryItemId, Collectors.toList()); + /** + * 计算税后薪资 + */ + int index = salarySobItemsWithPriority.size() - 1; + for (Long id : taxIds) { + int i = salarySobItemsWithPriority.indexOf(id); + if (i != -1 && i < index) { + index = i; + } + } + salarySobItemsWithPriority = salarySobItemsWithPriority.subList(index, salarySobItemsWithPriority.size()); + // 10、根据id查询其他合并计税的薪资核算记录 List otherSalaryAcctRecordPOS = getSalaryAcctRecordService(user).listById4OtherConsolidatedTax(salaryAcctRecordPO.getId()); // 11、查询本次核算人员 @@ -1065,7 +1072,7 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe return; } // 15、处理核算结果临时表数据 - handleSalaryAfterTaxAcctResultTemp(salaryAcctRecordId, calculateKey, afterTaxItems); + handleSalaryAfterTaxAcctResultTemp(salaryAcctRecordId, calculateKey,salarySobItemsWithPriority); // 16、开始运行校验规则 // SalaryAcctCheckParam salaryAcctCheckParam = new SalaryAcctCheckParam() // .setSalaryAcctRecordId(calculateParam.getSalaryAcctRecordId()) From 039c6fd568327dc6c02f066869f3eda370bc6a64 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 22 Jul 2024 10:27:46 +0800 Subject: [PATCH 80/96] =?UTF-8?q?=E8=96=AA=E8=B5=84=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E5=90=88=E8=AE=A1=E8=A1=8C=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E9=A1=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java index e3f794637..262104e75 100644 --- a/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java +++ b/src/com/engine/salary/report/wrapper/SalaryStatisticsEmployeeWrapper.java @@ -10,6 +10,7 @@ import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryarchive.dto.SalaryArchiveListDTO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; +import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.report.common.constant.SalaryConstant; import com.engine.salary.report.entity.bo.SalaryStatisticsReportBO; import com.engine.salary.report.entity.dto.SalaryStatisticsEmployeeDetailResultDTO; @@ -232,6 +233,8 @@ public class SalaryStatisticsEmployeeWrapper extends Service { if (CollectionUtils.isNotEmpty(records)) { List salaryItems = salaryStatisticsEmployeeDetailResult.getSalaryItemList(); + // 过滤只统计数值型薪资项目 + salaryItems = salaryItems.stream().filter(salaryItemPO -> salaryItemPO.getDataType().equals(SalaryDataTypeEnum.NUMBER.getValue())).collect(Collectors.toList()); for (SalaryItemPO item : salaryItems) { BigDecimal sumBigDecimal = new BigDecimal(SalaryStatisticsReportBO.ZERO); String itemKey = item.getId() + SalaryConstant.DYNAMIC_SUFFIX; From 89812f45f84df5ca4a8f4b88e75d1cc8195c6592 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 22 Jul 2024 14:18:05 +0800 Subject: [PATCH 81/96] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=AF=B9=E6=AF=94?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/salarysob/IncomeCategoryEnum.java | 140 ++++++++++++- .../remote/tax/client/DeclareClient.java | 22 +++ .../service/TaxDeclarationValueService.java | 14 ++ .../service/TaxDeclareRecordService.java | 12 ++ .../service/TaxReportColumnService.java | 8 + .../impl/SalaryCalcTaxServiceImpl.java | 2 +- .../impl/TaxDeclarationValueServiceImpl.java | 186 ++++++++++++++++++ .../impl/TaxDeclareRecordServiceImpl.java | 64 ++++++ .../impl/TaxReportColumnServiceImpl.java | 7 + .../salary/web/TaxDeclarationController.java | 94 +++++++++ .../wrapper/TaxDeclareRecordWrapper.java | 27 +++ 11 files changed, 568 insertions(+), 8 deletions(-) diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index a0290d408..3dd5eccac 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -4,7 +4,9 @@ import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; import com.engine.salary.enums.BaseEnum; import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTaxFeedbackResponse; +import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; import com.google.gson.Gson; import lombok.extern.slf4j.Slf4j; @@ -56,6 +58,14 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } + + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } }, REMUNERATION_FOR_LABOR(4, "0400", "一般劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160488) { @Override @@ -86,6 +96,15 @@ public enum IncomeCategoryEnum implements BaseEnum { return resultMap; } + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getLwbclb().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + + }, ONETIME_ANNUAL_BONUS(2, "0103", "全年一次性奖金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160489) { @Override @@ -116,6 +135,13 @@ public enum IncomeCategoryEnum implements BaseEnum { return resultMap; } + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQnycxjjsslb().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } }, COMPENSATION_FOR_RETIRE(107, "0107", "内退一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181936) { @Override @@ -146,6 +172,13 @@ public enum IncomeCategoryEnum implements BaseEnum { return resultMap; } + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getNtycxbcjlb().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } }, COMPENSATION_FOR_DISMISS(108, "0108", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181937) { @Override @@ -175,7 +208,13 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getJcldhtycxbcjlb().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } }, INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE(109, "0109", "个人股权激励收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181938) { @Override @@ -205,7 +244,13 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getGrgqjl().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } }, ANNUITY_RECEIPT(110, "0110", "年金领取", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181939) { @Override @@ -235,7 +280,13 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQynj().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } }, INCOME_FOR_INSURANCE_SALESMAN(402, "0402", "保险营销员佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181940) { @Override @@ -266,6 +317,14 @@ public enum IncomeCategoryEnum implements BaseEnum { return resultMap; } + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getBxyxy().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, INCOME_FOR_SECURITIES_BROKER(403, "0403", "证券经纪人佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181942) { @Override @@ -296,6 +355,14 @@ public enum IncomeCategoryEnum implements BaseEnum { return resultMap; } + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getZqjjr().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR(489, "0489", "其他连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181943) { @Override @@ -325,7 +392,13 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtlxlwbc().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } }, REMUNERATION_FOR_OTHER_LABOR(499, "0499", "其他非连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 175330) { @Override @@ -356,6 +429,14 @@ public enum IncomeCategoryEnum implements BaseEnum { return resultMap; } + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtflxlwbc().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, REMUNERATION_FOR_AUTHOR(500, "0500", "稿酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181944) { @Override @@ -385,7 +466,13 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getGcsdlb().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } }, ROYALTIES(600, "0600", "特许权使用费所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181945) { @@ -417,6 +504,14 @@ public enum IncomeCategoryEnum implements BaseEnum { return resultMap; } + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getTxq().getSscglb(); + List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); + result.put(this.getDefaultLabel(), zhsdSheetData); + return result; + } + }, NON_RESIDENT_INCOME_WAGES_AND_SALARIES(700, "0700", "无住所个人正常工资薪金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @@ -447,7 +542,13 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjgzxjlb().getSscglb(); + List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); + result.put(this.getDefaultLabel(), sheetData); + return result; + } }, NON_RESIDENT_INCOME_MONTHLY_BONUS(710, "0710", "无住所个人数月奖金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override @@ -477,7 +578,13 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjrysyjjlb().getSscglb(); + List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); + result.put(this.getDefaultLabel(), sheetData); + return result; + } }, NON_RESIDENT_INCOME_REMUNERATION_FOR_LABOR(720, "0720", "一般劳务报酬所得", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override @@ -507,6 +614,14 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } + + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getLwbclb().getSscglb(); + List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); + result.put(this.getDefaultLabel(), sheetData); + return result; + } }, NON_RESIDENT_INCOME_COMPENSATION_FOR_DISMISS(730, "0730", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override @@ -536,6 +651,14 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } + + @Override + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { + List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getJcldhtycxbcjlb().getSscglb(); + List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); + result.put(this.getDefaultLabel(), sheetData); + return result; + } }; @@ -560,6 +683,9 @@ public enum IncomeCategoryEnum implements BaseEnum { public abstract Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO); + public abstract Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse); + + @Override public Integer getValue() { return value; diff --git a/src/com/engine/salary/remote/tax/client/DeclareClient.java b/src/com/engine/salary/remote/tax/client/DeclareClient.java index 4049eb679..e72fc9007 100644 --- a/src/com/engine/salary/remote/tax/client/DeclareClient.java +++ b/src/com/engine/salary/remote/tax/client/DeclareClient.java @@ -3,8 +3,13 @@ package com.engine.salary.remote.tax.client; import com.engine.salary.constant.SzyhApiConstant; import com.engine.salary.entity.taxdeclaration.response.CancelDeclareFeedbackResponse; import com.engine.salary.entity.taxdeclaration.response.UpdateDeclareResponse; +import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; +import com.engine.salary.util.HttpUtil; +import com.engine.salary.util.JsonUtil; +import com.engine.salary.util.SingnatureData; import lombok.extern.slf4j.Slf4j; +import java.util.Collections; import java.util.HashMap; import java.util.Map; @@ -22,6 +27,23 @@ public class DeclareClient extends TaxBaseClient { super(taxAgentId); } + /** + * 申报内置算税结果查询 + * @param requestId· + * @return + */ + public GetDeclareTaxResultFeedbackResponse getDeclareTaxResultFeedback(String requestId){ + // 供应商信息 + String url = super.apiConfig.getHost() + "/gateway/iit/report/getDeclareTaxResultFeedback"; + Map params = new HashMap<>(1); + params.put("requestId", requestId); + Map header = SingnatureData.initHeader(Collections.emptyMap(), apiConfig.getAppKey(), apiConfig.getAppSecret()); + String res = HttpUtil.getRequest(url, header, params); + + log.info("getDeclareTaxResultFeedback res --- {}", res); + return JsonUtil.parseObject(res, GetDeclareTaxResultFeedbackResponse.class); + } + public CancelDeclareFeedbackResponse cancel(Map requestParam, Map responseParam) { String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_DECLARE; diff --git a/src/com/engine/salary/service/TaxDeclarationValueService.java b/src/com/engine/salary/service/TaxDeclarationValueService.java index 61feaee0e..f961dbc6f 100644 --- a/src/com/engine/salary/service/TaxDeclarationValueService.java +++ b/src/com/engine/salary/service/TaxDeclarationValueService.java @@ -1,15 +1,18 @@ package com.engine.salary.service; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationValueListDTO; +import com.engine.salary.entity.taxdeclaration.param.ContrastQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationValueListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclareRecordDetailSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationValuePO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO; import com.engine.salary.util.page.PageInfo; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 个税申报表明细 @@ -86,6 +89,17 @@ public interface TaxDeclarationValueService { */ void autoAddWagesDeclare(TaxDeclareRecordPO po); + /** + * 对比 + * @param param + */ + Map contrast(ContrastQueryParam param); + + + /** + * 导出在线对比 + */ + XSSFWorkbook exportContrast(ContrastQueryParam param); /** * 根据主键删除 diff --git a/src/com/engine/salary/service/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index 35b387f7b..75522ca3f 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -2,11 +2,13 @@ package com.engine.salary.service; import com.engine.salary.common.YearMonthRange; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationRateDTO; +import com.engine.salary.entity.taxdeclaration.param.DeclareTaxResultFeedbackQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclareRecordPO; import com.engine.salary.util.page.PageInfo; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.util.Collection; import java.util.Date; @@ -131,6 +133,16 @@ public interface TaxDeclareRecordService { void getDeclareFeedback(Long id, Integer reportType, TaxDeclarationRateDTO taxDeclarationRate); + /** + * 申报内置算税结果查询 + * + * @param id + * @return + */ + Object getDeclareTaxResultFeedback(Long id); + + XSSFWorkbook exportGetDeclareTaxResultFeedback(DeclareTaxResultFeedbackQueryParam param); + /** * 作废 * diff --git a/src/com/engine/salary/service/TaxReportColumnService.java b/src/com/engine/salary/service/TaxReportColumnService.java index 329cd697e..bed870ffb 100644 --- a/src/com/engine/salary/service/TaxReportColumnService.java +++ b/src/com/engine/salary/service/TaxReportColumnService.java @@ -22,6 +22,14 @@ public interface TaxReportColumnService { */ List listAll(); + + /** + * 根据是否是对比字段查询 + * @param contrastType 1是 0否 + * @return + */ + List listByContrastType(Integer contrastType); + /** * 根据所得项目查询个税申报表表头 * diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index ce13407f1..6d56f2121 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -138,7 +138,7 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe // 查询个税扣缴义务人关联的报税信息 List taxAgentTaxReturns = getTaxAgentTaxReturnService(user).getByTaxAgentIds(taxAgentIds); // 查询个税申报表字段 - List taxReportColumns = getTaxReportColumnService(user).listAll(); + List taxReportColumns = getTaxReportColumnService(user).listByContrastType(0); // 查询薪资核算记录关联薪资账套的个税申报配置 List salarySobTaxReportRules = getSalarySobTaxReportRuleService(user) .listBySalarySobIds(Collections.singleton(salaryAcctRecord.getSalarySobId())); diff --git a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java index f2e481fd0..950bf1beb 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java @@ -343,6 +343,192 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar batchSave(autoAddValuePOs); } + @Override + public Map contrast(ContrastQueryParam param) { + + + TaxDeclarationPO taxDeclaration = getTaxDeclarationService(user).getById(param.getTaxDeclarationId()); + if (taxDeclaration == null) { + throw new SalaryRunTimeException("无申报表"); + } + + TaxDeclareRecordPO taxDeclareRecordPO = getTaxDeclareRecordMapper().getById(taxDeclaration.getTaxDeclareRecordId()); + if (taxDeclareRecordPO == null) { + throw new SalaryRunTimeException("申报记录不存在!"); + } + + Integer reportType = IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()).getReportType().getValue(); + TaxDeclareStatusPO taxDeclareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(taxDeclareRecordPO.getId(), reportType); + + //线上数据 + DeclareClient declareClient = new DeclareClient(taxDeclareRecordPO.getTaxAgentId()); + GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(taxDeclareStatus.getDeclareRequestId()); + + Map>> onlineDataMap = new HashMap<>(); + List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(taxDeclareRecordPO.getId()); + list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(onlineDataMap, declareTaxResultFeedbackResponse)); + + Map resultList = new HashMap<>(); + List taxDeclarationValues = listByTaxDeclarationId(taxDeclaration.getId()); + + // 查询个税申报表表头 + IncomeCategoryEnum incomeCategoryEnum = SalaryEnumUtil.enumMatchByValue(taxDeclaration.getIncomeCategory(), IncomeCategoryEnum.class); + List taxReportColumns = getTaxReportColumnService(user).listByIncomeCategory(incomeCategoryEnum); + List columns = SalaryEntityUtil.properties(taxReportColumns, TaxReportColumnPO::getReportColumnName, Collectors.toList()); + // 人员id + Set employeeIds = SalaryEntityUtil.properties(taxDeclarationValues, TaxDeclarationValuePO::getEmployeeId); + // 查询报送的人员 + List employeeDeclares = getEmployeeDeclareService(user).listByTaxCycleAndTaxAgentIdAndEmployeeIds(taxDeclaration.getTaxCycle(), taxDeclaration.getTaxAgentId(), employeeIds); + // 查询人员信息 + List simpleEmployeeIds = taxDeclarationValues.stream().filter(taxDeclarationValue -> taxDeclarationValue.getEmployeeType() == null || Objects.equals(taxDeclarationValue.getEmployeeType(), EmployeeTypeEnum.ORGANIZATION.getValue())).map(TaxDeclarationValuePO::getEmployeeId).distinct().collect(Collectors.toList()); + List simpleEmployees = getSalaryEmployeeService(user).getEmployeeByIds(simpleEmployeeIds); + // 查询人员薪资(身份证号码等) + List simpleUserInfos = getSalaryEmployeeService(user).getEmployeeByIds(simpleEmployeeIds); + // 查询外部人员 + List extEmployeeIds = taxDeclarationValues.stream().filter(taxDeclarationValue -> Objects.equals(taxDeclarationValue.getEmployeeType(), EmployeeTypeEnum.EXT_EMPLOYEE.getValue())).map(TaxDeclarationValuePO::getEmployeeId).collect(Collectors.toList()); + List extEmployees = getExtEmpService(user).getExtEmpByIds(extEmployeeIds); + + // 艾志分权 240529注释 + // List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + // Map authMap = getEmployeeDeclareService(user).empIdsByAzGssbAuth(user.getUID()); + // List canManageEmpIds = (List)authMap.get("canManageEmpIds"); + // if (!taxAgentIds.contains(taxDeclareRecordPO.getTaxAgentId())) { + // taxDeclarationValues = taxDeclarationValues.stream().filter(po -> canManageEmpIds.contains(po.getEmployeeId())).collect(Collectors.toList()); + // } + + // 列表数据 + List> localList = TaxDeclarationValueList.buildTableData(incomeCategoryEnum, taxReportColumns, taxDeclarationValues, employeeDeclares, simpleEmployees, simpleUserInfos, extEmployees, true); + + + Map> localMap = new HashMap<>(); + for (Map map : localList) { + String no = map.getOrDefault("证件号码", "").toString(); + localMap.put(no, map); + } + + List> onlineData = onlineDataMap.get(incomeCategoryEnum.getDefaultLabel()); + List heads = onlineData.get(0); + List> data = onlineData.subList(1, onlineData.size()); + List> onlineMap = new ArrayList<>(); + for (int i = 0; i < data.size(); i++) { + List row = data.get(i); + Map m = new HashMap<>(); + for (int j = 0; j < heads.size(); j++) { + String key = heads.get(j).toString(); + m.put(key, row.get(j)); + } + onlineMap.add(m); + } + + Map> onlineNoMap = new HashMap<>(); + for (Map map : onlineMap) { + String no = map.getOrDefault("证件号码", "").toString(); + onlineNoMap.put(no, map); + } + + List onlyShowColumns = new ArrayList<>(); + List> oneResultList = new ArrayList<>(); + for (Map local : localList) { + AtomicBoolean hasDiff = new AtomicBoolean(false); + Map result = new HashMap<>(); + result.put("工号", local.get("工号")); + result.put("姓名", local.get("姓名")); + result.put("证件类型", local.get("证件类型")); + result.put("证件号码", local.get("证件号码")); + String no = local.getOrDefault("证件号码", "").toString(); + Map online = onlineNoMap.get(no); + + taxReportColumns.stream().map(TaxReportColumnPO::getReportColumnName).forEach(col -> { + ContrastListDTO dto = new ContrastListDTO(); + // 系统值 + String localValue = Util.null2String(local.get(col)); + // 线上值 + String onlineValue = Util.null2String(online.get(col)); + dto.setLocal(localValue); + dto.setOnline(onlineValue); + if (NumberUtil.isNumber(localValue) && NumberUtil.isNumber(onlineValue)) { + BigDecimal diff = new BigDecimal(localValue).subtract(new BigDecimal(onlineValue)); + if (diff.compareTo(new BigDecimal(0)) != 0) { + dto.setDiff(diff); + onlyShowColumns.add(col); + hasDiff.set(true); + } + } else { + if (!Objects.equals(localValue, onlineValue)) { + dto.setDiff(localValue); + onlyShowColumns.add(col); + hasDiff.set(true); + } + } + result.put(col, dto); + }); + if (param.isOnlyShowDiffEmp()) { + if (hasDiff.get()) { + oneResultList.add(result); + } + } else { + oneResultList.add(result); + } + } + + List finalOnlyShowColumns = onlyShowColumns.stream().distinct().collect(Collectors.toList()); + List headerList = new ArrayList<>(); + headerList.add("工号"); + headerList.add("姓名"); + headerList.add("证件类型"); + headerList.add("证件号码"); + headerList.addAll((param.isOnlyShowDiffItem() ? finalOnlyShowColumns : columns).stream().collect(Collectors.toList())); + resultList.put("columns", headerList); + resultList.put("pageInfo", SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), oneResultList)); + + // 显示定制列 + List weaColumns = new ArrayList<>(); + weaColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "工号"), "工号")); + weaColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "姓名"), "姓名")); + weaColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "证件类型"), "证件类型")); + weaColumns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "证件号码"), "证件号码")); + for (TaxReportColumnPO columnPO : taxReportColumns) { + weaColumns.add(new WeaTableColumn("100px", columnPO.getReportColumnName(), columnPO.getReportColumnName())); + } + + SalaryWeaTable table = new SalaryWeaTable(user, TaxDeclarationValueListDTO.class); + table.setColumns(weaColumns); + WeaResultMsg result = new WeaResultMsg(false); + result.putAll(table.makeDataResult()); + result.success(); + + resultList.put("dataKey", result.getResultMap()); + return resultList; + + } + + @Override + public XSSFWorkbook exportContrast(ContrastQueryParam param) { + param.setPageSize(1000000000); + param.setCurrent(1); + // 获取线下对比结果 + Map contrastMap = contrast(param); + List header = ((List) contrastMap.get("columns")); + PageInfo> pageInfo = (PageInfo>)contrastMap.get("pageInfo"); + List> list = pageInfo.getList(); + + List empInfoColumns = new ArrayList<>(); + empInfoColumns.add(new WeaTableColumn("100px", "工号", "jobNum")); + empInfoColumns.add(new WeaTableColumn("100px", "姓名", "username")); + empInfoColumns.add(new WeaTableColumn("100px", "证件类型", "cardType")); + empInfoColumns.add(new WeaTableColumn("100px", "证件号码", "cardNum")); + + List empInfoList = empInfoColumns.stream().map(WeaTableColumn::getText).collect(Collectors.toList()); + header = header.stream().filter(h -> !empInfoList.contains(h)).collect(Collectors.toList()); + if (CollectionUtils.isNotEmpty(param.getColumns())) { + List finalHeader = header; + header = param.getColumns().stream().filter(col -> finalHeader.contains(col)).collect(Collectors.toList()); + } + + return ExcelUtilPlus.genWorkbook4TaxDeclareContrast(empInfoColumns, header, list, "在线对比结果"); + + } + @Override public void deleteById(Long deleteId) { getTaxDeclarationValueMapper().deleteByIds(Collections.singletonList(deleteId)); diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 25bcdfcaf..c132b8fe5 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -28,6 +28,7 @@ import com.engine.salary.entity.taxapiflow.po.TaxDeclarationApiFlowRecordPO; import com.engine.salary.entity.taxdeclaration.bo.*; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationRateDTO; import com.engine.salary.entity.taxdeclaration.param.AbnormalEmployeeListQueryParam; +import com.engine.salary.entity.taxdeclaration.param.DeclareTaxResultFeedbackQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.po.*; @@ -39,6 +40,7 @@ import com.engine.salary.enums.OperateTypeEnum; import com.engine.salary.enums.employeedeclare.DeclareStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; +import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.enums.taxagent.TaxAgentTaxReturnStatusEnum; import com.engine.salary.enums.taxdeclaration.*; @@ -46,11 +48,13 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxdeclaration.TaxDeclareRecordMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareStatusMapper; import com.engine.salary.remote.tax.client.DeclareClient; +import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.service.*; import com.engine.salary.service.factory.TaxPaymentServiceFactory; import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; import com.engine.salary.util.db.MapperProxyFactory; +import com.engine.salary.util.excel.ExcelUtil; import com.engine.salary.util.page.PageInfo; import com.engine.salary.util.page.SalaryPageUtil; import com.google.common.collect.ImmutableMap; @@ -59,6 +63,7 @@ import com.google.common.collect.Sets; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.general.Util; import weaver.hrm.User; @@ -991,6 +996,65 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } + @Override + public Object getDeclareTaxResultFeedback(Long id) { + TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); + TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); + + DeclareClient declareClient = new DeclareClient(taxDeclareRecord.getTaxAgentId()); + GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(taxDeclareRecord.getDeclareRequestId()); + + Map>> map = new HashMap<>(); + List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(id); + list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(map, declareTaxResultFeedbackResponse)); + return declareClient.getDeclareTaxResultFeedback(taxDeclareRecord.getDeclareRequestId()); + } + + @Override + public XSSFWorkbook exportGetDeclareTaxResultFeedback(DeclareTaxResultFeedbackQueryParam param) { + Long id = param.getId(); + TaxDeclareRecordPO taxDeclareRecord = getById(id); + String requestId = param.getRequestId(); + TaxDeclareStatusPO declareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(id, param.getReportType()); + + DeclareClient declareClient = new DeclareClient(taxDeclareRecord.getTaxAgentId()); + GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(StringUtils.isEmpty(requestId) ? declareStatus.getDeclareRequestId() : requestId); + + Map>> map = new HashMap<>(); + List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(id); + list.stream() + .map(TaxDeclarationPO::getIncomeCategory) + .map(IncomeCategoryEnum::parseByValue) + .filter(incomeCategoryEnum -> incomeCategoryEnum.getReportType().getValue().equals(param.getReportType())) + .collect(Collectors.toList()).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(map, declareTaxResultFeedbackResponse)); + list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(map, declareTaxResultFeedbackResponse)); + // 艾志分权 - 240529注释 + // List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); + // if (!taxAgentIds.contains(taxDeclareRecord.getTaxAgentId())) { + // Map authMap = getEmployeeDeclareService(user).empIdsByAzGssbAuth(user.getUID()); + // List canManageEmpIds = (List)authMap.get("canManageEmpIds"); + // // 获取这些人在人员信息报送中的证件号码 + // List employeeDeclareList = getEmployeeDeclareService(user).listByTaxCycleAndTaxAgentId(taxDeclareRecord.getTaxCycle(), taxDeclareRecord.getTaxAgentId()); + // List canManageCardNum = employeeDeclareList.stream().filter(declare -> canManageEmpIds.contains(declare.getEmployeeId())).map(EmployeeDeclarePO::getCardNum).collect(Collectors.toList()); + // for (Map.Entry>> entry : map.entrySet()) { + // List> valueList = entry.getValue(); + // List> newvalueList = new ArrayList<>(); + // newvalueList.add(valueList.get(0)); + // for (int i =1; i value = valueList.get(i); + // String cardNum = Util.null2String(value.get(2)); + // if (canManageCardNum.contains(cardNum)) { + // newvalueList.add(value); + // } + // } + // map.put(entry.getKey(), newvalueList); + // } + // } + + return ExcelUtil.genWorkbookV2(map); + } + + @Override public void updateDeclare(Long id, Integer reportType) { TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); diff --git a/src/com/engine/salary/service/impl/TaxReportColumnServiceImpl.java b/src/com/engine/salary/service/impl/TaxReportColumnServiceImpl.java index 30ebbe9d5..c09510bd8 100644 --- a/src/com/engine/salary/service/impl/TaxReportColumnServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxReportColumnServiceImpl.java @@ -30,6 +30,13 @@ public class TaxReportColumnServiceImpl extends Service implements TaxReportColu return getTaxReportColumnMapper().listAll(); } + @Override + public List listByContrastType(Integer contrastType) { + + return getTaxReportColumnMapper().listSome(TaxReportColumnPO.builder().contrastType(contrastType).build()); + + } + @Override public List listByIncomeCategory(IncomeCategoryEnum incomeCategory, Integer... contrastTypes) { return getTaxReportColumnMapper().listSome(TaxReportColumnPO.builder().contrastTypes(Arrays.asList(contrastTypes)).incomeCategory(incomeCategory.getValue().toString()).build()); diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index 0dfe7c291..c35e8e70f 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -248,6 +248,100 @@ public class TaxDeclarationController { return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getDeclareFeedback, taxDeclareRecordParam); } + /** + * 申报内置算税结果查询 + * + * @param + * @return + */ + @GET + @Path("/getDeclareTaxResultFeedback") + @Produces(MediaType.APPLICATION_JSON) + public String getDeclareTaxResultFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getDeclareTaxResultFeedback, id); + } + + /** + * 申报内置算税结果 + * + * @return + */ + @POST + @Path("/exportGetDeclareTaxResultFeedback") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportGetDeclareTaxResultFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody DeclareTaxResultFeedbackQueryParam param) { + + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportGetDeclareTaxResultFeedback(param); + String fileName = "申报内置算税结果-" + LocalDate.now(); + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("申报内置算税结果导出异常", e); + throw e; + } + } + + /** + * 对比算税过程 + * + * @param request + * @param response + * @param param + * @return + */ + @POST + @Path("/contrast") + @Produces(MediaType.APPLICATION_JSON) + public String contrast(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ContrastQueryParam param) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult>(user).run(getTaxDeclareRecordWrapper(user)::contrast, param); + } + + /** + * 导出在线对比 + * + * @return + */ + @POST + @Path("/exportContrast") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportContrast(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody ContrastQueryParam param) { + + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportContrast(param); + String fileName = "在线对比结果-" + LocalDate.now(); + try { + fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + + StreamingOutput output = outputStream -> { + workbook.write(outputStream); + outputStream.flush(); + }; + response.setContentType("application/octet-stream"); + return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); + } catch (Exception e) { + log.error("在线对比结果导出异常", e); + throw e; + } + } + /** * 作废 diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index a288693c7..563fa0ec4 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -509,6 +509,15 @@ public class TaxDeclareRecordWrapper extends Service { } + public Object getDeclareTaxResultFeedback(Long id) { + return getTaxDeclareRecordService(user).getDeclareTaxResultFeedback(id); + } + + + public XSSFWorkbook exportGetDeclareTaxResultFeedback(DeclareTaxResultFeedbackQueryParam param) { + return getTaxDeclareRecordService(user).exportGetDeclareTaxResultFeedback(param); + } + /** * 作废 */ @@ -633,6 +642,24 @@ public class TaxDeclareRecordWrapper extends Service { } + /** + * 对比算税结果 + * + * @param param + */ + public Map contrast(ContrastQueryParam param) { + return getTaxDeclarationValueService(user).contrast(param); + } + + /** + * 导出在线对比 + * + * @param param + * @return + */ + public XSSFWorkbook exportContrast(ContrastQueryParam param) { + return getTaxDeclarationValueService(user).exportContrast(param); + } /** * 刷新数据 From 671350654a861e9c8473b42f5df7baaf901132bc Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 22 Jul 2024 15:29:34 +0800 Subject: [PATCH 82/96] =?UTF-8?q?fix=E8=96=AA=E8=B5=84=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E6=8A=A5=E8=A1=A8=E6=98=BE=E7=A4=BA=E5=88=97=E5=AE=9A=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SalaryStatisticsEmployeeServiceImpl.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java index ecde4e139..3a6e00071 100644 --- a/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java +++ b/src/com/engine/salary/report/service/impl/SalaryStatisticsEmployeeServiceImpl.java @@ -367,8 +367,23 @@ public class SalaryStatisticsEmployeeServiceImpl extends Service implements Sala List salaryAcctResultValues = getSalaryAcctResultService(user).listBySalaryAcctEmployeeIds(salaryAcctEmployeeIds); // 3.获取薪资项目 - List salaryItemIds = salaryAcctResultValues.stream().map(SalaryAcctResultPO::getSalaryItemId).distinct().collect(Collectors.toList()); - List salaryItemList = CollectionUtils.isEmpty(salaryItemIds) ? Lists.newArrayList() : getSalaryItemService(user).listByIds(salaryItemIds); + List salaryItemList = getSalaryItemService(user).listAll(); + salaryItemList = salaryItemList.stream() + .sorted(new Comparator() { + @Override + public int compare(SalaryItemPO o1, SalaryItemPO o2) { + if (o1.getSortedIndex() == null && o2.getSortedIndex() == null) { + Integer systemType1 = o1.getSystemType() == null ? 0 : o1.getSystemType(); + Integer systemType2 = o2.getSystemType() == null ? 0 : o2.getSystemType(); + return systemType1.compareTo(systemType2); + } else { + Integer sortedIndex1 = o1.getSortedIndex() == null ? 0 : o1.getSortedIndex(); + Integer sortedIndex2 = o2.getSortedIndex() == null ? 0 : o2.getSortedIndex(); + return sortedIndex2.compareTo(sortedIndex1); + } + } + }) + .collect(Collectors.toList()); return SalaryStatisticsEmployeeDetailResultDTO.builder() .salaryAcctEmployeeList(salaryAcctEmployeeList) From 2a7431c463fc92c3468fdc7c7c1d769632e6f7c0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 23 Jul 2024 10:14:58 +0800 Subject: [PATCH 83/96] =?UTF-8?q?=E6=81=A2=E5=A4=8D=E5=AF=B9=E6=AF=94?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/constant/SzyhApiConstant.java | 16 +- .../enums/salarysob/IncomeCategoryEnum.java | 8 + .../remote/tax/client/DeclareClient.java | 29 +- .../remote/tax/client/TaxBaseClient.java | 41 +- .../declare/GetCompanyIncomesRequest.java | 81 ++++ .../declare/GetCompanyIncomesResponse.java | 456 ++++++++++++++++++ .../impl/TaxDeclarationValueServiceImpl.java | 39 +- .../impl/TaxDeclareRecordServiceImpl.java | 22 - test/ParseTaxApi.java | 4 +- 9 files changed, 639 insertions(+), 57 deletions(-) create mode 100644 src/com/engine/salary/remote/tax/request/declare/GetCompanyIncomesRequest.java create mode 100644 src/com/engine/salary/remote/tax/response/declare/GetCompanyIncomesResponse.java diff --git a/src/com/engine/salary/constant/SzyhApiConstant.java b/src/com/engine/salary/constant/SzyhApiConstant.java index 8a7fe765a..15ba4af9b 100644 --- a/src/com/engine/salary/constant/SzyhApiConstant.java +++ b/src/com/engine/salary/constant/SzyhApiConstant.java @@ -23,7 +23,6 @@ public class SzyhApiConstant { /** * 企业注册接口 */ -// public static final String GET_REGISTER_INFO_URL = "gateway/iit/declare/getCompanyRegisterInfo"; public static final String GET_REGISTER_INFO_URL = "gateway/iit/service/getCompanyRegisterInfo"; /** * 企业注册反馈接口 @@ -33,7 +32,6 @@ public class SzyhApiConstant { /** * 校验密码接口 */ -// public static final String CHECK_PASSWORD_URL = "gateway/iit/check/checkPassword"; public static final String CHECK_PASSWORD_URL = "gateway/iit/service/check/checkPassword"; /** * 校验密码反馈接口 @@ -83,7 +81,6 @@ public class SzyhApiConstant { /** * 更正申报 */ -// public static final String UPDATE_DECLARE = "/gateway/iit/report/correct"; public static final String UPDATE_DECLARE = "/gateway/iit/service/correct"; /** @@ -96,6 +93,16 @@ public class SzyhApiConstant { */ public static final String CANCEL_CORRECT = "gateway/iit/report/cancelCorrect"; + /** + * 企业申报数据明细查询 + */ + public static final String GET_COMPANY_INCOMES = "gateway/iit/service/getCompanyIncomes"; + + /** + * 企业申报数据明细查询反馈 + */ + public static final String GET_COMPANY_INCOMES_FEEDBACK = "gateway/iit/service/getCompanyIncomesFeedback"; + /** * 获取流量统计情况 */ @@ -139,7 +146,6 @@ public class SzyhApiConstant { /** * 缴款凭证作废 */ -// public static final String CANCEL_WITHHOLDING_VOUCHER = "gateway/iit/payment/cancelWithholdingVoucher"; public static final String CANCEL_WITHHOLDING_VOUCHER = "gateway/iit/service/cancelWithholdingVoucher"; /** @@ -151,7 +157,6 @@ public class SzyhApiConstant { /** * 完税证明 */ -// public static final String GET_WITHHELD_VOUCHER = "gateway/iit/payment/getWithheldVoucher"; public static final String GET_WITHHELD_VOUCHER = "gateway/iit/service/getWithheldVoucher"; /** @@ -162,7 +167,6 @@ public class SzyhApiConstant { /** * 查询缴款状态 */ -// public static final String GET_SYNC_WITHHOLDING_FEEDBACK = "gateway/iit/payment/getSyncWithholdingFeedback"; public static final String GET_SYNC_WITHHOLDING_FEEDBACK = "gateway/iit/service/getSyncWithholdingFeedback"; /** diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index 3dd5eccac..65bfa1de2 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -4,6 +4,7 @@ import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; import com.engine.salary.enums.BaseEnum; import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTaxFeedbackResponse; +import com.engine.salary.remote.tax.response.declare.GetCompanyIncomesResponse; import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.excel.ExcelUtil; @@ -685,6 +686,13 @@ public enum IncomeCategoryEnum implements BaseEnum { public abstract Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse); + public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetCompanyIncomesResponse response){ + List sfmx = response.getBody().getSfmx(); + List> sheetData = ExcelUtil.getExcelSheetData(GetCompanyIncomesResponse.sfmx.class, sfmx); + result.put(this.getDefaultLabel(), sheetData); + return result; + } + @Override public Integer getValue() { diff --git a/src/com/engine/salary/remote/tax/client/DeclareClient.java b/src/com/engine/salary/remote/tax/client/DeclareClient.java index e72fc9007..e8f0d36ee 100644 --- a/src/com/engine/salary/remote/tax/client/DeclareClient.java +++ b/src/com/engine/salary/remote/tax/client/DeclareClient.java @@ -3,6 +3,7 @@ package com.engine.salary.remote.tax.client; import com.engine.salary.constant.SzyhApiConstant; import com.engine.salary.entity.taxdeclaration.response.CancelDeclareFeedbackResponse; import com.engine.salary.entity.taxdeclaration.response.UpdateDeclareResponse; +import com.engine.salary.remote.tax.response.declare.GetCompanyIncomesResponse; import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.util.HttpUtil; import com.engine.salary.util.JsonUtil; @@ -29,9 +30,13 @@ public class DeclareClient extends TaxBaseClient { /** * 申报内置算税结果查询 - * @param requestId· + * + * 已下架 + * + * @param requestId * @return */ + @Deprecated public GetDeclareTaxResultFeedbackResponse getDeclareTaxResultFeedback(String requestId){ // 供应商信息 String url = super.apiConfig.getHost() + "/gateway/iit/report/getDeclareTaxResultFeedback"; @@ -45,6 +50,12 @@ public class DeclareClient extends TaxBaseClient { } + /** + * 作废申报 + * @param requestParam + * @param responseParam + * @return + */ public CancelDeclareFeedbackResponse cancel(Map requestParam, Map responseParam) { String url = apiConfig.getHost() + SzyhApiConstant.CANCEL_DECLARE; String requestId = request(url, requestParam); @@ -69,4 +80,20 @@ public class DeclareClient extends TaxBaseClient { return response(feedbackUrl, responseParam, UpdateDeclareResponse.class); } + + /** + * 企业申报数据明细 + * @param requestParam + * @return + */ + public GetCompanyIncomesResponse getCompanyIncomes(Map requestParam) { + String url = apiConfig.getHost() + SzyhApiConstant.GET_COMPANY_INCOMES; + String requestId = request(url, requestParam); + + String feedbackUrl = apiConfig.getHost() + SzyhApiConstant.GET_COMPANY_INCOMES_FEEDBACK; + Map responseParam = new HashMap<>(1); + responseParam.put("requestId", requestId); + return response(feedbackUrl, responseParam, GetCompanyIncomesResponse.class); + } + } diff --git a/src/com/engine/salary/remote/tax/client/TaxBaseClient.java b/src/com/engine/salary/remote/tax/client/TaxBaseClient.java index b880cc01f..da59e71b1 100644 --- a/src/com/engine/salary/remote/tax/client/TaxBaseClient.java +++ b/src/com/engine/salary/remote/tax/client/TaxBaseClient.java @@ -1,10 +1,12 @@ package com.engine.salary.remote.tax.client; import com.engine.salary.constant.SzyhApiConstant; +import com.engine.salary.entity.taxagent.po.TaxAgentPO; import com.engine.salary.entity.taxagent.po.TaxAgentTaxReturnPO; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationApiConfigPO; import com.engine.salary.entity.taxpayment.response.BaseResponse; import com.engine.salary.exception.SalaryRunTimeException; +import com.engine.salary.mapper.taxagent.TaxAgentMapper; import com.engine.salary.mapper.taxagent.TaxAgentTaxReturnMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareApiConfigMapper; import com.engine.salary.remote.tax.response.RequestIdResponse; @@ -15,6 +17,7 @@ import weaver.general.Util; import java.util.HashMap; import java.util.Map; +import java.util.UUID; @Slf4j public class TaxBaseClient { @@ -26,9 +29,14 @@ public class TaxBaseClient { return MapperProxyFactory.getProxy(TaxAgentTaxReturnMapper.class); } + private TaxAgentMapper getTaxAgentMapper() { + return MapperProxyFactory.getProxy(TaxAgentMapper.class); + } + public Long taxAgentId; public TaxDeclarationApiConfigPO apiConfig; public TaxAgentTaxReturnPO returnPO; + public TaxAgentPO taxAgent; public static final int threshold = 600; @@ -36,13 +44,32 @@ public class TaxBaseClient { this.taxAgentId = taxAgentId; this.apiConfig = getTaxDeclareApiConfigMapper().getOne(); TaxAgentTaxReturnPO taxReturnPO = getTaxAgentTaxReturnMapper().selectOneByTaxAgentId(taxAgentId); - try { - // 密码解密 - taxReturnPO.setPwd(Sm4Utils.decryptEcb(apiConfig.getAppSecret(), taxReturnPO.getPwd())); - } catch (Exception e) { - log.error("Sm4Utils.decryptEcb ---- error: {}", e.getMessage()); - } +// try { +// // 密码解密 +// taxReturnPO.setPwd(Sm4Utils.decryptEcb(apiConfig.getAppSecret(), taxReturnPO.getPwd())); +// } catch (Exception e) { +// log.error("Sm4Utils.decryptEcb ---- error: {}", e.getMessage()); +// } this.returnPO = taxReturnPO; + this.taxAgent = getTaxAgentMapper().getById(taxAgentId); + } + + public Map initRequestMap() { + Map requestMap = new HashMap<>(); + requestMap.put("bizNo", UUID.randomUUID().toString().replace("-", "")); + requestMap.put("qymc", taxAgent.getName()); + requestMap.put("mmlx", returnPO.getPasswordType()); + requestMap.put("smzh", returnPO.getRealAccount()); + requestMap.put("smmm", returnPO.getPwd()); + requestMap.put("jmsmmm", "1"); + requestMap.put("sbmm", returnPO.getPwd()); + requestMap.put("jmsbmm", "1"); + requestMap.put("djxhid", returnPO.getTaxRegistrationNumber()); + requestMap.put("nsrsbh", returnPO.getTaxCode()); + requestMap.put("areaid", returnPO.getAreaCode()); + requestMap.put("bmbh", returnPO.getDepartmentCode()); + requestMap.put("bmmc", returnPO.getDepartmentName()); + return requestMap; } public String request(String url, Map requestParam) { @@ -70,9 +97,9 @@ public class TaxBaseClient { for (int i = 0; i <= threshold; ++i) { Map header = SingnatureData.initHeader(new HashMap<>(1), apiConfig.getAppKey(), apiConfig.getAppSecret()); String res = HttpUtil.getRequest(url, header, param); - response = JsonUtil.parseBean(res, clazz); //记录接口 taskUtil.writeApiTaskRecord(Util.null2String(taxAgentId), url, JsonUtil.toJsonString(param), res); + response = JsonUtil.parseBean(res, clazz); if (response == null || response.getHead() == null) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(95828, "服务异常,请稍后重试")); } diff --git a/src/com/engine/salary/remote/tax/request/declare/GetCompanyIncomesRequest.java b/src/com/engine/salary/remote/tax/request/declare/GetCompanyIncomesRequest.java new file mode 100644 index 000000000..f8912a261 --- /dev/null +++ b/src/com/engine/salary/remote/tax/request/declare/GetCompanyIncomesRequest.java @@ -0,0 +1,81 @@ +package com.engine.salary.remote.tax.request.declare; + +import lombok.Data; + +@Data +public class GetCompanyIncomesRequest { + /** + * 外部业务编号 必填:是 外部业务编号,唯一,幂等需要,最长64位,建议使用UUID,建议使用UUID + */ + private String bizNo; + /** + * 企业名称 必填:是 扣缴义务人名称:例如:测试ß科技有限公司 + */ + private String qymc; + /** + * 密码类型 必填:否 0表示申报密码;2表示实名账号实名密码 + */ + private String mmlx; + /** + * 实名账号 必填:条件必填 当mmlx=2时,必填 + */ + private String smzh; + /** + * 实名密码 必填:条件必填 当mmlx=2时,必填 + */ + private String smmm; + /** + * 加密实名密码 必填:否 默认不传则设置为0,0表示不加密,1表示加密 + */ + private String jmsmmm; + /** + * 申报密码 必填:条件必填 当mmlx=0时,必填 + */ + private String sbmm; + /** + * 加密申报密码 必填:否 默认不传则设置为0,0表示不加密;1表示加密 + */ + private String jmsbmm; + /** + * 登记序号 必填:条件必填 存在多个登记序号时,需要指定传入一个.例:10117440105249764755 + */ + private String djxhid; + /** + * 税号 必填:是 扣缴单位纳税人识别号 + */ + private String nsrsbh; + /** + * 地区编号 必填:是 6位行政区划代码,精确到市级,例如:440100,参考省市区编码 + */ + private String areaid; + /** + * 部门编号 必填:条件必填 分部门代报时必传 + */ + private String bmbh; + /** + * 部门名称 必填:否 分部门代报时必传 + */ + private String bmmc; + /** + * 所属期 必填:是 格式YYYYMM年月 + */ + private String skssq; + /** + * 每页的数量 + */ + private Integer pageSize; + /** + * 页码 + */ + private Integer pageNo; + /** + * 报表类型 + *

+ * 1:综合所得; + * 2: 分类所得; + * 3:非居民所得 + * 4: 限售股所得 + */ + private String reportType; + +} diff --git a/src/com/engine/salary/remote/tax/response/declare/GetCompanyIncomesResponse.java b/src/com/engine/salary/remote/tax/response/declare/GetCompanyIncomesResponse.java new file mode 100644 index 000000000..078ac90a5 --- /dev/null +++ b/src/com/engine/salary/remote/tax/response/declare/GetCompanyIncomesResponse.java @@ -0,0 +1,456 @@ +package com.engine.salary.remote.tax.response.declare; + +import com.engine.salary.annotation.SalaryTableColumn; +import com.engine.salary.entity.taxpayment.response.BaseResponse; +import com.engine.salary.util.excel.ExcelHead; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.math.BigDecimal; +import java.util.List; + +@Data +@EqualsAndHashCode(callSuper = true) +public class GetCompanyIncomesResponse extends BaseResponse { + /** + * 返回数据 + */ + private Body body; + + + /** + * 人员专项附加扣除信息查询结果body + **/ + @Data + public static class Body { + /** + * 明细 + */ + private List sfmx; + + /** + * 合计 + */ + private sfhj sfhj; + + + } + + @Data + public static class sfmx { + /** + * 是否明细申报 是或者否 + */ + private String sfmxsb; + /** + * 纳税人姓名 汇总申报为空 + */ + @SalaryTableColumn(text = "姓名", width = "10%", column = "xm") + @ExcelHead(title = "姓名", dataIndex = "xm") + private String xm; + /** + * 纳税识别号 + */ + private String nsrsbh; + /** + * 证件类型 汇总申报为空 + */ + @SalaryTableColumn(text = "证件类型", width = "10%", column = "zzlx") + @ExcelHead(title = "证件类型", dataIndex = "zzlx") + private String zjlx; + /** + * 证件号码 汇总申报为空 + */ + @SalaryTableColumn(text = "证件号码", width = "10%", column = "zjhm") + @ExcelHead(title = "证件号码", dataIndex = "zjhm") + private String zjhm; + /** + * 非居民个人 1:否 2:是 + */ + private String sffjm; + /** + * 所得项目名称 见所得项目字典 + */ + private String sdxmmc; + /** + * 收入额 + */ + @SalaryTableColumn(text = "本期收入", width = "10%", column = "sre") + @ExcelHead(title = "本期收入", dataIndex = "sre") + private String sre; + /** + * 费用 + */ + private String fy; + /** + * 免税收入 + */ + @SalaryTableColumn(text = "本期免税收入", width = "10%", column = "mssr") + @ExcelHead(title = "本期免税收入", dataIndex = "mssr") + private String mssr; + /** + * 财产原值 + */ + private String ccyz; + /** + * 投资抵扣 + */ + private String tzdk; + /** + * 允许扣除的费用 + */ + private String yxkcsf; + /** + * 减计比例 + */ + private String jjbl; + /** + * 减除费用 + */ + private String jcfy; + /** + * 基本养老保险 + */ + @SalaryTableColumn(text = "基本养老保险费", width = "10%", column = "jbylaobxf") + @ExcelHead(title = "基本养老保险费", dataIndex = "jbylaobxf") + private String jbylaobxf; + /** + * 基本医疗保险费 + */ + @SalaryTableColumn(text = "基本医疗保险费", width = "10%", column = "jbylbxf") + @ExcelHead(title = "基本医疗保险费", dataIndex = "jbylbxf") + private String jbylbxf; + /** + * 失业保险费 + */ + @SalaryTableColumn(text = "失业保险费", width = "10%", column = "sybxf") + @ExcelHead(title = "失业保险费", dataIndex = "sybxf") + private String sybxf; + /** + * 住房公积金 + */ + @SalaryTableColumn(text = "住房公积金", width = "10%", column = "zfgjj") + @ExcelHead(title = "住房公积金", dataIndex = "zfgjj") + private String zfgjj; + /** + * 年金 + */ + @SalaryTableColumn(text = "企业(职业)年金", width = "10%", column = "nj") + @ExcelHead(title = "企业(职业)年金", dataIndex = "nj") + private String nj; + /** + * 商业健康保险 + */ + @SalaryTableColumn(text = "商业健康保险", width = "10%", column = "syjkbx") + @ExcelHead(title = "商业健康保险", dataIndex = "syjkbx") + private String syjkbx; + /** + * 税延养老保险 + */ + @SalaryTableColumn(text = "税延养老保险", width = "10%", column = "syylbx") + @ExcelHead(title = "税延养老保险", dataIndex = "syylbx") + private String syylbx; + /** + * 其它扣除 + */ + @SalaryTableColumn(text = "其他", width = "10%", column = "qt") + @ExcelHead(title = "其他", dataIndex = "qt") + private String qt; + /** + * 准予扣除的捐赠额 + */ + @SalaryTableColumn(text = "准予扣除的捐赠额", width = "10%", column = "zykcjze") + @ExcelHead(title = "准予扣除的捐赠额", dataIndex = "zykcjze") + private String zykcjze; + /** + * 累计收入额 + */ + @SalaryTableColumn(text = "累计收入额", width = "10%", column = "ljsre") + @ExcelHead(title = "累计收入额", dataIndex = "ljsre") + private String ljsre; + /** + * 累计减除费用 + */ + @SalaryTableColumn(text = "累计减除费用", width = "10%", column = "ljjcfy") + @ExcelHead(title = "累计减除费用", dataIndex = "ljjcfy") + private String ljjcfy; + /** + * 累计专项扣除 + */ + @SalaryTableColumn(text = "累计专项扣除", width = "10%", column = "ljzxkc") + @ExcelHead(title = "累计专项扣除", dataIndex = "ljzxkc") + private String ljzxkc; + /** + * 累计子女教育 + */ + @SalaryTableColumn(text = "累计子女教育", width = "10%", column = "ljznjy") + @ExcelHead(title = "累计子女教育", dataIndex = "ljznjy") + private String ljznjy; + /** + * 累计赡养老人 + */ + @SalaryTableColumn(text = "累计赡养老人", width = "10%", column = "ljsylr") + @ExcelHead(title = "累计赡养老人", dataIndex = "ljsylr") + private String ljsylr; + /** + * 累计住房贷款利息 + */ + @SalaryTableColumn(text = "累计住房贷款利息", width = "10%", column = "ljzfdklx") + @ExcelHead(title = "累计住房贷款利息", dataIndex = "ljzfdklx") + private String ljzfdklx; + /** + * 累计住房租金 + */ + @SalaryTableColumn(text = "累计住房租金", width = "10%", column = "ljzfzj") + @ExcelHead(title = "累计住房租金", dataIndex = "ljzfzj") + private String ljzfzj; + /** + * 累计继续教育 + */ + @SalaryTableColumn(text = "累计继续教育", width = "10%", column = "ljjxjy") + @ExcelHead(title = "累计继续教育", dataIndex = "ljjxjy") + private String ljjxjy; + /** + * 累计3岁以下婴幼儿照护支出 + */ + @SalaryTableColumn(text = "累计3岁以下婴幼儿照护", width = "10%", column = "ljyyezhzc") + @ExcelHead(title = "累计3岁以下婴幼儿照护", dataIndex = "ljyyezhzc") + private String ljyyezhzc; + /** + * 累计其它扣除 + */ + @SalaryTableColumn(text = "累计其他扣除", width = "10%", column = "ljqtkc") + @ExcelHead(title = "累计其他扣除", dataIndex = "ljqtkc") + private String ljqtkc; + /** + * 累计准予扣除的捐赠额 + */ + @SalaryTableColumn(text = "累计准予扣除的捐赠", width = "10%", column = "ljzykcjze") + @ExcelHead(title = "累计准予扣除的捐赠", dataIndex = "ljzykcjze") + private String ljzykcjze; + /** + * 累计个人养老金 + */ + private BigDecimal ljgrylj; + /** + * 应纳税所得额 + */ + @SalaryTableColumn(text = "累计应纳税所得额", width = "10%", column = "ynssde") + @ExcelHead(title = "累计应纳税所得额", dataIndex = "ynssde") + private String ynssde; + /** + * 税率 + */ + @SalaryTableColumn(text = "税率", width = "10%", column = "sl") + @ExcelHead(title = "税率", dataIndex = "sl") + private String sl; + /** + * 协定税率 + */ + private String xdsl; + /** + * 速算扣除数 + */ + @SalaryTableColumn(text = "速算扣除数", width = "10%", column = "sskcs") + @ExcelHead(title = "速算扣除数", dataIndex = "sskcs") + private String sskcs; + /** + * 应纳税额 + */ + @SalaryTableColumn(text = "累计应纳税额", width = "10%", column = "ynse") + @ExcelHead(title = "累计应纳税额", dataIndex = "ynse") + private String ynse; + /** + * 减免税额 + */ + @SalaryTableColumn(text = "累计减免税额", width = "10%", column = "jmse") + @ExcelHead(title = "累计减免税额", dataIndex = "jmse") + private String jmse; + /** + * 已扣缴税额 + */ + @SalaryTableColumn(text = "累计已缴税额", width = "10%", column = "ykjse") + @ExcelHead(title = "累计已缴税额", dataIndex = "ykjse") + private String ykjse; + /** + * 应补退税额 + */ + @SalaryTableColumn(text = "应补(退)税额", width = "10%", column = "ybtse") + @ExcelHead(title = "应补(退)税额", dataIndex = "ybtse") + private String ybtse; + /** + * 备注 + */ + private String bz; + /** + * 分摊年度数 + */ + private Integer ftnds; + /** + * 年减除费用 默认为60000 + */ + private BigDecimal njcfy; + /** + * 应扣缴税额 + */ + private BigDecimal kjse; + /** + * 证券账户号 限售股所得才会返回 + */ + private String zqzhh; + /** + * 股票代码 限售股所得才会返回 + */ + private String gpdm; + /** + * 股票名称 限售股所得才会返回 + */ + private String gpmc; + /** + * 每股计税价格 限售股所得才会返回 + */ + private BigDecimal mgjsjg; + /** + * 转让股数 限售股所得才会返回 + */ + private Integer zrgs; + /** + * 限售股原值 限售股所得才会返回 + */ + private BigDecimal xsgyz; + /** + * 合理税费 限售股所得才会返回 + */ + private BigDecimal hlsf; + /** + * 扣除及减除项目合计 限售股所得才会返回 + */ + private BigDecimal kcjjcxmhj; + + } + + @Data + public static class sfhj { + /** + * 收入额合计 + */ + private String srehj; + /** + * 免税收入合计 + */ + private String mssrhj; + /** + * 财产原值合计 + */ + private String ccyzhj; + /** + * 投资抵扣合计 + */ + private String tzdkhj; + /** + * 允许扣除的税费合计 + */ + private String yxkcsfhj; + /** + * 基本养老保险费合计 + */ + private String jbylaobxfhj; + /** + * 基本医疗保险费合计 + */ + private String jbylbxfhj; + /** + * 失业保险费合计 + */ + private String sybxfhj; + /** + * 住房公积金合计 + */ + private String zfgjjhj; + /** + * 年金合计 + */ + private String njhj; + /** + * 商业健康保险合计 + */ + private String syjkbxhj; + /** + * 税延养老保险合计 + */ + private String syylbxhj; + /** + * 其他扣除合计 + */ + private String qthj; + /** + * 准予扣除的捐赠额合计 + */ + private String zykcjzehj; + /** + * 累计收入额合计 + */ + private String ljsrehj; + /** + * 累计专项扣除合计 + */ + private String ljzxkchj; + /** + * 累计子女教育合计 + */ + private String ljznjyhj; + /** + * 累计赡养老人合计 + */ + private String ljsylrhj; + /** + * 累计住房贷款利息合计 + */ + private String ljzfdklxhj; + /** + * 累计住房租金合计 + */ + private String ljzfzjhj; + /** + * 累计继续教育合计 + */ + private String ljjxjyhj; + /** + * 累计3岁以下婴幼儿照护支出合计 + */ + private String ljyyezhzchj; + /** + * 累计其他扣除合计 + */ + private String ljqtkchj; + /** + * 累计准予扣除的捐赠额合计 + */ + private String ljzykcjzehj; + /** + * 累计个人养老金合计 + */ + private BigDecimal ljgryljhj; + /** + * 应纳税所得额合计 + */ + private String ynssdehj; + /** + * 应纳税额合计 + */ + private String ynsehj; + /** + * 减免税额合计 + */ + private String jmsehj; + /** + * 已扣缴税额合计 + */ + private String ykjsehj; + /** + * 应补退税额合计 + */ + private String ybtsehj; + } + +} diff --git a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java index 950bf1beb..277e208ab 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java @@ -1,13 +1,14 @@ package com.engine.salary.service.impl; import cn.hutool.core.util.NumberUtil; +import cn.hutool.core.util.StrUtil; import com.cloudstore.eccom.pc.table.WeaTableColumn; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; +import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.config.SalaryElogConfig; import com.engine.salary.constant.SalaryDefaultTenantConstant; -import com.engine.hrmelog.entity.dto.LoggerContext; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; @@ -31,7 +32,7 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxdeclaration.TaxDeclarationValueMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareRecordMapper; import com.engine.salary.remote.tax.client.DeclareClient; -import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; +import com.engine.salary.remote.tax.response.declare.GetCompanyIncomesResponse; import com.engine.salary.service.*; import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; @@ -203,7 +204,7 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar TaxDeclarationValuePO po = TaxDeclarationValuePO.builder().id(IdGenerator.generate()).taxDeclarationId(param.getTaxDeclarationId()).taxDeclareRecordId(taxDeclareRecordId).employeeId(param.getEmployeeId()).employeeType(param.getEmployeeType()).resultValue(param.getTaxReportColumnValues()).resultValueJson(JsonUtil.toJsonString(param.getTaxReportColumnValues())).createTime(new Date()).updateTime(new Date()).source(SourceEnum.ADD.getValue()).creator((long) user.getUID()).deleteType(0).tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY).build(); TaxDeclarationValuePO po4log = new TaxDeclarationValuePO(); - BeanUtils.copyProperties(po,po4log); + BeanUtils.copyProperties(po, po4log); encryptUtil.encrypt(po, TaxDeclarationValuePO.class); getTaxDeclarationValueMapper().insertIgnoreNull(po); @@ -217,8 +218,8 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar .replace("{1}", SalaryDateUtil.getFormatYearMonth(declareRecordPO.getTaxCycle())) .replace("{2}", po.getEmployeeId().toString())); loggerContext.setOperateType(OperateTypeEnum.ADD.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "新增人员")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "新增人员")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增人员")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增人员")); loggerContext.setNewValues(po4log); SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); @@ -252,8 +253,8 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar .replace("{1}", SalaryDateUtil.getFormatYearMonth(taxDeclareRecordPO.getTaxCycle())) .replace("{2}", po.getEmployeeId().toString())); loggerContext.setOperateType(OperateTypeEnum.UPDATE.getValue()); - loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel( 0, "修改个税申报数据")); - loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel( 0, "修改个税申报数据")); + loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "修改个税申报数据")); + loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "修改个税申报数据")); loggerContext.setOldValues(oldPo); loggerContext.setNewValues(po4log); SalaryElogConfig.taxDeclarationLoggerTemplate.write(loggerContext); @@ -358,15 +359,21 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar } Integer reportType = IncomeCategoryEnum.parseByValue(taxDeclaration.getIncomeCategory()).getReportType().getValue(); - TaxDeclareStatusPO taxDeclareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(taxDeclareRecordPO.getId(), reportType); //线上数据 DeclareClient declareClient = new DeclareClient(taxDeclareRecordPO.getTaxAgentId()); - GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(taxDeclareStatus.getDeclareRequestId()); + // 注册的企业信息-->请求参数 + Map requestParam = declareClient.initRequestMap(); + // 税款所属期 + requestParam.put("skssq", SalaryDateUtil.getFormatYYYYMM(taxDeclaration.getTaxCycle())); + requestParam.put("pageSize", 10000); + requestParam.put("pageNo", 1); + requestParam.put("reportType", reportType); + GetCompanyIncomesResponse companyIncomes = declareClient.getCompanyIncomes(requestParam); Map>> onlineDataMap = new HashMap<>(); List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(taxDeclareRecordPO.getId()); - list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(onlineDataMap, declareTaxResultFeedbackResponse)); + list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(onlineDataMap, companyIncomes)); Map resultList = new HashMap<>(); List taxDeclarationValues = listByTaxDeclarationId(taxDeclaration.getId()); @@ -388,14 +395,6 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar List extEmployeeIds = taxDeclarationValues.stream().filter(taxDeclarationValue -> Objects.equals(taxDeclarationValue.getEmployeeType(), EmployeeTypeEnum.EXT_EMPLOYEE.getValue())).map(TaxDeclarationValuePO::getEmployeeId).collect(Collectors.toList()); List extEmployees = getExtEmpService(user).getExtEmpByIds(extEmployeeIds); - // 艾志分权 240529注释 - // List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); - // Map authMap = getEmployeeDeclareService(user).empIdsByAzGssbAuth(user.getUID()); - // List canManageEmpIds = (List)authMap.get("canManageEmpIds"); - // if (!taxAgentIds.contains(taxDeclareRecordPO.getTaxAgentId())) { - // taxDeclarationValues = taxDeclarationValues.stream().filter(po -> canManageEmpIds.contains(po.getEmployeeId())).collect(Collectors.toList()); - // } - // 列表数据 List> localList = TaxDeclarationValueList.buildTableData(incomeCategoryEnum, taxReportColumns, taxDeclarationValues, employeeDeclares, simpleEmployees, simpleUserInfos, extEmployees, true); @@ -453,6 +452,8 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar onlyShowColumns.add(col); hasDiff.set(true); } + } else if ((StrUtil.isBlank(localValue) && "0.00".equals(onlineValue)) || (StrUtil.isBlank(onlineValue) && "0.00".equals(localValue))) { + //短路 } else { if (!Objects.equals(localValue, onlineValue)) { dto.setDiff(localValue); @@ -509,7 +510,7 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar // 获取线下对比结果 Map contrastMap = contrast(param); List header = ((List) contrastMap.get("columns")); - PageInfo> pageInfo = (PageInfo>)contrastMap.get("pageInfo"); + PageInfo> pageInfo = (PageInfo>) contrastMap.get("pageInfo"); List> list = pageInfo.getList(); List empInfoColumns = new ArrayList<>(); diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index c132b8fe5..55d8ccb63 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -1028,28 +1028,6 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe .filter(incomeCategoryEnum -> incomeCategoryEnum.getReportType().getValue().equals(param.getReportType())) .collect(Collectors.toList()).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(map, declareTaxResultFeedbackResponse)); list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(map, declareTaxResultFeedbackResponse)); - // 艾志分权 - 240529注释 - // List taxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin(Long.valueOf(user.getUID())).stream().map(TaxAgentPO::getId).collect(Collectors.toList()); - // if (!taxAgentIds.contains(taxDeclareRecord.getTaxAgentId())) { - // Map authMap = getEmployeeDeclareService(user).empIdsByAzGssbAuth(user.getUID()); - // List canManageEmpIds = (List)authMap.get("canManageEmpIds"); - // // 获取这些人在人员信息报送中的证件号码 - // List employeeDeclareList = getEmployeeDeclareService(user).listByTaxCycleAndTaxAgentId(taxDeclareRecord.getTaxCycle(), taxDeclareRecord.getTaxAgentId()); - // List canManageCardNum = employeeDeclareList.stream().filter(declare -> canManageEmpIds.contains(declare.getEmployeeId())).map(EmployeeDeclarePO::getCardNum).collect(Collectors.toList()); - // for (Map.Entry>> entry : map.entrySet()) { - // List> valueList = entry.getValue(); - // List> newvalueList = new ArrayList<>(); - // newvalueList.add(valueList.get(0)); - // for (int i =1; i value = valueList.get(i); - // String cardNum = Util.null2String(value.get(2)); - // if (canManageCardNum.contains(cardNum)) { - // newvalueList.add(value); - // } - // } - // map.put(entry.getKey(), newvalueList); - // } - // } return ExcelUtil.genWorkbookV2(map); } diff --git a/test/ParseTaxApi.java b/test/ParseTaxApi.java index 56bb4a986..716d56807 100644 --- a/test/ParseTaxApi.java +++ b/test/ParseTaxApi.java @@ -7,9 +7,9 @@ import java.util.List; public class ParseTaxApi { public static void main(String[] args) { - readExcel("H:\\code\\salary\\test\\ApiDes.xlsx"); +// readExcel("H:\\code\\salary\\test\\ApiDes.xlsx"); -// readExcel2("H:\\code\\salary\\test\\ApiDes.xlsx"); + readExcel2("H:\\code\\salary\\test\\ApiDes.xlsx"); } From 88fee4eca0354700662b5b384d745705fe2f0a99 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 23 Jul 2024 14:47:12 +0800 Subject: [PATCH 84/96] =?UTF-8?q?=E4=B8=8B=E8=BD=BD=E4=BC=81=E4=B8=9A?= =?UTF-8?q?=E7=AE=97=E7=A8=8E=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ....java => GetCompanyIncomesQueryParam.java} | 4 +- .../enums/salarysob/IncomeCategoryEnum.java | 148 +----------------- .../remote/tax/client/DeclareClient.java | 2 +- .../declare/GetCompanyIncomesResponse.java | 4 +- .../service/TaxDeclareRecordService.java | 9 +- .../impl/TaxDeclarationValueServiceImpl.java | 3 +- .../impl/TaxDeclareRecordServiceImpl.java | 38 +++-- .../salary/web/TaxDeclarationController.java | 22 +-- .../wrapper/TaxDeclareRecordWrapper.java | 10 +- 9 files changed, 56 insertions(+), 184 deletions(-) rename src/com/engine/salary/entity/taxdeclaration/param/{DeclareTaxResultFeedbackQueryParam.java => GetCompanyIncomesQueryParam.java} (87%) diff --git a/src/com/engine/salary/entity/taxdeclaration/param/DeclareTaxResultFeedbackQueryParam.java b/src/com/engine/salary/entity/taxdeclaration/param/GetCompanyIncomesQueryParam.java similarity index 87% rename from src/com/engine/salary/entity/taxdeclaration/param/DeclareTaxResultFeedbackQueryParam.java rename to src/com/engine/salary/entity/taxdeclaration/param/GetCompanyIncomesQueryParam.java index dbcdfccc8..09af485df 100644 --- a/src/com/engine/salary/entity/taxdeclaration/param/DeclareTaxResultFeedbackQueryParam.java +++ b/src/com/engine/salary/entity/taxdeclaration/param/GetCompanyIncomesQueryParam.java @@ -12,13 +12,11 @@ import lombok.experimental.Accessors; @Accessors(chain = true) @NoArgsConstructor @AllArgsConstructor -public class DeclareTaxResultFeedbackQueryParam { +public class GetCompanyIncomesQueryParam { @DataCheck(require = true, message = "个税申报记录id不能为空!") Long id; @DataCheck(require = true, message = "申报类型不能为空!") Integer reportType; - - String requestId; } diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index 65bfa1de2..d807e5c42 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -5,7 +5,6 @@ import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; import com.engine.salary.enums.BaseEnum; import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTaxFeedbackResponse; import com.engine.salary.remote.tax.response.declare.GetCompanyIncomesResponse; -import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; @@ -18,6 +17,7 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.lang.reflect.Type; import java.util.*; +import java.util.stream.Collectors; /** * 应税项目 @@ -59,14 +59,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } }, REMUNERATION_FOR_LABOR(4, "0400", "一般劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160488) { @Override @@ -96,16 +88,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getLwbclb().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } - - }, ONETIME_ANNUAL_BONUS(2, "0103", "全年一次性奖金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160489) { @Override @@ -135,14 +117,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQnycxjjsslb().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } }, COMPENSATION_FOR_RETIRE(107, "0107", "内退一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181936) { @Override @@ -172,14 +146,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getNtycxbcjlb().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } }, COMPENSATION_FOR_DISMISS(108, "0108", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181937) { @Override @@ -209,13 +175,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getJcldhtycxbcjlb().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } }, INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE(109, "0109", "个人股权激励收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181938) { @Override @@ -245,13 +204,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getGrgqjl().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } }, ANNUITY_RECEIPT(110, "0110", "年金领取", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181939) { @Override @@ -281,13 +233,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQynj().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } }, INCOME_FOR_INSURANCE_SALESMAN(402, "0402", "保险营销员佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181940) { @Override @@ -317,15 +262,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getBxyxy().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } - }, INCOME_FOR_SECURITIES_BROKER(403, "0403", "证券经纪人佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181942) { @Override @@ -355,15 +291,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getZqjjr().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } - }, REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR(489, "0489", "其他连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181943) { @Override @@ -393,13 +320,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtlxlwbc().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } }, REMUNERATION_FOR_OTHER_LABOR(499, "0499", "其他非连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 175330) { @Override @@ -429,15 +349,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getQtflxlwbc().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } - }, REMUNERATION_FOR_AUTHOR(500, "0500", "稿酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181944) { @Override @@ -467,16 +378,8 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getGcsdlb().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } }, ROYALTIES(600, "0600", "特许权使用费所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181945) { - @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { Gson gs = new Gson(); @@ -504,18 +407,8 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List zhsd = declareTaxResultFeedbackResponse.getBody().getZhsd().getTxq().getSscglb(); - List> zhsdSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, zhsd); - result.put(this.getDefaultLabel(), zhsdSheetData); - return result; - } - }, NON_RESIDENT_INCOME_WAGES_AND_SALARIES(700, "0700", "无住所个人正常工资薪金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { - @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { Gson gs = new Gson(); @@ -543,13 +436,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjgzxjlb().getSscglb(); - List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); - result.put(this.getDefaultLabel(), sheetData); - return result; - } }, NON_RESIDENT_INCOME_MONTHLY_BONUS(710, "0710", "无住所个人数月奖金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override @@ -579,13 +465,6 @@ public enum IncomeCategoryEnum implements BaseEnum { } return resultMap; } - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getWjrysyjjlb().getSscglb(); - List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); - result.put(this.getDefaultLabel(), sheetData); - return result; - } }, NON_RESIDENT_INCOME_REMUNERATION_FOR_LABOR(720, "0720", "一般劳务报酬所得", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override @@ -616,13 +495,6 @@ public enum IncomeCategoryEnum implements BaseEnum { return resultMap; } - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getLwbclb().getSscglb(); - List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); - result.put(this.getDefaultLabel(), sheetData); - return result; - } }, NON_RESIDENT_INCOME_COMPENSATION_FOR_DISMISS(730, "0730", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override @@ -653,13 +525,6 @@ public enum IncomeCategoryEnum implements BaseEnum { return resultMap; } - @Override - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse) { - List fjmsd = declareTaxResultFeedbackResponse.getBody().getFjmsd().getJcldhtycxbcjlb().getSscglb(); - List> sheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.fjmsd.fjmsdssjgdx.fjmsdscbw.class, fjmsd); - result.put(this.getDefaultLabel(), sheetData); - return result; - } }; @@ -683,11 +548,12 @@ public enum IncomeCategoryEnum implements BaseEnum { public abstract Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO); - - public abstract Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse); - - public Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetCompanyIncomesResponse response){ - List sfmx = response.getBody().getSfmx(); + public Map>> parseGetCompanyIncomesResponse(Map>> result, GetCompanyIncomesResponse response) { + List sfmx = Optional.ofNullable(response.getBody().getSfmx()) + .orElse(new ArrayList<>()) + .stream() + .filter(mx -> this.getDefaultLabel().equals(mx.getSdxmmc())) + .collect(Collectors.toList()); List> sheetData = ExcelUtil.getExcelSheetData(GetCompanyIncomesResponse.sfmx.class, sfmx); result.put(this.getDefaultLabel(), sheetData); return result; diff --git a/src/com/engine/salary/remote/tax/client/DeclareClient.java b/src/com/engine/salary/remote/tax/client/DeclareClient.java index e8f0d36ee..cb9c6cb17 100644 --- a/src/com/engine/salary/remote/tax/client/DeclareClient.java +++ b/src/com/engine/salary/remote/tax/client/DeclareClient.java @@ -29,7 +29,7 @@ public class DeclareClient extends TaxBaseClient { } /** - * 申报内置算税结果查询 + * 查询企业申报数据明细 * * 已下架 * diff --git a/src/com/engine/salary/remote/tax/response/declare/GetCompanyIncomesResponse.java b/src/com/engine/salary/remote/tax/response/declare/GetCompanyIncomesResponse.java index 078ac90a5..779ec3671 100644 --- a/src/com/engine/salary/remote/tax/response/declare/GetCompanyIncomesResponse.java +++ b/src/com/engine/salary/remote/tax/response/declare/GetCompanyIncomesResponse.java @@ -55,8 +55,8 @@ public class GetCompanyIncomesResponse extends BaseResponse { /** * 证件类型 汇总申报为空 */ - @SalaryTableColumn(text = "证件类型", width = "10%", column = "zzlx") - @ExcelHead(title = "证件类型", dataIndex = "zzlx") + @SalaryTableColumn(text = "证件类型", width = "10%", column = "zjlx") + @ExcelHead(title = "证件类型", dataIndex = "zjlx") private String zjlx; /** * 证件号码 汇总申报为空 diff --git a/src/com/engine/salary/service/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index 75522ca3f..2b15ad623 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -2,7 +2,7 @@ package com.engine.salary.service; import com.engine.salary.common.YearMonthRange; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationRateDTO; -import com.engine.salary.entity.taxdeclaration.param.DeclareTaxResultFeedbackQueryParam; +import com.engine.salary.entity.taxdeclaration.param.GetCompanyIncomesQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO; @@ -134,14 +134,13 @@ public interface TaxDeclareRecordService { /** - * 申报内置算税结果查询 + * 查询企业申报数据明细 * - * @param id * @return */ - Object getDeclareTaxResultFeedback(Long id); + Object getCompanyIncomes(GetCompanyIncomesQueryParam param); - XSSFWorkbook exportGetDeclareTaxResultFeedback(DeclareTaxResultFeedbackQueryParam param); + XSSFWorkbook exportGetCompanyIncomes(GetCompanyIncomesQueryParam param); /** * 作废 diff --git a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java index 277e208ab..350e0ee20 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationValueServiceImpl.java @@ -362,7 +362,6 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar //线上数据 DeclareClient declareClient = new DeclareClient(taxDeclareRecordPO.getTaxAgentId()); - // 注册的企业信息-->请求参数 Map requestParam = declareClient.initRequestMap(); // 税款所属期 requestParam.put("skssq", SalaryDateUtil.getFormatYYYYMM(taxDeclaration.getTaxCycle())); @@ -373,7 +372,7 @@ public class TaxDeclarationValueServiceImpl extends Service implements TaxDeclar Map>> onlineDataMap = new HashMap<>(); List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(taxDeclareRecordPO.getId()); - list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(onlineDataMap, companyIncomes)); + list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetCompanyIncomesResponse(onlineDataMap, companyIncomes)); Map resultList = new HashMap<>(); List taxDeclarationValues = listByTaxDeclarationId(taxDeclaration.getId()); diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 55d8ccb63..f76c8bb25 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -28,7 +28,7 @@ import com.engine.salary.entity.taxapiflow.po.TaxDeclarationApiFlowRecordPO; import com.engine.salary.entity.taxdeclaration.bo.*; import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationRateDTO; import com.engine.salary.entity.taxdeclaration.param.AbnormalEmployeeListQueryParam; -import com.engine.salary.entity.taxdeclaration.param.DeclareTaxResultFeedbackQueryParam; +import com.engine.salary.entity.taxdeclaration.param.GetCompanyIncomesQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam; import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam; import com.engine.salary.entity.taxdeclaration.po.*; @@ -48,7 +48,7 @@ import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxdeclaration.TaxDeclareRecordMapper; import com.engine.salary.mapper.taxdeclaration.TaxDeclareStatusMapper; import com.engine.salary.remote.tax.client.DeclareClient; -import com.engine.salary.remote.tax.response.declare.GetDeclareTaxResultFeedbackResponse; +import com.engine.salary.remote.tax.response.declare.GetCompanyIncomesResponse; import com.engine.salary.service.*; import com.engine.salary.service.factory.TaxPaymentServiceFactory; import com.engine.salary.util.*; @@ -997,28 +997,38 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe @Override - public Object getDeclareTaxResultFeedback(Long id) { - TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); - TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); + public Object getCompanyIncomes(GetCompanyIncomesQueryParam param) { + Long id = param.getId(); + TaxDeclareRecordPO taxDeclareRecord = getById(id); DeclareClient declareClient = new DeclareClient(taxDeclareRecord.getTaxAgentId()); - GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(taxDeclareRecord.getDeclareRequestId()); + Map requestParam = declareClient.initRequestMap(); + // 税款所属期 + requestParam.put("skssq", SalaryDateUtil.getFormatYYYYMM(taxDeclareRecord.getTaxCycle())); + requestParam.put("pageSize", 10000); + requestParam.put("pageNo", 1); + requestParam.put("reportType", param.getReportType()); + GetCompanyIncomesResponse companyIncomes = declareClient.getCompanyIncomes(requestParam); Map>> map = new HashMap<>(); List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(id); - list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(map, declareTaxResultFeedbackResponse)); - return declareClient.getDeclareTaxResultFeedback(taxDeclareRecord.getDeclareRequestId()); + list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetCompanyIncomesResponse(map, companyIncomes)); + return map; } @Override - public XSSFWorkbook exportGetDeclareTaxResultFeedback(DeclareTaxResultFeedbackQueryParam param) { + public XSSFWorkbook exportGetCompanyIncomes(GetCompanyIncomesQueryParam param) { Long id = param.getId(); TaxDeclareRecordPO taxDeclareRecord = getById(id); - String requestId = param.getRequestId(); - TaxDeclareStatusPO declareStatus = getTaxDeclareStatusService(user).getTaxDeclareStatus(id, param.getReportType()); DeclareClient declareClient = new DeclareClient(taxDeclareRecord.getTaxAgentId()); - GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(StringUtils.isEmpty(requestId) ? declareStatus.getDeclareRequestId() : requestId); + Map requestParam = declareClient.initRequestMap(); + // 税款所属期 + requestParam.put("skssq", SalaryDateUtil.getFormatYYYYMM(taxDeclareRecord.getTaxCycle())); + requestParam.put("pageSize", 10000); + requestParam.put("pageNo", 1); + requestParam.put("reportType", param.getReportType()); + GetCompanyIncomesResponse companyIncomes = declareClient.getCompanyIncomes(requestParam); Map>> map = new HashMap<>(); List list = getTaxDeclarationService(user).listByTaxDeclareRecordId(id); @@ -1026,8 +1036,8 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe .map(TaxDeclarationPO::getIncomeCategory) .map(IncomeCategoryEnum::parseByValue) .filter(incomeCategoryEnum -> incomeCategoryEnum.getReportType().getValue().equals(param.getReportType())) - .collect(Collectors.toList()).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(map, declareTaxResultFeedbackResponse)); - list.stream().map(TaxDeclarationPO::getIncomeCategory).map(IncomeCategoryEnum::parseByValue).forEach(e -> e.parseGetDeclareTaxResultFeedbackResponse(map, declareTaxResultFeedbackResponse)); + .collect(Collectors.toList()) + .forEach(e -> e.parseGetCompanyIncomesResponse(map, companyIncomes)); return ExcelUtil.genWorkbookV2(map); } diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index c35e8e70f..07e282152 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -249,33 +249,33 @@ public class TaxDeclarationController { } /** - * 申报内置算税结果查询 + * 查询企业申报数据明细 * * @param * @return */ - @GET - @Path("/getDeclareTaxResultFeedback") + @POST + @Path("/getCompanyIncomes") @Produces(MediaType.APPLICATION_JSON) - public String getDeclareTaxResultFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + public String getCompanyIncomes(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody GetCompanyIncomesQueryParam param) { User user = HrmUserVarify.getUser(request, response); - return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getDeclareTaxResultFeedback, id); + return new ResponseResult(user).run(getTaxDeclareRecordWrapper(user)::getCompanyIncomes, param); } /** - * 申报内置算税结果 + * 企业申报数据明细 * * @return */ @POST - @Path("/exportGetDeclareTaxResultFeedback") + @Path("/exportGetCompanyIncomes") @Produces(MediaType.APPLICATION_OCTET_STREAM) - public Response exportGetDeclareTaxResultFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody DeclareTaxResultFeedbackQueryParam param) { + public Response exportGetCompanyIncomes(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody GetCompanyIncomesQueryParam param) { try { User user = HrmUserVarify.getUser(request, response); - XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportGetDeclareTaxResultFeedback(param); - String fileName = "申报内置算税结果-" + LocalDate.now(); + XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportGetCompanyIncomes(param); + String fileName = "企业申报数据明细-" + LocalDate.now(); try { fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8"); } catch (UnsupportedEncodingException e) { @@ -289,7 +289,7 @@ public class TaxDeclarationController { response.setContentType("application/octet-stream"); return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build(); } catch (Exception e) { - log.error("申报内置算税结果导出异常", e); + log.error("企业申报数据明细导出异常", e); throw e; } } diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index 563fa0ec4..25b66bb40 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -509,13 +509,13 @@ public class TaxDeclareRecordWrapper extends Service { } - public Object getDeclareTaxResultFeedback(Long id) { - return getTaxDeclareRecordService(user).getDeclareTaxResultFeedback(id); + public Object getCompanyIncomes(GetCompanyIncomesQueryParam param) { + return getTaxDeclareRecordService(user).getCompanyIncomes(param); } - public XSSFWorkbook exportGetDeclareTaxResultFeedback(DeclareTaxResultFeedbackQueryParam param) { - return getTaxDeclareRecordService(user).exportGetDeclareTaxResultFeedback(param); + public XSSFWorkbook exportGetCompanyIncomes(GetCompanyIncomesQueryParam param) { + return getTaxDeclareRecordService(user).exportGetCompanyIncomes(param); } /** @@ -532,7 +532,7 @@ public class TaxDeclareRecordWrapper extends Service { @Override public void execute() { try { - getTaxDeclareRecordService(user).cancelDeclare(id, param.getReportType(),taxDeclarationRate); + getTaxDeclareRecordService(user).cancelDeclare(id, param.getReportType(), taxDeclarationRate); taxDeclarationRate.setFinish(true); } catch (SalaryRunTimeException e) { taxDeclarationRate.setStatus(false).setFinish(true).setMsg(e.getMessage()); From d86c77adb971a50a876319e1c8a940fe8eca4f78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Tue, 23 Jul 2024 14:57:35 +0800 Subject: [PATCH 85/96] =?UTF-8?q?=E5=8E=BB=E9=99=A4=E7=B4=AF=E8=AE=A1?= =?UTF-8?q?=E5=BA=94=E6=89=A3=E7=BC=B4=E7=A8=8E=E9=A2=9D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- resource/sqlupgrade/DM/sql202312190103.sql | 4 ---- resource/sqlupgrade/GS/sql202312190103.sql | 4 ---- resource/sqlupgrade/JC/sql202312190103.sql | 4 ---- resource/sqlupgrade/Mysql/sql202312190103.sql | 3 +-- resource/sqlupgrade/Oracle/sql202312190103.sql | 3 --- resource/sqlupgrade/PG/sql202312190103.sql | 3 +-- resource/sqlupgrade/SQLServer/sql202312190103.sql | 3 --- resource/sqlupgrade/ST/sql202312190103.sql | 4 ---- 8 files changed, 2 insertions(+), 26 deletions(-) diff --git a/resource/sqlupgrade/DM/sql202312190103.sql b/resource/sqlupgrade/DM/sql202312190103.sql index 659ca7b6d..3956b4605 100644 --- a/resource/sqlupgrade/DM/sql202312190103.sql +++ b/resource/sqlupgrade/DM/sql202312190103.sql @@ -45,10 +45,6 @@ INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete (805915446042158190, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼƼ˰', 'addUpTaxDeduction', '', NULL, NULL,1); / -INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES -(805915446042158191, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼӦ۽˰', 'addUpTaxPayable', '', NULL, NULL,1); -/ - INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES (805915446042158192, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼѽ˰', 'addUpAdvanceTax', '', NULL, NULL,1); / diff --git a/resource/sqlupgrade/GS/sql202312190103.sql b/resource/sqlupgrade/GS/sql202312190103.sql index 659ca7b6d..3956b4605 100644 --- a/resource/sqlupgrade/GS/sql202312190103.sql +++ b/resource/sqlupgrade/GS/sql202312190103.sql @@ -45,10 +45,6 @@ INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete (805915446042158190, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼƼ˰', 'addUpTaxDeduction', '', NULL, NULL,1); / -INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES -(805915446042158191, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼӦ۽˰', 'addUpTaxPayable', '', NULL, NULL,1); -/ - INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES (805915446042158192, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼѽ˰', 'addUpAdvanceTax', '', NULL, NULL,1); / diff --git a/resource/sqlupgrade/JC/sql202312190103.sql b/resource/sqlupgrade/JC/sql202312190103.sql index 659ca7b6d..3956b4605 100644 --- a/resource/sqlupgrade/JC/sql202312190103.sql +++ b/resource/sqlupgrade/JC/sql202312190103.sql @@ -45,10 +45,6 @@ INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete (805915446042158190, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼƼ˰', 'addUpTaxDeduction', '', NULL, NULL,1); / -INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES -(805915446042158191, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼӦ۽˰', 'addUpTaxPayable', '', NULL, NULL,1); -/ - INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES (805915446042158192, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼѽ˰', 'addUpAdvanceTax', '', NULL, NULL,1); / diff --git a/resource/sqlupgrade/Mysql/sql202312190103.sql b/resource/sqlupgrade/Mysql/sql202312190103.sql index 9cc0240c6..006ea1239 100644 --- a/resource/sqlupgrade/Mysql/sql202312190103.sql +++ b/resource/sqlupgrade/Mysql/sql202312190103.sql @@ -33,8 +33,7 @@ INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES (805915446042158190, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼƼ˰', 'addUpTaxDeduction', '', NULL, NULL,1); -INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES -(805915446042158191, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼӦ۽˰', 'addUpTaxPayable', '', NULL, NULL,1); + INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES (805915446042158192, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼѽ˰', 'addUpAdvanceTax', '', NULL, NULL,1); diff --git a/resource/sqlupgrade/Oracle/sql202312190103.sql b/resource/sqlupgrade/Oracle/sql202312190103.sql index 14ad11e18..033891dfd 100644 --- a/resource/sqlupgrade/Oracle/sql202312190103.sql +++ b/resource/sqlupgrade/Oracle/sql202312190103.sql @@ -45,9 +45,6 @@ INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete (805915446042158190, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼƼ˰', 'addUpTaxDeduction', '', NULL, NULL,1) / -INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES -(805915446042158191, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼӦ۽˰', 'addUpTaxPayable', '', NULL, NULL,1) -/ INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES (805915446042158192, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼѽ˰', 'addUpAdvanceTax', '', NULL, NULL,1) diff --git a/resource/sqlupgrade/PG/sql202312190103.sql b/resource/sqlupgrade/PG/sql202312190103.sql index f999dbbc3..9f472713c 100644 --- a/resource/sqlupgrade/PG/sql202312190103.sql +++ b/resource/sqlupgrade/PG/sql202312190103.sql @@ -33,8 +33,7 @@ INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES (805915446042158190, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼƼ˰', 'addUpTaxDeduction', '', NULL, NULL,1); -INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES -(805915446042158191, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼӦ۽˰', 'addUpTaxPayable', '', NULL, NULL,1); + INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES (805915446042158192, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼѽ˰', 'addUpAdvanceTax', '', NULL, NULL,1); diff --git a/resource/sqlupgrade/SQLServer/sql202312190103.sql b/resource/sqlupgrade/SQLServer/sql202312190103.sql index 1a0cd83fb..d2c020a34 100644 --- a/resource/sqlupgrade/SQLServer/sql202312190103.sql +++ b/resource/sqlupgrade/SQLServer/sql202312190103.sql @@ -45,9 +45,6 @@ INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete (805915446042158190, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼƼ˰', 'addUpTaxDeduction', '', NULL, NULL,1) GO -INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES -(805915446042158191, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼӦ۽˰', 'addUpTaxPayable', '', NULL, NULL,1) -GO INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES (805915446042158192, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼѽ˰', 'addUpAdvanceTax', '', NULL, NULL,1) diff --git a/resource/sqlupgrade/ST/sql202312190103.sql b/resource/sqlupgrade/ST/sql202312190103.sql index 659ca7b6d..3956b4605 100644 --- a/resource/sqlupgrade/ST/sql202312190103.sql +++ b/resource/sqlupgrade/ST/sql202312190103.sql @@ -45,10 +45,6 @@ INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete (805915446042158190, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼƼ˰', 'addUpTaxDeduction', '', NULL, NULL,1); / -INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES -(805915446042158191, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼӦ۽˰', 'addUpTaxPayable', '', NULL, NULL,1); -/ - INSERT INTO hrsa_tax_report_column(id, create_time, update_time, creator, delete_type, tenant_key, tax_report_type, income_category, report_column_name, report_column_data_index, data_type, request_param_key, report_column_label,contrast_type) VALUES (805915446042158192, NULL, NULL, NULL, 0, 'all_teams', '1', '1', 'ۼѽ˰', 'addUpAdvanceTax', '', NULL, NULL,1); / From bdd27bcfc6c3b701ce65f8449f9b9c2525fa7c09 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 25 Jul 2024 14:04:14 +0800 Subject: [PATCH 86/96] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E6=97=B6=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E4=BA=BA=E5=91=98=E7=BB=84=E7=BB=87=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/com/engine/salary/biz/EmployBiz.java | 38 ++++++++++ .../engine/salary/entity/hrm/JobCallInfo.java | 32 ++++++++ .../salaryacct/bo/SalaryAcctResultBO.java | 42 +++++++++- .../dto/SalaryAcctEmployeeInfoDTO.java | 11 ++- .../param/SalaryAcctResultSaveParam.java | 4 + .../dto/SalaryFormulaEmployeeDTO.java | 14 ++-- .../mapper/datacollection/EmployMapper.java | 17 +++++ .../mapper/datacollection/EmployMapper.xml | 21 +++++ .../salaryacct/SalaryAcctEmployeeMapper.java | 2 + .../salaryacct/SalaryAcctEmployeeMapper.xml | 76 +++++++++++++++++++ .../service/SalaryAcctEmployeeService.java | 5 ++ .../salary/service/SalaryEmployeeService.java | 14 ++++ .../impl/SalaryAcctEmployeeServiceImpl.java | 4 + .../impl/SalaryAcctResultServiceImpl.java | 44 +++++++++++ .../impl/SalaryEmployeeServiceImpl.java | 27 +++++++ 15 files changed, 339 insertions(+), 12 deletions(-) create mode 100644 src/com/engine/salary/entity/hrm/JobCallInfo.java diff --git a/src/com/engine/salary/biz/EmployBiz.java b/src/com/engine/salary/biz/EmployBiz.java index 8f731c242..6de561546 100644 --- a/src/com/engine/salary/biz/EmployBiz.java +++ b/src/com/engine/salary/biz/EmployBiz.java @@ -118,6 +118,19 @@ public class EmployBiz extends BaseBean { } } + public PositionInfo getPositionInfoById(Long positionId) { + if (positionId == null) { + return null; + } + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + EmployMapper mapper = sqlSession.getMapper(EmployMapper.class); + return mapper.getPositionInfoById(positionId); + } finally { + sqlSession.close(); + } + } + public List listByParams(List includeQueryParams) { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { @@ -187,6 +200,20 @@ public class EmployBiz extends BaseBean { } } + public SubCompanyInfo getSubCompanyInfoById(Long subCompanyId) { + if (subCompanyId == null) { + return null; + } + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + EmployMapper mapper = sqlSession.getMapper(EmployMapper.class); + return mapper.getSubCompanyInfoById(subCompanyId); + } finally { + sqlSession.close(); + } + } + + public List listAllForReport() { SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); try { @@ -206,4 +233,15 @@ public class EmployBiz extends BaseBean { sqlSession.close(); } } + + public DeptInfo getDeptInfoById(Long departmentId) { + SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession(); + try { + EmployMapper mapper = sqlSession.getMapper(EmployMapper.class); + return mapper.getDeptInfoById(departmentId); + } finally { + sqlSession.close(); + } + } + } diff --git a/src/com/engine/salary/entity/hrm/JobCallInfo.java b/src/com/engine/salary/entity/hrm/JobCallInfo.java new file mode 100644 index 000000000..246ba1423 --- /dev/null +++ b/src/com/engine/salary/entity/hrm/JobCallInfo.java @@ -0,0 +1,32 @@ +package com.engine.salary.entity.hrm; + +import com.engine.salary.annotation.I18n; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 职称基本信息 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @author qiantao + * @version 1.0 + **/ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class JobCallInfo { + + private Long id; + + /** + * 名称 + */ + @I18n + private String name; + + +} diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index f3a419a20..d5b619a81 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -479,12 +479,45 @@ public class SalaryAcctResultBO { // 个税扣缴义务人 employeeFieldValueMap.put("taxAgentName", Optional.ofNullable(taxAgentPO).map(TaxAgentPO::getName).orElse(StringUtils.EMPTY)); Map employeeFieldNameMap = buildEmployeeFieldName(); + List canEditKeys = Arrays.asList("subcompany", "department", "jobtitle", "jobcall"); List employeeInfos = salarySobEmpFields.stream() - .map(e -> SalaryAcctEmployeeInfoDTO.builder() - .fieldName(employeeFieldNameMap.getOrDefault(e.getFieldCode(), StringUtils.EMPTY)) - .fieldValue(employeeFieldValueMap.getOrDefault(e.getFieldCode(), StringUtils.EMPTY)) - .build()) + .map(e -> { + String fieldCode = e.getFieldCode(); + String fieldType = employeeFieldNameMap.getOrDefault(fieldCode + "_type", StringUtils.EMPTY); + SalaryAcctEmployeeInfoDTO dto = SalaryAcctEmployeeInfoDTO.builder() + .fieldCode(fieldCode) + .fieldName(employeeFieldNameMap.getOrDefault(fieldCode, StringUtils.EMPTY)) + .fieldValue(employeeFieldValueMap.getOrDefault(fieldCode, StringUtils.EMPTY)) + .fieldType(fieldType) + .canEdit(fieldType.contains("Browser") ? true : false) + .build(); + + String codeKey = fieldCode.replace("Id", "").replace("Name", ""); + if (canEditKeys.contains(codeKey)) { + // 前端用于回写浏览框 + Map fieldValueMap = new HashMap<>(); + fieldValueMap.put("id", employeeFieldValueMap.getOrDefault(codeKey + "Id", StringUtils.EMPTY)); + fieldValueMap.put("name", employeeFieldValueMap.getOrDefault(codeKey + "Name", StringUtils.EMPTY)); + dto.setFieldValue(fieldValueMap); + } + return dto; + }) .collect(Collectors.toList()); + + List needRemoveFieldNames = new ArrayList(); + // 过滤出是浏览框类型的且人员信息中同时存在名称和id的字段 + employeeInfos.stream() + .filter(e -> e.getFieldType().contains("Browser")) + .map(e -> SalaryAcctEmployeeInfoDTO.builder().fieldName(e.getFieldName().replace("ID","")).build()) + .collect(Collectors.groupingBy(SalaryAcctEmployeeInfoDTO::getFieldName)) + .forEach((k,v) -> { + if (v.size() > 1) { + needRemoveFieldNames.add(k+"ID"); + } + }); + + // 移除字段 + employeeInfos = employeeInfos.stream().filter(info -> !needRemoveFieldNames.contains(info.getFieldName())).collect(Collectors.toList()); // 薪资项目的值 Map resultValueMap = SalaryEntityUtil.convert2Map(salaryAcctResults, SalaryAcctResultPO::getSalaryItemId, SalaryAcctResultPO::getResultValue); Map salaryItemMap = SalaryEntityUtil.convert2Map(salaryItems, SalaryItemPO::getId); @@ -709,6 +742,7 @@ public class SalaryAcctResultBO { } SalaryFormulaVar annotation = declaredField.getAnnotation(SalaryFormulaVar.class); employeeFieldNameMap.put(declaredField.getName(), SalaryI18nUtil.getI18nLabel(annotation.labelId(), annotation.defaultLabel())); + employeeFieldNameMap.put(declaredField.getName() + "_type", annotation.dataType()); } return employeeFieldNameMap; } diff --git a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctEmployeeInfoDTO.java b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctEmployeeInfoDTO.java index 12e2e694d..6ee7bdcf6 100644 --- a/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctEmployeeInfoDTO.java +++ b/src/com/engine/salary/entity/salaryacct/dto/SalaryAcctEmployeeInfoDTO.java @@ -23,5 +23,14 @@ public class SalaryAcctEmployeeInfoDTO { private String fieldName; //字段值 - private String fieldValue; + private Object fieldValue; + + // code + private String fieldCode; + + // 用于编辑时前端渲染对应输入选择框 + private String fieldType; + + // 是否可编辑 + private boolean canEdit; } diff --git a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultSaveParam.java b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultSaveParam.java index 9692d6b12..61568093c 100644 --- a/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultSaveParam.java +++ b/src/com/engine/salary/entity/salaryacct/param/SalaryAcctResultSaveParam.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salaryacct.param; +import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeInfoDTO; import com.engine.salary.util.valid.DataCheck; import lombok.AllArgsConstructor; import lombok.Builder; @@ -30,6 +31,9 @@ public class SalaryAcctResultSaveParam { @DataCheck(require = true,message = "薪资项目的值的集合不能为空") private Collection items; + // 员工基础信息 + private Collection employeeInfos; + @Data @Builder @NoArgsConstructor diff --git a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java index 413d9de61..4c5856fb1 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java @@ -31,22 +31,22 @@ public class SalaryFormulaEmployeeDTO { private String username; //部门 - @SalaryFormulaVar(defaultLabel = "部门", labelId = 86185, dataType = "string") + @SalaryFormulaVar(defaultLabel = "部门", labelId = 86185, dataType = "departmentBrowser") private String departmentName; - @SalaryFormulaVar(defaultLabel = "部门ID", labelId = 86185, dataType = "string") + @SalaryFormulaVar(defaultLabel = "部门ID", labelId = 86185, dataType = "departmentBrowser") private Long departmentId; //分部 - @SalaryFormulaVar(defaultLabel = "分部", labelId = 82465, dataType = "string") + @SalaryFormulaVar(defaultLabel = "分部", labelId = 82465, dataType = "subcompanyBrowser") private String subcompanyName; //岗位 - @SalaryFormulaVar(defaultLabel = "岗位", labelId = 90633, dataType = "string") + @SalaryFormulaVar(defaultLabel = "岗位", labelId = 90633, dataType = "jobtitleBrowser") private String jobtitleName; - @SalaryFormulaVar(defaultLabel = "岗位ID", labelId = 90633, dataType = "string") + @SalaryFormulaVar(defaultLabel = "岗位ID", labelId = 90633, dataType = "jobtitleBrowser") private Long jobtitleId; @SalaryFormulaVar(defaultLabel = "入职日期", labelId = 86319, dataType = "string") @@ -88,9 +88,9 @@ public class SalaryFormulaEmployeeDTO { //职称 - @SalaryFormulaVar(defaultLabel = "职称", labelId = 98623, dataType = "string") + @SalaryFormulaVar(defaultLabel = "职称", labelId = 98623, dataType = "jobcallBrowser") private String jobcall; - @SalaryFormulaVar(defaultLabel = "职称ID", labelId = 98623, dataType = "string") + @SalaryFormulaVar(defaultLabel = "职称ID", labelId = 98623, dataType = "jobcallBrowser") private Long jobcallId; diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.java b/src/com/engine/salary/mapper/datacollection/EmployMapper.java index 238e8d74f..d95d6c45e 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.java +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.java @@ -2,6 +2,7 @@ package com.engine.salary.mapper.datacollection; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.hrm.DeptInfo; +import com.engine.salary.entity.hrm.JobCallInfo; import com.engine.salary.entity.hrm.PositionInfo; import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.hrm.dto.HrmInfoDTO; @@ -81,6 +82,13 @@ public interface EmployMapper { */ List listPositionInfo(@Param("collection") List ids); + /** + * 所以岗位id 获取岗位信息 + * @param id + * @return + */ + PositionInfo getPositionInfoById(@Param("positionId") Long id); + /** * 所以部门 * @param departmentIds @@ -104,6 +112,13 @@ public interface EmployMapper { */ List getSubCompanyInfoList(@Param("subDepartmentIds") List subDepartmentIds); + /** + * 根据分部id获取分部信息 + * @param subDepartmentId + * @return + */ + SubCompanyInfo getSubCompanyInfoById(@Param("subDepartmentId")Long subDepartmentId); + /** * 虚拟分部 * @param virtualSubCompanyIds @@ -158,4 +173,6 @@ public interface EmployMapper { * @return */ List listBySubCompanyOrDepartment(@Param("subCompanyIds") List subCompanyIds, @Param("departmentIds") List departmentIds); + + JobCallInfo getJobCallInfoById(@Param("jobCallId") Long jobCallId); } \ No newline at end of file diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index ad6b6b38c..e19952e21 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -107,6 +107,13 @@ + + + + + + \ No newline at end of file diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java index 3b97e3084..84b16591c 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.java @@ -122,4 +122,6 @@ public interface SalaryAcctEmployeeMapper { void lockByAcctEmpIds(@Param("lockStatus") Integer lockStatus, @Param("acctEmpIds") Set acctEmpIds); void lockByRecordId(@Param("lockStatus") Integer lockStatus, @Param("recordId") Long recordId); + + void updateIgnoreNull(@Param("salaryAcctEmployeePO")SalaryAcctEmployeePO salaryAcctEmployeePO); } diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index 935089f71..cc4a386da 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -1366,4 +1366,80 @@ AND salary_acct_record_id = #{recordId} + + UPDATE hrsa_salary_acct_emp + + + salary_acct_record_id=#{salaryAcctRecordId}, + + + salary_sob_id=#{salarySobId}, + + + employee_id=#{employeeId}, + + + tax_agent_id=#{taxAgentId}, + + + salary_month=#{salaryMonth}, + + + creator=#{creator}, + + + create_time=#{createTime}, + + + update_time=#{updateTime}, + + + delete_type=#{deleteType}, + + + tenant_key=#{tenantKey}, + + + employee_type=#{employeeType}, + + + income_category=#{incomeCategory}, + + + lock_status=#{lockStatus}, + + + subcompany_name=#{subcompanyName}, + + + subcompany_id=#{subcompanyId}, + + + department_name=#{departmentName}, + + + department_id=#{departmentId}, + + + jobtitle_name=#{jobtitleName}, + + + jobtitle_id=#{jobtitleId}, + + + jobcall=#{jobcall}, + + + jobcall_id=#{jobcallId}, + + + status=#{status}, + + + lock_time=#{lockTime}, + + + WHERE id = #{id} AND delete_type = 0 + + diff --git a/src/com/engine/salary/service/SalaryAcctEmployeeService.java b/src/com/engine/salary/service/SalaryAcctEmployeeService.java index a4d905a62..6c506cb04 100644 --- a/src/com/engine/salary/service/SalaryAcctEmployeeService.java +++ b/src/com/engine/salary/service/SalaryAcctEmployeeService.java @@ -262,4 +262,9 @@ public interface SalaryAcctEmployeeService { */ void lockEmp(SalaryAcctResultUpdateLockStatusParam updateParam); + /** + * 更新 + * @param salaryAcctEmployeePO + */ + void updateIgnoreNull(SalaryAcctEmployeePO salaryAcctEmployeePO); } diff --git a/src/com/engine/salary/service/SalaryEmployeeService.java b/src/com/engine/salary/service/SalaryEmployeeService.java index cd6be6db8..f3b19a040 100644 --- a/src/com/engine/salary/service/SalaryEmployeeService.java +++ b/src/com/engine/salary/service/SalaryEmployeeService.java @@ -2,6 +2,7 @@ package com.engine.salary.service; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.hrm.DeptInfo; +import com.engine.salary.entity.hrm.JobCallInfo; import com.engine.salary.entity.hrm.PositionInfo; import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.hrm.dto.EmployeeInfoExpandDTO; @@ -102,14 +103,20 @@ public interface SalaryEmployeeService { List getDeptInfoList(List departmentIds); + DeptInfo getDeptInfoById(Long departmentId); + List getVirtualDeptInfoList(List virtualDepartmentIds); List getSubCompanyInfoList(List subDepartmentIds); + SubCompanyInfo getSubCompanyInfoById(Long subDepartmentId); + List getVirtualSubCompanyInfoList(List virtualSubDepartmentIds); List listPositionInfo(List positionIds); + PositionInfo getPositionInfoById(Long positionId); + List listEmployee(); List listByParams(List includeQueryParams); @@ -167,4 +174,11 @@ public interface SalaryEmployeeService { * @return */ List listBySubCompanyOrDepartment(List subCompanyIds, List departmentIds); + + /** + * 根据职称id获取职称信息 + * @param jobCallId + * @return + */ + JobCallInfo getJobCallInfoById(Long jobCallId); } diff --git a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java index 84bb51777..d7a4f7646 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctEmployeeServiceImpl.java @@ -785,4 +785,8 @@ public class SalaryAcctEmployeeServiceImpl extends Service implements SalaryAcct } } + @Override + public void updateIgnoreNull(SalaryAcctEmployeePO salaryAcctEmployeePO) { + getSalaryAcctEmployeeMapper().updateIgnoreNull(salaryAcctEmployeePO); + } } diff --git a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java index 1c59cceb4..36f19b6f6 100644 --- a/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryAcctResultServiceImpl.java @@ -11,6 +11,10 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.encrypt.EncryptUtil; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.datacollection.dto.AttendQuoteFieldListDTO; +import com.engine.salary.entity.hrm.DeptInfo; +import com.engine.salary.entity.hrm.JobCallInfo; +import com.engine.salary.entity.hrm.PositionInfo; +import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.progress.ProgressDTO; import com.engine.salary.entity.report.bo.SalaryAcctResultReportBO; import com.engine.salary.entity.report.po.SalaryAcctResultReportPO; @@ -591,6 +595,46 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe if (Objects.isNull(salaryAcctEmployeePO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98831, "薪资核算人员不存在或已被删除")); } + // 更新员工基本信息值 + saveParam.getEmployeeInfos().stream().forEach(info -> { + if (info.getFieldValue() != null && StringUtils.isNotBlank(info.getFieldValue().toString())) { + if (info.getFieldCode().equals("departmentName") || info.getFieldCode().equals("departmentId")) { + // 修改部门信息 + DeptInfo deptInfo = getSalaryEmployeeService(user).getDeptInfoById(NumberUtils.isCreatable(info.getFieldValue().toString()) + ? Long.valueOf(info.getFieldValue().toString()) : 0L); + if (Objects.nonNull(deptInfo)) { + salaryAcctEmployeePO.setDepartmentName(deptInfo.getName()); + salaryAcctEmployeePO.setDepartmentId(deptInfo.getId()); + } + } else if (info.getFieldCode().equals("subcompanyName") || info.getFieldCode().equals("subcompanyId")) { + // 修改分部信息 + SubCompanyInfo subCompanyInfo = getSalaryEmployeeService(user).getSubCompanyInfoById(NumberUtils.isCreatable(info.getFieldValue().toString()) + ? Long.valueOf(info.getFieldValue().toString()) : 0L); + if (Objects.nonNull(subCompanyInfo)) { + salaryAcctEmployeePO.setSubcompanyName(subCompanyInfo.getName()); + salaryAcctEmployeePO.setSubcompanyId(subCompanyInfo.getId()); + } + } else if (info.getFieldCode().equals("jobtitleName") || info.getFieldCode().equals("jobtitleId")) { + // 修改岗位信息 + PositionInfo positionInfo = getSalaryEmployeeService(user).getPositionInfoById(NumberUtils.isCreatable(info.getFieldValue().toString()) + ? Long.valueOf(info.getFieldValue().toString()) : 0L); + if (Objects.nonNull(positionInfo)) { + salaryAcctEmployeePO.setJobtitleName(positionInfo.getName()); + salaryAcctEmployeePO.setJobtitleId(positionInfo.getId()); + } + } else if (info.getFieldCode().equals("jobcall") || info.getFieldCode().equals("jobcallId")) { + // 修改职称信息 + JobCallInfo jobCallInfo = getSalaryEmployeeService(user).getJobCallInfoById(NumberUtils.isCreatable(info.getFieldValue().toString()) + ? Long.valueOf(info.getFieldValue().toString()) : 0L); + if (Objects.nonNull(jobCallInfo)) { + salaryAcctEmployeePO.setJobcall(jobCallInfo.getName()); + salaryAcctEmployeePO.setJobcallId(jobCallInfo.getId()); + } + } + } + }); + getSalaryAcctEmployeeService(user).updateIgnoreNull(salaryAcctEmployeePO); + // 查询原来的薪资核算结果 List salaryAcctResultPOSOld = getSalaryAcctResultMapper().listSome(SalaryAcctResultPO.builder().salaryAcctEmpId(saveParam.getSalaryAcctEmpId()).build()); // 解密 diff --git a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java index 5b3d21231..20d2c37cc 100644 --- a/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryEmployeeServiceImpl.java @@ -9,6 +9,7 @@ import com.engine.salary.constant.SalaryDefaultTenantConstant; import com.engine.salary.entity.SalarySobExtRangePO; import com.engine.salary.entity.datacollection.DataCollectionEmployee; import com.engine.salary.entity.hrm.DeptInfo; +import com.engine.salary.entity.hrm.JobCallInfo; import com.engine.salary.entity.hrm.PositionInfo; import com.engine.salary.entity.hrm.SubCompanyInfo; import com.engine.salary.entity.hrm.dto.EmployeeInfoExpandDTO; @@ -288,6 +289,14 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee return SalaryI18nUtil.i18nList(employBiz.getDeptInfoList(departmentIds)); } + @Override + public DeptInfo getDeptInfoById(Long departmentId) { + if (departmentId == null) { + return null; + } + return SalaryI18nUtil.i18n(employBiz.getDeptInfoById(departmentId)); + } + @Override public List getVirtualDeptInfoList(List virtualDepartmentIds) { if (CollectionUtils.isEmpty(virtualDepartmentIds)) { @@ -302,6 +311,11 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee return SalaryI18nUtil.i18nList(employBiz.getSubCompanyInfoList(subDepartmentIds)); } + @Override + public SubCompanyInfo getSubCompanyInfoById(Long subDepartmentId) { + return SalaryI18nUtil.i18n(employBiz.getSubCompanyInfoById(subDepartmentId)); + } + @Override public List getVirtualSubCompanyInfoList(List virtualSubDepartmentIds) { if (CollectionUtils.isEmpty(virtualSubDepartmentIds)) { @@ -316,6 +330,11 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee return SalaryI18nUtil.i18nList(employBiz.listPositionInfo(positionIds)); } + @Override + public PositionInfo getPositionInfoById(Long positionId) { + return SalaryI18nUtil.i18n(employBiz.getPositionInfoById(positionId)); + } + @Override public List listEmployee() { List result = employBiz.listEmployee(); @@ -514,4 +533,12 @@ public class SalaryEmployeeServiceImpl extends Service implements SalaryEmployee } return SalaryI18nUtil.i18nList(employeeList); } + + @Override + public JobCallInfo getJobCallInfoById(Long jobCallId) { + if (jobCallId == null) { + return null; + } + return SalaryI18nUtil.i18n(getEmployMapper().getJobCallInfoById(jobCallId)); + } } From ec669c1f510ceee6a818185d22c5d395f00cf81c Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 25 Jul 2024 17:51:38 +0800 Subject: [PATCH 87/96] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E6=97=B6=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E4=BA=BA=E5=91=98=E7=BB=84=E7=BB=87=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctFormulaBO.java | 73 ++++++++++----- .../salaryacct/bo/SalaryAcctResultBO.java | 6 +- .../dto/SalaryFormulaEmployeeDTO.java | 2 + .../salaryacct/SalaryAcctEmployeeMapper.xml | 90 ++++++++----------- 4 files changed, 95 insertions(+), 76 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java index fecdd2999..32028e25a 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctFormulaBO.java @@ -1,6 +1,7 @@ package com.engine.salary.entity.salaryacct.bo; import com.engine.salary.entity.datacollection.DataCollectionEmployee; +import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO; import com.engine.salary.entity.salaryformula.dto.SalaryFormulaEmployeeDTO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; @@ -71,7 +72,7 @@ public class SalaryAcctFormulaBO { * @param simpleEmployee * @return */ - public static Map convert2FormulaEmployee(DataCollectionEmployee simpleEmployee) { + public static Map convert2FormulaEmployee(DataCollectionEmployee simpleEmployee, SalaryAcctEmployeePO salaryAcctEmployeePO, boolean dynamicEmpInfo) { if (simpleEmployee == null) { return Collections.emptyMap(); } @@ -79,27 +80,55 @@ public class SalaryAcctFormulaBO { .map(sex -> StringUtils.equals(sex, "0") ? SalaryI18nUtil.getI18nLabel(102440, "男") : SalaryI18nUtil.getI18nLabel(102442, "女")) .orElse(StringUtils.EMPTY); - SalaryFormulaEmployeeDTO formulaEmployee = SalaryFormulaEmployeeDTO.builder() - .employeeId(simpleEmployee.getEmployeeId()) - .username(simpleEmployee.getUsername()) - .email(simpleEmployee.getEmail()) - .mobile(simpleEmployee.getMobile()) - .telephone(simpleEmployee.getTelephone()) - .sex(sexName) - .status(simpleEmployee.getStatus()) - .statusName(simpleEmployee.getStatusName()) - .departmentName(simpleEmployee.getDepartmentName()) - .departmentId(simpleEmployee.getDepartmentId()) - .subcompanyName(simpleEmployee.getSubcompanyName()) - .jobtitleName(simpleEmployee.getJobtitleName()) - .jobtitleId(simpleEmployee.getJobtitleId()) - .jobcall(simpleEmployee.getJobcall()) - .jobcallId(simpleEmployee.getJobcallId()) - .companystartdate(simpleEmployee.getCompanystartdate()) - .birthday(simpleEmployee.getBirthday()) - .workcode(simpleEmployee.getWorkcode()) - .idNo(simpleEmployee.getIdNo()) - .build(); + + SalaryFormulaEmployeeDTO formulaEmployee = null; + if (dynamicEmpInfo) { + formulaEmployee = SalaryFormulaEmployeeDTO.builder() + .employeeId(simpleEmployee.getEmployeeId()) + .username(simpleEmployee.getUsername()) + .email(simpleEmployee.getEmail()) + .mobile(simpleEmployee.getMobile()) + .telephone(simpleEmployee.getTelephone()) + .sex(sexName) + .status(simpleEmployee.getStatus()) + .statusName(simpleEmployee.getStatusName()) + .departmentName(simpleEmployee.getDepartmentName()) + .departmentId(simpleEmployee.getDepartmentId()) + .subcompanyName(simpleEmployee.getSubcompanyName()) + .subcompanyId(simpleEmployee.getSubcompanyid()) + .jobtitleName(simpleEmployee.getJobtitleName()) + .jobtitleId(simpleEmployee.getJobtitleId()) + .jobcall(simpleEmployee.getJobcall()) + .jobcallId(simpleEmployee.getJobcallId()) + .companystartdate(simpleEmployee.getCompanystartdate()) + .birthday(simpleEmployee.getBirthday()) + .workcode(simpleEmployee.getWorkcode()) + .idNo(simpleEmployee.getIdNo()) + .build(); + } else { + formulaEmployee = SalaryFormulaEmployeeDTO.builder() + .employeeId(simpleEmployee.getEmployeeId()) + .username(simpleEmployee.getUsername()) + .email(simpleEmployee.getEmail()) + .mobile(simpleEmployee.getMobile()) + .telephone(simpleEmployee.getTelephone()) + .sex(sexName) + .status(simpleEmployee.getStatus()) + .statusName(simpleEmployee.getStatusName()) + .departmentName(salaryAcctEmployeePO.getDepartmentName()) + .departmentId(salaryAcctEmployeePO.getDepartmentId()) + .subcompanyName(salaryAcctEmployeePO.getSubcompanyName()) + .subcompanyId(salaryAcctEmployeePO.getSubcompanyId()) + .jobtitleName(salaryAcctEmployeePO.getJobtitleName()) + .jobtitleId(salaryAcctEmployeePO.getJobtitleId()) + .jobcall(salaryAcctEmployeePO.getJobcall()) + .jobcallId(salaryAcctEmployeePO.getJobcallId()) + .companystartdate(simpleEmployee.getCompanystartdate()) + .birthday(simpleEmployee.getBirthday()) + .workcode(simpleEmployee.getWorkcode()) + .idNo(simpleEmployee.getIdNo()) + .build(); + } return JsonUtil.parseMap(JsonUtil.toJsonString(formulaEmployee), String.class); } } diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index d5b619a81..268da68d4 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -282,7 +282,7 @@ public class SalaryAcctResultBO { Map dataTypeMap = SalaryEntityUtil.convert2Map(salaryItems, salaryItemPO -> salaryItemPO.getId() + DATA_TYPE_SUFFIX, SalaryItemPO::getDataType); map.putAll(dataTypeMap); // 人员信息字段的值 - Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(e.getEmployeeId())); + Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(e.getEmployeeId()), e, true); for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) { // 员工信息字段的字段类型 if (dynamicEmpInfo) { @@ -369,7 +369,7 @@ public class SalaryAcctResultBO { boolean different = false; Map map = Maps.newHashMap(); // 员工信息字段的值 - Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(salaryAcctEmployee.getEmployeeId())); + Map fieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(employeeMap.get(salaryAcctEmployee.getEmployeeId()), salaryAcctEmployee, false); for (SalarySobEmpFieldPO salarySobEmpField : salarySobEmpFields) { // 员工信息字段的字段类型 if (dynamicEmpInfo) { @@ -475,7 +475,7 @@ public class SalaryAcctResultBO { List lockItems) { // 员工信息字段 - Map employeeFieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(simpleEmployee); + Map employeeFieldValueMap = SalaryAcctFormulaBO.convert2FormulaEmployee(simpleEmployee, salaryAcctEmployee, false); // 个税扣缴义务人 employeeFieldValueMap.put("taxAgentName", Optional.ofNullable(taxAgentPO).map(TaxAgentPO::getName).orElse(StringUtils.EMPTY)); Map employeeFieldNameMap = buildEmployeeFieldName(); diff --git a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java index 4c5856fb1..1e8fd59cc 100644 --- a/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java +++ b/src/com/engine/salary/entity/salaryformula/dto/SalaryFormulaEmployeeDTO.java @@ -41,6 +41,8 @@ public class SalaryFormulaEmployeeDTO { @SalaryFormulaVar(defaultLabel = "分部", labelId = 82465, dataType = "subcompanyBrowser") private String subcompanyName; + private Long subcompanyId; + //岗位 diff --git a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml index cc4a386da..d0a5e2311 100644 --- a/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml +++ b/src/com/engine/salary/mapper/salaryacct/SalaryAcctEmployeeMapper.xml @@ -1369,77 +1369,65 @@ UPDATE hrsa_salary_acct_emp - - salary_acct_record_id=#{salaryAcctRecordId}, + + salary_acct_record_id=#{salaryAcctEmployeePO.salaryAcctRecordId}, - - salary_sob_id=#{salarySobId}, + + salary_sob_id=#{salaryAcctEmployeePO.salarySobId}, - - employee_id=#{employeeId}, + + employee_id=#{salaryAcctEmployeePO.employeeId}, - - tax_agent_id=#{taxAgentId}, + + tax_agent_id=#{salaryAcctEmployeePO.taxAgentId}, - - salary_month=#{salaryMonth}, + + salary_month=#{salaryAcctEmployeePO.salaryMonth}, - - creator=#{creator}, + + create_time=#{salaryAcctEmployeePO.createTime}, - - create_time=#{createTime}, + + update_time=#{salaryAcctEmployeePO.updateTime}, - - update_time=#{updateTime}, + + tenant_key=#{salaryAcctEmployeePO.tenantKey}, - - delete_type=#{deleteType}, + + employee_type=#{salaryAcctEmployeePO.employeeType}, - - tenant_key=#{tenantKey}, + + lock_status=#{salaryAcctEmployeePO.lockStatus}, - - employee_type=#{employeeType}, + + subcompany_name=#{salaryAcctEmployeePO.subcompanyName}, - - income_category=#{incomeCategory}, + + subcompany_id=#{salaryAcctEmployeePO.subcompanyId}, - - lock_status=#{lockStatus}, + + department_name=#{salaryAcctEmployeePO.departmentName}, - - subcompany_name=#{subcompanyName}, + + department_id=#{salaryAcctEmployeePO.departmentId}, - - subcompany_id=#{subcompanyId}, + + jobtitle_name=#{salaryAcctEmployeePO.jobtitleName}, - - department_name=#{departmentName}, + + jobtitle_id=#{salaryAcctEmployeePO.jobtitleId}, - - department_id=#{departmentId}, + + jobcall=#{salaryAcctEmployeePO.jobcall}, - - jobtitle_name=#{jobtitleName}, + + jobcall_id=#{salaryAcctEmployeePO.jobcallId}, - - jobtitle_id=#{jobtitleId}, - - - jobcall=#{jobcall}, - - - jobcall_id=#{jobcallId}, - - - status=#{status}, - - - lock_time=#{lockTime}, + + status=#{salaryAcctEmployeePO.status}, - WHERE id = #{id} AND delete_type = 0 + WHERE id = #{salaryAcctEmployeePO.id} AND delete_type = 0 From 9819bb25e0339f2727692a546527fdf8a5a6c41d Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Mon, 29 Jul 2024 10:58:41 +0800 Subject: [PATCH 88/96] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E5=8F=B0=E8=B4=A6=E8=A1=A5=E5=B7=AE=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/SIBalanceServiceImpl.java | 27 ++++++++++++++----- 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java b/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java index b9ec0de27..bb0c776b3 100644 --- a/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIBalanceServiceImpl.java @@ -167,13 +167,18 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { List> resultList = new ArrayList<>(); - if (socialSchemePO != null && StringUtils.isNotBlank(socialSchemePO.getSocialPaymentBaseString())) { + if (socialSchemePO != null && (StringUtils.isNotBlank(socialSchemePO.getSocialPaymentBaseString()) || StringUtils.isNotBlank(socialSchemePO.getSocialPaymentComBaseString()) )) { Map socialMap = JSON.parseObject(socialSchemePO.getSocialPaymentBaseString(), new HashMap().getClass()); + Map socialComMap = JSON.parseObject(socialSchemePO.getSocialPaymentComBaseString(), new HashMap().getClass()); + List socialIds = new ArrayList<>(); + socialIds.addAll(socialMap.keySet()); + socialIds.addAll(socialComMap.keySet()); + socialIds = socialIds.stream().distinct().collect(Collectors.toList()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(socialSchemePO.getSocialSchemeId()); List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().listBySchemeIds(Collections.singletonList(socialSchemePO.getSocialSchemeId())); Map schemeValidNumMap = SalaryEntityUtil.convert2Map(insuranceSchemeDetailPOS, po -> po.getInsuranceId() + "-" + po.getPaymentScope(), InsuranceSchemeDetailPO::getValidNum); - socialMap.forEach((k, v) -> { + socialIds.forEach(k -> { String welfareTypeName = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "社保" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "公积金" : "企业年金及其它福利" ); String welfareTypeSign = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "social" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "fund" : "other" ); if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_COMPANY.getValue())) { @@ -203,13 +208,18 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { }); } - if (fundSchemePO != null && StringUtils.isNotBlank(fundSchemePO.getFundPaymentBaseString())) { + if (fundSchemePO != null && (StringUtils.isNotBlank(fundSchemePO.getFundPaymentBaseString()) || StringUtils.isNotBlank(fundSchemePO.getFundPaymentComBaseString()))) { Map fundMap = JSON.parseObject(fundSchemePO.getFundPaymentBaseString(), new HashMap().getClass()); + Map fundComMap = JSON.parseObject(fundSchemePO.getFundPaymentComBaseString(), new HashMap().getClass()); + List fundIds = new ArrayList<>(); + fundIds.addAll(fundMap.keySet()); + fundIds.addAll(fundComMap.keySet()); + fundIds = fundIds.stream().distinct().collect(Collectors.toList()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(fundSchemePO.getFundSchemeId()); List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().listBySchemeIds(Collections.singletonList(fundSchemePO.getFundSchemeId())); Map schemeValidNumMap = SalaryEntityUtil.convert2Map(insuranceSchemeDetailPOS, po -> po.getInsuranceId() + "-" + po.getPaymentScope(), InsuranceSchemeDetailPO::getValidNum); - fundMap.forEach((k, v) -> { + fundIds.forEach(k -> { String welfareTypeName = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "社保" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "公积金" : "企业年金及其它福利" ); String welfareTypeSign = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "social" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "fund" : "other" ); if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_COMPANY.getValue())) { @@ -239,14 +249,19 @@ public class SIBalanceServiceImpl extends Service implements SIBalanceService { }); } - if (otherSchemePO != null && StringUtils.isNotBlank(otherSchemePO.getOtherPaymentBaseString())) { + if (otherSchemePO != null && (StringUtils.isNotBlank(otherSchemePO.getOtherPaymentBaseString()) || StringUtils.isNotBlank(otherSchemePO.getOtherPaymentComBaseString()))) { Map otherMap = JSON.parseObject(otherSchemePO.getOtherPaymentBaseString(), new HashMap().getClass()); + Map otherComMap = JSON.parseObject(otherSchemePO.getOtherPaymentComBaseString(), new HashMap().getClass()); + List otherIds = new ArrayList<>(); + otherIds.addAll(otherMap.keySet()); + otherIds.addAll(otherComMap.keySet()); + otherIds = otherIds.stream().distinct().collect(Collectors.toList()); //查询该福利方案下开启缴纳的福利项 List insuranceIdAndScopeList = payInsuranceIdAndScopeList(otherSchemePO.getOtherSchemeId()); List insuranceSchemeDetailPOS = getInsuranceSchemeDetailMapper().listBySchemeIds(Collections.singletonList(otherSchemePO.getOtherSchemeId())); Map schemeValidNumMap = SalaryEntityUtil.convert2Map(insuranceSchemeDetailPOS, po -> po.getInsuranceId() + "-" + po.getPaymentScope(), InsuranceSchemeDetailPO::getValidNum); - otherMap.forEach((k, v) -> { + otherIds.forEach(k -> { String welfareTypeName = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "社保" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "公积金" : "企业年金及其它福利" ); String welfareTypeSign = welfareTypeMap.get(Long.valueOf(k)) == 1 ? "social" : (welfareTypeMap.get(Long.valueOf(k)) == 2 ? "fund" : "other" ); if (insuranceIdAndScopeList.contains(k + "-" + PaymentScopeEnum.SCOPE_COMPANY.getValue())) { From 0c3610961f66469b66592698da03f2477bb74fe1 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Tue, 30 Jul 2024 17:29:12 +0800 Subject: [PATCH 89/96] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E7=A4=BE=E4=BF=9D?= =?UTF-8?q?=E7=A6=8F=E5=88=A9=E6=A1=A3=E6=A1=88=20=E9=AB=98=E7=BA=A7?= =?UTF-8?q?=E6=90=9C=E7=B4=A2=E5=90=8E=E4=B8=8B=E8=BD=BD=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E6=A8=A1=E6=9D=BFbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/SIImportServiceImpl.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/com/engine/salary/service/impl/SIImportServiceImpl.java b/src/com/engine/salary/service/impl/SIImportServiceImpl.java index 03a4b00ea..553a6fba1 100644 --- a/src/com/engine/salary/service/impl/SIImportServiceImpl.java +++ b/src/com/engine/salary/service/impl/SIImportServiceImpl.java @@ -142,6 +142,18 @@ public class SIImportServiceImpl extends Service implements SIImportService { int total = (int)pageInfo.getTotal(); param.setPageSize(total); param.setCurrent(1); + if (CollectionUtils.isNotEmpty(param.getDepartmentIds())) { + param.setDepartmentIdsStr(StringUtils.join(param.getDepartmentIds(), ",")); + } + if (CollectionUtils.isNotEmpty(param.getSubcompanyIds())) { + param.setSubcompanyIdsStr(StringUtils.join(param.getSubcompanyIds(), ",")); + } + if (CollectionUtils.isNotEmpty(param.getPositions())) { + param.setPositionsStr(StringUtils.join(param.getPositions(), ",")); + } + if (CollectionUtils.isNotEmpty(param.getStatuses())) { + param.setStatusesStr(StringUtils.join(param.getStatuses(), ",")); + } Map dataMap = getSIArchivesService(user).listPage(param); List> records = (List>)dataMap.get("datas"); From 25d02d61c93f71a7ccf212720630de921b53b82b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 31 Jul 2024 13:17:35 +0800 Subject: [PATCH 90/96] =?UTF-8?q?=E4=B8=89=E6=96=B9=E7=BC=B4=E6=AC=BE?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/constant/SzyhApiConstant.java | 5 ++++ .../param/TaxPaymentQueryParam.java | 16 ++++++++--- .../remote/tax/client/TaxBaseClient.java | 4 +-- .../impl/SalaryCalcTaxServiceImpl.java | 7 +++++ .../TaxPaymentWithholdingServiceImpl.java | 16 ++++++++--- .../salary/wrapper/SalarySobWrapper.java | 27 ++++++++++--------- 6 files changed, 52 insertions(+), 23 deletions(-) diff --git a/src/com/engine/salary/constant/SzyhApiConstant.java b/src/com/engine/salary/constant/SzyhApiConstant.java index 15ba4af9b..7697a206a 100644 --- a/src/com/engine/salary/constant/SzyhApiConstant.java +++ b/src/com/engine/salary/constant/SzyhApiConstant.java @@ -205,6 +205,11 @@ public class SzyhApiConstant { */ public static final String HANDLING_CODE = "000004"; + /** + * 异步计算任务还未结束 + */ + public static final String TASK_HANDLING_CODE = "100004"; + /** * 企业服务不可用 */ diff --git a/src/com/engine/salary/entity/taxpayment/param/TaxPaymentQueryParam.java b/src/com/engine/salary/entity/taxpayment/param/TaxPaymentQueryParam.java index 8e3fbbfef..11d145388 100644 --- a/src/com/engine/salary/entity/taxpayment/param/TaxPaymentQueryParam.java +++ b/src/com/engine/salary/entity/taxpayment/param/TaxPaymentQueryParam.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.taxpayment.param; +import com.engine.salary.enums.taxdeclaration.TaxPaymentServiceTypeEnum; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModel; import lombok.AllArgsConstructor; @@ -10,10 +11,12 @@ import java.util.Date; /** * 查询企业三方信息 + *

Copyright: Copyright (c) 2024

+ *

Company: 泛微软件

* - * @author chengliming - * @date: 2022-12-06 17:25:28 - */ + * @author qiantao + * @version 1.0 + **/ @Data @NoArgsConstructor @AllArgsConstructor @@ -31,7 +34,7 @@ public class TaxPaymentQueryParam { private Long taxDeclareRecordId; /** - * TaxPaymentServiceTypeEnum + * @see TaxPaymentServiceTypeEnum */ //业务类型") private Integer type; @@ -39,6 +42,11 @@ public class TaxPaymentQueryParam { //三方协议号") private String protocolNumber; + /** + * 缴款帐号 + */ + private String paymentNumber; + //应缴税额") private String taxAmount; diff --git a/src/com/engine/salary/remote/tax/client/TaxBaseClient.java b/src/com/engine/salary/remote/tax/client/TaxBaseClient.java index da59e71b1..686676a39 100644 --- a/src/com/engine/salary/remote/tax/client/TaxBaseClient.java +++ b/src/com/engine/salary/remote/tax/client/TaxBaseClient.java @@ -105,7 +105,7 @@ public class TaxBaseClient { } // 如果税友返回错误信息 String code = response.getHead().getCode(); - if (SzyhApiConstant.HANDLING_CODE.equals(code)) { + if (SzyhApiConstant.HANDLING_CODE.equals(code) || SzyhApiConstant.TASK_HANDLING_CODE.equals(code)) { //进行中的任务,重试 try { Thread.sleep(6 * 1000); @@ -141,7 +141,7 @@ public class TaxBaseClient { } // 如果税友返回错误信息 String code = response.getHead().getCode(); - if (SzyhApiConstant.HANDLING_CODE.equals(code)) { + if (SzyhApiConstant.HANDLING_CODE.equals(code) || SzyhApiConstant.TASK_HANDLING_CODE.equals(code)) { //进行中的任务,重试 try { Thread.sleep(6 * 1000); diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index 6d56f2121..9e8b9d0e7 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -27,11 +27,13 @@ import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTa import com.engine.salary.service.*; import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import weaver.hrm.User; import java.util.*; +@Slf4j public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxService { @@ -231,7 +233,12 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe if (Objects.isNull(feedbackResponse) || Objects.isNull(feedbackResponse.getHead())) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); } + if (Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.TASK_HANDLING_CODE)) { + throw new SalaryRunTimeException(feedbackResponse.getHead().getMsg()); + } if (!Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { + log.error("获取个税反馈失败,核算id:{} ,原因:{}", salaryAcctRecord.getId(), feedbackResponse.getHead().getMsg()); + getSalaryAcctCalcTaxReqService(user).deleteByRecordId(salaryAcctRecord.getId()); throw new SalaryRunTimeException(feedbackResponse.getHead().getMsg()); } List subSalaryAcctTaxAgents = salaryAcctTaxAgentMap.get(salaryAcctCalcTaxReq.getTaxAgentId()); diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index 678f125da..64d692f43 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -127,12 +127,20 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService TaxPaymentQueryParam param, TaxDeclarationApiConfigPO apiConfig, Class clazz) { - SalaryAssert.notBlank(param.getProtocolNumber(), SalaryI18nUtil.getI18nLabel(184071, "三方缴费参数错误")); + String protocolNumber = param.getProtocolNumber(); + String paymentNumber = param.getPaymentNumber(); + Integer reportType = param.getReportType(); + String taxAmount = param.getTaxAmount(); + SalaryAssert.notBlank(protocolNumber, SalaryI18nUtil.getI18nLabel(184071, "三方协议号为空")); + SalaryAssert.notBlank(paymentNumber, SalaryI18nUtil.getI18nLabel(184071, "缴款帐号为空")); + SalaryAssert.notNull(reportType, SalaryI18nUtil.getI18nLabel(184071, "报表类型为空")); + SalaryAssert.notBlank(taxAmount, SalaryI18nUtil.getI18nLabel(184071, "应纳税额为空")); String url = apiConfig.getHost() + SzyhApiConstant.DECLARE_WITH_HOLDING; Map requestParam = DataCollectionBO.getApiBaseQueryParams(returnPO, taxAgentName, SalaryDateUtil.getFormatYYYYMM(param.getTaxYearMonth())); - requestParam.put("sfxyh", param.getProtocolNumber()); -// requestParam.put("ynse", param.getTaxAmount()); -// requestParam.put("sblx", "1"); + requestParam.put("sfxyh", protocolNumber); + requestParam.put("jkzh", paymentNumber); + requestParam.put("bblx", reportType); + requestParam.put("ynse", taxAmount); return postRequest(apiConfig, url, requestParam, clazz); } diff --git a/src/com/engine/salary/wrapper/SalarySobWrapper.java b/src/com/engine/salary/wrapper/SalarySobWrapper.java index 72f9f1518..37b16bfa1 100644 --- a/src/com/engine/salary/wrapper/SalarySobWrapper.java +++ b/src/com/engine/salary/wrapper/SalarySobWrapper.java @@ -18,6 +18,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobBackItemPO; import com.engine.salary.entity.salarysob.po.SalarySobDefaultBackItemPO; import com.engine.salary.entity.salarysob.po.SalarySobPO; import com.engine.salary.entity.taxagent.po.TaxAgentPO; +import com.engine.salary.enums.salarysob.DeclareReportTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum; import com.engine.salary.exception.SalaryRunTimeException; @@ -71,7 +72,6 @@ public class SalarySobWrapper extends Service { } - /** * 薪资账套列表 * @@ -269,18 +269,19 @@ public class SalarySobWrapper extends Service { return taxAgentIds.contains(salarySobPO.getTaxAgentId()) || Objects.isNull(salarySobPO.getTaxAgentId()); } - public List> incomeCategoryList() { - IncomeCategoryEnum[] values = IncomeCategoryEnum.values(); - List> list = new ArrayList<>(values.length); - for (IncomeCategoryEnum value : values) { - Map map = new HashMap(); - map.put("enum", value); - map.put("value", value.getValue()); - map.put("defaultLabel", value.getDefaultLabel()); - map.put("labelId", value.getLabelId()); - map.put("reportTypeName", value.getReportType().getDefaultLabel()); - list.add(map); - } + public List> incomeCategoryList() { + List> list = new ArrayList<>(); + Arrays.stream(IncomeCategoryEnum.values()) + .filter(incomeCategory -> incomeCategory.getReportType() == DeclareReportTypeEnum.COMPREHENSIVE_INCOME) + .forEach(incomeCategory -> { + Map map = new HashMap(); + map.put("enum", incomeCategory); + map.put("value", incomeCategory.getValue()); + map.put("defaultLabel", incomeCategory.getDefaultLabel()); + map.put("labelId", incomeCategory.getLabelId()); + map.put("reportTypeName", incomeCategory.getReportType().getDefaultLabel()); + list.add(map); + }); return list; } } From 241a85c71153b0c3dd7f633ad43a77ac023cade4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 31 Jul 2024 14:59:03 +0800 Subject: [PATCH 91/96] =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 268da68d4..64cd96f9f 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -620,7 +620,7 @@ public class SalaryAcctResultBO { Map formulaContentMap, List lockItems) { - SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(Optional.ofNullable(salarySobItemPO).map(SalarySobItemPO::getValueType).orElse(0)); + SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(Optional.ofNullable(salarySobItemPO).map(SalarySobItemPO::getValueType).orElse(1)); String itemFormulaContent; if (Objects.equals(salaryValueTypeEnum.getValue(), SalaryValueTypeEnum.FORMULA.getValue())) { itemFormulaContent = Optional.ofNullable(formulaContentMap.get(salarySobItemPO.getSalaryItemId().toString())).map(SalaryAcctResultListColumnDTO::getFormulaContent).orElse(""); From c179a9aedf460d6547a99694fc6599ee54bcad21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 31 Jul 2024 16:02:11 +0800 Subject: [PATCH 92/96] =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E7=AE=97=E7=A8=8E?= =?UTF-8?q?=E9=87=8D=E8=AF=95=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/salarysob/IncomeCategoryEnum.java | 39 ++++++++++++++++ .../OnlineCalculateTaxException.java | 15 +++++++ ...ynIndividualIncomeTaxFeedbackResponse.java | 44 +++++++++++++++++-- .../impl/SalaryCalcTaxServiceImpl.java | 21 ++++----- 4 files changed, 103 insertions(+), 16 deletions(-) create mode 100644 src/com/engine/salary/exception/OnlineCalculateTaxException.java diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index d807e5c42..0a38ac78b 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -1,11 +1,16 @@ package com.engine.salary.enums.salarysob; +import cn.hutool.core.collection.CollectionUtil; +import com.engine.salary.constant.SzyhApiConstant; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; import com.engine.salary.entity.salarysob.dto.SalarySobTaxRuleDTO; import com.engine.salary.enums.BaseEnum; +import com.engine.salary.exception.OnlineCalculateTaxException; +import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTaxFeedbackResponse; import com.engine.salary.remote.tax.response.declare.GetCompanyIncomesResponse; import com.engine.salary.util.SalaryEntityUtil; +import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; import com.google.gson.Gson; @@ -34,6 +39,7 @@ public enum IncomeCategoryEnum implements BaseEnum { WAGES_AND_SALARIES(1, "0101", "正常工资薪金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160487) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -63,6 +69,7 @@ public enum IncomeCategoryEnum implements BaseEnum { REMUNERATION_FOR_LABOR(4, "0400", "一般劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160488) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -92,6 +99,7 @@ public enum IncomeCategoryEnum implements BaseEnum { ONETIME_ANNUAL_BONUS(2, "0103", "全年一次性奖金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 160489) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -121,6 +129,7 @@ public enum IncomeCategoryEnum implements BaseEnum { COMPENSATION_FOR_RETIRE(107, "0107", "内退一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181936) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -150,6 +159,7 @@ public enum IncomeCategoryEnum implements BaseEnum { COMPENSATION_FOR_DISMISS(108, "0108", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181937) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -179,6 +189,7 @@ public enum IncomeCategoryEnum implements BaseEnum { INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE(109, "0109", "个人股权激励收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181938) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -208,6 +219,7 @@ public enum IncomeCategoryEnum implements BaseEnum { ANNUITY_RECEIPT(110, "0110", "年金领取", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181939) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -237,6 +249,7 @@ public enum IncomeCategoryEnum implements BaseEnum { INCOME_FOR_INSURANCE_SALESMAN(402, "0402", "保险营销员佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181940) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -266,6 +279,7 @@ public enum IncomeCategoryEnum implements BaseEnum { INCOME_FOR_SECURITIES_BROKER(403, "0403", "证券经纪人佣金收入", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181942) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -295,6 +309,7 @@ public enum IncomeCategoryEnum implements BaseEnum { REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR(489, "0489", "其他连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181943) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -324,6 +339,7 @@ public enum IncomeCategoryEnum implements BaseEnum { REMUNERATION_FOR_OTHER_LABOR(499, "0499", "其他非连续劳务报酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 175330) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -353,6 +369,7 @@ public enum IncomeCategoryEnum implements BaseEnum { REMUNERATION_FOR_AUTHOR(500, "0500", "稿酬所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181944) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -382,6 +399,7 @@ public enum IncomeCategoryEnum implements BaseEnum { ROYALTIES(600, "0600", "特许权使用费所得", DeclareReportTypeEnum.COMPREHENSIVE_INCOME, 181945) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -411,6 +429,7 @@ public enum IncomeCategoryEnum implements BaseEnum { NON_RESIDENT_INCOME_WAGES_AND_SALARIES(700, "0700", "无住所个人正常工资薪金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -440,6 +459,7 @@ public enum IncomeCategoryEnum implements BaseEnum { NON_RESIDENT_INCOME_MONTHLY_BONUS(710, "0710", "无住所个人数月奖金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -469,6 +489,7 @@ public enum IncomeCategoryEnum implements BaseEnum { NON_RESIDENT_INCOME_REMUNERATION_FOR_LABOR(720, "0720", "一般劳务报酬所得", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -499,6 +520,7 @@ public enum IncomeCategoryEnum implements BaseEnum { NON_RESIDENT_INCOME_COMPENSATION_FOR_DISMISS(730, "0730", "解除劳动合同一次性补偿金", DeclareReportTypeEnum.NONRESIDENT_INCOME, 181945) { @Override public Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO) { + checkGetASynIndividualIncomeTaxFeedbackResponse(declareTaxResultFeedbackResponse); Gson gs = new Gson(); List taxRules = taxRuleDTO.getTaxRules(); @@ -548,6 +570,23 @@ public enum IncomeCategoryEnum implements BaseEnum { public abstract Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO); + private static void checkGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse feedbackResponse){ + + if (Objects.isNull(feedbackResponse) || Objects.isNull(feedbackResponse.getHead())) { + throw new OnlineCalculateTaxException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); + } + if (Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.TASK_HANDLING_CODE)) { + throw new SalaryRunTimeException(feedbackResponse.getHead().getMsg()); + } + if (!Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { + throw new OnlineCalculateTaxException(feedbackResponse.getHead().getMsg()); + } + List rysbsblb = feedbackResponse.getBody().getRysbsblb(); + if(CollectionUtil.isNotEmpty(rysbsblb)){ + String err = rysbsblb.stream().map(GetASynIndividualIncomeTaxFeedbackResponse.Body.rysbsb::getSbyy).collect(Collectors.joining(";")); + throw new OnlineCalculateTaxException(err); + } + } public Map>> parseGetCompanyIncomesResponse(Map>> result, GetCompanyIncomesResponse response) { List sfmx = Optional.ofNullable(response.getBody().getSfmx()) .orElse(new ArrayList<>()) diff --git a/src/com/engine/salary/exception/OnlineCalculateTaxException.java b/src/com/engine/salary/exception/OnlineCalculateTaxException.java new file mode 100644 index 000000000..3719f0ce5 --- /dev/null +++ b/src/com/engine/salary/exception/OnlineCalculateTaxException.java @@ -0,0 +1,15 @@ +package com.engine.salary.exception; + +public class OnlineCalculateTaxException extends RuntimeException { + public OnlineCalculateTaxException(String message) { + super(message); + } + + public OnlineCalculateTaxException(Throwable cause) { + super(cause); + } + + public OnlineCalculateTaxException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java index 741d0a9d5..ff4fb6484 100644 --- a/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java +++ b/src/com/engine/salary/remote/tax/response/calculate/GetASynIndividualIncomeTaxFeedbackResponse.java @@ -58,10 +58,10 @@ public class GetASynIndividualIncomeTaxFeedbackResponse extends BaseResponse { // * 限售股所得 必填:是 见限售股所得计算结果 // */ // private xsgsd xsgsd; -// /** -// * 人员申报失败列表 必填:是 参考人员代报结果对象 -// */ -// private rysbsblb rysbsblb; + /** + * 人员申报失败列表 必填:是 参考人员代报结果对象 + */ + private List rysbsblb; @Data @@ -741,6 +741,42 @@ public class GetASynIndividualIncomeTaxFeedbackResponse extends BaseResponse { } } + @Data + public static class rysbsb { + /** + * 姓名 + */ + private String xm; + /** + * 证件类型名称 + */ + private String zzlx; + /** + * 证件号码 + */ + private String zzhm; + /** + * 代报状态 1 待报送 2 代报中 3 代报失败 4 代报成功 + */ + private String sbzt; + /** + * 人员认证状态 + */ + private String rzzt; + /** + * 失败原因 + */ + private String sbyy; + /** + * 专项代报状态 + */ + private String clzt; + /** + * 专项代报结果原因 + */ + private String cljgms; + } + /** * 算税失败原因对象 diff --git a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java index 9e8b9d0e7..f76d1354a 100644 --- a/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java +++ b/src/com/engine/salary/service/impl/SalaryCalcTaxServiceImpl.java @@ -21,6 +21,7 @@ import com.engine.salary.entity.taxdeclaration.response.DeclareTaxResponse; import com.engine.salary.enums.common.SalaryLogOperateTypeEnum; import com.engine.salary.enums.salarysob.IncomeCategoryEnum; import com.engine.salary.enums.sicategory.DeleteTypeEnum; +import com.engine.salary.exception.OnlineCalculateTaxException; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.remote.tax.client.CalculateClient; import com.engine.salary.remote.tax.response.calculate.GetASynIndividualIncomeTaxFeedbackResponse; @@ -230,17 +231,6 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe CalculateClient calculateClient = new CalculateClient(salaryAcctCalcTaxReq.getTaxAgentId()); GetASynIndividualIncomeTaxFeedbackResponse feedbackResponse = calculateClient.getASynIndividualIncomeTaxFeedback(salaryAcctCalcTaxReq.getRequestId()); - if (Objects.isNull(feedbackResponse) || Objects.isNull(feedbackResponse.getHead())) { - throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); - } - if (Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.TASK_HANDLING_CODE)) { - throw new SalaryRunTimeException(feedbackResponse.getHead().getMsg()); - } - if (!Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { - log.error("获取个税反馈失败,核算id:{} ,原因:{}", salaryAcctRecord.getId(), feedbackResponse.getHead().getMsg()); - getSalaryAcctCalcTaxReqService(user).deleteByRecordId(salaryAcctRecord.getId()); - throw new SalaryRunTimeException(feedbackResponse.getHead().getMsg()); - } List subSalaryAcctTaxAgents = salaryAcctTaxAgentMap.get(salaryAcctCalcTaxReq.getTaxAgentId()); if (CollectionUtils.isEmpty(subSalaryAcctTaxAgents)) { continue; @@ -254,7 +244,14 @@ public class SalaryCalcTaxServiceImpl extends Service implements SalaryCalcTaxSe continue; } SalarySobTaxRuleDTO taxRuleDTO = salarySobTaxRuleMap.get(incomeCategoryEnum.getValue().toString()); - Map empIdResult = incomeCategoryEnum.parseGetASynIndividualIncomeTaxFeedbackResponse(feedbackResponse, subEmployeeDeclares, taxRuleDTO); + Map empIdResult; + try { + empIdResult = incomeCategoryEnum.parseGetASynIndividualIncomeTaxFeedbackResponse(feedbackResponse, subEmployeeDeclares, taxRuleDTO); + } catch (OnlineCalculateTaxException e) { + log.error("获取在线算税结果异常", e); + getSalaryAcctCalcTaxReqService(user).deleteByRecordId(salaryAcctRecord.getId()); + throw new SalaryRunTimeException(e.getMessage()); + } List subSalaryAcctEmployees = salaryAcctEmployeeMap.get(salaryAcctTaxAgent.getTaxAgentId() + "-" + salaryAcctTaxAgent.getIncomeCategory()); if (CollectionUtils.isEmpty(subSalaryAcctEmployees)) { continue; From 8bbf8f3ff61fd67c6c90c09cdfa0630de25691a2 Mon Sep 17 00:00:00 2001 From: Harryxzy Date: Thu, 1 Aug 2024 10:52:44 +0800 Subject: [PATCH 93/96] =?UTF-8?q?=E6=A0=B8=E7=AE=97=E6=97=B6=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E8=81=8C=E7=A7=B0bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java | 3 +++ src/com/engine/salary/mapper/datacollection/EmployMapper.xml | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index 268da68d4..005b6ddd0 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -498,6 +498,9 @@ public class SalaryAcctResultBO { Map fieldValueMap = new HashMap<>(); fieldValueMap.put("id", employeeFieldValueMap.getOrDefault(codeKey + "Id", StringUtils.EMPTY)); fieldValueMap.put("name", employeeFieldValueMap.getOrDefault(codeKey + "Name", StringUtils.EMPTY)); + if (codeKey.equals("jobcall")) { + fieldValueMap.put("name", employeeFieldValueMap.getOrDefault( "jobcall", StringUtils.EMPTY)); + } dto.setFieldValue(fieldValueMap); } return dto; diff --git a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml index e19952e21..ae903a6a7 100644 --- a/src/com/engine/salary/mapper/datacollection/EmployMapper.xml +++ b/src/com/engine/salary/mapper/datacollection/EmployMapper.xml @@ -611,7 +611,7 @@ From 1ede3736385e61649d23c8c0d3030a1e24a2e58e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 1 Aug 2024 11:43:26 +0800 Subject: [PATCH 94/96] =?UTF-8?q?=E5=A4=84=E7=90=86=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E4=B8=AD=E7=9A=84=E9=94=99=E8=AF=AF=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enums/salarysob/IncomeCategoryEnum.java | 33 ++++++++++--------- .../remote/tax/client/CalculateClient.java | 2 +- .../impl/AddUpDeductionServiceImpl.java | 2 +- .../impl/TaxPaymentAgreementServiceImpl.java | 2 +- .../TaxPaymentWithholdingServiceImpl.java | 2 +- ...xPaymentWithholdingVoucherServiceImpl.java | 2 +- 6 files changed, 22 insertions(+), 21 deletions(-) diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index 0a38ac78b..37fabaaa6 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -570,23 +570,24 @@ public enum IncomeCategoryEnum implements BaseEnum { public abstract Map parseGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse declareTaxResultFeedbackResponse, List employeeDeclares, SalarySobTaxRuleDTO taxRuleDTO); - private static void checkGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse feedbackResponse){ + private static void checkGetASynIndividualIncomeTaxFeedbackResponse(GetASynIndividualIncomeTaxFeedbackResponse feedbackResponse) { + + if (Objects.isNull(feedbackResponse) || Objects.isNull(feedbackResponse.getHead())) { + throw new OnlineCalculateTaxException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); + } + if (Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.HANDLING_CODE) || Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.TASK_HANDLING_CODE)) { + throw new SalaryRunTimeException(feedbackResponse.getHead().getMsg()); + } + if (!Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { + throw new OnlineCalculateTaxException(feedbackResponse.getHead().getMsg()); + } + List rysbsblb = feedbackResponse.getBody().getRysbsblb(); + if (CollectionUtil.isNotEmpty(rysbsblb)) { + String err = rysbsblb.stream().map(GetASynIndividualIncomeTaxFeedbackResponse.Body.rysbsb::getSbyy).collect(Collectors.joining(";")); + throw new OnlineCalculateTaxException(err); + } + } - if (Objects.isNull(feedbackResponse) || Objects.isNull(feedbackResponse.getHead())) { - throw new OnlineCalculateTaxException(SalaryI18nUtil.getI18nLabel(156449, "服务异常")); - } - if (Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.TASK_HANDLING_CODE)) { - throw new SalaryRunTimeException(feedbackResponse.getHead().getMsg()); - } - if (!Objects.equals(feedbackResponse.getHead().getCode(), SzyhApiConstant.SUCCESS_CODE)) { - throw new OnlineCalculateTaxException(feedbackResponse.getHead().getMsg()); - } - List rysbsblb = feedbackResponse.getBody().getRysbsblb(); - if(CollectionUtil.isNotEmpty(rysbsblb)){ - String err = rysbsblb.stream().map(GetASynIndividualIncomeTaxFeedbackResponse.Body.rysbsb::getSbyy).collect(Collectors.joining(";")); - throw new OnlineCalculateTaxException(err); - } - } public Map>> parseGetCompanyIncomesResponse(Map>> result, GetCompanyIncomesResponse response) { List sfmx = Optional.ofNullable(response.getBody().getSfmx()) .orElse(new ArrayList<>()) diff --git a/src/com/engine/salary/remote/tax/client/CalculateClient.java b/src/com/engine/salary/remote/tax/client/CalculateClient.java index 4a120a015..0cfa8e933 100644 --- a/src/com/engine/salary/remote/tax/client/CalculateClient.java +++ b/src/com/engine/salary/remote/tax/client/CalculateClient.java @@ -26,7 +26,7 @@ public class CalculateClient extends TaxBaseClient{ String res = HttpUtil.getRequest(url, header, params); TaskUtil taskUtil = new TaskUtil(); taskUtil.writeApiTaskRecord(requestId, url, requestId, res); - log.info("getDeclareTaxResultFeedback res --- {}", res); + log.info("getASynIndividualIncomeTaxFeedback res --- {}", res); return JsonUtil.parseObject(res, GetASynIndividualIncomeTaxFeedbackResponse.class); } diff --git a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java index 6343bd692..785939385 100644 --- a/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java +++ b/src/com/engine/salary/service/impl/AddUpDeductionServiceImpl.java @@ -1678,7 +1678,7 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction // 校验请求结果 String responseCode = Optional.ofNullable(response).map(QuerySpecialAmountFeedbackResponse::getHead).map(SzyhResponseHead::getCode).orElse(null); String msg = Optional.ofNullable(response).map(QuerySpecialAmountFeedbackResponse::getHead).map(SzyhResponseHead::getMsg).orElse(null); - if (SzyhApiConstant.HANDLING_CODE.equals(responseCode)) { + if (SzyhApiConstant.HANDLING_CODE.equals(responseCode)||SzyhApiConstant.TASK_HANDLING_CODE.equals(responseCode)) { // 如果接口仍在处理中,则继续轮询 return AddUpDeductionRequestResultDTO.builder().finish(false).build(); } diff --git a/src/com/engine/salary/service/impl/TaxPaymentAgreementServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentAgreementServiceImpl.java index 5b140dd83..e0cd2bb00 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentAgreementServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentAgreementServiceImpl.java @@ -39,7 +39,7 @@ public class TaxPaymentAgreementServiceImpl extends AbstractTaxPaymentService { String responseCode = Optional.ofNullable(feedbackResponse).map(AgreementQueryFeedbackResponse::getHead).map(SzyhResponseHead::getCode).orElse(null); String msg = Optional.ofNullable(feedbackResponse).map(AgreementQueryFeedbackResponse::getHead).map(SzyhResponseHead::getMsg).orElse(null); TaxAgreementFormDTO agreementFormDTO = new TaxAgreementFormDTO(); - if (SzyhApiConstant.HANDLING_CODE.equals(responseCode)) { + if (SzyhApiConstant.HANDLING_CODE.equals(responseCode)||SzyhApiConstant.TASK_HANDLING_CODE.equals(responseCode)) { // 如果接口仍在处理中,则继续轮询 return agreementFormDTO.setFinish(false); } diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java index 64d692f43..66b458146 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingServiceImpl.java @@ -45,7 +45,7 @@ public class TaxPaymentWithholdingServiceImpl extends AbstractTaxPaymentService // 校验请求结果 String responseCode = Optional.ofNullable(feedbackResponse).map(WithholdingFeedbackResponse::getHead).map(SzyhResponseHead::getCode).orElse(null); String msg = Optional.ofNullable(feedbackResponse).map(WithholdingFeedbackResponse::getHead).map(SzyhResponseHead::getMsg).orElse(null); - if (SzyhApiConstant.HANDLING_CODE.equals(responseCode)) { + if (SzyhApiConstant.HANDLING_CODE.equals(responseCode)||SzyhApiConstant.TASK_HANDLING_CODE.equals(responseCode)) { // 如果接口仍在处理中,则继续轮询 throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(175337, "缴款还在处理中,请稍后点击缴款反馈")); } diff --git a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java index 6eaabba46..18d10a4ec 100644 --- a/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxPaymentWithholdingVoucherServiceImpl.java @@ -49,7 +49,7 @@ public class TaxPaymentWithholdingVoucherServiceImpl extends AbstractTaxPaymentS // 校验请求结果 String responseCode = Optional.ofNullable(feedbackResponse).map(WithholdingVoucherFeedbackResponse::getHead).map(SzyhResponseHead::getCode).orElse(null); String msg = Optional.ofNullable(feedbackResponse).map(WithholdingVoucherFeedbackResponse::getHead).map(SzyhResponseHead::getMsg).orElse(null); - if (SzyhApiConstant.HANDLING_CODE.equals(responseCode)) { + if (SzyhApiConstant.HANDLING_CODE.equals(responseCode)||SzyhApiConstant.TASK_HANDLING_CODE.equals(responseCode)) { // 如果接口仍在处理中,则继续轮询 throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(175337, "缴款还在处理中,请稍后点击缴款反馈")); } From ff00de206c1f058cfcc56bd3333fdf1ce5bff117 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Mon, 5 Aug 2024 17:23:25 +0800 Subject: [PATCH 95/96] =?UTF-8?q?=E7=BA=BF=E4=B8=8B=E5=AF=B9=E6=AF=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salaryacct/bo/SalaryAcctResultBO.java | 29 ++++++++++++------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java index e33fcc2fe..ef1dcca05 100644 --- a/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java +++ b/src/com/engine/salary/entity/salaryacct/bo/SalaryAcctResultBO.java @@ -1,5 +1,6 @@ package com.engine.salary.entity.salaryacct.bo; +import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.ObjectUtil; import com.engine.salary.annotation.SalaryFormulaVar; import com.engine.salary.component.WeaTableColumnGroup; @@ -35,6 +36,7 @@ import org.springframework.beans.BeanUtils; import weaver.general.Util; import java.lang.reflect.Field; +import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -305,7 +307,7 @@ public class SalaryAcctResultBO { } else if ("status".equals(salarySobEmpField.getFieldCode())) { map.put("status", e.getStatus()); } else if ("statusName".equals(salarySobEmpField.getFieldCode())) { - map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(Util.null2s(e.getStatus(),"1")))); + map.put("statusName", UserStatusEnum.getDefaultLabelByValue(new Integer(Util.null2s(e.getStatus(), "1")))); } else { map.put(salarySobEmpField.getFieldCode(), fieldValueMap.get(salarySobEmpField.getFieldCode())); } @@ -418,13 +420,20 @@ public class SalaryAcctResultBO { // 薪资项目字段的字段类型 map.put(salaryItem.getId() + DATA_TYPE_SUFFIX, salaryItem.getDataType()); SalaryDataTypeEnum dataTypeEnum = SalaryDataTypeEnum.parseByValue(salaryItem.getDataType()); - if (dataTypeEnum == SalaryDataTypeEnum.STRING) { - if (!StringUtils.equals(acctResultValue, excelResultValue)) { - different = true; - includeSalaryItemIds.add(salaryItem.getId()); + if (dataTypeEnum == SalaryDataTypeEnum.NUMBER) { + if (NumberUtil.isNumber(acctResultValue) && NumberUtil.isNumber(excelResultValue)) { + if (new BigDecimal(acctResultValue).compareTo(new BigDecimal(excelResultValue)) != 0) { + different = true; + includeSalaryItemIds.add(salaryItem.getId()); + } + } else { + if (SalaryEntityUtil.empty2Zero(acctResultValue).compareTo(SalaryEntityUtil.empty2Zero(excelResultValue)) != 0) { + different = true; + includeSalaryItemIds.add(salaryItem.getId()); + } } } else { - if (SalaryEntityUtil.empty2Zero(acctResultValue).compareTo(SalaryEntityUtil.empty2Zero(excelResultValue)) != 0) { + if (!StringUtils.equals(acctResultValue, excelResultValue)) { different = true; includeSalaryItemIds.add(salaryItem.getId()); } @@ -499,7 +508,7 @@ public class SalaryAcctResultBO { fieldValueMap.put("id", employeeFieldValueMap.getOrDefault(codeKey + "Id", StringUtils.EMPTY)); fieldValueMap.put("name", employeeFieldValueMap.getOrDefault(codeKey + "Name", StringUtils.EMPTY)); if (codeKey.equals("jobcall")) { - fieldValueMap.put("name", employeeFieldValueMap.getOrDefault( "jobcall", StringUtils.EMPTY)); + fieldValueMap.put("name", employeeFieldValueMap.getOrDefault("jobcall", StringUtils.EMPTY)); } dto.setFieldValue(fieldValueMap); } @@ -511,11 +520,11 @@ public class SalaryAcctResultBO { // 过滤出是浏览框类型的且人员信息中同时存在名称和id的字段 employeeInfos.stream() .filter(e -> e.getFieldType().contains("Browser")) - .map(e -> SalaryAcctEmployeeInfoDTO.builder().fieldName(e.getFieldName().replace("ID","")).build()) + .map(e -> SalaryAcctEmployeeInfoDTO.builder().fieldName(e.getFieldName().replace("ID", "")).build()) .collect(Collectors.groupingBy(SalaryAcctEmployeeInfoDTO::getFieldName)) - .forEach((k,v) -> { + .forEach((k, v) -> { if (v.size() > 1) { - needRemoveFieldNames.add(k+"ID"); + needRemoveFieldNames.add(k + "ID"); } }); From 549edeeecb1fa8ffcca5fbf9f4dd82583da12a1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Thu, 8 Aug 2024 11:52:10 +0800 Subject: [PATCH 96/96] =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../salary/service/impl/EmployeeDeclareServiceImpl.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java index 3acec12b8..643d210ca 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareServiceImpl.java @@ -43,9 +43,6 @@ import com.engine.salary.enums.taxagent.TaxAgentTaxReturnStatusEnum; import com.engine.salary.enums.taxdeclaration.EnumDeclareApiBusinessType; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.employeedeclare.EmployeeDeclareMapper; -import com.engine.salary.remote.tax.client.EmployeeClient; -import com.engine.salary.remote.tax.request.employee.BatchInvalidSubmissionRequest; -import com.engine.salary.remote.tax.request.employee.InformationChangeRequest; import com.engine.salary.service.*; import com.engine.salary.util.*; import com.engine.salary.util.db.IdGenerator; @@ -477,7 +474,7 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla List preTaxCycleEmployeeDeclares = listByTaxCycleAndTaxAgentId(SalaryDateUtil.plusMonths(refreshParam.getTaxCycle(), -1), refreshParam.getTaxAgentId()) //只需要正常的 .stream() - .filter(e ->Objects.equals(e.getDeclareStatus(), DeclareStatusEnum.DECLARE_SUCCESS.getValue())) + .filter(e -> Objects.equals(e.getDeclareStatus(), DeclareStatusEnum.DECLARE_SUCCESS.getValue())) .collect(Collectors.toList()); // 查询个税扣缴义务人 TaxAgentPO taxAgent = getTaxAgentService(user).getById(refreshParam.getTaxAgentId()); @@ -608,6 +605,7 @@ public class EmployeeDeclareServiceImpl extends Service implements EmployeeDecla Map params = new HashMap<>(1); Map header = SingnatureData.initHeader(params, apiConfig.getAppKey(), apiConfig.getAppSecret()); String res = HttpUtil.doPost(url, header, reqJson, HttpUtil.JSON_TYPE); + log.info("发起人员报送:{} 反馈{}", reqJson, res); DeclareEmployeeInfoResponse declareEmployeeInfoResponse = JsonUtil.parseObject(res, DeclareEmployeeInfoResponse.class); if (Objects.isNull(declareEmployeeInfoResponse) || Objects.isNull(declareEmployeeInfoResponse.getHead())) { log.error("服务异常:" + res);