diff --git a/src/com/engine/salary/remote/tax/client/DeclareClient.java b/src/com/engine/salary/remote/tax/client/DeclareClient.java index bcd390856..bd7a500da 100644 --- a/src/com/engine/salary/remote/tax/client/DeclareClient.java +++ b/src/com/engine/salary/remote/tax/client/DeclareClient.java @@ -1,7 +1,10 @@ package com.engine.salary.remote.tax.client; +import com.engine.salary.remote.tax.response.employee.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; @@ -15,6 +18,7 @@ import java.util.Map; * @author qiantao * @version 1.0 **/ +@Slf4j public class DeclareClient extends TaxBaseClient{ public DeclareClient(Long taxAgentId) { super(taxAgentId); @@ -25,7 +29,7 @@ public class DeclareClient extends TaxBaseClient{ * @param requestId· * @return */ - public Object getDeclareTaxResultFeedback(String requestId){ + public GetDeclareTaxResultFeedbackResponse getDeclareTaxResultFeedback(String requestId){ // 供应商信息 String url = super.apiConfig.getHost() + "/gateway/iit/report/getDeclareTaxResultFeedback"; Map params = new HashMap<>(1); @@ -33,9 +37,8 @@ public class DeclareClient extends TaxBaseClient{ Map header = SingnatureData.initHeader(Collections.emptyMap(), apiConfig.getAppKey(), apiConfig.getAppSecret()); String res = HttpUtil.getRequest(url, header, params); - - - return res; + log.info("getDeclareTaxResultFeedback res --- {}", res); + return JsonUtil.parseObject(res, GetDeclareTaxResultFeedbackResponse.class); } 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 45e773ab0..47f9c42fe 100644 --- a/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java +++ b/src/com/engine/salary/remote/tax/response/employee/GetDeclareTaxResultFeedbackResponse.java @@ -1,37 +1,51 @@ package com.engine.salary.remote.tax.response.employee; +import com.engine.salary.annotation.SalaryTableColumn; +import com.engine.salary.entity.taxpayment.response.BaseResponse; +import lombok.Data; +import lombok.EqualsAndHashCode; + import java.math.BigDecimal; import java.util.List; -public class GetDeclareTaxResultFeedbackResponse { +@Data +@EqualsAndHashCode(callSuper = true) +public class GetDeclareTaxResultFeedbackResponse extends BaseResponse { /** - * 企业名称 必填:是 + * 返回数据 */ - private String qymc; - /** - * 税号 必填:是 - */ - private String nsrsbh; - /** - * 地区编号 必填:是 6位行政区划代码,精确到市级,例如:440100,参考省市区编码 - */ - private String areaid; - /** - * 部门编号 必填:是 - */ - private String bmbh; - /** - * 部门名称 必填:否 - */ - private String bmmc; - /** - * 算税月份 必填:是 - */ - private String skssq; - /** - * 综合所得 必填:是 见综合所得计算结果 - */ - private zhsd zhsd; + 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; // /** // * 分类所得 必填:是 见分类所得计算结果 // */ @@ -49,16 +63,16 @@ public class GetDeclareTaxResultFeedbackResponse { // */ // private 数组 rysbsblb; - - public class zhsd { - /** - * 人员代代报失败列表 参考人员代报结果对象 - */ - private List rysbsblb; - /** - * 正常工资薪金算税结果对象 参考综合所得算税结果对象 - */ - private zcgzxj zcgzxj; + @Data + public static class zhsd { + /** + * 人员代代报失败列表 参考人员代报结果对象 + */ + private List rysbsblb; + /** + * 正常工资薪金算税结果对象 参考综合所得算税结果对象 + */ + private zcgzxj zcgzxj; // /** // * 全年一次性奖金收入算税结果对象 参考综合所得算税结果对象 // */ @@ -121,393 +135,17 @@ public class GetDeclareTaxResultFeedbackResponse { // private 对象 flyzlwbclb; - /** - * 人员代报结果对象 - */ - public class rydbjgdx { /** - * 姓名 + * 人员代报结果对象 */ - 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; - } - - - /** - * 综合所得算税结果对象 - */ - public class zcgzxj { - /** - * 综合算税成功列表 参考综合所得输出结果报文 - */ - 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; - /** - * 专项代报状态 - */ - private String clzt; - /** - * 专项代报结果原因 - */ - private String cljgms; - - - /** - * 综合所得输出结果报文 - */ - public class zhsdscjgbw { + @Data + public static class rydbjgdx { /** - * 是否明细申报 必填:否 是或者否 - */ - private String sfmxsb; - /** - * 姓名 必填:null 如果是汇总申报返回空 + * 姓名 */ private String xm; /** - * 证件类型 必填:null 见证件类型字典 - */ - private String zzlx; - /** - * 证件号码 必填:null 如果是汇总申报返回空 - */ - private String zzhm; - /** - * 任职受雇日期 必填:是 格式YYYY-MM-DD - */ - private String rzsgrq; - /** - * 离职日期 必填:否 格式YYYY-MM-DD - */ - private String lzrq; - /** - * 当期收入额 必填:是 不填写默认为0 - */ - private BigDecimal sre; - /** - * 当期免税收入 必填:null - */ - private BigDecimal mssd; - /** - * 基本养老保险 必填:null - */ - private BigDecimal jbylaobxf; - /** - * 基本医疗保险 必填:null - */ - private BigDecimal jbylbxf; - /** - * 失业保险 必填:null - */ - private BigDecimal sybxf; - /** - * 住房公积金 必填:null - */ - private BigDecimal zfgjj; - /** - * 子女教育支出 必填:null - */ - private BigDecimal znjyzc; - /** - * 赡养老人支出 必填:null - */ - private BigDecimal sylrzc; - /** - * 住房贷款利息支出 必填:null - */ - private BigDecimal zfdklxzc; - /** - * 住房租金支出 必填:null - */ - private BigDecimal zfzjzc; - /** - * 继续教育支出 必填:null - */ - private BigDecimal jxjyzc; - /** - * 非学历继续教育支出 必填:null - */ - private BigDecimal fxljxjyzc; - /** - * 3岁以下婴幼儿照护支出 必填:null - */ - private BigDecimal yyezhzc; - /** - * 年金 必填:null - */ - private BigDecimal nj; - /** - * 商业健康保险 必填:null - */ - private BigDecimal syjkbx; - /** - * 税延养老保险 必填:null - */ - private BigDecimal syylbx; - /** - * 其他 必填:null 按法律规定可以在税前扣除的项目 - */ - private BigDecimal qt; - /** - * 准予扣除的捐赠额 必填:null - */ - private BigDecimal zykcjze; - /** - * 减免税额 必填:null - */ - private BigDecimal jmse; - /** - * 备注 必填:null - */ - private String bz; - /** - * 减除费用 必填:null 正常工资薪金的减除费用。 对应保险营销员、证券经纪人的费用 - */ - private BigDecimal jcfy; - /** - * 其他扣除合计 必填:null - */ - private BigDecimal qtckhj; - /** - * 应纳税所得额 必填:null 正常工资薪金返回Null - */ - private BigDecimal ynssde; - /** - * 应纳税额 必填:null 正常工资薪金返回Null - */ - private BigDecimal ynse; - /** - * 已缴税额 必填:null 正常工资薪金返回Null - */ - private BigDecimal ykjse; - /** - * 应扣缴税额 必填:null 正常工资薪金返回Null - */ - private BigDecimal yingkjse; - /** - * 税率 必填:null - */ - private BigDecimal sl; - /** - * 速算扣除数 必填:null - */ - private BigDecimal sskcs; - /** - * 所得项目名称 必填:是 正常工资薪金;全年一次性奖金收入;稿酬所得;劳务报酬 - */ - private String sdxm; - /** - * 应补退税额 必填:null 应补退税额=累计应扣缴税额-累计已缴税额 - */ - private BigDecimal ybtse; - /** - * 累计收入额 必填:null - */ - private BigDecimal ljsre; - /** - * 累计免税收入额 必填:null - */ - private BigDecimal ljmssd; - /** - * 累计专项扣除额 必填:null 三险一金合计 - */ - private BigDecimal ljzxkce; - /** - * 累计专项附加扣除额 必填:null 专项附加合计 - */ - private BigDecimal ljzxfjkce; - /** - * 累计其他扣除额 必填:null - */ - private BigDecimal ljqtkce; - /** - * 累计减免税额 必填:null - */ - private BigDecimal ljjmse; - /** - * 累计减除费用额 必填:null 正常工资薪金累计减除费用 对应保险营销员、证券经纪人累计费用 - */ - private BigDecimal ljjcfye; - /** - * 累计月减除费用 必填:null 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 - */ - private BigDecimal ljyjcfy; - /** - * 允许扣除税费 必填:null 保险营销员、证券经纪人 - */ - private BigDecimal yxkcsf; - /** - * 展业成本 必填:null 保险营销员、证券经纪人 - */ - private BigDecimal zycb; - /** - * 月减除费用 必填:null 保险营销员、证券经纪人,其他连续劳务报酬的减除费用 - */ - private BigDecimal yjcfy; - /** - * 累计应纳税所得额 必填:null - */ - private BigDecimal ljynssde; - /** - * 累计应纳税额 必填:null - */ - private BigDecimal ljynse; - /** - * 累计应扣缴税额 必填:null 累计应扣缴税额 = 累计应纳税额 - 累计减免税额 - */ - private BigDecimal ljyingkjse; - /** - * 累计已缴税额 必填:null - */ - private BigDecimal ljykjse; - /** - * 累计子女教育支出 必填:null - */ - private BigDecimal ljznjyzc; - /** - * 累计继续教育支出 必填:null - */ - private BigDecimal ljjxjyzc; - /** - * 累计非学历继续教育支持 必填:null - */ - private BigDecimal ljfxljxjyzc; - /** - * 累计学历继续教育支持 必填:null - */ - private BigDecimal ljxljxjyzc; - /** - * 累计住房租金支出 必填:null - */ - private BigDecimal ljzfzjzc; - /** - * 累计房屋贷款支出 必填:null - */ - private BigDecimal ljzfdklxzc; - /** - * 累计赡养老人支出 必填:null - */ - private BigDecimal ljsylrzc; - /** - * 累计3岁以下婴幼儿照护支出 必填:null - */ - private BigDecimal ljyyezhzc; - /** - * 累计准予扣除的捐赠额 必填:null - */ - private BigDecimal ljzykcjze; - /** - * 累计个人养老金 必填:null - */ - private BigDecimal ljgrylj; - /** - * 累计个人养老金校验码 必填:null - */ - private String ljgryljjym; - /** - * 企业上月是否已申报 必填:null 仅在两个月算税场景时使用,当前月分为N月: - * 0表示N-1月(上月)未申报 - * 1表示N-1月(上月)已申报 - * 2表示N-2月(上上个月)未申报 - */ - private String qysysfysb; - /** - * 员工在税局累计已扣缴的税额 必填:null 当前月分为N,如果N-1(上月)已申报,则返回N-1月员工在税局累计已扣缴的税额; - * 如果N-1月未申报,则返回N-2月工在税局累计已扣缴的税额; - */ - private BigDecimal ygzsjljykjse; - - /** - * 本月已累计扣除税额 必填:null 针对一月多次算税的场景字段 - */ - private BigDecimal byyljkjse; - /** - * 本次应扣缴税额 必填:null 针对一月多次算税的场景字段,本次应扣缴税额=本月应扣缴税额-本月已累计税额 - */ - private BigDecimal bcykjse; - /** - * 分摊年度数 必填:null - */ - private Integer ftnds; - /** - * 年减除费用 必填:null 默认为60000 - */ - private BigDecimal njcfy; - - } - - /** - * 4.4.1.3.2算税失败原因对象 - */ - public class sssbyydx { - /** - * 人员ID - */ - private Integer ygid; - /** - * 人员名称 - */ - private String xm; - /** - * 证件类型 见证件类型字典 + * 证件类型名称 */ private String zzlx; /** @@ -515,21 +153,471 @@ public class GetDeclareTaxResultFeedbackResponse { */ private String zzhm; /** - * 错误码 + * 代报状态 1 待报送 2 代报中 3 代报失败 4 代报成功 */ - private String cwm; + private String sbzt; /** - * 错误信息 + * 人员认证状态 */ - private String cwxx; + private String rzzt; /** - * 所得税的code + * 失败原因 */ - private String sdxmdm; + private String sbyy; /** - * 所得税的名称 + * 专项代报状态 */ - private String sdxmmc; + private String clzt; + /** + * 专项代报结果原因 + */ + private String cljgms; + } + + + /** + * 综合所得算税结果对象 + */ + @Data + public static class zcgzxj { + /** + * 综合算税成功列表 参考综合所得输出结果报文 + */ + 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; + /** + * 专项代报状态 + */ + private String clzt; + /** + * 专项代报结果原因 + */ + private String cljgms; + + + /** + * 综合所得输出结果报文 + */ + @Data + public static class zhsdscjgbw { + /** + * 是否明细申报 必填:否 是或者否 + */ + @SalaryTableColumn(text = "是否明细申报", width = "10%", column = "sfmxsb") + private String sfmxsb; + /** + * 姓名 必填:null 如果是汇总申报返回空 + */ + @SalaryTableColumn(text = "姓名", width = "10%", column = "xm") + private String xm; + /** + * 证件类型 必填:null 见证件类型字典 + */ + @SalaryTableColumn(text = "证件类型", width = "10%", column = "zzlx") + private String zzlx; + /** + * 证件号码 必填:null 如果是汇总申报返回空 + */ + @SalaryTableColumn(text = "证件号码", width = "10%", column = "zzhm") + private String zzhm; + /** + * 任职受雇日期 必填:是 格式YYYY-MM-DD + */ + @SalaryTableColumn(text = "任职受雇日期", width = "10%", column = "rzsgrq") + private String rzsgrq; + /** + * 离职日期 必填:否 格式YYYY-MM-DD + */ + @SalaryTableColumn(text = "离职日期", width = "10%", column = "lzrq") + private String lzrq; + /** + * 当期收入额 必填:是 不填写默认为0 + */ + @SalaryTableColumn(text = "当期收入额", width = "10%", column = "sre") + private BigDecimal sre; + /** + * 当期免税收入 必填:null + */ + @SalaryTableColumn(text = "当期免税收入", width = "10%", column = "mssd") + private BigDecimal mssd; + /** + * 基本养老保险 必填:null + */ + @SalaryTableColumn(text = "基本养老保险", width = "10%", column = "jbylaobxf") + private BigDecimal jbylaobxf; + /** + * 基本医疗保险 必填:null + */ + @SalaryTableColumn(text = "基本医疗保险", width = "10%", column = "jbylbxf") + private BigDecimal jbylbxf; + /** + * 失业保险 必填:null + */ + @SalaryTableColumn(text = "失业保险", width = "10%", column = "sybxf") + private BigDecimal sybxf; + /** + * 住房公积金 必填:null + */ + @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") + private BigDecimal nj; + /** + * 商业健康保险 必填:null + */ + @SalaryTableColumn(text = "商业健康保险", width = "10%", column = "syjkbx") + private BigDecimal syjkbx; + /** + * 税延养老保险 必填:null + */ + @SalaryTableColumn(text = "税延养老保险", width = "10%", column = "syylbx") + private BigDecimal syylbx; + /** + * 其他 必填:null 按法律规定可以在税前扣除的项目 + */ + @SalaryTableColumn(text = "其他", width = "10%", column = "qt") + private BigDecimal qt; + /** + * 准予扣除的捐赠额 必填:null + */ + @SalaryTableColumn(text = "准予扣除的捐赠额", width = "10%", column = "zykcjze") + private BigDecimal zykcjze; + /** + * 减免税额 必填:null + */ + @SalaryTableColumn(text = "减免税额", width = "10%", column = "jmse") + private BigDecimal jmse; + /** + * 备注 必填:null + */ + @SalaryTableColumn(text = "备注", width = "10%", column = "bz") + private String bz; + /** + * 减除费用 必填:null 正常工资薪金的减除费用。 对应保险营销员、证券经纪人的费用 + */ + @SalaryTableColumn(text = "减除费用", width = "10%", column = "jcfy") + private BigDecimal jcfy; + /** + * 其他扣除合计 必填:null + */ + @SalaryTableColumn(text = "其他扣除合计", width = "10%", column = "qtckhj") + private BigDecimal qtckhj; + /** + * 应纳税所得额 必填:null 正常工资薪金返回Null + */ + @SalaryTableColumn(text = "应纳税所得额", width = "10%", column = "ynssde") + private BigDecimal ynssde; + /** + * 应纳税额 必填:null 正常工资薪金返回Null + */ + @SalaryTableColumn(text = "应纳税额", width = "10%", column = "ynse") + private BigDecimal ynse; + /** + * 已缴税额 必填:null 正常工资薪金返回Null + */ + @SalaryTableColumn(text = "已缴税额", width = "10%", column = "ykjse") + private BigDecimal ykjse; + /** + * 应扣缴税额 必填:null 正常工资薪金返回Null + */ + @SalaryTableColumn(text = "应扣缴税额", width = "10%", column = "yingkjse") + private BigDecimal yingkjse; + /** + * 税率 必填:null + */ + @SalaryTableColumn(text = "税率", width = "10%", column = "sl") + private BigDecimal sl; + /** + * 速算扣除数 必填:null + */ + @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 = "ljyingkjse") + private BigDecimal ljyingkjse; + /** + * 累计已缴税额 必填:null + */ + @SalaryTableColumn(text = "累计已缴税额", width = "10%", column = "ljykjse") + private BigDecimal ljykjse; + /** + * 累计子女教育支出 必填:null + */ + @SalaryTableColumn(text = "累计子女教育支出", width = "10%", column = "ljznjyzc") + private BigDecimal ljznjyzc; + /** + * 累计继续教育支出 必填:null + */ + @SalaryTableColumn(text = "累计继续教育支出", width = "10%", column = "ljjxjyzc") + private BigDecimal ljjxjyzc; + /** + * 累计非学历继续教育支持 必填:null + */ + @SalaryTableColumn(text = "累计非学历继续教育支持", width = "10%", column = "ljfxljxjyzc") + private BigDecimal ljfxljxjyzc; + /** + * 累计学历继续教育支持 必填:null + */ + @SalaryTableColumn(text = "累计学历继续教育支持", width = "10%", column = "ljxljxjyzc") + private BigDecimal ljxljxjyzc; + /** + * 累计住房租金支出 必填:null + */ + @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 = "ljzykcjze") + private BigDecimal ljzykcjze; + /** + * 累计个人养老金 必填:null + */ + @SalaryTableColumn(text = "累计个人养老金", width = "10%", column = "ljgrylj") + private BigDecimal ljgrylj; + /** + * 累计个人养老金校验码 必填:null + */ + @SalaryTableColumn(text = "累计个人养老金校验码", width = "10%", column = "ljgryljjym") + private String ljgryljjym; + /** + * 企业上月是否已申报 必填:null 仅在两个月算税场景时使用,当前月分为N月: + * 0表示N-1月(上月)未申报 + * 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; + + } + + /** + * 4.4.1.3.2算税失败原因对象 + */ + @Data + public static class sssbyydx { + /** + * 人员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/TaxDeclareRecordService.java b/src/com/engine/salary/service/TaxDeclareRecordService.java index 4c325a520..a294e259d 100644 --- a/src/com/engine/salary/service/TaxDeclareRecordService.java +++ b/src/com/engine/salary/service/TaxDeclareRecordService.java @@ -7,6 +7,7 @@ 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; @@ -139,6 +140,7 @@ public interface TaxDeclareRecordService { */ Object getDeclareTaxResultFeedback(Long id); + XSSFWorkbook exportGetDeclareTaxResultFeedback(Long id,String requestId); /** * 作废 * diff --git a/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java b/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java index bdf2bfb67..07490e5e1 100644 --- a/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java +++ b/src/com/engine/salary/service/impl/EmployeeDeclareExcelServiceImpl.java @@ -2,7 +2,6 @@ package com.engine.salary.service.impl; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; -import com.engine.salary.annotation.SalaryTableColumn; import com.engine.salary.entity.employeedeclare.dto.EmployeeDeclareListDTO; import com.engine.salary.entity.employeedeclare.param.EmployeeDeclareListQueryParam; import com.engine.salary.entity.employeedeclare.po.EmployeeDeclarePO; @@ -10,18 +9,12 @@ import com.engine.salary.service.EmployeeDeclareExcelService; import com.engine.salary.service.EmployeeDeclareService; import com.engine.salary.service.SalaryEmployeeService; import com.engine.salary.service.TaxAgentService; -import com.engine.salary.util.JsonUtil; import com.engine.salary.util.excel.ExcelUtil; -import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import weaver.hrm.User; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** * @description: 人员报送(人员)导入导出 @@ -115,7 +108,7 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee // 转换成dto List dtoList = getEmployeeDeclareService(user).convert(employeeDeclares); // 需要导出的数据 - List> excelSheetData = getExcelSheetData(EmployeeDeclareListDTO.class, dtoList); + List> excelSheetData = ExcelUtil.getExcelSheetData(EmployeeDeclareListDTO.class, dtoList); return ExcelUtil.genWorkbookV2(excelSheetData, "人员信息采集"); } @@ -213,20 +206,6 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee // } - private List> getExcelSheetData(Class clazz, List dtoList) { - // 导出的表头 - Map> headerMap = getHeader(clazz); - // 导出的数据 - List> rows = new ArrayList<>(); - rows.add(headerMap.get("header")); - dtoList.forEach(dto -> { - Map map = JsonUtil.parseMap(dto, Object.class); - List row = Lists.newArrayListWithExpectedSize(headerMap.get("dataIndex").size()); - headerMap.get("dataIndex").forEach(dataIndex -> row.add(map.get(dataIndex))); - rows.add(row); - }); - return rows; - } // // @Transactional(rollbackFor = Exception.class) // @BatchImportHandler("importEmployeeDeclare") @@ -605,24 +584,7 @@ public class EmployeeDeclareExcelServiceImpl extends Service implements Employee // SalaryI18nUtil.getI18nLabel(employeeId, 156402, "是否扣除减除费用")); // } - private Map> getHeader(Class clazz) { - Map> headerMap = new HashMap<>(); - // 导出的表头 - List headerList = Lists.newArrayList(); - List dataIndexList = Lists.newArrayList(); - Field[] declaredFields = clazz.getDeclaredFields(); - for (Field declaredField : declaredFields) { - if (!declaredField.isAnnotationPresent(SalaryTableColumn.class)) { - continue; - } - SalaryTableColumn annotation = declaredField.getAnnotation(SalaryTableColumn.class); - headerList.add(annotation.text()); - dataIndexList.add(annotation.column()); - } - headerMap.put("header", headerList); - headerMap.put("dataIndex", dataIndexList); - return headerMap; - } + // /** // * 检查表头 diff --git a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java index 109ef366c..ac6829f00 100644 --- a/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java +++ b/src/com/engine/salary/service/impl/TaxDeclareRecordServiceImpl.java @@ -41,10 +41,12 @@ import com.engine.salary.enums.taxdeclaration.*; import com.engine.salary.exception.SalaryRunTimeException; import com.engine.salary.mapper.taxdeclaration.TaxDeclareRecordMapper; import com.engine.salary.remote.tax.client.DeclareClient; +import com.engine.salary.remote.tax.response.employee.GetDeclareTaxResultFeedbackResponse; import com.engine.salary.service.*; import com.engine.salary.service.factory.TaxPaymentServiceFactory; import com.engine.salary.util.*; 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; @@ -54,6 +56,7 @@ import dm.jdbc.util.IdGenerator; 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 org.springframework.transaction.annotation.Transactional; import weaver.general.Util; import weaver.hrm.User; @@ -739,7 +742,7 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe } } taxDeclareRecord.setTaxDeclareErrorMsg(String.join(",", errorMsg)); - }else { + } else { //清除之前的错误 taxDeclareRecord.setTaxDeclareErrorMsg(""); } @@ -924,6 +927,21 @@ public class TaxDeclareRecordServiceImpl extends Service implements TaxDeclareRe return declareClient.getDeclareTaxResultFeedback(taxDeclareRecord.getRequestId()); } + @Override + public XSSFWorkbook exportGetDeclareTaxResultFeedback(Long id, String requestId) { + TaxDeclareRequest taxDeclareRequest = buildTaxDeclareRequest(id); + TaxDeclareRecordPO taxDeclareRecord = taxDeclareRequest.getTaxDeclareRecord(); + + 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, "申报内置算税结果"); + } + @Override public void updateDeclare(Long id) { diff --git a/src/com/engine/salary/util/excel/ExcelUtil.java b/src/com/engine/salary/util/excel/ExcelUtil.java index 8c271981a..5126cfc96 100644 --- a/src/com/engine/salary/util/excel/ExcelUtil.java +++ b/src/com/engine/salary/util/excel/ExcelUtil.java @@ -1,6 +1,9 @@ package com.engine.salary.util.excel; +import com.engine.salary.annotation.SalaryTableColumn; +import com.engine.salary.util.JsonUtil; import com.engine.salary.util.SalaryDateUtil; +import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.FillPatternType; @@ -9,6 +12,7 @@ import org.apache.poi.ss.usermodel.IndexedColors; import org.apache.poi.xssf.usermodel.*; import java.awt.*; +import java.lang.reflect.Field; import java.util.*; import java.util.List; @@ -271,7 +275,43 @@ public class ExcelUtil { public static XSSFWorkbook genWorkbook(ExcelSheetData excelSheetData) { List> list = new ArrayList<>(); list.add(Collections.singletonList(excelSheetData.getHeaders())); - list.addAll( excelSheetData.getRows()); + list.addAll(excelSheetData.getRows()); return genWorkbookV2(list, excelSheetData.getSheetName()); } + + + public static Map> getHeader(Class clazz) { + Map> headerMap = new HashMap<>(); + // 导出的表头 + List headerList = Lists.newArrayList(); + List dataIndexList = Lists.newArrayList(); + Field[] declaredFields = clazz.getDeclaredFields(); + for (Field declaredField : declaredFields) { + if (!declaredField.isAnnotationPresent(SalaryTableColumn.class)) { + continue; + } + SalaryTableColumn annotation = declaredField.getAnnotation(SalaryTableColumn.class); + headerList.add(annotation.text()); + dataIndexList.add(annotation.column()); + } + headerMap.put("header", headerList); + headerMap.put("dataIndex", dataIndexList); + return headerMap; + } + + public static List> getExcelSheetData(Class clazz, List dtoList) { + // 导出的表头 + Map> headerMap = getHeader(clazz); + // 导出的数据 + List> rows = new ArrayList<>(); + rows.add(headerMap.get("header")); + dtoList.forEach(dto -> { + Map map = JsonUtil.parseMap(dto, Object.class); + List row = Lists.newArrayListWithExpectedSize(headerMap.get("dataIndex").size()); + headerMap.get("dataIndex").forEach(dataIndex -> row.add(map.get(dataIndex))); + rows.add(row); + }); + return rows; + } + } diff --git a/src/com/engine/salary/web/TaxDeclarationController.java b/src/com/engine/salary/web/TaxDeclarationController.java index ba563895b..57dba6fb2 100644 --- a/src/com/engine/salary/web/TaxDeclarationController.java +++ b/src/com/engine/salary/web/TaxDeclarationController.java @@ -31,6 +31,7 @@ import javax.ws.rs.core.Response; import javax.ws.rs.core.StreamingOutput; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.time.LocalDate; import java.time.LocalDateTime; import java.util.Collection; import java.util.List; @@ -211,11 +212,43 @@ public class TaxDeclarationController { @GET @Path("/getDeclareTaxResultFeedback") @Produces(MediaType.APPLICATION_JSON) - public String getDeclareTaxResultFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) { + 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 + */ + @GET + @Path("/exportGetDeclareTaxResultFeedback") + @Produces(MediaType.APPLICATION_OCTET_STREAM) + public Response exportGetDeclareTaxResultFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id, @QueryParam(value = "requestId") String requestId) { + + try { + User user = HrmUserVarify.getUser(request, response); + XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportGetDeclareTaxResultFeedback(id ,requestId); + 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; + } + } + /** * 作废 @@ -466,7 +499,7 @@ public class TaxDeclarationController { try { User user = HrmUserVarify.getUser(request, response); - AbnormalEmployeeListQueryParam queryParam = genAbnormalEmployeeListQueryParam(request); + AbnormalEmployeeListQueryParam queryParam = genAbnormalEmployeeListQueryParam(request); XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportEmployee4NotDeclare(queryParam); String fileName = SalaryI18nUtil.getI18nLabel(156420, "未报送的人员") + "-" + SalaryDateUtil.getFormatLocalDate(LocalDateTime.now()); @@ -503,7 +536,7 @@ public class TaxDeclarationController { try { User user = HrmUserVarify.getUser(request, response); - AbnormalEmployeeListQueryParam queryParam = genAbnormalEmployeeListQueryParam(request); + AbnormalEmployeeListQueryParam queryParam = genAbnormalEmployeeListQueryParam(request); XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportEmployee4NoValue(queryParam); String fileName = SalaryI18nUtil.getI18nLabel(156421, "缺少申报数据的人员") + "-" + SalaryDateUtil.getFormatLocalDate(LocalDateTime.now()); @@ -539,7 +572,7 @@ public class TaxDeclarationController { public Response exportEmployee4Fail(@Context HttpServletRequest request, @Context HttpServletResponse response) { try { User user = HrmUserVarify.getUser(request, response); - AbnormalEmployeeListQueryParam queryParam = genAbnormalEmployeeListQueryParam(request); + AbnormalEmployeeListQueryParam queryParam = genAbnormalEmployeeListQueryParam(request); XSSFWorkbook workbook = getTaxDeclareRecordWrapper(user).exportEmployee4Fail(queryParam); String fileName = SalaryI18nUtil.getI18nLabel(156422, "申报失败人员") + "-" + SalaryDateUtil.getFormatLocalDate(LocalDateTime.now()); diff --git a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java index c47959f3c..edd3900df 100644 --- a/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java +++ b/src/com/engine/salary/wrapper/TaxDeclareRecordWrapper.java @@ -466,6 +466,11 @@ public class TaxDeclareRecordWrapper extends Service { return getTaxDeclareRecordService(user).getDeclareTaxResultFeedback(id); } + + public XSSFWorkbook exportGetDeclareTaxResultFeedback(Long id,String requestId) { + return getTaxDeclareRecordService(user).exportGetDeclareTaxResultFeedback(id, requestId); + } + /** * 作废 * @@ -654,4 +659,5 @@ public class TaxDeclareRecordWrapper extends Service { public XSSFWorkbook exportEmployee4Fail(AbnormalEmployeeListQueryParam queryParam) { return getTaxDeclarationExcelService(user).exportEmployee4Fail(queryParam); } + }