package com.kingdee.eas.custom.shuiyou.taxCal.service; import cn.com.servyou.dto.ApiResponse; import cn.com.servyou.dto.Head; import cn.com.servyou.dto.employee.EmployeeDeclareFeedback; import cn.com.servyou.dto.tax.*; import cn.com.servyou.rmi.client.ClientProxyFactory; import cn.com.servyou.service.TaxRequest; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import com.kingdee.bos.BOSException; import com.kingdee.bos.Context; import com.kingdee.bos.bsf.service.app.IHRMsfService; import com.kingdee.bos.metadata.entity.*; import com.kingdee.bos.metadata.query.util.CompareType; import com.kingdee.eas.common.EASBizException; import com.kingdee.eas.custom.shuiyou.interfacelog.ILogInfo; import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoFactory; import com.kingdee.eas.custom.shuiyou.interfacelog.LogInfoInfo; import com.kingdee.eas.custom.shuiyou.task.MessageResult; import com.kingdee.eas.custom.shuiyou.utils.ClientProxyFactoryUtils; import com.kingdee.eas.hr.ats.AtsUtil; import com.kingdee.eas.hr.ats.util.AtsDateUtils; import com.kingdee.eas.util.app.DbUtil; import com.kingdee.jdbc.rowset.IRowSet; import com.kingdee.shr.compensation.app.incomeTax.TaxPersonRecordCollection; import com.kingdee.shr.compensation.app.incomeTax.TaxPersonRecordFactory; import com.kingdee.shr.compensation.app.incomeTax.TaxPersonRecordInfo; import com.kingdee.shr.compensation.app.tax.base.*; import com.kingdee.shr.compensation.app.taxCal.*; import com.kingdee.util.StringUtils; import org.apache.log4j.Logger; import java.math.BigDecimal; import java.sql.SQLException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; /** * @Description 获取异步算税反馈结果 * @Date 2024/9/10 15:26 * @Created by Heyuan */ public class GetASynIndividualIncomeTaxFeedback implements IHRMsfService { private static Logger logger = Logger.getLogger(GetASynIndividualIncomeTaxFeedback.class); private String taxUnitId = null;//纳税单位id private String period = null;//税款所属期 yyyy-MM private String creator = null;//创建人id private String periodBegin = null;//税款所属期起 yyyy-MM-dd private String periodEnd = null;//税款所属期止 yyyy-MM-dd private ObjectMapper objectMapper = new ObjectMapper(); //证件类型map //private static Map cardTypeEnumMap = null; private Map incomeItemMap = null;//所有启用的所得项目 private Map taxItemInitMap = null;//初算个税项目 private Map taxItemConfigMap = null;//明细个税项目 private Map taxPersonRecordMap = null;//报送人员信息 key:证件号码+证件类型,value:员工id @Override public MessageResult process(Context ctx, Map paramMap) throws EASBizException, BOSException { ILogInfo iLogInfo = LogInfoFactory.getLocalInstance(ctx); //接口日志实体 LogInfoInfo logInfo = new LogInfoInfo(); //入口 logInfo.setEntrance(this.getClass().getName()); logInfo.setBizDate(new Date()); try { logger.info("调用 GetASynIndividualIncomeTaxFeedback, 参数 " + objectMapper.writeValueAsString(paramMap)); MessageResult messageResult = null; String this_taskId = (String) paramMap.get("this_taskId");//任务id String paramData = (String) paramMap.get("paramData"); Map paramDataMap = objectMapper.readValue(paramData, Map.class); taxUnitId = paramDataMap.get("TAXUNITID");//纳税单位id period = paramDataMap.get("PERIOD");//周期yyyy-MM creator = paramDataMap.get("creator");//创建人id String requestId = paramDataMap.get("requestId"); StringBuilder errorMsg = new StringBuilder(); if (StringUtils.isEmpty(taxUnitId)) { errorMsg.append("纳税单位id不能为空!\n"); } if (StringUtils.isEmpty(period)) { errorMsg.append("周期yyyy-MM不能为空!\n"); } if (StringUtils.isEmpty(requestId)) { errorMsg.append("requestId不能为空!\n"); } if (errorMsg.length() > 0) { throw new BOSException(errorMsg.toString()); } SimpleDateFormat shortsdf = new SimpleDateFormat("yyyy-MM"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date parse = shortsdf.parse(period); periodBegin = sdf.format(AtsDateUtils.getMonthFirstDay(parse)); periodEnd = sdf.format(AtsDateUtils.getMonthLastDay(parse)); //客户端代理工厂 ClientProxyFactory clientProxyFactory = ClientProxyFactoryUtils.getClientProxyFactory(); logInfo.setInterfaceAddress("/gateway/iit/calculateTax/getASynIndividualIncomeTaxFeedback");//接口地址 logInfo.setInterfaceName("getASynIndividualIncomeTaxFeedback");//接口名 logInfo.setInParameter("{\"requestId\":\"" + requestId + "\"}");//入参 //算税请求接口 TaxRequest taxRequest = clientProxyFactory.getTaxRequest(); //调用异步算税接口 ApiResponse apiResponse = taxRequest.getASynIndividualIncomeTaxFeedback(requestId); ObjectMapper mapper = new ObjectMapper(); logInfo.setOutParameter(mapper.writeValueAsString(apiResponse));//回参 Head head = apiResponse.getHead(); String status = head.getStatus(); String code = head.getCode(); if ("100004".equals(code)) { //请求处理中 messageResult = MessageResult.AGAIN(head.getMsg()); logInfo.setErrorInfo(head.getMsg());//错误信息 logInfo.setStatus("处理中"); } else if ("000004".equals(code)) { //请求失败 messageResult = MessageResult.FAILED(head.getMsg()); logInfo.setErrorInfo(head.getMsg());//错误信息 logInfo.setStatus("失败"); } else if ("00000000".equals(code)) { logger.info("成功"); //获取所有启用的所得项目 incomeItemMap = getIncomeItemMap(ctx); logger.info("objectMapper.writeValueAsString(incomeItemMap) " + objectMapper.writeValueAsString(incomeItemMap)); //获取个税项目 getTaxItemMap(ctx); logger.info("objectMapper.writeValueAsString(taxItemInitMap) " + objectMapper.writeValueAsString(taxItemInitMap)); logger.info("objectMapper.writeValueAsString(taxItemConfigMap) " + objectMapper.writeValueAsString(taxItemConfigMap)); //获取报送人员信息 getTaxPersonRecordMap(ctx); //请求成功 CalculateTaxResultRequest body = apiResponse.getBody(); //企业名称 // String qymc = body.getName(); // //税号 // String nsrsbh = body.getTaxNo(); // //部门编号 // String bmbh = body.getDeptNo(); // //部门名称 // String bmmc = body.getDeptName(); // //行政区划代码 // String areaid = body.getArea(); // //税款所属期 // String skssq = body.getMonth(); // //外部业务订单号 // String bizNo = body.getBizNo(); //综合所得 ComplexIncomeResultRequest complexIncomeResult = body.getComplexIncomeResultRequest(); //人员申报失败列表 // List employeeDeclareFeedbacks = complexIncomeResult.getEmployeeDeclareFeedbacks(); // for (int i = 0; employeeDeclareFeedbacks != null && i < employeeDeclareFeedbacks.size(); i++) { // EmployeeDeclareFeedback employeeDeclareFeedback = employeeDeclareFeedbacks.get(i); // //姓名 // String name = employeeDeclareFeedback.getName(); // //证件类型名称 // String licenseType = employeeDeclareFeedback.getLicenseType(); // //证件号码 // String licenseNumber = employeeDeclareFeedback.getLicenseNumber(); // //报送状态 1 待报送 2 代报中 3 代报失败 4 代报成功 // String submissionState = employeeDeclareFeedback.getSubmissionState(); // //人员验证状态 0 若是身份证,状态为验证中;其他证件为暂不验证 1 验证通过 2 验证不通过 4 待验证 9 同代码0处理 // String authenticationState = employeeDeclareFeedback.getAuthenticationState(); // //失败原因 // String message = employeeDeclareFeedback.getMessage(); // //专项报送状态 2 代报成功 3 代报失败 // String deductionSubmissionState = employeeDeclareFeedback.getDeductionSubmissionState(); // //专项报送结果原因 // String deductionMessage = employeeDeclareFeedback.getDeductionMessage(); // } logger.info("正常工资薪金算税结果对象"); //正常工资薪金算税结果对象 ComplexTaxCalculateResult normalSalarySpecIncome = complexIncomeResult.getNormalSalarySpecIncome(); handleComplexTaxCalculateResult(ctx, normalSalarySpecIncome); logger.info("全年一次性奖金收入算税结果对象"); //全年一次性奖金收入算税结果对象 ComplexTaxCalculateResult annualOneTimeBonusIncome = complexIncomeResult.getAnnualOneTimeBonusIncome(); handleComplexTaxCalculateResult(ctx, annualOneTimeBonusIncome); logger.info("一般劳务报酬算税结果对象"); //一般劳务报酬算税结果对象 ComplexTaxCalculateResult laborRemunerationIncome = complexIncomeResult.getLaborRemunerationIncome(); handleComplexTaxCalculateResult(ctx, laborRemunerationIncome); logger.info("解除劳动合同一次性补偿金算税结果对象"); //解除劳动合同一次性补偿金算税结果对象 ComplexTaxCalculateResult compensateIncome = complexIncomeResult.getCompensateIncome(); handleComplexTaxCalculateResult(ctx, compensateIncome); messageResult = MessageResult.SUCCESS(); } logger.info("保存日志对象"); iLogInfo.addnew(logInfo); logger.info("返回结果"); return messageResult; } catch (Exception e) { e.printStackTrace(); logInfo.setErrorInfo(e.getMessage());//错误信息 iLogInfo.addnew(logInfo); return MessageResult.ERROR(e.getMessage()); } } /** * 处理所得项目算税结果 * * @param ctx * @param normalSalarySpecIncome * @throws BOSException */ private void handleComplexTaxCalculateResult( Context ctx, ComplexTaxCalculateResult normalSalarySpecIncome) throws BOSException, JsonProcessingException { logger.info("handleComplexTaxCalculateResult:" + objectMapper.writeValueAsString(normalSalarySpecIncome)); if (normalSalarySpecIncome != null) { //算税总人数 Integer totalPeople = normalSalarySpecIncome.getTotalPeople(); //算税失败人数 Integer failedPeople = normalSalarySpecIncome.getFailedPeople(); //年金上限 BigDecimal annuityLimit = normalSalarySpecIncome.getAnnuityLimit(); //公积金上限 BigDecimal houseProvidentFundLimit = normalSalarySpecIncome.getHouseProvidentFundLimit(); //年平均工资 BigDecimal averageAnnual = normalSalarySpecIncome.getAverageAnnual(); //企业在电子税务局上月是否已申报(仅正常工资薪金有效) 0:上月未申报 1:上月已申报 2:上上月未申报 String etaxDeclaredLastMonth = normalSalarySpecIncome.getEtaxDeclaredLastMonth(); //综合算税成功列表 List successComplexIncomes = normalSalarySpecIncome.getSuccessComplexIncomes(); handleSuccessComplexIncome(ctx, successComplexIncomes); //综合算税失败薪资列表 List failedComplexIncomes = normalSalarySpecIncome.getFailedComplexIncomes(); //handleFailedComplexIncome(failedComplexIncomes); //失败算税原因列表 List failedCheckTaxCalResult = normalSalarySpecIncome.getFailedCheckTaxCalResult(); handleFailedCheckTaxCalResult(ctx, failedCheckTaxCalResult); } } /** * 处理综合算税成功列表 */ private void handleSuccessComplexIncome(Context ctx, List successComplexIncomes) throws BOSException { if (successComplexIncomes != null) { //SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); StringBuilder updateSql = new StringBuilder(); updateSql.append("/*dialect*/update T_HR_STaxCalInitDetail set FSTATE = '40', "); for (String key : taxItemInitMap.keySet()) { String tableField = taxItemInitMap.get(key); updateSql.append(tableField).append("=?, "); } updateSql.deleteCharAt(updateSql.lastIndexOf(",")); updateSql.append(" where fpersonId = ? "); updateSql.append(" and FTAXUNITID=? and to_char(FPERIODBEGIN,'yyyy-mm-dd') >= ? and to_char(FPERIODEND,'yyyy-mm-dd') <= ? and FINCOMEITEMID=? and FSTATE =30"); List sqlParams = new ArrayList<>(); Set personIds = new HashSet<>(); Set incomeitemIds = new HashSet<>(); for (int i = 0; successComplexIncomes != null && i < successComplexIncomes.size(); i++) { ComplexIncome complexIncome = successComplexIncomes.get(i); Map incomeDataMap = new HashMap(); List updateList = new ArrayList(); //姓名 String name = complexIncome.getName(); //证件类型名称 String licenseType = complexIncome.getLicenseType(); //String cardTypeValue = cardTypeEnumMap.get(licenseType); //证件号码 String licenseNumber = complexIncome.getLicenseNumber(); //员工id String personId = taxPersonRecordMap.get(licenseNumber + licenseType); if (StringUtils.isEmpty(personId)) { logger.error("未匹配到人员 证件号: " + licenseNumber + " 证件类型: " + licenseType); continue; } //受雇日期 //String employedDate = complexIncome.getEmployedDate(); //离职日期 //String resignDate = complexIncome.getResignDate(); //是否明细申报 //String isDetailedDeclaration = complexIncome.getIsDetailedDeclaration(); //当期收入额 BigDecimal income = complexIncome.getIncome(); incomeDataMap.put("sre", income); //免税收入 BigDecimal exemptIncome = complexIncome.getExemptIncome(); incomeDataMap.put("mssd", exemptIncome); //基本养老保险 BigDecimal endowmentInsurance = complexIncome.getEndowmentInsurance(); incomeDataMap.put("jbylaobxf", endowmentInsurance); //基本医疗保险 BigDecimal medicalInsurance = complexIncome.getMedicalInsurance(); incomeDataMap.put("jbylbxf", medicalInsurance); //失业保险 BigDecimal unemploymentInsurance = complexIncome.getUnemploymentInsurance(); incomeDataMap.put("sybxf", unemploymentInsurance); //住房公积金 BigDecimal houseProvidentFund = complexIncome.getHouseProvidentFund(); incomeDataMap.put("zfgjj", houseProvidentFund); //原始住房公积金 BigDecimal originalHouseProvidentFund = complexIncome.getOriginalHouseProvidentFund(); //子女教育支出 BigDecimal childEducationExpenditure = complexIncome.getChildEducationExpenditure(); incomeDataMap.put("znjyzc_ex", childEducationExpenditure); //赡养老人支出 BigDecimal supportElderExpenditure = complexIncome.getSupportElderExpenditure(); incomeDataMap.put("sylrzc_ex", supportElderExpenditure); //住房租金支出 BigDecimal houseRentExpenditure = complexIncome.getHouseRentExpenditure(); incomeDataMap.put("zfzjzc_ex", houseRentExpenditure); //房屋贷款支出 BigDecimal houseLoanExpenditure = complexIncome.getHouseLoanExpenditure(); incomeDataMap.put("zfdklxzc_ex", houseLoanExpenditure); //继续教育支出 BigDecimal continueEducationExpenditure = complexIncome.getContinueEducationExpenditure(); incomeDataMap.put("jxjyzc_ex", continueEducationExpenditure); //非学历继续教育支出 BigDecimal unDegreeContinueEducationExpenditure = complexIncome.getUnDegreeContinueEducationExpenditure(); incomeDataMap.put("fxljxjyzc_ex", unDegreeContinueEducationExpenditure); //婴幼儿照护支出 BigDecimal babyCareExpenditure = complexIncome.getBabyCareExpenditure(); incomeDataMap.put("yyezhzc_ex", babyCareExpenditure); //企业年金/职业年金 BigDecimal annuity = complexIncome.getAnnuity(); incomeDataMap.put("nj", annuity); //商业健康保险 BigDecimal commercialHealthInsurance = complexIncome.getCommercialHealthInsurance(); incomeDataMap.put("syjkbx", commercialHealthInsurance); //税延养老保险 BigDecimal extensionEndowmentInsurance = complexIncome.getExtensionEndowmentInsurance(); incomeDataMap.put("syylbx", extensionEndowmentInsurance); //其他 BigDecimal other = complexIncome.getOther(); incomeDataMap.put("qt", other); //减免税额 BigDecimal taxDeduction = complexIncome.getTaxDeduction(); incomeDataMap.put("jmse", taxDeduction); //备注 根据政策要求,填写【其他】项,一定在备注中写明具体扣除项目名称 String remark = complexIncome.getRemark(); incomeDataMap.put("bz", remark); //减除费用 BigDecimal deductionAmount = complexIncome.getDeductionAmount(); incomeDataMap.put("qzd", deductionAmount); //其他扣除合计 BigDecimal otherDeductionSum = complexIncome.getOtherDeductionSum(); incomeDataMap.put("qtckhj", otherDeductionSum); //应纳税所得额 BigDecimal taxableIncome = complexIncome.getTaxableIncome(); incomeDataMap.put("ynssde", taxableIncome); //应纳税额 BigDecimal payableAmount = complexIncome.getPayableAmount(); //已缴税额 BigDecimal paidAmount = complexIncome.getPaidAmount(); //应扣缴税额 BigDecimal withholdingAmount = complexIncome.getWithholdingAmount(); //税率 BigDecimal taxRate = complexIncome.getTaxRate(); incomeDataMap.put("sl", taxRate); //速算扣除数 BigDecimal quickDeduction = complexIncome.getQuickDeduction(); incomeDataMap.put("sskcs", quickDeduction); //所得项目名称 String incomeItemName = complexIncome.getIncomeItemName(); if (!incomeItemMap.containsKey(incomeItemName)) { logger.error("未匹配到所得项目 名称为: " + incomeItemName); continue; } String incomeItemId = incomeItemMap.get(incomeItemName); incomeDataMap.put("sdxm", incomeItemId); //应补退税额 累计应扣缴税额-累计已缴税额 BigDecimal refundTax = complexIncome.getRefundTax(); incomeDataMap.put("bqybtse", refundTax); //累计收入额 本年累计收入=本期所有的工资薪金所得收入之和+往期工资薪金所得收入之和(见税款计算) BigDecimal accumulatedIncome = complexIncome.getAccumulatedIncome(); incomeDataMap.put("bqljsre", accumulatedIncome); //累计免税收入额 BigDecimal accumulatedExemptIncome = complexIncome.getAccumulatedExemptIncome(); incomeDataMap.put("bqljmssr", accumulatedExemptIncome); //累计专项扣除额 BigDecimal accumulatedSpecDeduction = complexIncome.getAccumulatedSpecDeduction(); incomeDataMap.put("zxkchj", accumulatedSpecDeduction); //累计专项(附加)扣除额 BigDecimal accumulatedSpecAttachDeduction = complexIncome.getAccumulatedSpecAttachDeduction(); incomeDataMap.put("zxfjkchj", accumulatedSpecAttachDeduction); //累计其他扣除额 BigDecimal accumulatedOtherDeduction = complexIncome.getAccumulatedOtherDeduction(); incomeDataMap.put("qtckhj", accumulatedOtherDeduction); //累计减免税额 BigDecimal accumulatedTaxDeduction = complexIncome.getAccumulatedTaxDeduction(); incomeDataMap.put("ljjmse", accumulatedTaxDeduction); //累计减除费用额 BigDecimal accumulatedDeductionAmount = complexIncome.getAccumulatedDeductionAmount(); incomeDataMap.put("jcfy", accumulatedDeductionAmount); //todo 累计月减除费用 BigDecimal accumulatedMonthDeduction = complexIncome.getAccumulatedMonthDeduction(); //累计应纳税所得额 BigDecimal accumulatedTaxableIncome = complexIncome.getAccumulatedTaxableIncome(); incomeDataMap.put("ljynssde", accumulatedTaxableIncome); //累计应纳税额 BigDecimal accumulatedPayableAmount = complexIncome.getAccumulatedPayableAmount(); incomeDataMap.put("ljynse", accumulatedPayableAmount); //累计应扣缴税额 累计应纳税额 - 累计减免税额 BigDecimal accumulatedWithholdingAmount = complexIncome.getAccumulatedWithholdingAmount(); incomeDataMap.put("ljyingkjse", accumulatedWithholdingAmount); //累计子女教育支出 BigDecimal accumulatedChildEducation = complexIncome.getAccumulatedChildEducation(); incomeDataMap.put("znjyzc", accumulatedChildEducation); //累计继续教育支出 BigDecimal accumulatedContinueEducation = complexIncome.getAccumulatedContinueEducation(); incomeDataMap.put("jxjyzc", accumulatedContinueEducation); //累计学历继续教育支出 BigDecimal accumulatedDegreeContinueEducationLimit = complexIncome.getAccumulatedDegreeContinueEducationLimit(); incomeDataMap.put("ljxljxjyzc_ex", accumulatedDegreeContinueEducationLimit); //累计非学历继续教育支出 BigDecimal accumulatedUnDegreeContinueEducationLimit = complexIncome.getAccumulatedUnDegreeContinueEducationLimit(); incomeDataMap.put("ljfxljxjyzc_ex", accumulatedUnDegreeContinueEducationLimit); //累计住房租金支出 BigDecimal accumulatedHouseRent = complexIncome.getAccumulatedHouseRent(); incomeDataMap.put("zfzjzc", accumulatedHouseRent); //累计房屋贷款支出 BigDecimal accumulatedHouseLoan = complexIncome.getAccumulatedHouseLoan(); incomeDataMap.put("zfdklxzc", accumulatedHouseLoan); //累计赡养老人支出 BigDecimal accumulatedSupportElder = complexIncome.getAccumulatedSupportElder(); incomeDataMap.put("sylrzc", accumulatedSupportElder); //todo 累计3岁以下婴幼儿照护支出 BigDecimal accumulatedBabyCare = complexIncome.getAccumulatedBabyCare(); incomeDataMap.put("ljyyezhzc_ex", accumulatedBabyCare); //累计准予扣除的捐赠额 BigDecimal accumulatedDeductibleDonation = complexIncome.getAccumulatedDeductibleDonation(); incomeDataMap.put("ljzykcdjze", accumulatedDeductibleDonation); //累计个人养老金 BigDecimal accumulatedPersonalPension = complexIncome.getAccumulatedPersonalPension(); incomeDataMap.put("grylj", accumulatedPersonalPension); //todo 累计个人养老金校验码 String accumulatedPersonalPensionCheckCode = complexIncome.getAccumulatedPersonalPensionCheckCode(); //准予扣除的捐赠额 BigDecimal deductibleDonation = complexIncome.getDeductibleDonation(); incomeDataMap.put("zykcjze", deductibleDonation); //累计已缴税额 BigDecimal accumulatedPaidAmount = complexIncome.getAccumulatedPaidAmount(); //incomeDataMap.put("ykjse", accumulatedPaidAmount); //企业上月是否已申报 String etaxDeclaredLastMonth = complexIncome.getEtaxDeclaredLastMonth(); //员工在税局累计已扣缴的税额 BigDecimal etaxAccumulatedPaidAmount = complexIncome.getEtaxAccumulatedPaidAmount(); //incomeDataMap.put("ykjse", etaxAccumulatedPaidAmount); //本月已累计扣除税额 BigDecimal monthAccumulatedWithholdingAmount = complexIncome.getMonthAccumulatedWithholdingAmount(); incomeDataMap.put("ykjse", etaxAccumulatedPaidAmount); //本次应扣缴税额 BigDecimal currentWithholdingAmount = complexIncome.getCurrentWithholdingAmount(); incomeDataMap.put("ykjse", etaxAccumulatedPaidAmount); //允许扣除的税费 BigDecimal taxDeductible = complexIncome.getTaxDeductible(); incomeDataMap.put("yxkcsf", taxDeductible); //展业成本 BigDecimal exhibitionCost = complexIncome.getExhibitionCost(); incomeDataMap.put("zycb", exhibitionCost); //月减除费用 BigDecimal monthDeduction = complexIncome.getMonthDeduction(); incomeDataMap.put("qzd", monthDeduction); //分摊年度数 Integer apportionYears = complexIncome.getApportionYears(); //年减除费用 默认为60000 BigDecimal yearDeduction = complexIncome.getYearDeduction(); //封装更新参数 for (String key : taxItemInitMap.keySet()) { updateList.add(incomeDataMap.get(key)); } updateList.add(personId); updateList.add(taxUnitId); updateList.add(periodBegin); updateList.add(periodEnd); updateList.add(incomeItemId); sqlParams.add(updateList.toArray()); if (!personIds.contains(personId)) { personIds.add(personId); } if (!incomeitemIds.contains(incomeItemId)) { incomeitemIds.add(incomeItemId); } } try { logger.info("updateSql: " + updateSql); logger.info("处理综合算税成功列表 sqlParams " + objectMapper.writeValueAsString(sqlParams)); if (!sqlParams.isEmpty()) { DbUtil.executeBatch(ctx, updateSql.toString(), sqlParams); } } catch (Exception e) { e.printStackTrace(); throw new BOSException("处理处理综合算税成功列表,更新初算数据报错:" + e.getMessage()); } //生成个税应用+税款计算最终拆分明细表 try { logger.info("处理综合算税成功列表 personIds " + objectMapper.writeValueAsString(personIds)); logger.info("处理综合算税成功列表 incomeitemIds " + objectMapper.writeValueAsString(incomeitemIds)); if (!personIds.isEmpty() && !incomeitemIds.isEmpty()) { generateOrUpdateTaxCalConfigDetail(ctx, personIds, incomeitemIds); } } catch (Exception e) { e.printStackTrace(); throw new BOSException("处理处理综合算税成功列表,生成个税应用+税款计算最终拆分明细表报错:" + e.getMessage()); } } } /** * 处理综合算税失败薪资列表 * * @param failedComplexIncomes */ private void handleFailedComplexIncome(List failedComplexIncomes) { for (int i = 0; failedComplexIncomes != null && i < failedComplexIncomes.size(); i++) { ComplexIncome complexIncome = failedComplexIncomes.get(i); //姓名 String name = complexIncome.getName(); //证件类型名称 String licenseType = complexIncome.getLicenseType(); //证件号码 String licenseNumber = complexIncome.getLicenseNumber(); //受雇日期 String employedDate = complexIncome.getEmployedDate(); //离职日期 String resignDate = complexIncome.getResignDate(); //是否明细申报 String isDetailedDeclaration = complexIncome.getIsDetailedDeclaration(); //当期收入额 BigDecimal income = complexIncome.getIncome(); //免税收入 BigDecimal exemptIncome = complexIncome.getExemptIncome(); //基本养老保险 BigDecimal endowmentInsurance = complexIncome.getEndowmentInsurance(); //基本医疗保险 BigDecimal medicalInsurance = complexIncome.getMedicalInsurance(); //失业保险 BigDecimal unemploymentInsurance = complexIncome.getUnemploymentInsurance(); //住房公积金 BigDecimal houseProvidentFund = complexIncome.getHouseProvidentFund(); //原始住房公积金 //BigDecimal originalHouseProvidentFund = complexIncome.getOriginalHouseProvidentFund(); //子女教育支出 BigDecimal childEducationExpenditure = complexIncome.getChildEducationExpenditure(); //赡养老人支出 BigDecimal supportElderExpenditure = complexIncome.getSupportElderExpenditure(); //住房租金支出 BigDecimal houseRentExpenditure = complexIncome.getHouseRentExpenditure(); //房屋贷款支出 BigDecimal houseLoanExpenditure = complexIncome.getHouseLoanExpenditure(); //继续教育支出 BigDecimal continueEducationExpenditure = complexIncome.getContinueEducationExpenditure(); //非学历继续教育支出 BigDecimal unDegreeContinueEducationExpenditure = complexIncome.getUnDegreeContinueEducationExpenditure(); //婴幼儿照护支出 BigDecimal babyCareExpenditure = complexIncome.getBabyCareExpenditure(); //企业年金/职业年金 BigDecimal annuity = complexIncome.getAnnuity(); //商业健康保险 BigDecimal commercialHealthInsurance = complexIncome.getCommercialHealthInsurance(); //税延养老保险 BigDecimal extensionEndowmentInsurance = complexIncome.getExtensionEndowmentInsurance(); //其他 BigDecimal other = complexIncome.getOther(); //减免税额 BigDecimal taxDeduction = complexIncome.getTaxDeduction(); //备注 String remark = complexIncome.getRemark(); //减除费用 BigDecimal deductionAmount = complexIncome.getDeductionAmount(); //其他扣除合计 BigDecimal otherDeductionSum = complexIncome.getOtherDeductionSum(); //应纳税所得额 BigDecimal taxableIncome = complexIncome.getTaxableIncome(); //应纳税额 BigDecimal payableAmount = complexIncome.getPayableAmount(); //已缴税额 BigDecimal paidAmount = complexIncome.getPaidAmount(); //应扣缴税额 BigDecimal withholdingAmount = complexIncome.getWithholdingAmount(); //税率 BigDecimal taxRate = complexIncome.getTaxRate(); //速算扣除数 BigDecimal quickDeduction = complexIncome.getQuickDeduction(); //所得项目名称 String incomeItemName = complexIncome.getIncomeItemName(); //应补退税额 BigDecimal refundTax = complexIncome.getRefundTax(); //累计收入额 BigDecimal accumulatedIncome = complexIncome.getAccumulatedIncome(); //累计免税收入额 BigDecimal accumulatedExemptIncome = complexIncome.getAccumulatedExemptIncome(); //累计专项扣除额 BigDecimal accumulatedSpecDeduction = complexIncome.getAccumulatedSpecDeduction(); //累计专项(附加)扣除额 BigDecimal accumulatedSpecAttachDeduction = complexIncome.getAccumulatedSpecAttachDeduction(); //累计其他扣除额 BigDecimal accumulatedOtherDeduction = complexIncome.getAccumulatedOtherDeduction(); //累计减免税额 BigDecimal accumulatedTaxDeduction = complexIncome.getAccumulatedTaxDeduction(); //累计减除费用额 BigDecimal accumulatedDeductionAmount = complexIncome.getAccumulatedDeductionAmount(); //累计月减除费用 BigDecimal accumulatedMonthDeduction = complexIncome.getAccumulatedMonthDeduction(); //累计应纳税所得额 BigDecimal accumulatedTaxableIncome = complexIncome.getAccumulatedTaxableIncome(); //累计应纳税额 BigDecimal accumulatedPayableAmount = complexIncome.getAccumulatedPayableAmount(); //累计应扣缴税额 BigDecimal accumulatedWithholdingAmount = complexIncome.getAccumulatedWithholdingAmount(); //累计子女教育支出 BigDecimal accumulatedChildEducation = complexIncome.getAccumulatedChildEducation(); //累计继续教育支出 BigDecimal accumulatedContinueEducation = complexIncome.getAccumulatedContinueEducation(); //累计学历继续教育支出 BigDecimal accumulatedDegreeContinueEducationLimit = complexIncome.getAccumulatedDegreeContinueEducationLimit(); //累计非学历继续教育支出 BigDecimal accumulatedUnDegreeContinueEducationLimit = complexIncome.getAccumulatedUnDegreeContinueEducationLimit(); //累计住房租金支出 BigDecimal accumulatedHouseRent = complexIncome.getAccumulatedHouseRent(); //累计房屋贷款支出 BigDecimal accumulatedHouseLoan = complexIncome.getAccumulatedHouseLoan(); //累计赡养老人支出 BigDecimal accumulatedSupportElder = complexIncome.getAccumulatedSupportElder(); //累计3岁以下婴幼儿照护支出 BigDecimal accumulatedBabyCare = complexIncome.getAccumulatedBabyCare(); //累计准予扣除的捐赠额 BigDecimal accumulatedDeductibleDonation = complexIncome.getAccumulatedDeductibleDonation(); //累计个人养老金 BigDecimal accumulatedPersonalPension = complexIncome.getAccumulatedPersonalPension(); //累计个人养老金校验码 String accumulatedPersonalPensionCheckCode = complexIncome.getAccumulatedPersonalPensionCheckCode(); //准予扣除的捐赠额 BigDecimal deductibleDonation = complexIncome.getDeductibleDonation(); //累计已缴税额 BigDecimal accumulatedPaidAmount = complexIncome.getAccumulatedPaidAmount(); //企业上月是否已申报: String etaxDeclaredLastMonth = complexIncome.getEtaxDeclaredLastMonth(); //员工在税局累计已扣缴的税额 BigDecimal etaxAccumulatedPaidAmount = complexIncome.getEtaxAccumulatedPaidAmount(); //本月已累计扣除税额 BigDecimal monthAccumulatedWithholdingAmount = complexIncome.getMonthAccumulatedWithholdingAmount(); //本次应扣缴税额 BigDecimal currentWithholdingAmount = complexIncome.getCurrentWithholdingAmount(); //允许扣除的税费 BigDecimal taxDeductible = complexIncome.getTaxDeductible(); //展业成本 BigDecimal exhibitionCost = complexIncome.getExhibitionCost(); //月减除费用 BigDecimal monthDeduction = complexIncome.getMonthDeduction(); //分摊年度数 Integer apportionYears = complexIncome.getApportionYears(); //年减除费用 默认为60000 BigDecimal yearDeduction = complexIncome.getYearDeduction(); } } /** * 处理失败算税原因列表 * * @param failedCheckTaxCalResult */ private void handleFailedCheckTaxCalResult( Context ctx, List failedCheckTaxCalResult) throws BOSException, JsonProcessingException { logger.info("handleFailedCheckTaxCalResult:" + objectMapper.writeValueAsString(failedCheckTaxCalResult)); if (failedCheckTaxCalResult != null) { String updateSql = "/*dialect*/update T_HR_STaxCalInitDetail set FERRORINFO = ?,FSTATE = '50' " + "where fpersonId = ? " + "and FTAXUNITID=? and to_char(FPERIODBEGIN,'yyyy-mm-dd') >= ? and to_char(FPERIODEND,'yyyy-mm-dd') <= ? and FINCOMEITEMID=? and FSTATE =30"; List udpateParameter = new ArrayList<>(); for (int i = 0; failedCheckTaxCalResult != null && i < failedCheckTaxCalResult.size(); i++) { List list = new ArrayList(); CheckTaxCalResult checkTaxCalResult = failedCheckTaxCalResult.get(i); //证件类型名称 String licenseType = checkTaxCalResult.getLicenseType(); //String cardTypeValue = cardTypeEnumMap.get(licenseType); //证件号码 String licenseNumber = checkTaxCalResult.getLicenseNumber(); //员工id String personId = taxPersonRecordMap.get(licenseNumber + licenseType); if (StringUtils.isEmpty(personId)) { logger.error("未匹配到人员 证件号: " + licenseNumber + " 证件类型: " + licenseType); continue; } //人员id Long employeeId = checkTaxCalResult.getEmployeeId(); //人员名称 String employeeName = checkTaxCalResult.getEmployeeName(); //错误码 String errorCode = checkTaxCalResult.getErrorCode(); //错误信息 String errorMessage = checkTaxCalResult.getErrorMessage(); //所得税表的code String incomeItemCode = checkTaxCalResult.getIncomeItemCode(); //所得税表的name String incomeItemName = checkTaxCalResult.getIncomeItemName(); if (!incomeItemMap.containsKey(incomeItemName)) { logger.error("未匹配到所得项目 名称为: " + incomeItemName); continue; } String incomeItemId = incomeItemMap.get(incomeItemName); list.add(errorMessage); list.add(personId); list.add(taxUnitId); list.add(periodBegin); list.add(periodEnd); list.add(incomeItemId); udpateParameter.add(list.toArray()); } try { logger.error("处理失败算税原因列表 updateSql " + updateSql); logger.error("处理失败算税原因列表 udpateParameter " + objectMapper.writeValueAsString(udpateParameter)); if (!udpateParameter.isEmpty()) { DbUtil.executeBatch(ctx, updateSql, udpateParameter); } } catch (BOSException e) { e.printStackTrace(); throw new BOSException("更新处理失败算税原因列表报错: " + e.getMessage()); } } } /** * 生成个税应用+税款计算最终拆分明细表 * 先新增再更新 */ private void generateOrUpdateTaxCalConfigDetail(Context ctx, Set personIds, Set incomeitemIds) throws BOSException, SQLException, ParseException, JsonProcessingException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date periodBeginDate = sdf.parse(periodBegin); Date periodEndDate = sdf.parse(periodEnd); //先查出计算成功的初算数据(人员、纳税单位id、周期、所得项目、状态=成功) ITaxCalConfigDetail iTaxCalConfigDetail = TaxCalConfigDetailFactory.getLocalInstance(ctx); StringBuilder querySql = new StringBuilder(); querySql.append("SELECT fid,fpersonId,fincomeitemid,FCALSCHEMEID,FCMPCALTABLEID,FTAXUNITID from T_HR_STaxCalInitDetail where").append("\n"); querySql.append(" fpersonId in(").append(AtsUtil.convertSetToString(personIds)).append(")").append("\n"); querySql.append(" and to_char(FPERIODBEGIN, 'yyyy-mm-dd') >= '").append(periodBegin).append("'").append("\n"); querySql.append(" and to_char(FPERIODEND, 'yyyy-mm-dd') <= '").append(periodEnd).append("'").append("\n"); querySql.append(" and FINCOMEITEMID in(").append(AtsUtil.convertSetToString(incomeitemIds)).append(")").append("\n"); querySql.append(" and FTAXUNITID = '").append(taxUnitId).append("'").append("\n"); querySql.append(" and FSTATE = '40'").append("\n"); logger.info("generateOrUpdateTaxCalConfigDetail.sql: " + querySql); IRowSet iRowSet = DbUtil.executeQuery(ctx, querySql.toString()); List> list = new ArrayList<>(); while (iRowSet.next()) { Map map = new HashMap<>(); map.put("initId", iRowSet.getString("fid")); map.put("personId", iRowSet.getString("fpersonId")); map.put("incomeitemid", iRowSet.getString("FINCOMEITEMID")); map.put("calSchemeId", iRowSet.getString("FCALSCHEMEID")); map.put("cmpCalTableId", iRowSet.getString("FCMPCALTABLEID")); map.put("taxUnitId", iRowSet.getString("FTAXUNITID")); list.add(map); } //用初算数据生成明细表(需要判断明细表数据是否已经生成过) Set initIds = new HashSet<>(); Set configIds = new HashSet<>(); for (int i = 0; i < list.size(); i++) { try { String detailId = null; Map map = list.get(i); String initId = map.get("initId");//初算id String personId = map.get("personId"); String taxUnitId = map.get("taxUnitId"); String incomeitemid = map.get("incomeitemid"); String calSchemeId = map.get("calSchemeId"); String cmpCalTableId = map.get("cmpCalTableId"); FilterInfo filterInfo = new FilterInfo(); FilterItemCollection filterItems = filterInfo.getFilterItems(); filterItems.add(new FilterItemInfo("person", personId)); filterItems.add(new FilterItemInfo("taxUnit", taxUnitId)); filterItems.add(new FilterItemInfo("periodBegin", periodBeginDate, CompareType.GREATER)); filterItems.add(new FilterItemInfo("periodEnd", periodEndDate, CompareType.LESS_EQUALS)); filterItems.add(new FilterItemInfo("incomeItem", incomeitemid)); filterItems.add(new FilterItemInfo("calScheme", calSchemeId)); filterItems.add(new FilterItemInfo("cmpCalTable", cmpCalTableId)); SelectorItemCollection sic = new SelectorItemCollection(); sic.add("state"); EntityViewInfo instance = EntityViewInfo.getInstance(filterInfo, sic, null); TaxCalConfigDetailCollection taxCalConfigDetailCol = iTaxCalConfigDetail.getTaxCalConfigDetailCollection(instance); if (taxCalConfigDetailCol.size() > 0) { TaxCalConfigDetailInfo taxCalConfigDetailInfo = taxCalConfigDetailCol.get(0); if (TaxResultStateEnum.UN_CONFIRM.equals(taxCalConfigDetailInfo.getState())) { //未确认,更新数据 detailId = taxCalConfigDetailInfo.getId().toString(); configIds.add(detailId); } else { //已确认,不能更新 logger.error("更新明细表数据 已确认,不能更新"); continue; } } else { //没有找到明细数据,创建数据 //个税应用+税款计算最终拆分明细表 TaxCalConfigDetailInfo taxCalConfigDetailInfo = new TaxCalConfigDetailInfo(); //计算规则 taxCalConfigDetailInfo.put("calScheme", map.get("calSchemeId")); //核算表id taxCalConfigDetailInfo.put("cmpCalTable", map.get("cmpCalTableId")); //状态 taxCalConfigDetailInfo.setState(TaxResultStateEnum.UN_CONFIRM); //依赖id //taxCalConfigDetailInfo.setRelay(); //是否最后一条 //taxCalConfigDetailInfo.setIsLast(); //是否生成个税申报 taxCalConfigDetailInfo.setIsGenerateTaxDeclare(false); //申报批次号 //taxCalConfigDetailInfo.setBatchNo(); //员工 taxCalConfigDetailInfo.put("person", map.get("personId")); //纳税单位 taxCalConfigDetailInfo.put("taxUnit", map.get("taxUnitId")); //税款所属期间起 taxCalConfigDetailInfo.setPeriodBegin(periodBeginDate); //税款所属期间止 taxCalConfigDetailInfo.setPeriodEnd(periodEndDate); //所得项目 taxCalConfigDetailInfo.put("incomeItem", map.get("incomeitemid")); detailId = iTaxCalConfigDetail.addnew(taxCalConfigDetailInfo).toString(); configIds.add(detailId); } initIds.add(initId); } catch (Exception e) { e.printStackTrace(); } } logger.info("configIds: " + objectMapper.writeValueAsString(configIds)); logger.info("initIds " + objectMapper.writeValueAsString(initIds)); if (!configIds.isEmpty() && !initIds.isEmpty()) { //更新明细表数据 StringBuilder updateSql = new StringBuilder(); updateSql.append("update T_HR_STaxCalConfigDetail config set ").append("\n"); for (String key : taxItemConfigMap.keySet()) { updateSql.append("config.").append(taxItemConfigMap.get(key)) .append(" = init.").append(taxItemConfigMap.get(key)).append(",").append("\n"); } updateSql.deleteCharAt(updateSql.lastIndexOf(",")); updateSql.append("from( select * from T_HR_STaxCalInitDetail where fid in( "); updateSql.append(AtsUtil.convertSetToString(initIds)).append(")) init").append("\n"); updateSql.append("where config.fpersonId = init.fpersonId").append("\n"); updateSql.append(" and config.fCmpCalTableId = init.fCmpCalTableId").append("\n"); updateSql.append(" and config.fIncomeItemId = init.fIncomeItemId").append("\n"); updateSql.append(" and config.FPERIODBEGIN = init.FPERIODBEGIN").append("\n"); updateSql.append(" and config.FPERIODEND = init.FPERIODEND").append("\n"); updateSql.append(" and config.fstate = '10'").append("\n"); updateSql.append(" and config.fid in(").append(AtsUtil.convertSetToString(configIds)).append(")").append("\n"); logger.info("更新明细表sql: " + updateSql); DbUtil.execute(ctx, updateSql.toString()); } } /** * 获取证件map * * @return */ // private static Map getCardTypeEnumMap() { // Map cardTypeEnumMap = new HashMap<>(); // List> enumList = CardTypeEnum.getEnumList(); // for (int i = 0; i < enumList.size(); i++) { // CardTypeEnum cardTypeEnum = (CardTypeEnum) enumList.get(i); // String value = cardTypeEnum.getValue(); // String alias = cardTypeEnum.getAlias(); // cardTypeEnumMap.put(alias, value); // } // return cardTypeEnumMap; // } /** * 获取所得项目 * * @param ctx * @return * @throws BOSException */ private Map getIncomeItemMap(Context ctx) throws BOSException { Map incomeItemMap = new HashMap<>(); try { TaxIncomeItemCollection taxIncomeItemCollection = TaxIncomeItemFactory.getLocalInstance(ctx).getTaxIncomeItemCollection("where state = 1"); for (int i = 0; i < taxIncomeItemCollection.size(); i++) { TaxIncomeItemInfo taxIncomeItemInfo = taxIncomeItemCollection.get(i); String taxIncomeItemId = taxIncomeItemInfo.getId().toString(); String name = taxIncomeItemInfo.getName(); incomeItemMap.put(name, taxIncomeItemId); } return incomeItemMap; } catch (BOSException e) { e.printStackTrace(); throw new BOSException("获取所得项目数据报错: " + e.getMessage()); } } /** * 获取报送人员信息 * * @param ctx * @throws BOSException */ private void getTaxPersonRecordMap(Context ctx) throws BOSException { if (taxPersonRecordMap == null) { taxPersonRecordMap = new HashMap<>(); } TaxPersonRecordCollection taxPersonRecordCollection = TaxPersonRecordFactory .getLocalInstance(ctx).getTaxPersonRecordCollection(); for (int i = 0; i < taxPersonRecordCollection.size(); i++) { TaxPersonRecordInfo taxPersonRecordInfo = taxPersonRecordCollection.get(i); String personId = taxPersonRecordInfo.getPerson().getId().toString(); String cardTypeName = taxPersonRecordInfo.getCardType().getAlias(); String cardNumber = taxPersonRecordInfo.getCardNumber(); taxPersonRecordMap.put(cardNumber + cardTypeName, personId); } } /** * 获取个税项目 * * @param ctx * @return * @throws BOSException */ private void getTaxItemMap(Context ctx) throws BOSException { if (taxItemInitMap == null) { taxItemInitMap = new HashMap<>(); } if (taxItemConfigMap == null) { taxItemConfigMap = new HashMap<>(); } //获取所有个税项目 Set initSet = new HashSet(); initSet.add("jmse");//减免税额 initSet.add("qzd");//减除费用 initSet.add("ynssde");//应纳税所得额 initSet.add("sl");//税率 initSet.add("sskcs");//速算扣除数 initSet.add("bqybtse");//应补退税额 initSet.add("bqljsre");//累计收入额 initSet.add("bqljmssr");///累计免税收入额 initSet.add("zxkchj");//累计专项扣除额 initSet.add("zxfjkchj");//累计专项(附加)扣除额 initSet.add("qtckhj");//累计其他扣除额 initSet.add("ljjmse");//累计减免税额 initSet.add("jcfy");//累计减除费用额 initSet.add("ljynssde");//累计应纳税所得额 initSet.add("ljynse");//累计应纳税额 initSet.add("ljyingkjse");//累计应扣缴税额 initSet.add("znjyzc");//累计子女教育支出 initSet.add("jxjyzc");//累计继续教育支出 initSet.add("ljxljxjyzc_ex");//累计学历继续教育支出 initSet.add("ljfxljxjyzc_ex");//累计非学历继续教育支出 initSet.add("zfzjzc");//累计住房租金支出 initSet.add("zfdklxzc");//累计房屋贷款支出 initSet.add("sylrzc");//累计赡养老人支出 initSet.add("ljzykcdjze");//累计准予扣除的捐赠额 initSet.add("grylj"); //累计个人养老金 initSet.add("zykcjze");//准予扣除的捐赠额 initSet.add("ykjse");//本月已累计扣除税额 initSet.add("yxkcsf");//允许扣除的税费 initSet.add("zycb");//展业成本 initSet.add("qzd");//月减除费用 //最终拆分明细表个税项目 Set configSet = new HashSet(); configSet.add("sre");//本期收入 configSet.add("mssd // 本期免税收入"); configSet.add("jbylaobxf");// 基本养老保险费 configSet.add("jbylbxf");// 基本医疗保险费 configSet.add("sybxf");// 失业保险费 configSet.add("zfgjj");// 住房公积金 configSet.add("znjyzc");// 累计子女教育 configSet.add("jxjyzc");// 累计继续教育 configSet.add("zfdklxzc");// 累计住房贷款利息"); configSet.add("zfzjzc");// 累计住房租金"); configSet.add("nj");// 企业(职业)年金"); configSet.add("syjkbx");// 商业健康保险"); configSet.add("syylbx");// 税延养老保险"); configSet.add("qt");// 其他"); configSet.add("zykcjze");// 准予扣除的捐赠额"); configSet.add("jmse");// 减免税额"); configSet.add("yxkcsf");// 允许扣除的税费"); configSet.add("ljsre");// 上期累计收入"); configSet.add("bqljsre");// 本期累计收入"); configSet.add("ljmssd");// 上期累计免税收入"); configSet.add("bqljmssr");// 本期累计免税收入"); configSet.add("qzd");// 减除费用"); configSet.add("jcfy");// 累计减除费用"); configSet.add("fy");// 本期费用"); configSet.add("zxkchj");// 累计专项扣除"); configSet.add("zxfjkchj");// 累计专项附加扣除合计"); configSet.add("qtckhj");// 累计其他扣除"); configSet.add("ljzykcdjze");// 累计准予扣除的捐赠 configSet.add("ljynssde");// 累计应纳税所得额 configSet.add("sl");// 税率 configSet.add("sskcs");// 速算扣除数 configSet.add("ljynse");// 累计应纳税额 configSet.add("ljjmse");// 累计减免税额 configSet.add("ljyingkjse");// 累计应扣缴税额 configSet.add("ykjse");// 累计已预缴税额 configSet.add("ybtse");// 累计应补(退)税额 configSet.add("ycxbc");// 一次性补偿 configSet.add("zycb");// 展业成本 configSet.add("bz");// 备注 configSet.add("ccyz");// 财产原值 configSet.add("jsbl");// 减按计税比例 configSet.add("ynssde");// 应纳税所得额 configSet.add("bqybtse");// 本期应补(退)税额 configSet.add("sylrzc");// 累计赡养老人 configSet.add("yyezhfzc");// 累计婴幼儿照护费用 configSet.add("grylj");// 累计个人养老金 configSet.add("ljfxljxjyzc_ex");// 累计非学历继续教育支出 configSet.add("ljxljxjyzc_ex");// 累计学历继续教育支出 configSet.add("znjyzc_ex");// 子女教育支出 configSet.add("sylrzc_ex");// 赡养老人支出 configSet.add("zfdklxzc_ex");// 住房贷款利息支出 configSet.add("zfzjzc_ex");// 住房租金支出 configSet.add("jxjyzc_ex");// 继续教育支出 configSet.add("fxljxjyzc_ex");// 非学历继续教育支出 configSet.add("yyezhzc_ex");// 婴幼儿照护支出 try { TaxItemCollection itemColl = TaxItemFactory.getLocalInstance(ctx) .getTaxItemCollection("where state = 1"); for (int i = 0; i < itemColl.size(); ++i) { TaxItemInfo info = itemColl.get(i); String number = info.getNumber(); if (initSet.contains(number)) { taxItemInitMap.put(number, "T" + info.getFieldSn()); } if (configSet.contains(number)) { taxItemConfigMap.put(number, "T" + info.getFieldSn()); } } } catch (BOSException var5) { var5.printStackTrace(); throw new BOSException("获取个税项目报错: " + var5.getMessage()); } } }