Merge branch 'dev-hzfpxf' into test

release
高荣琳 2 years ago
commit 4693a339ee
  1. 257
      order-management-base-service/src/main/java/com/dxhy/order/baseservice/constant/OrderEnum.java
  2. 35
      order-management-common/src/main/java/com/dxhy/order/model/newsk/invoiceissue/InvoiceQdBdcxs.java
  3. 29
      order-management-common/src/main/java/com/dxhy/order/model/newsk/invoiceissue/InvoiceQdBdczl.java
  4. 31
      order-management-common/src/main/java/com/dxhy/order/model/newsk/invoiceissue/InvoiceQdHwys.java
  5. 25
      order-management-common/src/main/java/com/dxhy/order/model/newsk/invoiceissue/InvoiceQdJzfw.java
  6. 143
      order-management-common/src/main/java/com/dxhy/order/model/newsk/invoiceissue/QdInvoicePushBackInfo.java
  7. 19
      order-management-common/src/main/java/com/dxhy/order/model/newsk/invoiceissue/QdInvoicePushBackRequest.java
  8. 2
      order-management-common/src/main/java/com/dxhy/order/model/newsk/query/InvoiceInfoDetail.java
  9. 318
      order-management-consumer/src/main/java/com/dxhy/order/consumer/modules/manager/controller/InvoiceReceiveController.java
  10. 10
      order-management-consumer/src/main/java/com/dxhy/order/consumer/openapi/protocol/v4/order/DdfpxxBO.java
  11. 39
      order-management-consumer/src/main/java/com/dxhy/order/consumer/openapi/protocol/v6/order/BdcxsBO.java
  12. 34
      order-management-consumer/src/main/java/com/dxhy/order/consumer/openapi/protocol/v6/order/BdczlBO.java
  13. 35
      order-management-consumer/src/main/java/com/dxhy/order/consumer/openapi/protocol/v6/order/HwysBO.java
  14. 31
      order-management-consumer/src/main/java/com/dxhy/order/consumer/openapi/protocol/v6/order/JzfwBO.java
  15. 4
      order-management-consumer/src/main/java/com/dxhy/order/consumer/openapi/protocol/v6/order/QdTxxBO.java

@ -0,0 +1,257 @@
package com.dxhy.order.baseservice.constant;
/**
* 订单枚举类
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @createDate: Created in 2023-03-15
*/
public enum OrderEnum {
/**
* 红字信息表下载状态(0:初始化;1:下载中;2:下载完成;3:下载失败)
*/
SPECIAL_INVOICE_DOWNLOAD_TYPE_0("0", "初始化"),
SPECIAL_INVOICE_DOWNLOAD_TYPE_1("1", "下载中"),
SPECIAL_INVOICE_DOWNLOAD_TYPE_2("2", "下载完成"),
SPECIAL_INVOICE_DOWNLOAD_TYPE_3("3", "下载失败"),
/**
* 订单对外开票接口拆分方式 默认0
*/
INTERFACE_GENERATE_INVOICE_CFFS_0("0","按业务系统配置的拆分规则进行拆分"),
INTERFACE_GENERATE_INVOICE_CFFS_1("1","按商品固定数量拆分"),
/**
* 数据来源
*/
DATA_SOURCE_0("0", "集团共享"),
DATA_SOURCE_1("1", "手工创建"),
DATA_SOURCE_2("2", "模板导入"),
DATA_SOURCE_3("3", "采集下级"),
DATA_SOURCE_4("4", "自动归集"),
DATA_SOURCE_5("5", "接口同步"),
/**
* 特殊票种订单服务
*/
ORDER_TSPZ_0("0", "其他"),
ORDER_TSPZ_1("1", "成品油"),
ORDER_TSPZ_2("2", "农产品收购"),
ORDER_TSPZ_3("3", "机动车"),
ORDER_TSPZ_4("4","矿产品"),
ORDER_TSPZ_5("5","农产品收购(数电)"),
ORDER_TSPZ_6("6","不动产经营租赁服务"),
ORDER_TSPZ_7("7","不动产销售"),
ORDER_TSPZ_8("8","货物运输服务"),
ORDER_TSPZ_9("9","建筑服务"),
/**
* 特殊票种(税控服务)
* 00不是
* 01农产品销售
* 02农产品收购
* 06抵扣通行费
* 07其它通行费
* 08成品油销售
* 09机动车专票
*/
SK_TSPZ_00("00", "不是特殊票种"),
SK_TSPZ_01("01", "农产品销售"),
SK_TSPZ_02("02", "农产品收购"),
SK_TSPZ_06("06", "抵扣通行费"),
SK_TSPZ_07("07", "其它通行费"),
SK_TSPZ_08("08", "成品油销售"),
SK_TSPZ_09("09", "机动车专票"),
/**
* 订单批量导入excel模板中sheet页名称
*/
ORDER_BATCH_IMPORT_QD_SHEET_0("0","数电农产品收购"),
ORDER_BATCH_IMPORT_QD_SHEET_1("1","货物运输服务"),
ORDER_BATCH_IMPORT_QD_SHEET_2("2","不动产销售"),
ORDER_BATCH_IMPORT_QD_SHEET_3("3","不动产经营租赁"),
ORDER_BATCH_IMPORT_QD_SHEET_4("4","建筑服务"),
ORDER_BATCH_IMPORT_HISTORY_SHEET_1("1","增值税专用发票"),
ORDER_BATCH_IMPORT_HISTORY_SHEET_2("2","增值税普通发票"),
ORDER_BATCH_IMPORT_HISTORY_SHEET_3("3","增值税电子普通发票"),
ORDER_BATCH_IMPORT_HISTORY_SHEET_4("4","增值税电子专用发票"),
/**
* 订单批量导入excel模板中特殊票种
*/
ORDER_BATCH_IMPORT_TSPZ_0("0", "否"),
ORDER_BATCH_IMPORT_TSPZ_1("1", "成品油发票"),
ORDER_BATCH_IMPORT_TSPZ_2("2", "机动车发票"),
ORDER_BATCH_IMPORT_TSPZ_3("3", "不动产经营租赁服务"),
ORDER_BATCH_IMPORT_TSPZ_4("4", "不动产销售"),
ORDER_BATCH_IMPORT_TSPZ_5("5", "货物运输服务"),
ORDER_BATCH_IMPORT_TSPZ_6("6", "建筑服务"),
/**
* 订单暂停开票提示文案
*/
ORDER_INVOICE_ERROR_1("202008", "该开票设备已被设置为暂停开票,如需恢复开票,请联系运维人员处理,暂停原因:%s"),
/**
* 二手车开票方类型
* (1经营 2拍卖 3市场)
*/
ESC_KPFLX_1("1", "经营"),
ESC_KPFLX_2("2", "拍卖"),
ESC_KPFLX_3("3", "市场"),
ESC_KPFLX_4("d", "以上三者都有"),
/**
* 二手车企业类型 0:非二手车企业1:经营单位 2:拍卖单位 3:二手车市场
*/
ESC_QYLX_0("0", "非二手车企业"),
ESC_QYLX_1("1", "二手车经营单位"),
ESC_QYLX_2("2", "二手车拍卖单位"),
ESC_QYLX_3("3", "二手车市场"),
ESC_QYLX_4("d", "以上三者都有"),
/**
* 订单开票量统计类型
*/
DDKPLTJ_TJLX_0("0","本月"),
DDKPLTJ_TJLX_1("1","本季度"),
DDKPLTJ_TJLX_2("2","累计"),
/**
* 数电设备类型(0:纯数电设备;1:混合设备使用;2:非数电设备;3:未配置设备)
*/
/*SKSB_TYPE_0("0","纯数电设备"),
SKSB_TYPE_1("1","混合设备使用"),
SKSB_TYPE_2("2","非数电设备"),
SKSB_TYPE_3("3","未配置设备"),*/
/**
* 数电-特定要素
*/
ORDER_QD_TDYS_00("00", "无"),
ORDER_QD_TDYS_01("01", "成品油发票"),
ORDER_QD_TDYS_02("02", "稀土发票"),
ORDER_QD_TDYS_03("03", "建筑服务发票"),
ORDER_QD_TDYS_04("04", "货物运输服务发票"),
ORDER_QD_TDYS_05("05", "不动产销售服务发票"),
ORDER_QD_TDYS_06("06", "不动产租赁服务发票"),
ORDER_QD_TDYS_07("07", "代收车船税"),
ORDER_QD_TDYS_08("08", "通行费"),
ORDER_QD_TDYS_09("09", "旅客运输服务发票"),
ORDER_QD_TDYS_10("10", "医疗服务(住院)发票"),
ORDER_QD_TDYS_11("11", "医疗服务(门诊)发票"),
ORDER_QD_TDYS_12("12", "自产农产品销售发票"),
ORDER_QD_TDYS_13("13", "拖拉机和联合收割机发票"),
ORDER_QD_TDYS_14("14", "机动车"),
ORDER_QD_TDYS_15("15", "二手车"),
ORDER_QD_TDYS_16("16", "农产品收购发票"),
ORDER_QD_TDYS_17("17", "光伏收购发票"),
ORDER_QD_TDYS_18("18", "卷烟发票"),
/**
* 数电-差额征税类型代码
*/
ORDER_QD_CEZSLXDM_01("01", "差额开票"),
ORDER_QD_CEZSLXDM_02("02", "全额开票"),
/**
* 数电-收购发票类型代码
*/
ORDER_QD_SGFPLXDM_01("01", "农产品收购发票"),
ORDER_QD_SGFPLXDM_02("02", "光伏收购发票"),
ORDER_QD_SGFPLXDM_03("03", "二手车收购发票"),
/**
* 数电-出口业务适用政策代码
*/
ORDER_QD_CKYWSYZCDM_01("01", "退税政策"),
ORDER_QD_CKYWSYZCDM_02("02", "免税政策"),
ORDER_QD_CKYWSYZCDM_03("03", "征税政策"),
/**
* 数电-增值税即征即退代码
*/
ORDER_QD_ZZSJZJTDM_01("01", "软件产品发票"),
ORDER_QD_ZZSJZJTDM_02("02", "资源综合利用产品发票"),
ORDER_QD_ZZSJZJTDM_03("03", "管道运输服务发票"),
ORDER_QD_ZZSJZJTDM_04("04", "有形动产融资租赁服务"),
ORDER_QD_ZZSJZJTDM_05("05", "有形动产融资性售后回租服务发票"),
ORDER_QD_ZZSJZJTDM_06("06", "新型墙体材料发票"),
ORDER_QD_ZZSJZJTDM_07("07", "风力发电产品发票"),
ORDER_QD_ZZSJZJTDM_08("08", "光伏发电产品发票"),
ORDER_QD_ZZSJZJTDM_09("09", "动漫软件产品发票"),
ORDER_QD_ZZSJZJTDM_10("10", "飞机维修劳务发票"),
ORDER_QD_ZZSJZJTDM_11("11", "黄金发票"),
ORDER_QD_ZZSJZJTDM_12("12", "铂金发票"),
/**
* 数电-结算方式
*/
ORDER_QD_JSFS_01("01", "现金"),
ORDER_QD_JSFS_02("02", "银行转账"),
ORDER_QD_JSFS_03("03", "票据"),
ORDER_QD_JSFS_04("04", "第三方支付"),
ORDER_QD_JSFS_05("05", "预付卡"),
ORDER_QD_JSFS_99("99", "其他"),
/**
* 数电发票业务开通状态
*/
ORDER_QD_FPYWKTZT_0("0", "已开通"),
ORDER_QD_FPYWKTZT_1("1", "未开通"),
/**
* RPA企业开票登录状态用于判断开票数据是否可重试
*/
ORDER_QD_RPA_FPKJ_1101("1101", "登录状态失效"),
ORDER_QD_RPA_FPKJ_1102("1102", "需二次认证"),
/**
* 数电红字确认单 用户角色类型 0销方1购方
*/
ORDER_QD_HZQRD_YHJSLX_0("0", "销方"),
ORDER_QD_HZQRD_YHJSLX_1("1", "购方"),
/**
* 数电货物运输运输工具种类
*/
ORDER_QD_HWYS_YSGJZL_0("0","铁路运输"),
ORDER_QD_HWYS_YSGJZL_1("1","公路运输"),
ORDER_QD_HWYS_YSGJZL_2("2","水路运输"),
ORDER_QD_HWYS_YSGJZL_3("3","航空运输"),
ORDER_QD_HWYS_YSGJZL_4("4","管道运输"),
ORDER_QD_HWYS_YSGJZL_5("6","其他运输工具"),
;
/**
* key
*/
private final String key;
/**
*
*/
private final String value;
public String getKey() {
return key;
}
public String getValue() {
return value;
}
OrderEnum(String key, String value) {
this.key = key;
this.value = value;
}
public static OrderEnum getCodeValue(String key) {
for (OrderEnum item : values()) {
if (item.getKey().equals(key)) {
return item;
}
}
return null;
}
}

@ -0,0 +1,35 @@
package com.dxhy.order.model.newsk.invoiceissue;
import lombok.Getter;
import lombok.Setter;
/**
* 数电不动产销售信息
*
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @createDate: Created in 2023-07-04
*/
@Getter
@Setter
public class InvoiceQdBdcxs {
/**
* BDCWQHTBH : 不动产单元代码/网签合同备案编号
* BDCDZ : 不动产地址
* KDSBZ : 跨地()标志
* TDZZSXMBH : 土地增值税项目编号
* HDJSJG : 核定计税价格
* SJCJHSJE : 实际成交含税金额
* CQZSH : 房屋产权证书号/不动产权证号
* MJDW : 面积单位
*/
private String BDCWQHTBH;
private String BDCDZ;
private String KDSBZ;
private String TDZZSXMBH;
private String HDJSJG;
private String SJCJHSJE;
private String CQZSH;
private String MJDW;
}

@ -0,0 +1,29 @@
package com.dxhy.order.model.newsk.invoiceissue;
import lombok.Getter;
import lombok.Setter;
/**
* 数电不动产租赁信息
*
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @createDate: Created in 2023-07-04
*/
@Getter
@Setter
public class InvoiceQdBdczl {
/**
* BDCDZ : 不动产地址
* KDSBZ : 跨地()标志
* CQZSH : 房屋产权证书号/不动产权证号
* MJDW : 面积单位
* ZLQQZ : 租赁期起止
*/
private String BDCDZ;
private String KDSBZ;
private String CQZSH;
private String MJDW;
private String ZLQQZ;
}

@ -0,0 +1,31 @@
package com.dxhy.order.model.newsk.invoiceissue;
import lombok.Getter;
import lombok.Setter;
/**
* 数电货物运输信息
*
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @createDate: Created in 2023-07-04
*/
@Getter
@Setter
public class InvoiceQdHwys {
/**
* XMXH : 明细序号
* QYD : 起运地
* DDD : 到达地
* YSGJZL : 运输工具种类
* YSGJPH : 运输工具牌号
* YSHWMC : 运输货物名称
*/
private String XMXH;
private String QYD;
private String DDD;
private String YSGJZL;
private String YSGJPH;
private String YSHWMC;
}

@ -0,0 +1,25 @@
package com.dxhy.order.model.newsk.invoiceissue;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
* 数电建筑服务信息
*
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @createDate: Created in 2023-07-24
*/
@Getter
@Setter
public class InvoiceQdJzfw implements Serializable {
/**
* TDZZSXMBH : 土地增值税项目编号
* KDSBZ : 跨地()标志
*/
private String TDZZSXMBH;
private String KDSBZ;
}

@ -0,0 +1,143 @@
package com.dxhy.order.model.newsk.invoiceissue;
import com.dxhy.order.model.newsk.query.InvoiceInfoDetail;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
import java.util.List;
/**
* 数电回推的发票信息
*
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @createDate: Created in 2023-05-04
*/
@Getter
@Setter
public class QdInvoicePushBackInfo implements Serializable {
/**
* FPQQLSH : 发票请求唯一流水号
* ZZID : 组织ID
* YWLX : 业务类型
* DDH : 订单号
* NSRSBH : 纳税人识别号
* NSRMC : 纳税人名称
* KPLX : 开票类型
* QDFP_HM : 数电发票号码
* KPRQ : 开票日期
* BMB_BBH : 编码表版本号
* XSF_NSRSBH : 销售方纳税人识别号
* XSF_MC : 销售方名称
* XSF_DZ : 销售方地址
* XSF_DH : 销售方电话
* XSF_YH : 销售方银行
* XSF_YHZH : 销售方银行账号
* GMF_NSRSBH : 购买方纳税人识别号
* GMF_MC : 购买方名称
* GMF_DZ : 购买方地址
* GMF_DH : 购买方电话
* GMF_YH : 购买方银行
* GMF_YHZH : 购买方银行账号
* KPR : 开票人
* KPRZJHM : 开票人证件号码
* KPRZJLX : 开票人证件类型
* FPZLDM : 发票种类代码
* TDYS : 特定要素
* QYDM : 区域代码
* CEZSLXDM : 差额征税类型代码
* SGFPLXDM : 收购发票类型代码
* CKYWSYZCDM : 出口业务适用政策代码
* ZZSJZJTDM : 增值税即征即退代码
* YFP_HM : 原发票号码
* HZQRXXDBH : 红字确认单编号-数电使用
* CHBZ: 冲红标志
* JSHJ : 价税合计
* HJJE : 合计金额
* HJSE : 合计税额
* KCE : 扣除额
* BZ : 备注
* BYZD1 : 备用字段1
* BYZD2 : 备用字段2
* BYZD3 : 备用字段3
* BYZD4 : 备用字段4
* BYZD5 : 备用字段5
* GMFJBR : 经办人
* JBRSFZJHM : 经办人身份证件号码
* GMFJBRLXDH : 经办人联系电话
* JSFS : 结算方式
* SKYHMC : 收款银行名称
* SKYHZH : 收款银行账号
* YSXWFSD : 应税行为发生地
* GMF_ZRRBS : 购买方自然人标识
* YHM : 用户名
* INVOICE_DETAIL : [{"XMXH":"项目序号","DYLZFPMXXH":"对应蓝字发票明细序号","FPHXZ":"发票行性质","SPBM":"商品编码","YHZCBS":"优惠政策标识","XMMC":"项目名称","GGXH":"规格型号","DW":"单位","XMSL":"项目数量","XMDJ":"项目单价","XMJE":"项目金额","HSJE":"含税金额","SL":"税率","SE":"税额","HSBZ":"含税标识","BYZD1":"备用字段1","BYZD2":"备用字段2","BYZD3":"备用字段3"}]
* FJYSLIST : [{"FJYSMC":"附加要素名称","FJYSLX":"附加要素类型","FJYSZ":"附加要素值"}]
* TRANSPORT_DETAIL : [{"XMXH":"明细序号","QYD":"起运地","DDD":"到达地","YSGJZL":"运输工具种类","YSGJPH":"运输工具牌号","YSHWMC":"运输货物名称"}]
* LEASE_INFO:{BDCDZ : 不动产地址,KDSBZ : 跨地()标志,CQZSH : 房屋产权证书号/不动产权证号, MJDW : 面积单位,ZLQQZ : 租赁期起止}
* SALE_INFO:{BDCWQHTBH : 不动产单元代码/网签合同备案编号,BDCDZ : 不动产地址,KDSBZ : 跨地()标志,TDZZSXMBH : 土地增值税项目编号,HDJSJG : 核定计税价格,SJCJHSJE : 实际成交含税金额,CQZSH : 房屋产权证书号/不动产权证号,MJDW : 面积单位}
*/
private String FPQQLSH;
private String ZZID;
private String YWLX;
private String DDH;
private String NSRSBH;
private String NSRMC;
private String KPLX;
private String SDFPHM;
private String KPRQ;
private String BMBBBH;
private String XSFNSRSBH;
private String XSFMC;
private String XSFDZ;
private String XSFDH;
private String XSFYH;
private String XSFYHZH;
private String GMFNSRSBH;
private String GMFMC;
private String GMFDZ;
private String GMFDH;
private String GMFYH;
private String GMFYHZH;
private String KPR;
private String KPRZJHM;
private String KPRZJLX;
private String FPZLDM;
private String TDYS;
private String QYDM;
private String CEZSLXDM;
private String SGFPLXDM;
private String CKYWSYZCDM;
private String ZZSJZJTDM;
private String YFPHM;
private String HZQRXXDBH;
private String CHBZ;
private String JSHJ;
private String HJJE;
private String HJSE;
private String KCE;
private String BZ;
private String BYZD1;
private String BYZD2;
private String BYZD3;
private String BYZD4;
private String BYZD5;
private String GMFJBR;
private String JBRSFZJHM;
private String GMFJBRLXDH;
private String JSFS;
private String SKYHMC;
private String SKYHZH;
private String YSXWFSD;
private String GMFZRRBS;
private String YHM;
private List<InvoiceInfoDetail> INVOICE_DETAIL;
private List<InvoiceQdFjys> FJYSLIST;
private List<InvoiceQdHwys> TRANSPORT_DETAIL;
private InvoiceQdBdczl LEASE_INFO;
private InvoiceQdBdcxs SALE_INFO;
private InvoiceQdJzfw CONSTRUCT_INFO;
}

@ -0,0 +1,19 @@
package com.dxhy.order.model.newsk.invoiceissue;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
/**
* 数电发票信息回推请求对象
*
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @createDate: Created in 2023-05-04
*/
@Getter
@Setter
public class QdInvoicePushBackRequest implements Serializable {
private QdInvoicePushBackInfo INVOICE;
}

@ -42,4 +42,6 @@ public class InvoiceInfoDetail implements Serializable {
private String BYZD3;
private String BYZD4;
private String BYZD5;
private String JZFWFSD;
private String JZXMMC;
}

@ -1,14 +1,20 @@
package com.dxhy.order.consumer.modules.manager.controller;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.nacos.client.naming.utils.CollectionUtils;
import com.dxhy.order.baseservice.constant.OrderEnum;
import com.dxhy.order.constant.*;
import com.dxhy.order.consumer.modules.manager.model.dto.ManualPushInvoiceDTO;
import com.dxhy.order.consumer.openapi.protocol.v4.order.*;
import com.dxhy.order.consumer.openapi.protocol.v6.order.*;
import com.dxhy.order.exception.OrderReceiveException;
import com.dxhy.order.model.*;
import com.dxhy.order.model.newsk.invoiceissue.InvoiceIssueFailDetail;
import com.dxhy.order.model.newsk.invoiceissue.*;
import com.dxhy.order.model.newsk.query.InvoiceInfoDetail;
import com.dxhy.order.model.queue.FpkjMqData;
import com.dxhy.order.utils.JsonUtils;
import com.dxhy.order.utils.NsrsbhUtils;
@ -19,9 +25,6 @@ import com.dxhy.order.consumer.config.OpenApiConfig;
import com.dxhy.order.consumer.modules.manager.service.InvoiceDataService;
import com.dxhy.order.consumer.modules.manager.service.InvoiceReceiveService;
import com.dxhy.order.consumer.modules.order.service.impl.PollInvoiceServiceImpl;
import com.dxhy.order.consumer.openapi.protocol.v4.order.DdfpdrReqBO;
import com.dxhy.order.consumer.openapi.protocol.v4.order.DdfpdrRspBO;
import com.dxhy.order.consumer.openapi.protocol.v4.order.DdfpzxxBO;
import com.dxhy.order.consumer.openapi.service.InterfaceServiceV3;
import com.dxhy.order.invoice.module.invoice.service.InvalidInvoiceService;
import com.dxhy.order.invoice.module.invoice.service.OrderInvoiceInfoService;
@ -43,9 +46,7 @@ import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.*;
/**
* @author 杨士勇
@ -146,6 +147,49 @@ public class InvoiceReceiveController {
}
}
/**
* 接收数电发票数据回推
* @param request 回推数据
* @since V6.1.7
*/
@ApiOperation(value = "接收数电发票数据回推", notes = "接收数电发票数据回推-接收底层开具数电发票后将数据回推订单服务")
@PostMapping("/receiveQdInvoices")
public InterfaceData receiveQdInvoices(HttpServletRequest request){
InterfaceData interfaceData = new InterfaceData();
try {
String data = IOUtils.toString(request.getInputStream(), StandardCharsets.UTF_8);
log.info("{}接收数电发票数据回推数据,入参:{}", LOGGER_MSG, data);
interfaceData = ProtocolUtil.decodeData(data);
log.debug("{}接收数电发票数据回推数据,解密后数据为:{}", LOGGER_MSG, interfaceData.getData());
List<QdInvoicePushBackRequest> qdInvoicePushBackRequestList = JsonUtils.getInstance().jsonToList(interfaceData.getData(), QdInvoicePushBackRequest.class);
//判断入参是否为空
if(CollectionUtil.isEmpty(qdInvoicePushBackRequestList)){
throw new OrderReceiveException(ConfigureConstant.STRING_9999, "回推的数电发票数据为空");
}
if(Objects.isNull(qdInvoicePushBackRequestList.get(0)) || Objects.isNull(qdInvoicePushBackRequestList.get(0).getINVOICE())){
throw new OrderReceiveException(ConfigureConstant.STRING_9999, "回推的数电发票数据为空");
}
//数电发票数据bean转换
List<DdfpzxxBO> ddfpzxxList = convetDdfpzxxBO(qdInvoicePushBackRequestList);
List<DdfpdrRspBO> ddfpdrRspList = interfaceServiceV3.importIssuedInvoice(ddfpzxxList, OrderInfoEnum.ORDER_SOURCE_9.getKey(),
"", ConfigurerInfo.INTERFACE_VERSION_V4);
log.info("{}接收数电发票数据回推数据,返回数据:{}", LOGGER_MSG, JsonUtils.getInstance().toJsonString(ddfpdrRspList));
return buildReturnData(interfaceData, OrderInfoEnum.INTERFACE_SUCCESS.getKey(),
OrderInfoEnum.INTERFACE_SUCCESS.getValue(), ddfpdrRspList);
} catch (OrderReceiveException e) {
log.error("{}接收数电发票数据回推数据异常", LOGGER_MSG, e);
return buildReturnData(interfaceData,e.getCode(),e.getMessage(),null);
} catch (Exception e) {
log.error("{}接收数电发票数据回推数据异常", LOGGER_MSG, e);
return buildReturnData(interfaceData,ConfigureConstant.STRING_9999,e.getMessage(),null);
}
}
@ApiOperation(value = "接收税控发票修复数据", notes = "接收税控发票修复数据-接收税控底层修复的发票数据")
@PostMapping("/receiveRepairedInvoices")
@ -431,4 +475,264 @@ public class InvoiceReceiveController {
return R.error();
}
}
private List<DdfpzxxBO> convetDdfpzxxBO(List<QdInvoicePushBackRequest> qdInvoicePushBackRequestList){
List<DdfpzxxBO> ddfpzxxList = new ArrayList<>(qdInvoicePushBackRequestList.size());
qdInvoicePushBackRequestList.forEach(invoiceIssueRequest -> {
QdInvoicePushBackInfo qdInvoiceIssueInfo = invoiceIssueRequest.getINVOICE();
//订单发票信息
DdfpxxBO ddfpxxBO = transDdfpxxBO(qdInvoiceIssueInfo);
//发票明细信息
List<InvoiceInfoDetail> invoiceInfoDetailList = qdInvoiceIssueInfo.getINVOICE_DETAIL();
List<DdmxxxBO> ddmxxxBOList = new ArrayList<>(16);
if(CollectionUtil.isNotEmpty(invoiceInfoDetailList)){
invoiceInfoDetailList.forEach(invoiceInfoDetail -> {
DdmxxxBO ddmxxxBO = transInvoiceInfoDetail(invoiceInfoDetail);
ddmxxxBOList.add(ddmxxxBO);
});
}
//数电发票信息
QdTxxBO qdTxxBO = transQdTxxBO(qdInvoiceIssueInfo);
DdfpzxxBO ddfpzxxBO = new DdfpzxxBO();
ddfpzxxBO.setDDFPXX(ddfpxxBO);
ddfpzxxBO.setDDMXXX(ddmxxxBOList);
ddfpzxxBO.setQDTXXBO(qdTxxBO);
ddfpzxxList.add(ddfpzxxBO);
});
return ddfpzxxList;
}
private DdfpxxBO transDdfpxxBO(QdInvoicePushBackInfo qdInvoiceIssueInfo){
//数电农产品收购发票
boolean qdncp = OrderEnum.ORDER_QD_TDYS_16.getKey().equals(qdInvoiceIssueInfo.getTDYS())
&& OrderEnum.ORDER_QD_SGFPLXDM_01.getKey().equals(qdInvoiceIssueInfo.getSGFPLXDM());
DdfpxxBO ddfpxxBO = new DdfpxxBO();
//todo 发票请求流水号(税控) 对应 订单请求流水号(订单),订单库中的kplsh是订单系统生成的并不是税控的发票请求流水号
ddfpxxBO.setDDQQLSH(qdInvoiceIssueInfo.getFPQQLSH());
ddfpxxBO.setDDH(qdInvoiceIssueInfo.getDDH());
ddfpxxBO.setTHDH("");
ddfpxxBO.setMDH("");
ddfpxxBO.setENTID(qdInvoiceIssueInfo.getZZID());
ddfpxxBO.setNSRSBH(qdInvoiceIssueInfo.getNSRSBH());
ddfpxxBO.setNSRMC(qdInvoiceIssueInfo.getNSRMC());
ddfpxxBO.setKPLX(qdInvoiceIssueInfo.getKPLX());
ddfpxxBO.setQYLX("");
ddfpxxBO.setBMBBBH(qdInvoiceIssueInfo.getBMBBBH());
if(qdncp){
ddfpxxBO.setXHFSBH(qdInvoiceIssueInfo.getGMFNSRSBH());
ddfpxxBO.setXHFMC(qdInvoiceIssueInfo.getGMFMC());
ddfpxxBO.setXHFDZ(qdInvoiceIssueInfo.getGMFDZ());
ddfpxxBO.setXHFDH(qdInvoiceIssueInfo.getGMFDH());
ddfpxxBO.setXHFYH(qdInvoiceIssueInfo.getGMFYH());
ddfpxxBO.setXHFZH(qdInvoiceIssueInfo.getGMFYHZH());
ddfpxxBO.setGMFSBH(qdInvoiceIssueInfo.getXSFNSRSBH());
ddfpxxBO.setGMFMC(qdInvoiceIssueInfo.getXSFMC());
ddfpxxBO.setGMFDZ(qdInvoiceIssueInfo.getXSFDZ());
ddfpxxBO.setGMFDH(qdInvoiceIssueInfo.getXSFDH());
ddfpxxBO.setGMFYH(qdInvoiceIssueInfo.getXSFYH());
ddfpxxBO.setGMFZH(qdInvoiceIssueInfo.getXSFYHZH());
} else {
ddfpxxBO.setXHFSBH(qdInvoiceIssueInfo.getXSFNSRSBH());
ddfpxxBO.setXHFMC(qdInvoiceIssueInfo.getXSFMC());
ddfpxxBO.setXHFDZ(qdInvoiceIssueInfo.getXSFDZ());
ddfpxxBO.setXHFDH(qdInvoiceIssueInfo.getXSFDH());
ddfpxxBO.setXHFYH(qdInvoiceIssueInfo.getXSFYH());
ddfpxxBO.setXHFZH(qdInvoiceIssueInfo.getXSFYHZH());
ddfpxxBO.setGMFSBH(qdInvoiceIssueInfo.getGMFNSRSBH());
ddfpxxBO.setGMFMC(qdInvoiceIssueInfo.getGMFMC());
ddfpxxBO.setGMFDZ(qdInvoiceIssueInfo.getGMFDZ());
ddfpxxBO.setGMFDH(qdInvoiceIssueInfo.getGMFDH());
ddfpxxBO.setGMFYH(qdInvoiceIssueInfo.getGMFYH());
ddfpxxBO.setGMFZH(qdInvoiceIssueInfo.getGMFYHZH());
}
if(ConfigureConstant.STRING_Y.equals(qdInvoiceIssueInfo.getGMFZRRBS())){
ddfpxxBO.setGMFLX(OrderInfoEnum.GHF_QYLX_03.getKey());
} else {
ddfpxxBO.setGMFLX(OrderInfoEnum.GHF_QYLX_04.getKey());
}
ddfpxxBO.setGMFBM("");
ddfpxxBO.setGMFSF("");
ddfpxxBO.setGMFSJH("");
ddfpxxBO.setGMFDZYX("");
ddfpxxBO.setKPR(qdInvoiceIssueInfo.getKPR());
ddfpxxBO.setKPRZJLX(qdInvoiceIssueInfo.getKPRZJLX());
ddfpxxBO.setKPRZJHM(qdInvoiceIssueInfo.getKPRZJHM());
ddfpxxBO.setSKR("");
ddfpxxBO.setFHR("");
ddfpxxBO.setYFPDM("");
ddfpxxBO.setYFPHM(qdInvoiceIssueInfo.getYFPHM());
ddfpxxBO.setYFPKPRQ("");
ddfpxxBO.setYFPLX("");
ddfpxxBO.setCHYY("");
ddfpxxBO.setTSCHBZ("");
ddfpxxBO.setHZXXBBH(qdInvoiceIssueInfo.getHZQRXXDBH());
if(qdncp){
ddfpxxBO.setQDBZ(OrderInfoEnum.QDBZ_CODE_2.getKey());
ddfpxxBO.setQDXMMC(OrderInfoEnum.QDBZ_CODE_2.getValue());
} else {
ddfpxxBO.setQDBZ(OrderInfoEnum.QDBZ_CODE_0.getKey());
ddfpxxBO.setQDXMMC(OrderInfoEnum.QDBZ_CODE_0.getValue());
}
ddfpxxBO.setJSHJ(qdInvoiceIssueInfo.getJSHJ());
ddfpxxBO.setHJJE(qdInvoiceIssueInfo.getHJJE());
ddfpxxBO.setHJSE(qdInvoiceIssueInfo.getHJSE());
ddfpxxBO.setBZ(qdInvoiceIssueInfo.getBZ());
ddfpxxBO.setDDSJ(DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN));
ddfpxxBO.setYWLX(qdInvoiceIssueInfo.getYWLX());
ddfpxxBO.setKPFS(OrderInfoEnum.ORDER_REQUEST_TYPE_0.getKey());
ddfpxxBO.setTQM("");
ddfpxxBO.setDTM("");
ddfpxxBO.setDDZT(OrderInfoEnum.ORDER_STATUS_5.getKey());
ddfpxxBO.setDDZTXX(OrderInfoEnum.ORDER_STATUS_5.getValue());
if(OrderInfoEnum.ORDER_BILLING_INVOICE_TYPE_1.getKey().equals(qdInvoiceIssueInfo.getKPLX())){
ddfpxxBO.setDDZT(OrderInfoEnum.ORDER_STATUS_7.getKey());
ddfpxxBO.setDDZTXX(OrderInfoEnum.ORDER_STATUS_7.getValue());
}
ddfpxxBO.setFPLXDM(qdInvoiceIssueInfo.getFPZLDM());
ddfpxxBO.setDDLY(OrderInfoEnum.ORDER_SOURCE_9.getKey());
//冲红标志
ddfpxxBO.setCHBZ(qdInvoiceIssueInfo.getCHBZ());
ddfpxxBO.setZFBZ(OrderInfoEnum.INVALID_INVOICE_0.getKey());
ddfpxxBO.setSFCF(OrderInfoEnum.INTERFACE_SFCF_0.getKey());
ddfpxxBO.setCFFS("");
ddfpxxBO.setSLKJLY("");
ddfpxxBO.setKPJH("");
ddfpxxBO.setKPZD("");
ddfpxxBO.setJQBH("");
ddfpxxBO.setFJH("");
ddfpxxBO.setFPHM(qdInvoiceIssueInfo.getSDFPHM());
ddfpxxBO.setKPRQ(qdInvoiceIssueInfo.getKPRQ());
ddfpxxBO.setJYM("");
ddfpxxBO.setFWM("");
ddfpxxBO.setEWM("");
ddfpxxBO.setPDFZJL("");
ddfpxxBO.setZJLLX("");
ddfpxxBO.setPDFDZ("");
ddfpxxBO.setSLKJLY("");
ddfpxxBO.setYHM(qdInvoiceIssueInfo.getYHM());
ddfpxxBO.setOFDTOPDFZJ("");
ddfpxxBO.setBYZD1(qdInvoiceIssueInfo.getBYZD1());
ddfpxxBO.setBYZD2(qdInvoiceIssueInfo.getBYZD2());
ddfpxxBO.setBYZD3(qdInvoiceIssueInfo.getBYZD3());
ddfpxxBO.setBYZD4(qdInvoiceIssueInfo.getBYZD4());
ddfpxxBO.setBYZD5(qdInvoiceIssueInfo.getBYZD5());
return ddfpxxBO;
}
private DdmxxxBO transInvoiceInfoDetail(InvoiceInfoDetail invoiceInfoDetail){
DdmxxxBO ddmxxxBO = new DdmxxxBO();
ddmxxxBO.setXH(invoiceInfoDetail.getXMXH());
ddmxxxBO.setDYLZFPMXXH(invoiceInfoDetail.getDYLZFPMXXH());
ddmxxxBO.setSPID("");
ddmxxxBO.setFPHXZ(invoiceInfoDetail.getFPHXZ());
ddmxxxBO.setSPBM(invoiceInfoDetail.getSPBM());
ddmxxxBO.setZXBM("");
ddmxxxBO.setYHZCBS(invoiceInfoDetail.getYHZCBS());
ddmxxxBO.setLSLBS("");
ddmxxxBO.setZZSTSGL("");
ddmxxxBO.setXMMC(invoiceInfoDetail.getXMMC());
ddmxxxBO.setGGXH(invoiceInfoDetail.getGGXH());
ddmxxxBO.setDW(invoiceInfoDetail.getDW());
ddmxxxBO.setSPSL(invoiceInfoDetail.getXMSL());
ddmxxxBO.setDJ(invoiceInfoDetail.getXMDJ());
ddmxxxBO.setJE(invoiceInfoDetail.getXMJE());
ddmxxxBO.setHSBZ(invoiceInfoDetail.getHSBZ());
ddmxxxBO.setSL(invoiceInfoDetail.getSL());
ddmxxxBO.setSE(invoiceInfoDetail.getSE());
ddmxxxBO.setKCE("");
ddmxxxBO.setBYZD1(invoiceInfoDetail.getBYZD1());
ddmxxxBO.setBYZD2(invoiceInfoDetail.getBYZD2());
ddmxxxBO.setBYZD3(invoiceInfoDetail.getBYZD3());
return ddmxxxBO;
}
private QdTxxBO transQdTxxBO(QdInvoicePushBackInfo qdInvoiceIssueInfo){
QdTxxBO qdTxxBO = new QdTxxBO();
qdTxxBO.setZZID(qdInvoiceIssueInfo.getZZID());
qdTxxBO.setTDYS(qdInvoiceIssueInfo.getTDYS());
qdTxxBO.setQYDM(qdInvoiceIssueInfo.getQYDM());
qdTxxBO.setCEZSLXDM(qdInvoiceIssueInfo.getCEZSLXDM());
qdTxxBO.setSGFPLXDM(qdInvoiceIssueInfo.getSGFPLXDM());
qdTxxBO.setCKYWSYZCDM(qdInvoiceIssueInfo.getCKYWSYZCDM());
qdTxxBO.setZZSJZJTDM(qdInvoiceIssueInfo.getZZSJZJTDM());
qdTxxBO.setGMFJBR(qdInvoiceIssueInfo.getGMFJBR());
qdTxxBO.setJBRSFZJHM(qdInvoiceIssueInfo.getJBRSFZJHM());
qdTxxBO.setGMFJBRLXDH(qdInvoiceIssueInfo.getGMFJBRLXDH());
qdTxxBO.setJSFS(qdInvoiceIssueInfo.getJSFS());
qdTxxBO.setSKYHMC(qdInvoiceIssueInfo.getSKYHMC());
qdTxxBO.setSKYHZH(qdInvoiceIssueInfo.getSKYHZH());
qdTxxBO.setYSXWFSD(qdInvoiceIssueInfo.getYSXWFSD());
//附加要素
List<InvoiceQdFjys> fjyslist = qdInvoiceIssueInfo.getFJYSLIST();
List<QdFjysBO> fjysBOList = new ArrayList<>(16);
if(CollectionUtil.isNotEmpty(fjyslist)){
fjyslist.forEach(fjys -> {
QdFjysBO qdFjysBO = new QdFjysBO();
qdFjysBO.setFJYSMC(fjys.getFJYSMC());
qdFjysBO.setFJYSLX(fjys.getFJYSLX());
qdFjysBO.setFJYSZ(fjys.getFJYSZ());
fjysBOList.add(qdFjysBO);
});
}
qdTxxBO.setFJYSLIST(fjysBOList);
//特定业务信息
//货物运输
List<InvoiceQdHwys> invoiceQdHwysList = qdInvoiceIssueInfo.getTRANSPORT_DETAIL();
if(CollectionUtil.isNotEmpty(invoiceQdHwysList)){
List<HwysBO> hwysBOList = new ArrayList<>(16);
invoiceQdHwysList.forEach(invoiceQdHwys -> {
HwysBO hwysBO = new HwysBO();
BeanUtils.copyProperties(invoiceQdHwys,hwysBO);
hwysBOList.add(hwysBO);
});
qdTxxBO.setHWYSLIST(hwysBOList);
}
//不动产租赁
InvoiceQdBdczl invoiceQdBdczl = qdInvoiceIssueInfo.getLEASE_INFO();
if(Objects.nonNull(invoiceQdBdczl)){
BdczlBO bdczlBO = new BdczlBO();
BeanUtils.copyProperties(invoiceQdBdczl, bdczlBO);
qdTxxBO.setBDCZLXX(bdczlBO);
}
//不动产销售
InvoiceQdBdcxs invoiceQdBdcxs = qdInvoiceIssueInfo.getSALE_INFO();
if(Objects.nonNull(invoiceQdBdcxs)){
BdcxsBO bdcxsBO = new BdcxsBO();
BeanUtils.copyProperties(invoiceQdBdcxs, bdcxsBO);
qdTxxBO.setBDCXSXX(bdcxsBO);
}
//建筑服务
InvoiceQdJzfw invoiceQdJzfw = qdInvoiceIssueInfo.getCONSTRUCT_INFO();
List<InvoiceInfoDetail> invoiceDetail = qdInvoiceIssueInfo.getINVOICE_DETAIL();
if(Objects.nonNull(invoiceQdJzfw) && CollectionUtil.isNotEmpty(invoiceDetail)){
InvoiceInfoDetail invoiceInfoDetail = invoiceDetail.get(0);
JzfwBO jzfwBO = new JzfwBO();
jzfwBO.setTDZZSXMBH(invoiceQdJzfw.getTDZZSXMBH());
jzfwBO.setJZFWFSD(invoiceInfoDetail.getJZFWFSD());
jzfwBO.setJZFWMC(invoiceInfoDetail.getJZXMMC());
jzfwBO.setKDSBZ(invoiceQdJzfw.getKDSBZ());
qdTxxBO.setJZFWXX(jzfwBO);
}
return qdTxxBO;
}
}

@ -95,4 +95,14 @@ public class DdfpxxBO extends DdtxxBO {
* ofd转pdf流文件
*/
private String OFDTOPDFZJ;
/**
* 拆分方式0:按业务系统配置的拆分规则进行拆分;1:按商品固定数量拆分
*/
private String CFFS;
/**
* 电局登录用户名
*/
private String YHM;
}

@ -0,0 +1,39 @@
package com.dxhy.order.consumer.openapi.protocol.v6.order;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
/**
* 数电信息-不动产销售信息
*
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @createDate: Created in 2023-07-04
*/
@Getter
@Setter
@ToString
public class BdcxsBO implements Serializable {
/**
* BDCWQHTBH : 不动产单元代码/网签合同备案编号
* BDCDZ : 不动产地址
* KDSBZ : 跨地()标志
* TDZZSXMBH : 土地增值税项目编号
* HDJSJG : 核定计税价格
* SJCJHSJE : 实际成交含税金额
* CQZSH : 房屋产权证书号/不动产权证号
* MJDW : 面积单位
*/
private String BDCWQHTBH;
private String BDCDZ;
private String KDSBZ;
private String TDZZSXMBH;
private String HDJSJG;
private String SJCJHSJE;
private String CQZSH;
private String MJDW;
}

@ -0,0 +1,34 @@
package com.dxhy.order.consumer.openapi.protocol.v6.order;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
/**
* 数电信息-不动产租赁信息
*
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @createDate: Created in 2023-07-04
*/
@Getter
@Setter
@ToString
public class BdczlBO implements Serializable {
/**
* BDCDZ : 不动产地址
* KDSBZ : 跨地()标志
* CQZSH : 房屋产权证书号/不动产权证号
* MJDW : 面积单位
* ZLQQZ : 租赁期起止
*/
private String BDCDZ;
private String KDSBZ;
private String CQZSH;
private String MJDW;
private String ZLQQZ;
}

@ -0,0 +1,35 @@
package com.dxhy.order.consumer.openapi.protocol.v6.order;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
/**
* 数电信息-货物运输
*
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @createDate: Created in 2023-07-03
*/
@Getter
@Setter
@ToString
public class HwysBO implements Serializable {
/**
* XMXH : 明细序号
* QYD : 起运地
* DDD : 到达地
* YSGJZL : 运输工具种类
* YSGJPH : 运输工具牌号
* YSHWMC : 运输货物名称
*/
private String XMXH;
private String QYD;
private String DDD;
private String YSGJZL;
private String YSGJPH;
private String YSHWMC;
}

@ -0,0 +1,31 @@
package com.dxhy.order.consumer.openapi.protocol.v6.order;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.io.Serializable;
/**
* 数电信息-建筑服务信息
*
* @author: <a href="yaoxuguang@ele-cloud.com">yaoxuguang</a>
* @createDate: Created in 2023-07-24
*/
@Getter
@Setter
@ToString
public class JzfwBO implements Serializable {
/**
* TDZZSXMBH : 土地增值税项目编号
* JZFWFSD : 建筑服务发生地
* JZFWMC : 建筑服务名称
* KDSBZ : 跨地()标志
*/
private String TDZZSXMBH;
private String JZFWFSD;
private String JZFWMC;
private String KDSBZ;
}

@ -51,4 +51,8 @@ public class QdTxxBO implements Serializable {
private String SKYHZH;
private String YSXWFSD;
private List<QdFjysBO> FJYSLIST;
private List<HwysBO> HWYSLIST;
private BdczlBO BDCZLXX;
private BdcxsBO BDCXSXX;
private JzfwBO JZFWXX;
}

Loading…
Cancel
Save