From c581c8d74db7fa03dfd4472307d7d1363653a70f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=92=B1=E6=B6=9B?= <15850646081@163.com> Date: Wed, 20 Dec 2023 17:21:46 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AF=BC=E5=87=BA=E7=94=B3=E6=8A=A5=E8=A1=A8?= =?UTF-8?q?=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bo/TaxDeclarationCommon.java | 5 +- .../enums/salarysob/IncomeCategoryEnum.java | 140 ++++- .../GetDeclareTaxResultFeedbackResponse.java | 523 ++++++++++-------- .../salary/service/TaxDeclarationService.java | 4 +- .../impl/TaxDeclarationServiceImpl.java | 15 +- .../impl/TaxDeclareRecordServiceImpl.java | 10 +- .../engine/salary/util/excel/ExcelUtil.java | 65 +++ 7 files changed, 490 insertions(+), 272 deletions(-) diff --git a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java index 88192ff3e..904e638e4 100644 --- a/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java +++ b/src/com/engine/salary/entity/taxdeclaration/bo/TaxDeclarationCommon.java @@ -19,6 +19,7 @@ import com.engine.salary.util.SalaryEntityUtil; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import dm.jdbc.util.IdGenerator; +import org.apache.commons.lang3.StringUtils; import java.lang.reflect.Field; import java.math.BigDecimal; @@ -63,8 +64,7 @@ public class TaxDeclarationCommon implements TaxDeclarationStrategy { SalarySobTaxReportRulePO salarySobTaxReportRule = taxDeclareContext.getSalarySobTaxReportRuleMap() .get(lastSalaryAcctEmployee.getSalarySobId() + "-" + taxReportColumn.getReportColumnDataIndex()); List salaryAcctResultValue = salaryAcctResultValueMap.get(lastSalaryAcctEmployee.getId()); - String defaultValue = Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue()) ? "0" : ""; - String value = defaultValue; + String value = ""; if (salarySobTaxReportRule != null && salaryAcctResultValue != null) { value = salaryAcctResultValue.stream() .filter(result -> result.getSalaryItemId().equals(salarySobTaxReportRule.getSalaryItemId())) @@ -72,6 +72,7 @@ public class TaxDeclarationCommon implements TaxDeclarationStrategy { .orElse(new SalaryAcctResultPO()) .getResultValue(); } + value = StringUtils.isNotBlank(value) ? value : Objects.equals(taxReportColumn.getDataType(), SalaryDataTypeEnum.NUMBER.getValue()) ? "0.00" : ""; valueMap.put(taxReportColumn.getReportColumnDataIndex(), value); } TaxDeclarationValuePO taxDeclarationValue = TaxDeclarationValuePO.builder() diff --git a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java index 762b3e581..71009b4e6 100644 --- a/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java +++ b/src/com/engine/salary/enums/salarysob/IncomeCategoryEnum.java @@ -1,13 +1,12 @@ package com.engine.salary.enums.salarysob; import com.engine.salary.enums.BaseEnum; +import com.engine.salary.remote.tax.response.employee.GetDeclareTaxResultFeedbackResponse; +import com.engine.salary.util.excel.ExcelUtil; import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import java.util.Objects; +import java.util.*; /** * 应税项目 @@ -20,19 +19,123 @@ import java.util.Objects; public enum IncomeCategoryEnum implements BaseEnum { // todo 多语言 - WAGES_AND_SALARIES(1, "0101", "正常工资薪金", 160487), - REMUNERATION_FOR_LABOR(4, "0400", "一般劳务报酬所得", 160488), - ONETIME_ANNUAL_BONUS(2, "0103", "全年一次性奖金收入", 160489), - COMPENSATION_FOR_RETIRE(107, "0107", "内退一次性补偿金", 181936), - COMPENSATION_FOR_DISMISS(108, "0108", "解除劳动合同一次性补偿金", 181937), - INCOME_FOR_INDIVIDUAL_EQUITY_INCENTIVE(109, "0109", "个人股权激励收入", 181938), - ANNUITY_RECEIPT(110, "0110", "年金领取", 181939), - INCOME_FOR_INSURANCE_SALESMAN(402, "0402", "保险营销员佣金收入", 181940), - INCOME_FOR_SECURITIES_BROKER(403, "0403", "证券经纪人佣金收入", 181942), - REMUNERATION_FOR_OTHER_CONTINUOUS_LABOR(489, "0489", "其他连续劳务报酬所得", 181943), - REMUNERATION_FOR_OTHER_LABOR(499, "0499", "其他非连续劳务报酬所得", 175330), - REMUNERATION_FOR_AUTHOR(500, "0500", "稿酬所得", 181944), - ROYALTIES(600, "0600", "特许权使用费所得", 181945), + WAGES_AND_SALARIES(1, "0101", "正常工资薪金", 160487) { + @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", "一般劳务报酬所得", 160488) { + @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", "全年一次性奖金收入", 160489) { + @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", "内退一次性补偿金", 181936) { + @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", "解除劳动合同一次性补偿金", 181937) { + @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", "个人股权激励收入", 181938) { + @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", "年金领取", 181939) { + @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", "保险营销员佣金收入", 181940) { + @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", "证券经纪人佣金收入", 181942) { + @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", "其他连续劳务报酬所得", 181943) { + @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", "其他非连续劳务报酬所得", 175330) { + @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", "稿酬所得", 181944) { + @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", "特许权使用费所得", 181945) { + @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; + } + }, ; @@ -51,6 +154,8 @@ public enum IncomeCategoryEnum implements BaseEnum { this.labelId = labelId; } + public abstract Map>> parseGetDeclareTaxResultFeedbackResponse(Map>> result, GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse); + @Override public Integer getValue() { return value; @@ -79,6 +184,7 @@ public enum IncomeCategoryEnum implements BaseEnum { } return null; } + public static List parseByValue(Collection values) { if (CollectionUtils.isEmpty(values)) { return Collections.emptyList(); diff --git a/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java b/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java index 47f9c42fe..1313ca083 100644 --- a/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java +++ b/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java @@ -58,10 +58,11 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { // * 限售股所得 必填:是 见限售股所得计算结果 // */ // private 对象 xsgsd; -// /** -// * 人员申报失败列表 必填:是 参考人员代报结果对象 -// */ -// private 数组 rysbsblb; + + /** + * 人员申报失败列表 必填:是 参考人员代报结果对象 + */ + private List rysbsblb; @Data public static class zhsd { @@ -73,66 +74,66 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { * 正常工资薪金算税结果对象 参考综合所得算税结果对象 */ private zcgzxj zcgzxj; -// /** -// * 全年一次性奖金收入算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 qnycxjjsslb; -// /** -// * 稿酬所得算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 gcsdlb; -// /** -// * 一般劳务报酬算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 lwbclb; -// /** -// * 解除劳动合同一次性补偿金列表 参考综合所得算税结果对象 -// */ -// private 对象 jcldhtycxbcjlb; -// /** -// * 保险营销员薪金算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 bxyxy; -// /** -// * 证券经纪人薪金算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 zqjjr; -// /** -// * 特许权算税结果对象 参考综合所得算税结果对象 -// */ -// private 对象 txq; -// /** -// * 个人股权激励结果对象 参考综合所得算税结果对象 -// */ -// private 对象 grgqjl; -// /** -// * 企业年金结果对象 参考综合所得算税结果对象 -// */ -// private 对象 qynj; -// /** -// * 内退一次性补偿金 参考综合所得算税结果对象 -// */ -// private 对象 ntycxbcjlb; -// /** -// * 其他连续劳务报酬 参考综合所得算税结果对象 -// */ -// private 对象 qtlxlwbc; -// /** -// * 其他非连续劳务报酬 参考综合所得算税结果对象 -// */ -// private 对象 qtflxlwbc; -// /** -// * 提前退休一次性补贴 参考综合所得算税结果对象 -// */ -// private 对象 tqtxycxbt; -// /** -// * 央企负责人绩效薪金延期兑现收入和任期奖励 参考综合所得算税结果对象 -// */ -// private 对象 yqfzrsrhjl; -// /** -// * 法律援助劳务报酬 参考综合所得算税结果对象 -// */ -// private 对象 flyzlwbclb; + /** + * 全年一次性奖金收入算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj qnycxjjsslb; + /** + * 稿酬所得算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj gcsdlb; + /** + * 一般劳务报酬算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj lwbclb; + /** + * 解除劳动合同一次性补偿金列表 参考综合所得算税结果对象 + */ + private zcgzxj jcldhtycxbcjlb; + /** + * 保险营销员薪金算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj bxyxy; + /** + * 证券经纪人薪金算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj zqjjr; + /** + * 特许权算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj txq; + /** + * 个人股权激励结果对象 参考综合所得算税结果对象 + */ + private zcgzxj grgqjl; + /** + * 企业年金结果对象 参考综合所得算税结果对象 + */ + private zcgzxj qynj; + /** + * 内退一次性补偿金 参考综合所得算税结果对象 + */ + private zcgzxj ntycxbcjlb; + /** + * 其他连续劳务报酬 参考综合所得算税结果对象 + */ + private zcgzxj qtlxlwbc; + /** + * 其他非连续劳务报酬 参考综合所得算税结果对象 + */ + private zcgzxj qtflxlwbc; + /** + * 提前退休一次性补贴 参考综合所得算税结果对象 + */ + private zcgzxj tqtxycxbt; + /** + * 央企负责人绩效薪金延期兑现收入和任期奖励 参考综合所得算税结果对象 + */ + private zcgzxj yqfzrsrhjl; + /** + * 法律援助劳务报酬 参考综合所得算税结果对象 + */ + private zcgzxj flyzlwbclb; /** @@ -234,7 +235,6 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { /** * 是否明细申报 必填:否 是或者否 */ - @SalaryTableColumn(text = "是否明细申报", width = "10%", column = "sfmxsb") private String sfmxsb; /** * 姓名 必填:null 如果是汇总申报返回空 @@ -264,133 +264,143 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { /** * 当期收入额 必填:是 不填写默认为0 */ - @SalaryTableColumn(text = "当期收入额", width = "10%", column = "sre") + @SalaryTableColumn(text = "本期收入", width = "10%", column = "sre") private BigDecimal sre; /** * 当期免税收入 必填:null */ - @SalaryTableColumn(text = "当期免税收入", width = "10%", column = "mssd") + @SalaryTableColumn(text = "本期免税收入", width = "10%", column = "mssd") private BigDecimal mssd; /** * 基本养老保险 必填:null */ - @SalaryTableColumn(text = "基本养老保险", width = "10%", column = "jbylaobxf") + @SalaryTableColumn(text = "本期基本养老保险费", width = "10%", column = "jbylaobxf") private BigDecimal jbylaobxf; /** * 基本医疗保险 必填:null */ - @SalaryTableColumn(text = "基本医疗保险", width = "10%", column = "jbylbxf") + @SalaryTableColumn(text = "本期基本医疗保险费", width = "10%", column = "jbylbxf") private BigDecimal jbylbxf; /** * 失业保险 必填:null */ - @SalaryTableColumn(text = "失业保险", width = "10%", column = "sybxf") + @SalaryTableColumn(text = "本期失业保险费", width = "10%", column = "sybxf") private BigDecimal sybxf; /** * 住房公积金 必填:null */ - @SalaryTableColumn(text = "住房公积金", width = "10%", column = "zfgjj") + @SalaryTableColumn(text = "本期住房公积金", width = "10%", column = "zfgjj") private BigDecimal zfgjj; - /** - * 子女教育支出 必填:null - */ - @SalaryTableColumn(text = "子女教育支出", width = "10%", column = "znjyzc") - private BigDecimal znjyzc; - /** - * 赡养老人支出 必填:null - */ - @SalaryTableColumn(text = "赡养老人支出", width = "10%", column = "sylrzc") - private BigDecimal sylrzc; - /** - * 住房贷款利息支出 必填:null - */ - @SalaryTableColumn(text = "住房贷款利息支出", width = "10%", column = "zfdklxzc") - private BigDecimal zfdklxzc; - /** - * 住房租金支出 必填:null - */ - @SalaryTableColumn(text = "住房租金支出", width = "10%", column = "zfzjzc") - private BigDecimal zfzjzc; - /** - * 继续教育支出 必填:null - */ - @SalaryTableColumn(text = "继续教育支出", width = "10%", column = "jxjyzc") - private BigDecimal jxjyzc; - /** - * 非学历继续教育支出 必填:null - */ - @SalaryTableColumn(text = "非学历继续教育支出", width = "10%", column = "fxljxjyzc") - private BigDecimal fxljxjyzc; - /** - * 3岁以下婴幼儿照护支出 必填:null - */ - @SalaryTableColumn(text = "3岁以下婴幼儿照护支出", width = "10%", column = "yyezhzc") - private BigDecimal yyezhzc; + /** * 年金 必填:null */ - @SalaryTableColumn(text = "年金", width = "10%", column = "nj") + @SalaryTableColumn(text = "本期企业(职业)年金", width = "10%", column = "nj") private BigDecimal nj; + /** * 商业健康保险 必填:null */ - @SalaryTableColumn(text = "商业健康保险", width = "10%", column = "syjkbx") + @SalaryTableColumn(text = "本期商业健康保险费", width = "10%", column = "syjkbx") private BigDecimal syjkbx; /** * 税延养老保险 必填:null */ - @SalaryTableColumn(text = "税延养老保险", width = "10%", column = "syylbx") + @SalaryTableColumn(text = "本期税延养老保险费", width = "10%", column = "syylbx") private BigDecimal syylbx; /** * 其他 必填:null 按法律规定可以在税前扣除的项目 */ - @SalaryTableColumn(text = "其他", width = "10%", column = "qt") + @SalaryTableColumn(text = "本期其他扣除(其他)", width = "10%", column = "qt") private BigDecimal qt; + /** - * 准予扣除的捐赠额 必填:null + * 累计收入额 必填:null */ - @SalaryTableColumn(text = "准予扣除的捐赠额", width = "10%", column = "zykcjze") - private BigDecimal zykcjze; + @SalaryTableColumn(text = "累计收入额", width = "10%", column = "ljsre") + private BigDecimal ljsre; /** - * 减免税额 必填:null + * 累计免税收入额 必填:null */ - @SalaryTableColumn(text = "减免税额", width = "10%", column = "jmse") - private BigDecimal jmse; + @SalaryTableColumn(text = "累计免税收入", width = "10%", column = "ljmssd") + private BigDecimal ljmssd; + /** - * 备注 必填:null + * 累计减除费用额 必填:null 正常工资薪金累计减除费用 对应保险营销员、证券经纪人累计费用 */ - @SalaryTableColumn(text = "备注", width = "10%", column = "bz") - private String bz; + @SalaryTableColumn(text = "累计减除费用", width = "10%", column = "ljjcfye") + private BigDecimal ljjcfye; + /** - * 减除费用 必填:null 正常工资薪金的减除费用。 对应保险营销员、证券经纪人的费用 + * 累计专项扣除额 必填:null 三险一金合计 */ - @SalaryTableColumn(text = "减除费用", width = "10%", column = "jcfy") - private BigDecimal jcfy; + @SalaryTableColumn(text = "累计专项扣除", width = "10%", column = "ljzxkce") + private BigDecimal ljzxkce; + /** - * 其他扣除合计 必填:null + * 累计子女教育支出 必填:null */ - @SalaryTableColumn(text = "其他扣除合计", width = "10%", column = "qtckhj") - private BigDecimal qtckhj; + @SalaryTableColumn(text = "累计子女教育支出扣除", width = "10%", column = "ljznjyzc") + private BigDecimal ljznjyzc; /** - * 应纳税所得额 必填:null 正常工资薪金返回Null + * 累计继续教育支出 必填:null */ - @SalaryTableColumn(text = "应纳税所得额", width = "10%", column = "ynssde") - private BigDecimal ynssde; + @SalaryTableColumn(text = "累计继续教育支出扣除", width = "10%", column = "ljjxjyzc") + private BigDecimal ljjxjyzc; /** - * 应纳税额 必填:null 正常工资薪金返回Null + * 累计非学历继续教育支持 必填:null */ - @SalaryTableColumn(text = "应纳税额", width = "10%", column = "ynse") - private BigDecimal ynse; + private BigDecimal ljfxljxjyzc; /** - * 已缴税额 必填:null 正常工资薪金返回Null + * 累计学历继续教育支持 必填:null */ - @SalaryTableColumn(text = "已缴税额", width = "10%", column = "ykjse") - private BigDecimal ykjse; + private BigDecimal ljxljxjyzc; /** - * 应扣缴税额 必填:null 正常工资薪金返回Null + * 累计住房租金支出 必填:null */ - @SalaryTableColumn(text = "应扣缴税额", width = "10%", column = "yingkjse") - private BigDecimal yingkjse; + @SalaryTableColumn(text = "累计住房租金支出扣除", width = "10%", column = "ljzfzjzc") + private BigDecimal ljzfzjzc; + /** + * 累计房屋贷款支出 必填:null + */ + @SalaryTableColumn(text = "累计房屋贷款支出扣除", width = "10%", column = "ljzfdklxzc") + private BigDecimal ljzfdklxzc; + /** + * 累计赡养老人支出 必填:null + */ + @SalaryTableColumn(text = "累计赡养老人支出扣除", width = "10%", column = "ljsylrzc") + private BigDecimal ljsylrzc; + /** + * 累计3岁以下婴幼儿照护支出 必填:null + */ + @SalaryTableColumn(text = "累计3岁以下婴幼儿照护", width = "10%", column = "ljyyezhzc") + private BigDecimal ljyyezhzc; + + + /** + * 累计个人养老金 必填:null + */ + @SalaryTableColumn(text = "累计个人养老金", width = "10%", column = "ljgrylj") + private BigDecimal ljgrylj; + + /** + * 累计其他扣除额 必填:null + */ + @SalaryTableColumn(text = "累计其他扣除", width = "10%", column = "ljqtkce") + private BigDecimal ljqtkce; + + /** + * 累计准予扣除的捐赠额 必填:null + */ + @SalaryTableColumn(text = "累计准予扣除的捐赠", width = "10%", column = "ljzykcjze") + private BigDecimal ljzykcjze; + + /** + * 累计应纳税所得额 必填:null + */ + @SalaryTableColumn(text = "累计应纳税所得额", width = "10%", column = "ljynssde") + private BigDecimal ljynssde; + /** * 税率 必填:null */ @@ -401,81 +411,19 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { */ @SalaryTableColumn(text = "速算扣除数", width = "10%", column = "sskcs") private BigDecimal sskcs; - /** - * 所得项目名称 必填:是 正常工资薪金;全年一次性奖金收入;稿酬所得;劳务报酬 - */ - @SalaryTableColumn(text = "所得项目名称", width = "10%", column = "sdxm") - private String sdxm; - /** - * 应补退税额 必填:null 应补退税额=累计应扣缴税额-累计已缴税额 - */ - @SalaryTableColumn(text = "应补退税额", width = "10%", column = "ybtse") - private BigDecimal ybtse; - /** - * 累计收入额 必填:null - */ - @SalaryTableColumn(text = "累计收入额", width = "10%", column = "ljsre") - private BigDecimal ljsre; - /** - * 累计免税收入额 必填:null - */ - @SalaryTableColumn(text = "累计免税收入额", width = "10%", column = "ljmssd") - private BigDecimal ljmssd; - /** - * 累计专项扣除额 必填:null 三险一金合计 - */ - @SalaryTableColumn(text = "累计专项扣除额", width = "10%", column = "ljzxkce") - private BigDecimal ljzxkce; - /** - * 累计专项附加扣除额 必填:null 专项附加合计 - */ - @SalaryTableColumn(text = "累计专项附加扣除额", width = "10%", column = "ljzxfjkce") - private BigDecimal ljzxfjkce; - /** - * 累计其他扣除额 必填:null - */ - @SalaryTableColumn(text = "累计其他扣除额", width = "10%", column = "ljqtkce") - private BigDecimal ljqtkce; - /** - * 累计减免税额 必填:null - */ - @SalaryTableColumn(text = "累计减免税额", width = "10%", column = "ljjmse") - private BigDecimal ljjmse; - /** - * 累计减除费用额 必填:null 正常工资薪金累计减除费用 对应保险营销员、证券经纪人累计费用 - */ - @SalaryTableColumn(text = "累计减除费用额", width = "10%", column = "ljjcfye") - private BigDecimal ljjcfye; - /** - * 累计月减除费用 必填:null 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 - */ - @SalaryTableColumn(text = "累计月减除费用", width = "10%", column = "ljyjcfy") - private BigDecimal ljyjcfy; - /** - * 允许扣除税费 必填:null 保险营销员、证券经纪人 - */ - @SalaryTableColumn(text = "允许扣除税费", width = "10%", column = "yxkcsf") - private BigDecimal yxkcsf; - /** - * 展业成本 必填:null 保险营销员、证券经纪人 - */ - @SalaryTableColumn(text = "展业成本", width = "10%", column = "zycb") - private BigDecimal zycb; - /** - * 月减除费用 必填:null 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 - */ - @SalaryTableColumn(text = "月减除费用", width = "10%", column = "yjcfy") - private BigDecimal yjcfy; - /** - * 累计应纳税所得额 必填:null - */ - @SalaryTableColumn(text = "累计应纳税所得额", width = "10%", column = "ljynssde") - private BigDecimal ljynssde; + /** * 累计应纳税额 必填:null */ @SalaryTableColumn(text = "累计应纳税额", width = "10%", column = "ljynse") private BigDecimal ljynse; + + /** + * 累计减免税额 必填:null + */ + @SalaryTableColumn(text = "累计减免税额", width = "10%", column = "ljjmse") + private BigDecimal ljjmse; + /** * 累计应扣缴税额 必填:null 累计应扣缴税额 = 累计应纳税额 - 累计减免税额 */ @@ -487,59 +435,114 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { @SalaryTableColumn(text = "累计已缴税额", width = "10%", column = "ljykjse") private BigDecimal ljykjse; /** - * 累计子女教育支出 必填:null + * 已缴税额 必填:null 正常工资薪金返回Null */ - @SalaryTableColumn(text = "累计子女教育支出", width = "10%", column = "ljznjyzc") - private BigDecimal ljznjyzc; + @SalaryTableColumn(text = "已缴税额", width = "10%", column = "ykjse") + private BigDecimal ykjse; + /** - * 累计继续教育支出 必填:null + * 累计专项附加扣除额 必填:null 专项附加合计 */ - @SalaryTableColumn(text = "累计继续教育支出", width = "10%", column = "ljjxjyzc") - private BigDecimal ljjxjyzc; + @SalaryTableColumn(text = "累计专项附加扣除额", width = "10%", column = "ljzxfjkce") + private BigDecimal ljzxfjkce; + /** - * 累计非学历继续教育支持 必填:null + * 应补退税额 必填:null 应补退税额=累计应扣缴税额-累计已缴税额 */ - @SalaryTableColumn(text = "累计非学历继续教育支持", width = "10%", column = "ljfxljxjyzc") - private BigDecimal ljfxljxjyzc; + @SalaryTableColumn(text = "应补退税额", width = "10%", column = "ybtse") + private BigDecimal ybtse; + /** - * 累计学历继续教育支持 必填:null + * 备注 必填:null */ - @SalaryTableColumn(text = "累计学历继续教育支持", width = "10%", column = "ljxljxjyzc") - private BigDecimal ljxljxjyzc; + @SalaryTableColumn(text = "备注", width = "10%", column = "bz") + private String bz; + /** - * 累计住房租金支出 必填:null + * 子女教育支出 必填:null */ - @SalaryTableColumn(text = "累计住房租金支出", width = "10%", column = "ljzfzjzc") - private BigDecimal ljzfzjzc; + private BigDecimal znjyzc; /** - * 累计房屋贷款支出 必填:null + * 赡养老人支出 必填:null */ - @SalaryTableColumn(text = "累计房屋贷款支出", width = "10%", column = "ljzfdklxzc") - private BigDecimal ljzfdklxzc; + private BigDecimal sylrzc; /** - * 累计赡养老人支出 必填:null + * 住房贷款利息支出 必填:null */ - @SalaryTableColumn(text = "累计赡养老人支出", width = "10%", column = "ljsylrzc") - private BigDecimal ljsylrzc; + private BigDecimal zfdklxzc; /** - * 累计3岁以下婴幼儿照护支出 必填:null + * 住房租金支出 必填:null */ - @SalaryTableColumn(text = "累计3岁以下婴幼儿照护支出", width = "10%", column = "ljyyezhzc") - private BigDecimal ljyyezhzc; + private BigDecimal zfzjzc; /** - * 累计准予扣除的捐赠额 必填:null + * 继续教育支出 必填:null */ - @SalaryTableColumn(text = "累计准予扣除的捐赠额", width = "10%", column = "ljzykcjze") - private BigDecimal ljzykcjze; + private BigDecimal jxjyzc; /** - * 累计个人养老金 必填:null + * 非学历继续教育支出 必填:null */ - @SalaryTableColumn(text = "累计个人养老金", width = "10%", column = "ljgrylj") - private BigDecimal ljgrylj; + private BigDecimal fxljxjyzc; + /** + * 3岁以下婴幼儿照护支出 必填:null + */ + private BigDecimal yyezhzc; + + /** + * 准予扣除的捐赠额 必填:null + */ + private BigDecimal zykcjze; + /** + * 减免税额 必填:null + */ + private BigDecimal jmse; + + /** + * 减除费用 必填:null 正常工资薪金的减除费用。 对应保险营销员、证券经纪人的费用 + */ + private BigDecimal jcfy; + /** + * 其他扣除合计 必填:null + */ + private BigDecimal qtckhj; + /** + * 应纳税所得额 必填:null 正常工资薪金返回Null + */ + private BigDecimal ynssde; + /** + * 应纳税额 必填:null 正常工资薪金返回Null + */ + private BigDecimal ynse; + + /** + * 应扣缴税额 必填:null 正常工资薪金返回Null + */ + private BigDecimal yingkjse; + + /** + * 所得项目名称 必填:是 正常工资薪金;全年一次性奖金收入;稿酬所得;劳务报酬 + */ + private String sdxm; + + /** + * 累计月减除费用 必填:null 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 + */ + private BigDecimal ljyjcfy; + /** + * 允许扣除税费 必填:null 保险营销员、证券经纪人 + */ + private BigDecimal yxkcsf; + /** + * 展业成本 必填:null 保险营销员、证券经纪人 + */ + private BigDecimal zycb; + /** + * 月减除费用 必填:null 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 + */ + private BigDecimal yjcfy; + /** * 累计个人养老金校验码 必填:null */ - @SalaryTableColumn(text = "累计个人养老金校验码", width = "10%", column = "ljgryljjym") private String ljgryljjym; /** * 企业上月是否已申报 必填:null 仅在两个月算税场景时使用,当前月分为N月: @@ -547,34 +550,28 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { * 1表示N-1月(上月)已申报 * 2表示N-2月(上上个月)未申报 */ - @SalaryTableColumn(text = "企业上月是否已申报", width = "10%", column = "qysysfysb") private String qysysfysb; /** * 员工在税局累计已扣缴的税额 必填:null 当前月分为N,如果N-1(上月)已申报,则返回N-1月员工在税局累计已扣缴的税额; * 如果N-1月未申报,则返回N-2月工在税局累计已扣缴的税额; */ - @SalaryTableColumn(text = "员工在税局累计已扣缴的税额", width = "10%", column = "ygzsjljykjse") private BigDecimal ygzsjljykjse; /** * 本月已累计扣除税额 必填:null 针对一月多次算税的场景字段 */ - @SalaryTableColumn(text = "本月已累计扣除税额", width = "10%", column = "byyljkjse") private BigDecimal byyljkjse; /** * 本次应扣缴税额 必填:null 针对一月多次算税的场景字段,本次应扣缴税额=本月应扣缴税额-本月已累计税额 */ - @SalaryTableColumn(text = "本次应扣缴税额", width = "10%", column = "bcykjse") private BigDecimal bcykjse; /** * 分摊年度数 必填:null */ - @SalaryTableColumn(text = "分摊年度数", width = "10%", column = "ftnds") private Integer ftnds; /** * 年减除费用 必填:null 默认为60000 */ - @SalaryTableColumn(text = "年减除费用", width = "10%", column = "njcfy") private BigDecimal njcfy; } @@ -622,6 +619,44 @@ public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { } + /** + * 4.4.1.3.1.1人员代报结果对象 + */ + @Data + public static class rydbjgdx { + /** + * 人员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/TaxDeclarationService.java b/src/com/engine/salary/service/TaxDeclarationService.java index 2731904a5..cb12aae30 100644 --- a/src/com/engine/salary/service/TaxDeclarationService.java +++ b/src/com/engine/salary/service/TaxDeclarationService.java @@ -23,6 +23,8 @@ public interface TaxDeclarationService { */ List listByTaxCycleAndTaxAgentIds(YearMonth salaryMonth, Collection taxAgentIds); + List listByTaxDeclareRecordId(Long taxDeclareRecordId); + PageInfo listPageByParam(TaxDeclarationListQueryParam queryParam); List countByTaxDeclarationId(Collection taxAgentIds); @@ -33,7 +35,6 @@ public interface TaxDeclarationService { /** * 删除个税申报表 - * */ void delete(SalaryAcctRecordPO salaryAcctRecordPO); @@ -48,6 +49,7 @@ public interface TaxDeclarationService { /** * 撤回个税申报单 + * * @param taxDeclarationId */ void withDrawTaxDeclaration(Long taxDeclarationId); diff --git a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java index 987eacf58..3c8391812 100644 --- a/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclarationServiceImpl.java @@ -94,6 +94,15 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration return taxDeclarationPOS; } + @Override + public List listByTaxDeclareRecordId(Long taxDeclareRecordId) { + if (Objects.isNull(taxDeclareRecordId)) { + throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(84026, "参数错误")); + } + TaxDeclarationPO po = TaxDeclarationPO.builder().taxDeclareRecordId(taxDeclareRecordId).build(); + return getTaxDeclarationMapper().listSome(po); + } + @Override public PageInfo listPageByParam(TaxDeclarationListQueryParam queryParam) { long currentEmployeeId = user.getUID(); @@ -205,7 +214,7 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration // 无薪资核算结果,不允许生成个税申报表 if (CollectionUtils.isEmpty(salaryAcctResultPOS)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(110093, "{0}无可申报数据") - .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); } Set salaryAcctRecordIds = SalaryEntityUtil.properties(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryAcctRecordId); @@ -214,14 +223,14 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration boolean notArchived = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> Objects.equals(salaryAcctRecordPO.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())); if (notArchived) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98875, "{0}有未归档数据,请全部归档后再申报") - .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); } // 如果当前薪资所属月下存在不同的税款所属期,属于异常业务场景,不允许生成个税申报表 Date taxCycle = salaryAcctRecordPOS.get(0).getTaxCycle(); boolean differentTaxCycle = salaryAcctRecordPOS.stream().anyMatch(salaryAcctRecordPO -> salaryAcctRecordPO.getTaxCycle().compareTo(taxCycle) != 0); if (differentTaxCycle) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98876, "{0}存在不同的税款所属期,无法正常生成个税申报表,请调整账套设置,重新核算后再生成个税申报表") - .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); + .replace("{0}", SalaryDateUtil.getFormatYearMonth(saveParam.getSalaryMonth()))); } // 查询薪资账套 Set salarySobIds = SalaryEntityUtil.properties(salaryAcctRecordPOS, SalaryAcctRecordPO::getSalarySobId); diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 23606e23e..f84035722 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -35,6 +35,7 @@ import com.engine.salary.entity.taxdeclaration.response.DeclareTaxResponse; import com.engine.salary.entity.taxdeclaration.response.UpdateDeclareResponse; import com.engine.salary.enums.employeedeclare.DeclareStatusEnum; import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum; +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.*; @@ -942,12 +943,11 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe DeclareClient declareClient = new DeclareClient(taxDeclareRecord.getTaxAgentId()); GetDeclareTaxResultFeedbackResponse declareTaxResultFeedbackResponse = declareClient.getDeclareTaxResultFeedback(StringUtils.isEmpty(requestId) ? taxDeclareRecord.getRequestId() : requestId); - List sscglb = declareTaxResultFeedbackResponse.getBody().getZhsd().getZcgzxj().getSscglb(); - // 需要导出的数据 - List> excelSheetData = ExcelUtil.getExcelSheetData(GetDeclareTaxResultFeedbackResponse.Body.zhsd.zcgzxj.zhsdscjgbw.class, sscglb); - - return ExcelUtil.genWorkbookV2(excelSheetData, "申报内置算税结果"); + 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 ExcelUtil.genWorkbookV2(map); } diff --git a/src/com/engine/salary/util/excel/ExcelUtil.java b/src/com/engine/salary/util/excel/ExcelUtil.java index b9a0c5d2c..f0ac59837 100644 --- a/src/com/engine/salary/util/excel/ExcelUtil.java +++ b/src/com/engine/salary/util/excel/ExcelUtil.java @@ -272,6 +272,71 @@ public class ExcelUtil { return workbook; } + public static XSSFWorkbook genWorkbookV2(Map>> map) { + XSSFWorkbook workbook = new XSSFWorkbook(); + + map.entrySet().forEach(en->{ + + String sheetName = en.getKey(); + List> rowList = en.getValue(); + // 设置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); + + 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 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; + } + public static XSSFWorkbook genWorkbook(ExcelSheetData excelSheetData) { List> list = new ArrayList<>(); list.add(excelSheetData.getHeaders());