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 {