diff --git a/jianshui-admin/src/main/java/com/jianshui/web/controller/sandbox/IndexController.java b/jianshui-admin/src/main/java/com/jianshui/web/controller/sandbox/IndexController.java
index a63ea54..2566da0 100644
--- a/jianshui-admin/src/main/java/com/jianshui/web/controller/sandbox/IndexController.java
+++ b/jianshui-admin/src/main/java/com/jianshui/web/controller/sandbox/IndexController.java
@@ -3,7 +3,11 @@ package com.jianshui.web.controller.sandbox;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONCreator;
import com.jianshui.common.core.domain.AjaxResult;
+import com.jianshui.common.core.domain.entity.Companyservice;
import com.jianshui.common.utils.encrypt.InvoiceEncryptUtil;
+import com.jianshui.system.mapper.CompanyserviceMapper;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -16,15 +20,47 @@ import org.springframework.web.bind.annotation.RestController;
**/
@RestController
@RequestMapping("/sandbox")
+@Slf4j
public class IndexController {
+ @Autowired
+ private CompanyserviceMapper companyserviceMapper;
+
@PostMapping("/encrypt")
public AjaxResult encrypt(@RequestBody JSONObject requestBody) {
String key = requestBody.getString("key");
String order = requestBody.getString("order");
+ // 查询企业信息
+ Companyservice companyservice = companyserviceMapper.selectCompanyserviceByIdentity(key);
+ try {
+ if (companyservice != null){
+ String encryptTest = InvoiceEncryptUtil.encrypt(order, companyservice.getSecret());
+ return AjaxResult.success("success", encryptTest);
+ }else {
+ String encryptTest = InvoiceEncryptUtil.encrypt(order, key);
+ return AjaxResult.success("success", encryptTest);
+ }
+ }catch (Exception e){
+ return AjaxResult.error(e.getMessage());
+ }
+
+ }
+
+
+ @PostMapping("/decrypt")
+ public AjaxResult decrypt(@RequestBody JSONObject requestBody) {
+ String key = requestBody.getString("key");
+ String order = requestBody.getString("order");
+ // 查询企业信息
+ Companyservice companyservice = companyserviceMapper.selectCompanyserviceByIdentity(key);
try {
- String encryptTest = InvoiceEncryptUtil.encrypt(order, key);
- return AjaxResult.success("success", encryptTest);
+ if (companyservice != null){
+ String decryptTest = InvoiceEncryptUtil.decrypt(order, companyservice.getSecret());
+ return AjaxResult.success("success", decryptTest);
+ }else {
+ String decryptTest = InvoiceEncryptUtil.decrypt(order, key);
+ return AjaxResult.success("success", decryptTest);
+ }
}catch (Exception e){
return AjaxResult.error(e.getMessage());
}
diff --git a/jianshui-common/src/main/java/com/jianshui/common/utils/encrypt/InvoiceEncryptUtil.java b/jianshui-common/src/main/java/com/jianshui/common/utils/encrypt/InvoiceEncryptUtil.java
index 7cab596..038c6e2 100644
--- a/jianshui-common/src/main/java/com/jianshui/common/utils/encrypt/InvoiceEncryptUtil.java
+++ b/jianshui-common/src/main/java/com/jianshui/common/utils/encrypt/InvoiceEncryptUtil.java
@@ -3,12 +3,19 @@ package com.jianshui.common.utils.encrypt;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
+import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
+import javax.crypto.IllegalBlockSizeException;
+import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+import java.util.Arrays;
/**
* 功能描述
@@ -65,6 +72,77 @@ public class InvoiceEncryptUtil {
}
+ public static String decrypt(String encryptedStr, String mkey) {
+ byte[] encryptedData = {};
+ try {
+ // 解析Base64编码的字符串
+ encryptedData = new BASE64Decoder().decodeBuffer(encryptedStr);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+
+ // 取密钥和偏转向量
+ byte[] key = new byte[8];
+ byte[] iv = new byte[8];
+ getKeyIV(mkey, key, iv);
+ SecretKeySpec deskey = new SecretKeySpec(key, "DES");
+ IvParameterSpec ivParam = new IvParameterSpec(iv);
+
+ // 使用DES算法解密消息体
+ byte[] decryptedData = null;
+ try {
+ Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
+ cipher.init(Cipher.DECRYPT_MODE, deskey, ivParam);
+ decryptedData = cipher.doFinal(encryptedData);
+ } catch (NoSuchAlgorithmException | NoSuchPaddingException |
+ InvalidKeyException | InvalidAlgorithmParameterException |
+ IllegalBlockSizeException | BadPaddingException e) {
+ e.printStackTrace();
+ return null;
+ }
+
+ // 分离出MD5哈希和原始数据
+ byte[] originalData = null;
+ byte[] calculatedMD5Hash = null;
+ // 假设MD5哈希占用16字节
+ if (decryptedData.length >= 16) {
+ calculatedMD5Hash = new byte[16];
+ originalData = new byte[decryptedData.length - 16];
+ System.arraycopy(decryptedData, 0, calculatedMD5Hash, 0, 16);
+ System.arraycopy(decryptedData, 16, originalData, 0, originalData.length);
+ } else {
+ // 数据长度不符合预期,可能被篡改
+ return null;
+ }
+
+ // 验证MD5哈希
+ byte[] recalculatedMD5Hash = null;
+ try {
+ recalculatedMD5Hash = MD5Hash(originalData, 0, originalData.length);
+ } catch (Exception e) {
+ e.printStackTrace();
+ return null;
+ }
+
+ // MD5校验失败
+ if (!Arrays.equals(calculatedMD5Hash, recalculatedMD5Hash)) {
+ return null;
+ }
+
+ // 将原始数据转换回字符串
+ String originalStr = null;
+ try {
+ originalStr = new String(originalData, "UTF-8");
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ return null;
+ }
+
+ return originalStr;
+ }
+
+
/**
*
* 方法名称:DES_CBC_Encrypt
diff --git a/jianshui-common/src/main/java/com/jianshui/common/utils/encrypt/JianshuiInvoiceEncryptUtil.java b/jianshui-common/src/main/java/com/jianshui/common/utils/encrypt/JianshuiInvoiceEncryptUtil.java
index 4e0d197..33eb8f2 100644
--- a/jianshui-common/src/main/java/com/jianshui/common/utils/encrypt/JianshuiInvoiceEncryptUtil.java
+++ b/jianshui-common/src/main/java/com/jianshui/common/utils/encrypt/JianshuiInvoiceEncryptUtil.java
@@ -202,8 +202,8 @@ public class JianshuiInvoiceEncryptUtil {
System.out.println("AES密钥:");
System.out.println(keyHex);
- String str = "{\"FHHS\":1,\"FPZHXX\":[{\"FPDM\":\"243170000003\",\"FPHM\":\"90763134\",\"FPLXDM\":\"31\",\"GMFSBH\":\"9137132733425975X9\",\"SQRZLX\":\"1\",\"SQSKSSQ\":\"202406\",\"YXSE\":\"1998.00\",\"invoiceId\":\"037e550cafdf9fe36f5236e52efd0000\"}],\"GMFSBH\":\"9137132733425975X9\",\"PCH\":\"0386183bd54f9b5287705c36895b0000\",\"taxNo\":\"9137132733425975X9\"}";
- String key = "10OOM+SR3PT3WFRMTlzU9g==";
+ String str = "{\"terminalNumber\":\"\",\"orderno\":\"fcd3a67d-6a6e-f714-0790-c705db41403d\",\"sellerBank\":null,\"checker\":\"\",\"saleaddress\":null,\"payee\":\"\",\"hsbz\":\"2\",\"kjlx\":\"\",\"saleaccount\":null,\"qdbz\":\"0\",\"ext\":{\"sfhqsyed\":false},\"xsfnsrsbh\":\"92370214MACAAEK16E\",\"xsflxdh\":null,\"cpybz\":\"0\",\"fjh\":\"\",\"tax\":\"0.3\",\"dkbz\":\"0\",\"phone\":\"\",\"dqbm\":\"\",\"xsfyhzh\":null,\"jshj\":\"10.3\",\"tsfs\":\"2\",\"detail\":[{\"fphxz\":\"0\",\"lslbs\":\"\",\"unit\":\"\",\"hsbz\":\"0\",\"taxrate\":\"0.03\",\"yhzcbs\":\"0\",\"zzstsgl\":\"\",\"price\":\"\",\"num\":\"\",\"goodsname\":\"维修费\",\"spbm\":\"202\",\"spec\":\"\",\"taxfreeamt\":\"10.00\",\"tax\":\"0.30\",\"taxamt\":\"10.30\"}],\"taxamt\":\"10\",\"saletaxnum\":\"92370214MACAAEK16E\",\"sellerName\":\"城阳区兴顺通制冷设备维修服务部\",\"billInfono\":\"\",\"xsfkhh\":null,\"fpqqlsh\":\"fcd3a67d-6a6e-f714-0790-c705db41403d\",\"qdxmmc\":\"\",\"gfxxconfirm\":\"\",\"invoiceLine\":\"82\",\"serviceId\":\"lzfpkj\",\"email\":\"\",\"salephone\":null,\"address\":\"北京市-西城区-市岱岳区山口镇油坊村 80965631\",\"fpdm\":\"\",\"bsrysfzjhm\":\"370882198408212815\",\"kptype\":\"1\",\"message\":\"\",\"clerk\":\"鹿旭\",\"async\":\"true\",\"xsfmc\":\"城阳区兴顺通制冷设备维修服务部\",\"xsfdz\":null,\"taxnum\":\"91370112MA3C5P3322\",\"jqbh\":\"370882198408212815\",\"account\":\"中国建设银行济南市泉城支行 376010100101019236\",\"invoicedate\":\"2024-01-30\",\"buyername\":\"高速公路有限公司\",\"fphm\":\"\"}";
+ String key = "S1jIlJRLXBNtIFihvQ0VPw==";
System.out.println(encryptAES(str,key));
diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/elephant/DDFPXX.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/elephant/DDFPXX.java
index 23c9963..07c6d4c 100644
--- a/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/elephant/DDFPXX.java
+++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/dto/api/elephant/DDFPXX.java
@@ -67,11 +67,11 @@ public class DDFPXX {
private String DDZTXX;
private String TQM;
private String DTM;
- private String BYZD1;
- private String BYZD2;
- private String BYZD3;
- private String BYZD4;
- private String BYZD5;
+ private Date BYZD1;
+ private Date BYZD2;
+ private Date BYZD3;
+ private Date BYZD4;
+ private Date BYZD5;
public void setDDQQLSH(String DDQQLSH) {
this.DDQQLSH = DDQQLSH;
}
@@ -457,38 +457,38 @@ public class DDFPXX {
return DTM;
}
- public void setBYZD1(String BYZD1) {
+ public void setBYZD1(Date BYZD1) {
this.BYZD1 = BYZD1;
}
- public String getBYZD1() {
+ public Date getBYZD1() {
return BYZD1;
}
- public void setBYZD2(String BYZD2) {
+ public void setBYZD2(Date BYZD2) {
this.BYZD2 = BYZD2;
}
- public String getBYZD2() {
+ public Date getBYZD2() {
return BYZD2;
}
- public void setBYZD3(String BYZD3) {
+ public void setBYZD3(Date BYZD3) {
this.BYZD3 = BYZD3;
}
- public String getBYZD3() {
+ public Date getBYZD3() {
return BYZD3;
}
- public void setBYZD4(String BYZD4) {
+ public void setBYZD4(Date BYZD4) {
this.BYZD4 = BYZD4;
}
- public String getBYZD4() {
+ public Date getBYZD4() {
return BYZD4;
}
- public void setBYZD5(String BYZD5) {
+ public void setBYZD5(Date BYZD5) {
this.BYZD5 = BYZD5;
}
- public String getBYZD5() {
+ public Date getBYZD5() {
return BYZD5;
}
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 b52e27e..fd4c1dd 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
@@ -1,6 +1,5 @@
package com.jianshui.invoice.task;
-import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
@@ -9,15 +8,15 @@ import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.jianshui.common.core.domain.entity.Companyservice;
+import com.jianshui.common.utils.StringUtils;
import com.jianshui.common.utils.spring.SpringUtils;
import com.jianshui.invoice.constant.aisino.console.AisinoConsoleConstants;
import com.jianshui.invoice.domain.*;
import com.jianshui.invoice.domain.dto.ExportVehicleDTO;
import com.jianshui.invoice.domain.dto.HXResponse;
-import com.jianshui.invoice.enums.InvoiceBackStatusEnum;
import com.jianshui.invoice.factory.IInvoiceServiceFactory;
-import com.jianshui.invoice.mapper.BillInfoMapper;
import com.jianshui.invoice.mapper.InvoiceBackMapper;
import com.jianshui.invoice.mapper.InvoiceMapper;
import com.jianshui.invoice.service.IInvoiceApiService;
@@ -55,21 +54,17 @@ public class InvoiceBackTask {
@Autowired
private IInvoiceServiceFactory invoiceServiceFactory;
- @Autowired
- private BillInfoMapper billInfoMapper;
-
private final String ZQ_BACK_DXHY = "【重汽回调(开票中单据)】";
- private final String ZQ_BACK = "【重汽回调】";
- /* *//**
+ /**
* @author kk
* @date 9:03
* @param: [params]
* @return: 开票回调
- *//*
+ */
public void bkParams(String params) {
// TODO: 2023/11/9 回调次数处理
// 默认1次 定时任务控制,补偿机制
@@ -172,7 +167,7 @@ public class InvoiceBackTask {
}
log.info("[重汽回调定时任务执行结束]---");
}
-*/
+
/**
* @author kk
@@ -221,133 +216,113 @@ public class InvoiceBackTask {
public void sdBackInvoice() {
// 发票回调补偿机制。
- log.info("================================[重汽回调定时任务开始执行]=============================");
- log.info("{}:查询回调表信息,查询条件为:status=0,2,3", ZQ_BACK);
+ log.info("[重汽回调定时任务开始执行]");
+
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", "0").or().eq("status", "2").or().eq("status", "3");
List invoiceBackList = invoiceBackMapper.selectList(queryWrapper);
- log.info("{}:查询到{}条带回调订单", ZQ_BACK, invoiceBackList.size());
+ log.info("【重汽回调】查询到{}条带回调订单", invoiceBackList.size());
for (InvoiceBack invoiceBack : invoiceBackList) {
String id = invoiceBack.getSystemOrderno();
String identity = invoiceBack.getIdentity();
- log.info("{}:开始处理回调订单,identity={},id={},", ZQ_BACK, identity, id);
if (StrUtil.isEmpty(id)) {
- log.info("{}:发票回调,回调id为空", ZQ_BACK);
- invoiceBack.setStatus(InvoiceBackStatusEnum.MULTIPLE_FAILURES.getCode());
- invoiceBack.setBackMsg("运维排查:传入id为空");
+ log.info("【控制台】发票回调,id为空");
+ invoiceBack.setStatus("3");
+ invoiceBack.setBackMsg("id为空");
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
continue;
}
- log.info("{}:订单号{},开始回调", ZQ_BACK, id);
+
+ log.info("【重汽回调】订单号{},开始回调", id);
ICompanyservicePropService companyserviceProp = SpringUtils.getBean(ICompanyservicePropService.class);
CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(Long.valueOf(identity), "aisino_callback_url");
if (secretIdProp == null || secretIdProp.getValue() == null || "".equals(secretIdProp.getValue())) {
- log.info("{}发票回调,未配置回调地址{}", ZQ_BACK, identity);
- invoiceBack.setStatus(InvoiceBackStatusEnum.MULTIPLE_FAILURES.getCode());
- invoiceBack.setBackMsg("运维排查:未配置回调地址");
+ log.info("【重汽回调】发票回调,未配置回调地址{}",identity);
+ invoiceBack.setStatus("3");
+ invoiceBack.setBackMsg("未配置回调地址");
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
continue;
}
String callBackUrl = secretIdProp.getValue();
- log.info("{}:发票回调,订单号{},回调地址{}", ZQ_BACK, id, callBackUrl);
-
- Invoice invoice = invoiceMapper.selectBySystemOrderNo(Long.valueOf(identity), id);
+ log.info("【重汽回调】发票回调,订单号{},回调地址{}",id, callBackUrl);
+ Invoice invoice = invoiceMapper.selectByOutTradeOrderno(Long.valueOf(identity), id, "0");
if (invoice == null) {
- log.info("{}:当前发票未查询到Invoice信息,开始请求大象接口获取", ZQ_BACK);
- log.info("通过billInfo组装,id为:{}", id);
- BillInfo billInfo = billInfoMapper.selectBySystemOrderNo(Long.valueOf(identity), id);
- if (BeanUtil.isEmpty(billInfo)) {
- log.info("{}:billInfo中不存咋,id为:{}", ZQ_BACK, id);
- }
-
- // 发票查询
- String messageQhery = getInvoiceQuery(invoiceBack, billInfo);
+ log.info("【重汽回调】发票信息未查询到,id={}", id);
+ invoice = new Invoice();
+ invoice.setOutTradeOrderno(invoiceBack.getSystemOrderno());
+ invoice.setState(22);
+ invoice.setMessage( (invoiceBack.getResultMsg() != null && invoiceBack.getResultMsg().length() > 200) ? invoiceBack.getResultMsg().substring(0, 200) : invoiceBack.getResultMsg() );
+ }
- invoice = invoiceMapper.selectBySystemOrderNo(Long.valueOf(identity), id);
- log.info("{}:调用回调接口拉取后,Invoice存在状态为{},回调查询发票结果为:{}", ZQ_BACK, invoice != null, messageQhery);
- if (invoice == null) {
- log.info("{}:查询到Invoice信息,回调后还是未查询到Invoice", ZQ_BACK);
- invoiceBack.setStatus(InvoiceBackStatusEnum.MULTIPLE_FAILURES.getCode());
- invoiceBack.setBackMsg("k:回调后还是未查询到Invoice");
- invoiceBack.setUpdateTime(new Date());
- invoiceBackMapper.updateInvoiceBack(invoiceBack);
- continue;
+ if(invoice != null){
+ // 明细重插
+ List invoiceDetailList = invoiceMapper.selectInvoiceIdForInvoiceDetailList(invoice.getId());
+ if(!invoiceDetailList.isEmpty()){
+ invoice.setInvoiceDetailList(invoiceDetailList);
}
-
}
- Integer stateInvoice = invoice.getState();
- String fpqqlsh = invoice.getFpqqlsh();
- String ddh = invoice.getOutTradeOrderno();
- log.info("{}:查询到Invoice信息,发票状态为:{}", ZQ_BACK, stateInvoice);
- if (stateInvoice == 20) {
- // 开票中
- log.info("{}:开具中,调用查询,fpqqlsh={},ddh={}", ZQ_BACK, fpqqlsh, ddh);
- BillInfo billInfo = new BillInfo();
- billInfo.setFpqqlsh(invoice.getFpqqlsh());
- billInfo.setOutTradeOrderno(invoice.getOutTradeOrderno());
- // 发票查询
- String messageQhery = getInvoiceQuery(invoiceBack, billInfo);
-
- invoice = invoiceMapper.selectBySystemOrderNo(Long.valueOf(identity), id);
- log.info("{}:调用回调接口拉取后,Invoice存在状态为{},回调查询发票结果为:{}", ZQ_BACK, invoice != null, messageQhery);
- if (invoice == null) {
- log.info("{}:查询到Invoice信息,回调后还是未查询到Invoice", ZQ_BACK);
- invoiceBack.setStatus(InvoiceBackStatusEnum.MULTIPLE_FAILURES.getCode());
- invoiceBack.setBackMsg("k:回调后还是未查询到Invoice");
- invoiceBack.setUpdateTime(new Date());
- invoiceBackMapper.updateInvoiceBack(invoiceBack);
+ try {
+
+ log.info("【重汽回调】发票回调接口,发送数据开始,id={},orderno={},callBackUrl={},param={}", id, invoice.getOutTradeOrderno(), callBackUrl, JSONUtil.toJsonStr(invoice));
+ String result = HttpUtil.post(callBackUrl, JSONUtil.toJsonStr(invoice));
+ log.info("【重汽回调】发票回调接口,发送数据结束,id={},接口返回信息={}", id, result);
+ JSONObject jsonObject = JSONUtil.parseObj(result);
+ if (jsonObject != null) {
+ String status = jsonObject.get("status") != null ? jsonObject.get("status").toString() : "";
+ String message = jsonObject.get("message") != null ? jsonObject.get("message").toString() : "";
+
+ if ("0000".equals(status)) {
+ invoiceBack.setStatus("1");
+ invoiceBack.setBackMsg(message != null ? message.substring(0, Math.min(message.length(), 200)) : "");
+ invoiceBack.setUpdateTime(new Date());
+ invoiceBackMapper.updateInvoiceBack(invoiceBack);
+ } else if ("9999".equals(status)) {
+ invoiceBack.setStatus("3");
+ invoiceBack.setBackMsg(message != null ? message.substring(0, Math.min(message.length(), 200)) : "");
+ invoiceBack.setUpdateTime(new Date());
+ invoiceBackMapper.updateInvoiceBack(invoiceBack);
+ } else {
+ invoiceBack.setStatus("3");
+ invoiceBack.setBackMsg(status + message != null ? message.substring(0, Math.min(message.length(), 200)) : "");
+ invoiceBack.setUpdateTime(new Date());
+ invoiceBackMapper.updateInvoiceBack(invoiceBack);
+ }
continue;
}
-
- } else if (stateInvoice == 22) {
- // 开票失败
- log.info("{}:开具失败,递交回调,fpqqlsh={},ddh={}", ZQ_BACK, fpqqlsh, ddh);
- } else if (stateInvoice == 2) {
- // 开票成功
- log.info("{}:开具成功,递交回调,fpqqlsh={},ddh={}", ZQ_BACK, fpqqlsh, ddh);
- } else {
- // 未解析状态
- log.info("{}:查询到Invoice信息,发票状态为:{},未解析状态", ZQ_BACK, stateInvoice);
- invoiceBack.setStatus(InvoiceBackStatusEnum.CALLBACK_FAILED.getCode());
- invoiceBack.setBackMsg("发票状态为" + stateInvoice + ",未解析状态");
+ } catch (Exception e) {
+ log.info("【重汽回调】发票回调接口,发送数据异常,id={},e={}", id,e.toString());
+ invoiceBack.setStatus("2");
+ invoiceBack.setBackMsg("发送数据异常");
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
- continue;
}
-
- // 明细重插
- List invoiceDetailList = invoiceMapper.selectInvoiceIdForInvoiceDetailList(invoice.getId());
- if (!invoiceDetailList.isEmpty()) {
- invoice.setInvoiceDetailList(invoiceDetailList);
- }
-
- // 回调重汽
- backZq(id, invoice, callBackUrl, invoiceBack);
}
- log.info("=======================[重汽回调定时任务执行结束]=================================");
+ log.info("[重汽回调定时任务执行结束]---");
}
+
+
/**
- * @author kk
- * @date 16:12
- * @param: []
- * @return: 开票中发票 查询发票状态并回推 -重汽
- */
+ * @author kk
+ * @date 16:12
+ * @param: []
+ * @return: 开票中发票 查询发票状态并回推 -重汽
+ */
public void sdBackInvoiceQueryDxhy() {
// 发票回调补偿机制。
- log.info("============================{}:开始执行,查询条件-5===================================", ZQ_BACK_DXHY);
+ log.info(ZQ_BACK_DXHY + "开始执行]");
QueryWrapper queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", "5");
@@ -367,8 +342,8 @@ public class InvoiceBackTask {
long minutesBetween = DateUtil.between(now, halfAnHourAgo, DateUnit.MINUTE);
// 如果差值大于或等于30分钟,则认为当前时间在半个小时之前
boolean isHalfAnHourAgo = minutesBetween >= 30;
- if (!isHalfAnHourAgo) {
- log.info("{}只查询半个小时之前的单据,之前的交给系统队列,当前单据号:{}暂不回调", ZQ_BACK_DXHY, invoiceBack.getSystemOrderno());
+ if(!isHalfAnHourAgo){
+ log.info(ZQ_BACK_DXHY + "只查询半个小时之前的单据");
continue;
}
@@ -376,7 +351,7 @@ public class InvoiceBackTask {
String identity = invoiceBack.getIdentity();
if (StrUtil.isEmpty(id)) {
- log.info("{}:发票回调,id为空", ZQ_BACK_DXHY);
+ log.info(ZQ_BACK_DXHY + "发票回调,id为空");
invoiceBack.setStatus("3");
invoiceBack.setBackMsg("id为空");
invoiceBack.setUpdateTime(new Date());
@@ -384,13 +359,13 @@ public class InvoiceBackTask {
continue;
}
- log.info("{}:订单号{}", ZQ_BACK_DXHY, id);
+ log.info(ZQ_BACK_DXHY + "订单号{}", id);
ICompanyservicePropService companyserviceProp = SpringUtils.getBean(ICompanyservicePropService.class);
CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(Long.valueOf(identity), "aisino_callback_url");
if (secretIdProp == null || secretIdProp.getValue() == null || "".equals(secretIdProp.getValue())) {
- log.info("{}:发票回调,未配置回调地址{}", ZQ_BACK_DXHY, identity);
+ log.info(ZQ_BACK_DXHY + "发票回调,未配置回调地址{}",identity);
invoiceBack.setStatus("3");
invoiceBack.setBackMsg("未配置回调地址");
invoiceBack.setUpdateTime(new Date());
@@ -399,261 +374,94 @@ public class InvoiceBackTask {
}
String callBackUrl = secretIdProp.getValue();
- log.info(ZQ_BACK_DXHY + "发票回调,订单号{},回调地址{}", id, callBackUrl);
+ log.info(ZQ_BACK_DXHY + "发票回调,订单号{},回调地址{}",id, callBackUrl);
- Invoice invoice = invoiceMapper.selectBySystemOrderNo(Long.valueOf(identity), id);
- if (invoice != null) {
- log.info("通过Invoice组装,id为:{}", id);
- // 明细重插
- List invoiceDetailList = invoiceMapper.selectInvoiceIdForInvoiceDetailList(invoice.getId());
- if (!invoiceDetailList.isEmpty()) {
- invoice.setInvoiceDetailList(invoiceDetailList);
- }
-
- } else {
- log.info("通过billInfo组装,id为:{}", id);
- BillInfo billInfo = billInfoMapper.selectBySystemOrderNo(Long.valueOf(identity), id);
- if (BeanUtil.isEmpty(billInfo)) {
- log.info("billInfo中不存咋,id为:{}", id);
- }
+ Invoice invoice = invoiceMapper.selectByOutTradeOrdernoNoUpdateBy(Long.valueOf(identity), id);
+ if (invoice == null) {
+ log.info(ZQ_BACK_DXHY + "发票信息未查询到,id={}", id);
invoice = new Invoice();
- invoice.setFpqqlsh(billInfo.getFpqqlsh());
- invoice.setSellerTaxnum(billInfo.getSellerTaxnum());
- invoice.setOutTradeOrderno(billInfo.getOutTradeOrderno());
+ invoice.setOutTradeOrderno(invoiceBack.getSystemOrderno());
+ invoice.setState(22);
+ invoice.setMessage( (invoiceBack.getResultMsg() != null && invoiceBack.getResultMsg().length() > 200) ? invoiceBack.getResultMsg().substring(0, 200) : invoiceBack.getResultMsg() );
+ continue;
+ }
+ // 明细重插
+ List invoiceDetailList = invoiceMapper.selectInvoiceIdForInvoiceDetailList(invoice.getId());
+ if(!invoiceDetailList.isEmpty()){
+ invoice.setInvoiceDetailList(invoiceDetailList);
}
- Integer state = invoice.getState() != null ? invoice.getState() : 1;
- log.info(ZQ_BACK_DXHY + "id={},state={}", id, state);
- log.info(ZQ_BACK_DXHY + "请求大象接口更新发票状态,id={},state={}", id, state);
+ Integer state = invoice.getState();
+ log.info(ZQ_BACK_DXHY + "id={},state={}",id,state);
+ log.info(ZQ_BACK_DXHY + "请求大象接口更新发票状态,id={},state={}",id,state);
- try {
- IInvoiceApiService invoiceService = invoiceServiceFactory.getService("elephantV6_invoice");
- Companyservice companyservice = new Companyservice();
- companyservice.setCompanyid(Long.valueOf(invoiceBack.getIdentity()));
- companyservice.setSellertax(invoice.getSellerTaxnum());
- BillInfo billInfo = new BillInfo();
- billInfo.setFpqqlsh("[\"" + invoice.getFpqqlsh() + "\"]");
- billInfo.setOutTradeOrderno(invoice.getOutTradeOrderno());
- log.info("发票回调invoice.id={},getOutTradeOrderno()={},invoice.getFpqqlsh()={}", id, invoice.getOutTradeOrderno(), invoice.getFpqqlsh());
- HXResponse resultDxhy = invoiceService.batchQueryInvoices(billInfo, "fpqqlsh", companyservice);
- } catch (NumberFormatException e) {
- log.info("发票回调,拉取异常,拉取大象异常了,id={},异常原因={}", id,e.toString());
- }
+ IInvoiceApiService invoiceService = invoiceServiceFactory.getService("elephantV6_invoice");
+ Companyservice companyservice = new Companyservice();
+ companyservice.setCompanyid(Long.valueOf(invoiceBack.getIdentity()));
+ companyservice.setSellertax(invoice.getSellerTaxnum());
+ BillInfo billInfo = new BillInfo();
+ billInfo.setFpqqlsh("[\"" + invoice.getFpqqlsh() + "\"]");
+ billInfo.setOutTradeOrderno(invoice.getOutTradeOrderno());
+ log.info("发票回调invoice.getOutTradeOrderno()={},invoice.getFpqqlsh()={}",id,invoice.getOutTradeOrderno(),invoice.getFpqqlsh());
+ HXResponse resultDxhy = invoiceService.batchQueryInvoices(billInfo, "fpqqlsh", companyservice);
- log.info("发票回调id={}", id);
- invoice = invoiceMapper.selectBySystemOrderNo(Long.valueOf(identity), id);
+ log.info("发票回调id={}",id);
+ invoice = invoiceMapper.selectByOutTradeOrdernoNoUpdateBy(Long.valueOf(identity), id);
if (invoice == null) {
log.info(ZQ_BACK_DXHY + "重新拉取结果后,发票信息未查询到,id={}", id);
invoice = new Invoice();
- invoice.setSystemOrderno(invoiceBack.getSystemOrderno());
+ invoice.setOutTradeOrderno(invoiceBack.getSystemOrderno());
invoice.setState(22);
- invoice.setMessage((invoiceBack.getResultMsg() != null && invoiceBack.getResultMsg().length() > 200) ? invoiceBack.getResultMsg().substring(0, 200) : invoiceBack.getResultMsg());
+ invoice.setMessage( (invoiceBack.getResultMsg() != null && invoiceBack.getResultMsg().length() > 200) ? invoiceBack.getResultMsg().substring(0, 200) : invoiceBack.getResultMsg() );
continue;
}
state = invoice.getState();
- log.info(ZQ_BACK_DXHY + "拉取后查询状态为,id={},state={}", id, state);
-
- if (state == 20) {
- log.info(ZQ_BACK_DXHY + "20为开票中,不回调,id={},state={}", id, state);
- continue;
- }
-
- // 回调重汽
- backZq(id, invoice, callBackUrl, invoiceBack);
-
- }
- log.info(ZQ_BACK_DXHY + "定时任务执行结束---");
- }
-
-
-
- /** 回调重汽 */
- public void backZq(String id, Invoice invoice, String callBackUrl, InvoiceBack invoiceBack) {
- try {
- log.info("【重汽回调】发票回调接口,发送数据开始,id={},orderno={},callBackUrl={},param={}", id, invoice.getOutTradeOrderno(), callBackUrl, JSONUtil.toJsonStr(invoice));
- String result = HttpUtil.post(callBackUrl, JSONUtil.toJsonStr(invoice));
- log.info("【重汽回调】发票回调接口,发送数据结束,id={},接口返回信息={}", id, result);
- JSONObject jsonObject = JSONUtil.parseObj(result);
- String status = jsonObject.get("status") != null ? jsonObject.get("status").toString() : "";
- String message = jsonObject.get("message") != null ? jsonObject.get("message").toString() : "";
-
- if (message.length() > 200) {
- message = message.substring(0, Math.min(message.length(), 200));
- }
- invoiceBack.setResultCode("zq:" + status);
- invoiceBack.setResultMsg("zq:" + message);
+ log.info(ZQ_BACK_DXHY + "拉去后查询状态为,id={},state={}",id,state);
- if ("0000".equals(status)) {
- invoiceBack.setStatus("1");
- } else if ("9999".equals(status)) {
- invoiceBack.setStatus("3");
- } else {
- invoiceBack.setStatus("3");
- invoiceBack.setBackMsg("k:客户系统回调异常,status=" + status);
- }
- invoiceBack.setUpdateTime(new Date());
- invoiceBackMapper.updateInvoiceBack(invoiceBack);
-
- } catch (Exception e) {
- log.info("{}:发票回调接口,发送数据异常,id={},e={}", ZQ_BACK, id, e.toString());
- invoiceBack.setStatus(InvoiceBackStatusEnum.MULTIPLE_FAILURES.getCode());
- invoiceBack.setBackMsg("运维:发送数据异常");
- invoiceBack.setUpdateTime(new Date());
- invoiceBackMapper.updateInvoiceBack(invoiceBack);
- }
- }
-
-
-
- /**
- * 查询发票查询
- */
- private String getInvoiceQuery(InvoiceBack invoiceBack, BillInfo billInfo) {
- IInvoiceApiService invoiceService = invoiceServiceFactory.getService("elephantV6_invoice");
- Companyservice companyservice = new Companyservice();
- companyservice.setCompanyid(Long.valueOf(invoiceBack.getIdentity()));
- companyservice.setSellertax(billInfo.getSellerTaxnum());
-
- BillInfo billInfoQuery = new BillInfo();
- billInfoQuery.setFpqqlsh("[\"" + billInfo.getFpqqlsh() + "\"]");
- billInfoQuery.setOutTradeOrderno(billInfo.getOutTradeOrderno());
- billInfoQuery.setSellerTaxnum(billInfo.getSellerTaxnum());
-
- log.info("发票回调getOutTradeOrderno()={},invoice.getFpqqlsh()={}", billInfoQuery.getOutTradeOrderno(), billInfoQuery.getFpqqlsh());
- HXResponse resultDxhy = invoiceService.batchQueryInvoices(billInfoQuery, "fpqqlsh", companyservice);
- return resultDxhy.getMessage();
- }
-
-
-
- /**
- * @author kk
- * @date 2024/4/10 20:32
- * @param: []
- * @return: 重汽数电回推补偿机制。
- */
- public void sdBackInvoiceJiuBan() {
-
- // 发票回调补偿机制。
- log.info("================================[重汽回调定时任务开始执行]=============================");
- log.info("{}:查询回调表信息,查询条件为:status=7", ZQ_BACK);
- QueryWrapper queryWrapper = new QueryWrapper<>();
- queryWrapper.eq("status", "7");
- List invoiceBackList = invoiceBackMapper.selectList(queryWrapper);
-
- log.info("{}:查询到{}条带回调订单", ZQ_BACK, invoiceBackList.size());
- for (InvoiceBack invoiceBack : invoiceBackList) {
-
- String id = invoiceBack.getSystemOrderno();
- String identity = invoiceBack.getIdentity();
-
- log.info("{}:开始处理回调订单,identity={},id={},", ZQ_BACK, identity, id);
- if (StrUtil.isEmpty(id)) {
- log.info("{}:发票回调,回调id为空", ZQ_BACK);
- invoiceBack.setStatus(InvoiceBackStatusEnum.MULTIPLE_FAILURES.getCode());
- invoiceBack.setBackMsg("运维排查:传入id为空");
- invoiceBack.setUpdateTime(new Date());
- invoiceBackMapper.updateInvoiceBack(invoiceBack);
+ if( state == 20 ){
+ log.info(ZQ_BACK_DXHY + "20为开票中,不回调,id={},state={}",id,state);
continue;
}
- log.info("{}:订单号{},开始回调", ZQ_BACK, id);
- ICompanyservicePropService companyserviceProp = SpringUtils.getBean(ICompanyservicePropService.class);
- CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(Long.valueOf(identity), "aisino_callback_url");
-
- if (secretIdProp == null || secretIdProp.getValue() == null || "".equals(secretIdProp.getValue())) {
- log.info("{}发票回调,未配置回调地址{}", ZQ_BACK, identity);
- invoiceBack.setStatus(InvoiceBackStatusEnum.MULTIPLE_FAILURES.getCode());
- invoiceBack.setBackMsg("运维排查:未配置回调地址");
- invoiceBack.setUpdateTime(new Date());
- invoiceBackMapper.updateInvoiceBack(invoiceBack);
- continue;
- }
-
- String callBackUrl = secretIdProp.getValue();
- log.info("{}:发票回调,订单号{},回调地址{}", ZQ_BACK, id, callBackUrl);
-
- Invoice invoice = invoiceMapper.selectByOutTradeOrdernoNoUpdateBy(Long.valueOf(identity), id);
-
- if (invoice == null) {
- log.info("{}:当前发票未查询到Invoice信息,开始请求大象接口获取", ZQ_BACK);
- log.info("通过billInfo组装,id为:{}", id);
- BillInfo billInfo = billInfoMapper.selectByOutTradeOrderno(Long.valueOf(identity), id);
- if (BeanUtil.isEmpty(billInfo)) {
- log.info("{}:billInfo中不存咋,id为:{}", ZQ_BACK, id);
- }
-
- // 发票查询
- String messageQhery = getInvoiceQuery(invoiceBack, billInfo);
-
- invoice = invoiceMapper.selectByOutTradeOrdernoNoUpdateBy(Long.valueOf(identity), id);
- log.info("{}:调用回调接口拉取后,Invoice存在状态为{},回调查询发票结果为:{}", ZQ_BACK, invoice != null, messageQhery);
- if (invoice == null) {
- log.info("{}:查询到Invoice信息,回调后还是未查询到Invoice", ZQ_BACK);
- invoiceBack.setStatus(InvoiceBackStatusEnum.MULTIPLE_FAILURES.getCode());
- invoiceBack.setBackMsg("k:回调后还是未查询到Invoice");
- invoiceBack.setUpdateTime(new Date());
- invoiceBackMapper.updateInvoiceBack(invoiceBack);
- continue;
- }
-
- }
+ try {
- Integer stateInvoice = invoice.getState();
- String fpqqlsh = invoice.getFpqqlsh();
- String ddh = invoice.getOutTradeOrderno();
- log.info("{}:查询到Invoice信息,发票状态为:{}", ZQ_BACK, stateInvoice);
- if (stateInvoice == 20) {
- // 开票中
- log.info("{}:开具中,调用查询,fpqqlsh={},ddh={}", ZQ_BACK, fpqqlsh, ddh);
- BillInfo billInfo = new BillInfo();
- billInfo.setFpqqlsh(invoice.getFpqqlsh());
- billInfo.setOutTradeOrderno(invoice.getOutTradeOrderno());
- // 发票查询
- String messageQhery = getInvoiceQuery(invoiceBack, billInfo);
-
- invoice = invoiceMapper.selectByOutTradeOrdernoNoUpdateBy(Long.valueOf(identity), id);
- log.info("{}:调用回调接口拉取后,Invoice存在状态为{},回调查询发票结果为:{}", ZQ_BACK, invoice != null, messageQhery);
- if (invoice == null) {
- log.info("{}:查询到Invoice信息,回调后还是未查询到Invoice", ZQ_BACK);
- invoiceBack.setStatus(InvoiceBackStatusEnum.MULTIPLE_FAILURES.getCode());
- invoiceBack.setBackMsg("k:回调后还是未查询到Invoice");
- invoiceBack.setUpdateTime(new Date());
- invoiceBackMapper.updateInvoiceBack(invoiceBack);
+ log.info(ZQ_BACK_DXHY + "发票回调接口,发送数据开始,id={},orderno={},callBackUrl={},param={}", id, invoice.getOutTradeOrderno(), callBackUrl, JSONUtil.toJsonStr(invoice));
+ String result = HttpUtil.post(callBackUrl, JSONUtil.toJsonStr(invoice));
+ log.info(ZQ_BACK_DXHY + "发票回调接口,发送数据结束,id={},接口返回信息={}", id, result);
+ JSONObject jsonObject = JSONUtil.parseObj(result);
+ if (jsonObject != null) {
+ String status = jsonObject.get("status") != null ? jsonObject.get("status").toString() : "";
+ String message = jsonObject.get("message") != null ? jsonObject.get("message").toString() : "";
+
+ if ("0000".equals(status)) {
+ invoiceBack.setStatus("1");
+ invoiceBack.setBackMsg(message != null ? message.substring(0, Math.min(message.length(), 200)) : "");
+ invoiceBack.setUpdateTime(new Date());
+ invoiceBackMapper.updateInvoiceBack(invoiceBack);
+ } else if ("9999".equals(status)) {
+ invoiceBack.setStatus("3");
+ invoiceBack.setBackMsg(message != null ? message.substring(0, Math.min(message.length(), 200)) : "");
+ invoiceBack.setUpdateTime(new Date());
+ invoiceBackMapper.updateInvoiceBack(invoiceBack);
+ } else {
+ invoiceBack.setStatus("3");
+ invoiceBack.setBackMsg(status + message != null ? message.substring(0, Math.min(message.length(), 200)) : "");
+ invoiceBack.setUpdateTime(new Date());
+ invoiceBackMapper.updateInvoiceBack(invoiceBack);
+ }
continue;
}
-
- } else if (stateInvoice == 22) {
- // 开票失败
- log.info("{}:开具失败,递交回调,fpqqlsh={},ddh={}", ZQ_BACK, fpqqlsh, ddh);
- } else if (stateInvoice == 2) {
- // 开票成功
- log.info("{}:开具成功,递交回调,fpqqlsh={},ddh={}", ZQ_BACK, fpqqlsh, ddh);
- } else {
- // 未解析状态
- log.info("{}:查询到Invoice信息,发票状态为:{},未解析状态", ZQ_BACK, stateInvoice);
- invoiceBack.setStatus(InvoiceBackStatusEnum.CALLBACK_FAILED.getCode());
- invoiceBack.setBackMsg("发票状态为" + stateInvoice + ",未解析状态");
+ } catch (Exception e) {
+ log.info(ZQ_BACK_DXHY + "发票回调接口,发送数据异常,id={},e={}", id,e.toString());
+ invoiceBack.setStatus("2");
+ invoiceBack.setBackMsg("发送数据异常");
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
- continue;
- }
-
- // 明细重插
- List invoiceDetailList = invoiceMapper.selectInvoiceIdForInvoiceDetailList(invoice.getId());
- if (!invoiceDetailList.isEmpty()) {
- invoice.setInvoiceDetailList(invoiceDetailList);
}
-
- // 回调重汽
- backZq(id, invoice, callBackUrl, invoiceBack);
}
- log.info("=======================[重汽回调定时任务执行结束]=================================");
+ log.info(ZQ_BACK_DXHY + "定时任务执行结束---");
}
}
-
-
-
diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/BillDetailFormatInspurUtil.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/BillDetailFormatInspurUtil.java
index aad2bbb..9a4e579 100644
--- a/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/BillDetailFormatInspurUtil.java
+++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/BillDetailFormatInspurUtil.java
@@ -499,9 +499,7 @@ public class BillDetailFormatInspurUtil {
taxAmt = billDetail.getTaxfreeamt().add(billDetail.getTax());
billDetail.setTaxamt(taxAmt);
} else {
- System.out.println("没有匹配的计算规则,跳过" + billDetail);
-// return AjaxResult.error("没有匹配的计算规则", billDetail);
- return AjaxResult.success(billDetail);
+ return AjaxResult.error("没有匹配的计算规则", billDetail);
}
return AjaxResult.success(billDetail);
}
diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/BillDetailFormatUtil.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/BillDetailFormatUtil.java
index ea9152a..f873fc1 100644
--- a/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/BillDetailFormatUtil.java
+++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/utils/BillDetailFormatUtil.java
@@ -499,8 +499,7 @@ public class BillDetailFormatUtil {
taxAmt = billDetail.getTaxfreeamt().add(billDetail.getTax());
billDetail.setTaxamt(taxAmt);
} else {
-// return AjaxResult.error("没有匹配的计算规则", billDetail);
- return AjaxResult.success(billDetail);
+ return AjaxResult.error("没有匹配的计算规则", billDetail);
}
return AjaxResult.success(billDetail);
}