From cc98960c7ec2c36847cfcaa9dd11ba85eebba454 Mon Sep 17 00:00:00 2001
From: kk <1910333201@qq.com>
Date: Thu, 26 Oct 2023 13:41:09 +0800
Subject: [PATCH] =?UTF-8?q?=E7=BA=A2=E5=AD=97=E7=94=B3=E8=AF=B7=E8=A1=A8?=
=?UTF-8?q?=E4=B8=8B=E8=BD=BD=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../AisinoConsoleInvoiceRedDownloadDTO.java | 4 +-
.../AisinoConsoleInvoiceApiServiceImpl.java | 4 +-
...noConsoleInvoiceApiZhongQiServiceImpl.java | 51 ++++++++++-
.../invoice/task/QueryBackZhongQiTask.java | 87 +++++++++++++++++++
.../aisino/console/AisinoConsoleUtil.java | 13 +--
5 files changed, 146 insertions(+), 13 deletions(-)
create mode 100644 jianshui-invoice/src/main/java/com/jianshui/invoice/task/QueryBackZhongQiTask.java
diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/aisino/console/AisinoConsoleInvoiceRedDownloadDTO.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/aisino/console/AisinoConsoleInvoiceRedDownloadDTO.java
index 164183f..d97b7c7 100644
--- a/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/aisino/console/AisinoConsoleInvoiceRedDownloadDTO.java
+++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/aisino/console/AisinoConsoleInvoiceRedDownloadDTO.java
@@ -15,12 +15,12 @@ import javax.validation.constraints.NotEmpty;
@Data
public class AisinoConsoleInvoiceRedDownloadDTO {
- @Alias("reqnsrsbh")
+// @Alias("reqnsrsbh")
@NotEmpty
@ApiModelProperty(value = "企业税号")
private String NSRSBH;
- @Alias("jspbh")
+// @Alias("jspbh")
@NotEmpty
@ApiModelProperty(value = "设备编号")
private String SBBH;
diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiServiceImpl.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiServiceImpl.java
index 04a7689..d0f2328 100644
--- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiServiceImpl.java
+++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiServiceImpl.java
@@ -726,7 +726,7 @@ public class AisinoConsoleInvoiceApiServiceImpl implements IInvoiceApiService {
//发起请求
AjaxResult ajaxResult = null;
try {
- ajaxResult = AisinoConsoleUtil.sendRequest(AisinoConsoleConstants.RED_UPLOAD, param, companyservice);
+ ajaxResult = AisinoConsoleUtil.sendRequestXML(AisinoConsoleConstants.RED_UPLOAD, "129",param, companyservice);
} catch (Exception e) {
log.error("【销项发票】【总部控制台接口】【发票作废】发票请求异常,请求报文{},销方信息{}", "", JSONObject.toJSONString(companyservice));
e.printStackTrace();
@@ -820,7 +820,7 @@ public class AisinoConsoleInvoiceApiServiceImpl implements IInvoiceApiService {
//发起请求
AjaxResult ajaxResult = null;
try {
- ajaxResult = AisinoConsoleUtil.sendRequest(AisinoConsoleConstants.RED_DOWLOAD, param, companyservice);
+ ajaxResult = AisinoConsoleUtil.sendRequestXML(AisinoConsoleConstants.RED_DOWLOAD,"0201", param, companyservice);
} catch (Exception e) {
log.error("【销项发票】【总部控制台接口】【发票作废】发票请求异常,请求报文{},销方信息{}", "", JSONObject.toJSONString(companyservice));
e.printStackTrace();
diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiZhongQiServiceImpl.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiZhongQiServiceImpl.java
index 35939d2..7b462f4 100644
--- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiZhongQiServiceImpl.java
+++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/AisinoConsoleInvoiceApiZhongQiServiceImpl.java
@@ -21,6 +21,7 @@ import com.jianshui.common.exception.jianshui.JianshuiServiceException;
import com.jianshui.common.utils.*;
import com.jianshui.common.utils.spring.SpringUtils;
import com.jianshui.common.utils.uuid.IdUtils;
+import com.jianshui.framework.manager.AsyncManager;
import com.jianshui.invoice.constant.aisino.console.AisinoConsoleConstants;
import com.jianshui.invoice.domain.*;
import com.jianshui.invoice.domain.dto.*;
@@ -35,6 +36,8 @@ import com.jianshui.invoice.mapper.InvoiceMapper;
import com.jianshui.invoice.mapper.RedinfoMapper;
import com.jianshui.invoice.mapper.SkDyjMapper;
import com.jianshui.invoice.service.IInvoiceApiService;
+import com.jianshui.invoice.task.QueryBackZhongQiTask;
+import com.jianshui.invoice.task.QueryInvoiceTask;
import com.jianshui.invoice.utils.BillInfoUtils;
import com.jianshui.invoice.utils.aisino.console.AisinoConsoleUtil;
import com.jianshui.system.domain.CompanyserviceProp;
@@ -90,6 +93,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
@Override
public HXResponse addInvoice(BillInfo billInfo, Companyservice companyservice) throws IllegalAccessException, InstantiationException {
+
// 订单号唯一校验 start
String outNO = billInfo.getOutTradeOrderno() != null ? billInfo.getOutTradeOrderno() : "";
if (StrUtil.isEmpty(outNO)) {
@@ -333,11 +337,17 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
// TODO: 2023/9/26 增加主动回调方式,可配置
+ // TODO: 2023/10/25 回调改成异步的,执行20次,直到获取到结果
ICompanyservicePropService companyserviceProp = SpringUtils.getBean(ICompanyservicePropService.class);
CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(companyservice.getCompanyid(), "aisino_callback_url");
if (BeanUtil.isNotEmpty(secretIdProp) && secretIdProp.getValue() != null && !"".equals(secretIdProp.getValue())) {
+
String callBackUrl = secretIdProp.getValue();
- callBackAisino(callBackUrl, invoice.getId());
+
+ // 异步回调
+ AsyncManager.me().execute(new QueryBackZhongQiTask(callBackUrl,invoice.getId()));
+// callBackAisino(callBackUrl, invoice.getId());
+
}
HXResponse response = new HXResponse("0000", "同步成功");
@@ -371,6 +381,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
try {
log.info("【控制台】发票回调接口,发送数据开始,id={}", id);
String result = HttpUtil.post(callBackUrl, JSONUtil.toJsonStr(invoice));
+
log.info("【控制台】发票回调接口,发送数据结束,id={},接口返回信息={}", id, JSONUtil.toJsonStr(invoice));
} catch (Exception e) {
log.info("【控制台】发票回调接口,发送数据异常,id={}", id);
@@ -736,7 +747,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
//发起请求
AjaxResult ajaxResult = null;
try {
- ajaxResult = AisinoConsoleUtil.sendRequest(AisinoConsoleConstants.RED_UPLOAD, param, companyservice);
+ ajaxResult = AisinoConsoleUtil.sendRequestXML(AisinoConsoleConstants.RED_UPLOAD,"129", param, companyservice);
} catch (Exception e) {
log.error("【销项发票】【总部控制台接口】【发票作废】发票请求异常,请求报文{},销方信息{}", "", JSONObject.toJSONString(companyservice));
e.printStackTrace();
@@ -796,16 +807,50 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer
downloadDTO.setNSRSBH(companyservice.getSellertax());
downloadDTO.setSBBH(goldenTaxDiskNo);
+
+ // TODO: 2023/10/25 这里改为空的属性也传
+
String param = JSONUtil.toXmlStr(JSONUtil.parse(downloadDTO));
+
param = "\n" +
"\n" +
" \n" + param + "\n" +
"";
+
+ /*param = "\n" +
+ "\n" +
+ "\n" +
+ "\n" +
+ " 370103999999060\n" +
+ " \n" +
+ " 661027630342\n" +
+ " \n" +
+ " 0\n" +
+ " \n" +
+ " N\n" +
+ " \n" +
+ " 2019-04-01\n" +
+ " \n" +
+ " 2019-05-01\n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " \n" +
+ " 0\n" +
+ " \n" +
+ " 1\n" +
+ " \n" +
+ " 1000\n" +
+ "";*/
+
//发起请求
AjaxResult ajaxResult = null;
try {
- ajaxResult = AisinoConsoleUtil.sendRequest(AisinoConsoleConstants.RED_DOWLOAD, param, companyservice);
+ ajaxResult = AisinoConsoleUtil.sendRequestXML(AisinoConsoleConstants.RED_DOWLOAD, "0201",param, companyservice);
} catch (Exception e) {
log.error("【销项发票】【总部控制台接口】【发票作废】发票请求异常,请求报文{},销方信息{}", "", JSONObject.toJSONString(companyservice));
e.printStackTrace();
diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/task/QueryBackZhongQiTask.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/task/QueryBackZhongQiTask.java
new file mode 100644
index 0000000..97253d6
--- /dev/null
+++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/task/QueryBackZhongQiTask.java
@@ -0,0 +1,87 @@
+package com.jianshui.invoice.task;
+
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONUtil;
+import com.alibaba.fastjson.JSONObject;
+import com.jianshui.common.core.domain.entity.Companyservice;
+import com.jianshui.common.core.redis.RedisCache;
+import com.jianshui.common.utils.StringUtils;
+import com.jianshui.common.utils.spring.SpringUtils;
+import com.jianshui.framework.manager.AsyncManager;
+import com.jianshui.invoice.domain.BillInfo;
+import com.jianshui.invoice.domain.Invoice;
+import com.jianshui.invoice.domain.dto.QueryBillInfoDTO;
+import com.jianshui.invoice.mapper.InvoiceMapper;
+import com.jianshui.invoice.service.IInvoiceApiService;
+import com.jianshui.queue.utils.RedisQueueUtil;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.TimerTask;
+
+/**
+ * @Description 重汽开票回调
+ **/
+@Slf4j
+public class QueryBackZhongQiTask extends TimerTask {
+
+ private String callBackUrl;
+ private Long id;
+
+
+ public QueryBackZhongQiTask(String callBackUrl, Long id) {
+ this.callBackUrl = callBackUrl;
+ this.id = id;
+ }
+
+ @SneakyThrows
+ @Override
+ public void run() {
+ RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
+
+
+ InvoiceMapper invoiceMapper = SpringUtils.getBean(InvoiceMapper.class);
+ Invoice invoice = invoiceMapper.selectInvoiceById(id);
+ if (invoice == null) {
+ log.info("【控制台】发票信息未查询到,id={}", id);
+ return;
+ }
+
+ try {
+ log.info("【控制台】发票回调接口,发送数据开始,id={}", id);
+ String result = HttpUtil.post(callBackUrl, JSONUtil.toJsonStr(invoice));
+
+ log.info("【控制台】发票回调接口,发送数据结束,id={},接口返回信息={}", id, JSONUtil.toJsonStr(invoice));
+ } catch (Exception e) {
+ log.info("【控制台】发票回调接口,发送数据异常,id={}", id);
+ return;
+ }
+
+ // TODO: 2023/10/25 回调队列看一下怎么处理
+
+
+ /* if (invoice == null || StringUtils.equalsAny(Integer.toString(invoice.getState()), "0", "20")) {
+ // 查询下失败队列,是否有次数
+ String keys = "invoice_query_times_" + this.companyservice.getCompanyid() + "_" + this.finalBillInfo.getSystemOrderno();
+ Integer queryTimes = redisCache.getCacheObject(keys);
+ // 查询重试次数超过20次,就不查了
+ if (queryTimes != null && queryTimes > 20) {
+ log.error("【定时任务】【发票查询】发票信息始终不存在,不再进行查询:{}", JSONObject.toJSONString(this.finalBillInfo));
+ redisCache.deleteObject(keys);
+ return;
+ }
+ if (queryTimes == null) {
+ queryTimes = 0;
+ }
+ queryTimes += 1;
+ redisCache.setCacheObject(keys, queryTimes);
+ log.error("【定时任务】【发票查询】发票信息不存在或还在开票中,再次进入查询:{}", JSONObject.toJSONString(this.finalBillInfo));
+ AsyncManager.me().execute(new QueryBackZhongQiTask(this.finalBillInfo, companyservice, this.invoiceApiService));
+ }
+
+ RedisQueueUtil.build().setData(invoice).onQueue("invoice_add_callback_consumer").retry(0).dispatch();*/
+ }
+
+
+
+}
diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/aisino/console/AisinoConsoleUtil.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/aisino/console/AisinoConsoleUtil.java
index 3d08398..751bf44 100644
--- a/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/aisino/console/AisinoConsoleUtil.java
+++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/aisino/console/AisinoConsoleUtil.java
@@ -164,12 +164,12 @@ public class AisinoConsoleUtil {
* @author dxk
* @date 2022/6/27 16:51
*/
- public static AjaxResult sendRequest(Integer SID, String SIDParam, Companyservice companyservice) throws UnsupportedEncodingException {
+ public static AjaxResult sendRequestXML(Integer SID, String paramId,String SIDParam, Companyservice companyservice) throws UnsupportedEncodingException {
AjaxResult ajaxResult = null;
//调用实际发送的方法
try{
- ajaxResult = sendAisinoConsole(SID,SIDParam,companyservice);
+ ajaxResult = sendAisinoConsoleXML(SID,paramId,SIDParam,companyservice);
return ajaxResult;
}catch (Exception e){
e.printStackTrace();
@@ -188,7 +188,7 @@ public class AisinoConsoleUtil {
* @param companyservice
* @return com.jianshui.common.core.domain.AjaxResult
*/
- public static AjaxResult sendAisinoConsole(Integer SID, String SIDParam, Companyservice companyservice) throws UnsupportedEncodingException {
+ public static AjaxResult sendAisinoConsoleXML(Integer SID, String paramId,String SIDParam, Companyservice companyservice) throws UnsupportedEncodingException {
//参数校验
if (SID == null) {
throw new JianshuiServiceException("未获取到请求接口,请联系管理员!");
@@ -206,7 +206,7 @@ public class AisinoConsoleUtil {
param = "\n" +
"\n" +
- ""+SID+"\n" +
+ ""+paramId+"\n" +
""+param+"\n" +
"\n";
@@ -218,13 +218,14 @@ public class AisinoConsoleUtil {
String clientIp = companyserviceDetailList.get(0).getClientIp();
//拼接请求地址
- param = "129PEZQWFQ_CiAgICA8SU5QVVQ_CiAgICAgICAgPFJlZEludlJlcUJpbGw_PHJlcW5zcnNiaD45MTEzMDkzMDY3ODUxMTU1WFk8L3JlcW5zcnNiaD48ZmpoPjEyMzwvZmpoPjxqc3BiaD42NjEwMjQ2NDMwNjg8L2pzcGJoPjxvdXRUcmFkZU9yZGVybm8_NjYxMDI0NjQzMDY4MjMwMjE4MTAzNTI0PC9vdXRUcmFkZU9yZGVybm8_PHJlZEluZm9UeXBlPjA8L3JlZEluZm9UeXBlPjxvcmlnaW5GcGRtPjM3MDAyMjIxMzA8L29yaWdpbkZwZG0_PG9yaWdpbkZwaG0_MTA0MDUxNzI8L29yaWdpbkZwaG0_PGJpbGxJbnB1dFRpbWU_MjAyMi0xMS0xMTwvYmlsbElucHV0VGltZT48dGF4VHlwZT4xPC90YXhUeXBlPjxtdWx0VGF4UmF0ZT4wPC9tdWx0VGF4UmF0ZT48RGF0ZT4yMDIyLTExLTExPC9EYXRlPjxidXllck5hbWU_utOxsdbQsaa3qMC8udy8/tbG1OzT0M/euavLvjwvYnV5ZXJOYW1lPjxidXllclRheG51bT45MTEzMDkzMDY3ODUxMTU1WFk8L2J1eWVyVGF4bnVtPjxzZWxsZXJOYW1lPrq90MWy4srUxvPStTwvc2VsbGVyTmFtZT48c2VsbGVyVGF4bnVtPjM3MDEwMzk5OTk5OTAzMDwvc2VsbGVyVGF4bnVtPjxBbW91bnQ_LTE5NTQ1MS4zMjwvQW1vdW50Pjx0YXhyYXRlPjAuMDM8L3RheHJhdGU_PHRheD4tMTI3MDQuMzQ8L3RheD48YXBwbHlSZW1hcms_MDAwMDAwMDEwMDwvYXBwbHlSZW1hcms_PGJtYmJoPjIzMjMyMzI8L2JtYmJoPjxTTEJaPjA8L1NMQlo_PFJlZEludlJlcUJpbGxNeD48R29vZHNNeD48Z29vZE5hbWU_xtXMvLDlUTIzNUI8L2dvb2ROYW1lPjxzcGVjPjQwKjIyMDAqTDwvc3BlYz48cHJpY2U_MzYxOS40NjkwMjY1NTwvcHJpY2U_PG51bT4tMjc8L251bT48dGF4ZnJlZWFtdD4tOTc3MjUuNjY8L3RheGZyZWVhbXQ_PHRheHJhdGU_MC4xMzwvdGF4cmF0ZT48dGF4Pi0xMjcwNC4zNDwvdGF4Pjx3aXRoVGF4RmxhZz5OPC93aXRoVGF4RmxhZz48c3BibT4xMDgwMjA3MDc8L3NwYm0_PHloemNicz4wPC95aHpjYnM_IDwvR29vZHNNeD4gICAgICAgICAgICA8L1JlZEludlJlcUJpbGxNeD4KICAgICAgICA8L1JlZEludlJlcUJpbGw_CiAgICA8L0lOUFVUPgo8L0ZQWFQ_";
+// param = "129PEZQWFQ_CiAgICA8SU5QVVQ_CiAgICAgICAgPFJlZEludlJlcUJpbGw_PHJlcW5zcnNiaD45MTEzMDkzMDY3ODUxMTU1WFk8L3JlcW5zcnNiaD48ZmpoPjEyMzwvZmpoPjxqc3BiaD42NjEwMjQ2NDMwNjg8L2pzcGJoPjxvdXRUcmFkZU9yZGVybm8_NjYxMDI0NjQzMDY4MjMwMjE4MTAzNTI0PC9vdXRUcmFkZU9yZGVybm8_PHJlZEluZm9UeXBlPjA8L3JlZEluZm9UeXBlPjxvcmlnaW5GcGRtPjM3MDAyMjIxMzA8L29yaWdpbkZwZG0_PG9yaWdpbkZwaG0_MTA0MDUxNzI8L29yaWdpbkZwaG0_PGJpbGxJbnB1dFRpbWU_MjAyMi0xMS0xMTwvYmlsbElucHV0VGltZT48dGF4VHlwZT4xPC90YXhUeXBlPjxtdWx0VGF4UmF0ZT4wPC9tdWx0VGF4UmF0ZT48RGF0ZT4yMDIyLTExLTExPC9EYXRlPjxidXllck5hbWU_utOxsdbQsaa3qMC8udy8/tbG1OzT0M/euavLvjwvYnV5ZXJOYW1lPjxidXllclRheG51bT45MTEzMDkzMDY3ODUxMTU1WFk8L2J1eWVyVGF4bnVtPjxzZWxsZXJOYW1lPrq90MWy4srUxvPStTwvc2VsbGVyTmFtZT48c2VsbGVyVGF4bnVtPjM3MDEwMzk5OTk5OTAzMDwvc2VsbGVyVGF4bnVtPjxBbW91bnQ_LTE5NTQ1MS4zMjwvQW1vdW50Pjx0YXhyYXRlPjAuMDM8L3RheHJhdGU_PHRheD4tMTI3MDQuMzQ8L3RheD48YXBwbHlSZW1hcms_MDAwMDAwMDEwMDwvYXBwbHlSZW1hcms_PGJtYmJoPjIzMjMyMzI8L2JtYmJoPjxTTEJaPjA8L1NMQlo_PFJlZEludlJlcUJpbGxNeD48R29vZHNNeD48Z29vZE5hbWU_xtXMvLDlUTIzNUI8L2dvb2ROYW1lPjxzcGVjPjQwKjIyMDAqTDwvc3BlYz48cHJpY2U_MzYxOS40NjkwMjY1NTwvcHJpY2U_PG51bT4tMjc8L251bT48dGF4ZnJlZWFtdD4tOTc3MjUuNjY8L3RheGZyZWVhbXQ_PHRheHJhdGU_MC4xMzwvdGF4cmF0ZT48dGF4Pi0xMjcwNC4zNDwvdGF4Pjx3aXRoVGF4RmxhZz5OPC93aXRoVGF4RmxhZz48c3BibT4xMDgwMjA3MDc8L3NwYm0_PHloemNicz4wPC95aHpjYnM_IDwvR29vZHNNeD4gICAgICAgICAgICA8L1JlZEludlJlcUJpbGxNeD4KICAgICAgICA8L1JlZEludlJlcUJpbGw_CiAgICA8L0lOUFVUPgo8L0ZQWFQ_";
JSONObject jsonObject = new JSONObject();
jsonObject.put("param",param);
String aa = JSONUtil.toJsonStr(jsonObject);
- String requestUrl = clientIp + "?SID=33&SIDParam=" + Base64.encode(aa,"GB2312").replace("+", "_");
+ log.info("【总部控制台】实际发送报文:{}",Base64.encode(aa,"GB2312").replace("+", "_"));
+ String requestUrl = clientIp + "?SID="+SID+"&SIDParam=" + Base64.encode(aa,"GB2312").replace("+", "_");
requestUrl = requestUrl.replaceAll("\r|\n","");
try {