From ce927b23c13be70fb425bb7c861864114ced70a0 Mon Sep 17 00:00:00 2001 From: kk <1910333201@qq.com> Date: Thu, 9 Nov 2023 17:02:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=BC=80=E7=A5=A8=E9=87=8D?= =?UTF-8?q?=E5=A4=8D=E5=BC=80=E7=A5=A8=E6=A0=A1=E9=AA=8C=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../http/invoice/v1/InvoiceController.java | 5 +- .../invoice/service/IInvoiceApiService.java | 2 +- .../AisinoInvoiceRequestAdapterImpl.java | 8 +- .../AisinoConsoleInvoiceApiServiceImpl.java | 2 +- ...noConsoleInvoiceApiZhongQiServiceImpl.java | 77 +++++++++++++------ .../api/ElephantInvoiceApiServiceImpl.java | 2 +- .../api/ElephantInvoiceApiV6ServiceImpl.java | 2 +- .../impl/api/JcskInvoiceApiServiceImpl.java | 2 +- .../invoice/task/AddInvoiceBatchTask.java | 10 +-- .../invoice/task/InvoiceBackTask.java | 11 ++- 10 files changed, 83 insertions(+), 38 deletions(-) diff --git a/jianshui-admin/src/main/java/com/jianshui/api/controller/http/invoice/v1/InvoiceController.java b/jianshui-admin/src/main/java/com/jianshui/api/controller/http/invoice/v1/InvoiceController.java index a6e68c1..9c4a069 100644 --- a/jianshui-admin/src/main/java/com/jianshui/api/controller/http/invoice/v1/InvoiceController.java +++ b/jianshui-admin/src/main/java/com/jianshui/api/controller/http/invoice/v1/InvoiceController.java @@ -1829,7 +1829,7 @@ public class InvoiceController { @ApiImplicitParam(name = "identity", value = "身份认证", dataType = "java.lang.Void", example = "1130", required = true), @ApiImplicitParam(name = "order", value = "请求体", dataType = "java.lang.Void", required = true)}) @PostMapping({"/api/invoice/v1/addInvoiceBatch", "/api/invoice/v1/addInvoiceBatch/{identity}", "/invoice/addInvoiceBatch"}) - public AjaxResult addInvoiceBatch(HttpServletRequest request, String identity) throws Exception { + public void addInvoiceBatch(HttpServletRequest request, String identity) throws Exception { log.info("[重汽批量开票接口]{},请求开票接口!", identity); // 前置处理 @@ -1844,7 +1844,7 @@ public class InvoiceController { } if (StringUtils.isEmpty(rawJson)) { log.info("[重汽批量开票接口]未获取到请求参数!identity={},e={}", identity); - return AjaxResult.error("未获取到请求参数!"); + return; } String order = rawJson.getString("order"); @@ -1854,7 +1854,6 @@ public class InvoiceController { log.info("[重汽批量开票接口]{},执行完成!", identity); - return AjaxResult.success("数据接受成功!"); } diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/IInvoiceApiService.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/IInvoiceApiService.java index faa80ea..4e24e0a 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/IInvoiceApiService.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/IInvoiceApiService.java @@ -350,5 +350,5 @@ public interface IInvoiceApiService { HXResponse qrcodeResult(JSONObject decryptResult, Companyservice companyservice); /** 回调方法*/ - void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id); + void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, String identity,Long id); } \ No newline at end of file diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java index c1405d8..724eb2e 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/adapter/request/AisinoInvoiceRequestAdapterImpl.java @@ -331,7 +331,7 @@ public class AisinoInvoiceRequestAdapterImpl implements IInvoiceRequestService { // 平台解密 try { // TODO: 2023/9/20 - order = AisinoInvoiceDecryptUtil.decrypt(order, JKey); +// order = AisinoInvoiceDecryptUtil.decrypt(order, JKey); } catch (Exception e) { e.printStackTrace(); throw new JianshuiParamErrorException(ErrorCode.DECRYPT_ERROR, companyservice, "invoice"); @@ -411,6 +411,12 @@ public class AisinoInvoiceRequestAdapterImpl implements IInvoiceRequestService { if (StringUtils.equals(serviceKey, "addBatch") ) { JSONArray billInfoList = JSONUtil.parseArray(json.get("billInfo")); + + //开票条数限制 + /*if(billInfoList.size() > 2000){ + throw new JianshuiParamErrorException("最大支持开票条数2000条", companyservice, "invoice"); + }*/ + JSONArray billInfoResult = new JSONArray(); for (Object billInfoTemp : billInfoList) { 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 46b8195..15fbcb4 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 @@ -1040,7 +1040,7 @@ public class AisinoConsoleInvoiceApiServiceImpl implements IInvoiceApiService { } @Override - public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id) { + public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl,String identity,Long id) { } 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 1ff3a73..8cc2db8 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 @@ -100,9 +100,8 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer @Override public HXResponse addInvoice(BillInfo billInfo, Companyservice companyservice) throws IllegalAccessException, InstantiationException { - return new HXResponse("单票接口已关闭!请调用批量接口!"); - /* // 1.订单唯一校验。新增历史订单部分(删除)。 + // 1.订单唯一校验。新增历史订单部分(删除)。 // 订单号唯一校验 start String outNO = billInfo.getOutTradeOrderno() != null ? billInfo.getOutTradeOrderno() : ""; if (StrUtil.isEmpty(outNO)) { @@ -111,22 +110,47 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer // update_by 0未删除 1已删除 Invoice invoiceValidateTemp = new Invoice(); List invoicesValidate = invoiceMapper.selectByOutTradeOrdernoList(companyservice.getCompanyid(), outNO, "0"); - // 这里去直接跳出,更新推送关系表去重新推送一下看看。 - if (CollectionUtils.isEmpty(invoicesValidate)) { + + // 开票回调失败防重复处理 start + if (!CollectionUtils.isEmpty(invoicesValidate)) { for (Invoice invoice : invoicesValidate) { QueryWrapper invoiceBackQueryWrapper = new QueryWrapper<>(); invoiceBackQueryWrapper.eq("system_orderno", invoice.getOutTradeOrderno()); - List invoiceBackList = invoiceBackMapper.selectList(invoiceBackQueryWrapper); - - for (InvoiceBack invoiceBack : invoiceBackList) { - if ("0000".equals(invoiceBack.getResultCode())) { - invoiceBack.setStatus("0"); - invoiceBackMapper.updateInvoiceBack(invoiceBack); - log.error("【销项】【总部控制台发票】开票接口,重复订单启动推送,订单号={}", invoice.getOutTradeOrderno()); - return new HXResponse("0000", "重复订单已推送!"); - } + InvoiceBack invoiceBackVali = invoiceBackMapper.selectOne(invoiceBackQueryWrapper); + + if(BeanUtil.isEmpty(invoiceBackVali)){ + invoiceBackVali = new InvoiceBack(); + invoiceBackVali.setSystemOrderno(invoice.getOutTradeOrderno()); + invoiceBackVali.setCreateTime(new Date()); + + invoiceBackVali.setId(IdUtils.randomUUID()); + invoiceBackVali.setIdentity(companyservice.getIdentity()); + invoiceBackVali.setBackUrl(""); + invoiceBackVali.setStatus("0"); + invoiceBackVali.setCreateTime(new Date()); + invoiceBackVali.setSystemOrderno(invoice.getOutTradeOrderno()); + invoiceBackVali.setBackMsg(""); + invoiceBackVali.setResultCode("0000"); + invoiceBackVali.setResultMsg("开票成功!"); + invoiceBackVali.setUpdateTime(new Date()); + invoiceBackMapper.insertInvoiceBack(invoiceBackVali); + + }else{ + invoiceBackVali.setResultCode("0000"); + invoiceBackVali.setResultMsg("开票成功!"); + invoiceBackVali.setStatus("0"); + invoiceBackVali.setUpdateTime(new Date()); + invoiceBackMapper.updateInvoiceBack(invoiceBackVali); + } + + // 再次推送 + try { + callBackAisino(invoiceBackVali, "", companyservice.getIdentity(),invoice.getId()); + } catch (Exception e) { + log.info("【重汽批量开票】发票回调失败!invoiceId={}", invoice.getId()); } } + return new HXResponse("0000", "重复订单已推送!"); } // end @@ -178,12 +202,12 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer // 销方地址电话 // 2022/12/21 中举说浪潮的地址和电话都放到 sellerAddress字段里了 - *//*String sellerAddress = billInfo.getSellerAddress(); + /*String sellerAddress = billInfo.getSellerAddress(); String sellerTelephone = billInfo.getSellerTelephone(); if (StrUtil.isEmpty(sellerAddress) || StrUtil.isEmpty(sellerTelephone)) { return new HXResponse("销方地址电话不存在!"); } - aisinoConsoleInvoiceAddDTO.setSellerAddressTel(sellerAddress + sellerTelephone);*//* + aisinoConsoleInvoiceAddDTO.setSellerAddressTel(sellerAddress + sellerTelephone);*/ String sellerAddress = billInfo.getSellerAddress(); if (StrUtil.isEmpty(sellerAddress)) { return new HXResponse("销方地址电话不存在!"); @@ -381,7 +405,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer invoiceMapper.batchInvoiceDetail(invoiceDetailList); - // TODO: 2023/9/26 增加主动回调方式,可配置 + // 增加主动回调方式,可配置 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())) { @@ -399,24 +423,30 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer queryInvoiceBack.setCreateTime(new Date()); queryInvoiceBack.setSystemOrderno(billInfo.getOutTradeOrderno()); queryInvoiceBack.setBackMsg(""); + queryInvoiceBack.setResultCode("0000"); + queryInvoiceBack.setResultMsg("开票成功!"); + queryInvoiceBack.setUpdateTime(new Date()); invoiceBackMapper.insertInvoiceBack(queryInvoiceBack); } else { queryInvoiceBack = invoiceBackList.get(0); + queryInvoiceBack.setResultCode("0000"); + queryInvoiceBack.setResultMsg("开票成功!"); + queryInvoiceBack.setUpdateTime(new Date()); } // 回调,失败的交给定时任务 InvoiceBack finalQueryInvoiceBack = queryInvoiceBack; try { - callBackAisino(finalQueryInvoiceBack, callBackUrl, invoice.getId()); + callBackAisino(finalQueryInvoiceBack, callBackUrl, "",invoice.getId()); } catch (Exception e) { log.info("【重汽批量开票】发票回调失败!invoiceId={}", invoice.getId()); } - *//*AsyncManager.me().execute(new TimerTask() { + /*AsyncManager.me().execute(new TimerTask() { @Override public void run() { } - });*//* + });*/ } HXResponse response = new HXResponse("0000", "同步成功"); @@ -424,7 +454,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer return response; } else { return new HXResponse(retmsg); - }*/ + } } /** @@ -435,7 +465,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer * @param id */ @Override - public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id) { + public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, String identity,Long id) { // TODO: 2023/10/27 回调处理 @@ -447,7 +477,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer // 回调地址获取 if (StrUtil.isEmpty(callBackUrl)) { ICompanyservicePropService companyserviceProp = SpringUtils.getBean(ICompanyservicePropService.class); - CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(id, "aisino_callback_url"); + CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(Long.valueOf(identity), "aisino_callback_url"); if (BeanUtil.isNotEmpty(secretIdProp) && secretIdProp.getValue() != null && !"".equals(secretIdProp.getValue())) { callBackUrl = secretIdProp.getValue(); } @@ -480,13 +510,16 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer if ("0000".equals(status)) { invoiceBack.setStatus("1"); invoiceBack.setBackMsg(message); + invoiceBack.setUpdateTime(new Date()); invoiceBackMapper.updateInvoiceBack(invoiceBack); } else if ("9999".equals(status)) { invoiceBack.setStatus("3"); invoiceBack.setBackMsg(message); + invoiceBack.setUpdateTime(new Date()); invoiceBackMapper.updateInvoiceBack(invoiceBack); } else { invoiceBack.setStatus("2"); + invoiceBack.setUpdateTime(new Date()); invoiceBack.setBackMsg(status + message); invoiceBackMapper.updateInvoiceBack(invoiceBack); } diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiServiceImpl.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiServiceImpl.java index 042714a..b3d4236 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiServiceImpl.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiServiceImpl.java @@ -864,7 +864,7 @@ public class ElephantInvoiceApiServiceImpl implements IInvoiceApiService { } @Override - public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id) { + public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, String identity,Long id) { } diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiV6ServiceImpl.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiV6ServiceImpl.java index a9d1de6..1a3f5f3 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiV6ServiceImpl.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/ElephantInvoiceApiV6ServiceImpl.java @@ -885,7 +885,7 @@ public class ElephantInvoiceApiV6ServiceImpl implements IInvoiceApiService { } @Override - public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id) { + public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, String identity,Long id) { } diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/JcskInvoiceApiServiceImpl.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/JcskInvoiceApiServiceImpl.java index 738d8ae..28dfd7e 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/JcskInvoiceApiServiceImpl.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/service/impl/api/JcskInvoiceApiServiceImpl.java @@ -1650,7 +1650,7 @@ public class JcskInvoiceApiServiceImpl implements IInvoiceApiService { } @Override - public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, Long id) { + public void callBackAisino(InvoiceBack invoiceBack, String callBackUrl, String identity,Long id) { } diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/task/AddInvoiceBatchTask.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/task/AddInvoiceBatchTask.java index 06ebadf..b00a1bf 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/task/AddInvoiceBatchTask.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/task/AddInvoiceBatchTask.java @@ -99,7 +99,7 @@ public class AddInvoiceBatchTask extends TimerTask { try { String requestAdapterKey = serviceManageService.getRequestAdapterKey("invoice", companyservice.getCompanyid()); IInvoiceRequestService invoiceRequestService = invoiceRequestFactory.getService(requestAdapterKey); - decryptResult = invoiceRequestService.decryptZq(order,identity, companyservice, "addBatch"); + decryptResult = invoiceRequestService.decryptZq(identity,order, companyservice, "addBatch"); } catch (Exception e) { log.info("[重汽批量开票接口]请求解密失败!identity={},e={}", identity, e); return; @@ -183,7 +183,7 @@ public class AddInvoiceBatchTask extends TimerTask { invoiceBackTemp.setUpdateTime(new Date()); invoiceBackMapper.updateInvoiceBack(invoiceBackTemp); - invoiceService.callBackAisino(invoiceBackTemp, "", Long.valueOf(identity)); + invoiceService.callBackAisino(invoiceBackTemp, "", identity,0L); } else { invoiceBack.setResultCode("9999"); invoiceBack.setResultMsg(resultHx.getMessage()); @@ -192,7 +192,7 @@ public class AddInvoiceBatchTask extends TimerTask { invoiceBack.setCreateTime(new Date()); invoiceBackMapper.insertInvoiceBack(invoiceBack); - invoiceService.callBackAisino(invoiceBack, "", Long.valueOf(identity)); + invoiceService.callBackAisino(invoiceBack, "", identity,0L); } log.info("[重汽批量开票接口]提交开票异常,开票失败!identity={},msg={}", identity, resultHx.getMessage()); continue; @@ -211,7 +211,7 @@ public class AddInvoiceBatchTask extends TimerTask { invoiceBackTemp.setUpdateTime(new Date()); invoiceBackMapper.updateInvoiceBack(invoiceBackTemp); - invoiceService.callBackAisino(invoiceBackTemp, "", Long.valueOf(identity)); + invoiceService.callBackAisino(invoiceBackTemp, "", identity,0L); } else { invoiceBack.setResultCode("9999"); invoiceBack.setResultMsg("开票失败!"); @@ -220,7 +220,7 @@ public class AddInvoiceBatchTask extends TimerTask { invoiceBack.setCreateTime(new Date()); invoiceBackMapper.insertInvoiceBack(invoiceBack); - invoiceService.callBackAisino(invoiceBack, "", Long.valueOf(identity)); + invoiceService.callBackAisino(invoiceBack, "", identity,0L); } log.info("[重汽批量开票接口]提交开票异常,开票失败!identity={},e={}", identity, e); diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/task/InvoiceBackTask.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/task/InvoiceBackTask.java index 2d553f7..8a1f1df 100644 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/task/InvoiceBackTask.java +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/task/InvoiceBackTask.java @@ -18,6 +18,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.Date; import java.util.List; /** @@ -40,8 +41,8 @@ public class InvoiceBackTask public void bkParams(String params) { // TODO: 2023/11/9 回调次数处理 - // 默认10次 - int j = params == null ? 10: Integer.parseInt(params) ; + // 默认1次 定时任务控制,补偿机制 + int j = params == null ? 1: Integer.parseInt(params) ; log.info("[重汽回调定时任务开始执行]---{}次",params); @@ -65,6 +66,7 @@ public class InvoiceBackTask log.info("【控制台】发票回调,未配置回调地址{}"+identity); invoiceBack.setStatus("3"); invoiceBack.setBackMsg("未配置回调地址"); + invoiceBack.setUpdateTime(new Date()); invoiceBackMapper.updateInvoiceBack(invoiceBack); break; } @@ -76,6 +78,7 @@ public class InvoiceBackTask log.info("【控制台】发票回调,id为空"); invoiceBack.setStatus("3"); invoiceBack.setBackMsg("id为空"); + invoiceBack.setUpdateTime(new Date()); invoiceBackMapper.updateInvoiceBack(invoiceBack); break; } @@ -106,14 +109,17 @@ public class InvoiceBackTask if("0000".equals(status)){ invoiceBack.setStatus("1"); invoiceBack.setBackMsg(message); + invoiceBack.setUpdateTime(new Date()); invoiceBackMapper.updateInvoiceBack(invoiceBack); }else if("9999".equals(status)){ invoiceBack.setStatus("3"); invoiceBack.setBackMsg(message); + invoiceBack.setUpdateTime(new Date()); invoiceBackMapper.updateInvoiceBack(invoiceBack); }else { invoiceBack.setStatus("3"); invoiceBack.setBackMsg(status+message); + invoiceBack.setUpdateTime(new Date()); invoiceBackMapper.updateInvoiceBack(invoiceBack); } break; @@ -122,6 +128,7 @@ public class InvoiceBackTask log.info("【控制台】发票回调接口,发送数据异常,id={}", id); invoiceBack.setStatus("2"); invoiceBack.setBackMsg("发送数据异常"); + invoiceBack.setUpdateTime(new Date()); invoiceBackMapper.updateInvoiceBack(invoiceBack); } i++;