feature: 大象开票成功补偿

jianshui-ui
dongxiaoke 1 year ago
parent 8dac62f3dc
commit 4fa456c560
  1. 169
      jianshui-invoice/src/main/java/com/jianshui/invoice/task/InvoiceBackTask.java

@ -1,5 +1,6 @@
package com.jianshui.invoice.task;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
@ -12,12 +13,10 @@ 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.Invoice;
import com.jianshui.invoice.domain.InvoiceBack;
import com.jianshui.invoice.domain.InvoiceDetail;
import com.jianshui.invoice.domain.Redinfo;
import com.jianshui.invoice.domain.*;
import com.jianshui.invoice.domain.dto.ExportVehicleDTO;
import com.jianshui.invoice.domain.dto.HXResponse;
import com.jianshui.invoice.factory.IInvoiceServiceFactory;
import com.jianshui.invoice.mapper.InvoiceBackMapper;
import com.jianshui.invoice.mapper.InvoiceMapper;
import com.jianshui.invoice.service.IInvoiceApiService;
@ -52,6 +51,11 @@ public class InvoiceBackTask {
@Autowired
private ICompanyservicePropService propService;
@Autowired
private IInvoiceServiceFactory invoiceServiceFactory;
private final String ZQ_BACK_DXHY = "【重汽回调(开票中单据)】";
@ -212,7 +216,6 @@ public class InvoiceBackTask {
public void sdBackInvoice() {
// 发票回调补偿机制。
log.info("[重汽回调定时任务开始执行]");
QueryWrapper<InvoiceBack> queryWrapper = new QueryWrapper<>();
@ -240,7 +243,7 @@ public class InvoiceBackTask {
CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(Long.valueOf(identity), "aisino_callback_url");
if (secretIdProp == null || secretIdProp.getValue() == null || "".equals(secretIdProp.getValue())) {
log.info("【控制台】发票回调,未配置回调地址{}",identity);
log.info("【重汽回调】发票回调,未配置回调地址{}",identity);
invoiceBack.setStatus("3");
invoiceBack.setBackMsg("未配置回调地址");
invoiceBack.setUpdateTime(new Date());
@ -249,11 +252,11 @@ public class InvoiceBackTask {
}
String callBackUrl = secretIdProp.getValue();
log.info("【控制台】发票回调,订单号{},回调地址{}",id, callBackUrl);
log.info("【重汽回调】发票回调,订单号{},回调地址{}",id, callBackUrl);
Invoice invoice = invoiceMapper.selectByOutTradeOrderno(Long.valueOf(identity), id, "0");
if (invoice == null) {
log.info("【控制台】发票信息未查询到,id={}", id);
log.info("【重汽回调】发票信息未查询到,id={}", id);
invoice = new Invoice();
invoice.setOutTradeOrderno(invoiceBack.getSystemOrderno());
invoice.setState(22);
@ -268,9 +271,9 @@ public class InvoiceBackTask {
try {
log.info("【控制台】发票回调接口,发送数据开始,id={},orderno={},callBackUrl={},param={}", id, invoice.getOutTradeOrderno(), callBackUrl, JSONUtil.toJsonStr(invoice));
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);
log.info("【重汽回调】发票回调接口,发送数据结束,id={},接口返回信息={}", id, result);
JSONObject jsonObject = JSONUtil.parseObj(result);
if (jsonObject != null) {
String status = jsonObject.get("status") != null ? jsonObject.get("status").toString() : "";
@ -295,7 +298,7 @@ public class InvoiceBackTask {
continue;
}
} catch (Exception e) {
log.info("【控制台】发票回调接口,发送数据异常,id={},e={}", id,e.toString());
log.info("【重汽回调】发票回调接口,发送数据异常,id={},e={}", id,e.toString());
invoiceBack.setStatus("2");
invoiceBack.setBackMsg("发送数据异常");
invoiceBack.setUpdateTime(new Date());
@ -306,4 +309,148 @@ public class InvoiceBackTask {
}
/**
* @author kk
* @date 16:12
* @param: []
* @return: 开票中发票 查询发票状态并回推 -重汽
*/
public void sdBackInvoiceQueryDxhy() {
// 发票回调补偿机制。
log.info(ZQ_BACK_DXHY + "开始执行]");
QueryWrapper<InvoiceBack> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("status", "5");
List<InvoiceBack> invoiceBackList = invoiceBackMapper.selectList(queryWrapper);
log.info(ZQ_BACK_DXHY + "查询到{}条待回调订单", invoiceBackList.size());
for (InvoiceBack invoiceBack : invoiceBackList) {
/** 半个小时之前*/
Date createTime = invoiceBack.getCreateTime();
// 计算半个小时之前的时间
Date halfAnHourAgo = DateUtil.offsetMinute(createTime, -30);
// 获取当前时间
Date now = new Date();
// 判断当前时间是否在半个小时之前
// 使用DateUtil.between()方法计算两个日期之间的差值(单位为分钟)
long minutesBetween = DateUtil.between(now, halfAnHourAgo, DateUnit.MINUTE);
// 如果差值大于或等于30分钟,则认为当前时间在半个小时之前
boolean isHalfAnHourAgo = minutesBetween >= 30;
if(!isHalfAnHourAgo){
log.info(ZQ_BACK_DXHY + "只查询半个小时之前的单据");
continue;
}
String id = invoiceBack.getSystemOrderno();
String identity = invoiceBack.getIdentity();
if (StrUtil.isEmpty(id)) {
log.info(ZQ_BACK_DXHY + "发票回调,id为空");
invoiceBack.setStatus("3");
invoiceBack.setBackMsg("id为空");
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
continue;
}
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);
invoiceBack.setStatus("3");
invoiceBack.setBackMsg("未配置回调地址");
invoiceBack.setUpdateTime(new Date());
invoiceBackMapper.updateInvoiceBack(invoiceBack);
continue;
}
String callBackUrl = secretIdProp.getValue();
log.info(ZQ_BACK_DXHY + "发票回调,订单号{},回调地址{}",id, callBackUrl);
Invoice invoice = invoiceMapper.selectByOutTradeOrderno(Long.valueOf(identity), id, "0");
if (invoice == null) {
log.info(ZQ_BACK_DXHY + "发票信息未查询到,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() );
continue;
}
// 明细重插
List<InvoiceDetail> invoiceDetailList = invoiceMapper.selectInvoiceIdForInvoiceDetailList(invoice.getId());
if(!invoiceDetailList.isEmpty()){
invoice.setInvoiceDetailList(invoiceDetailList);
}
Integer state = invoice.getState();
log.info(ZQ_BACK_DXHY + "id={},state={}",id,state);
log.info(ZQ_BACK_DXHY + "请求大象接口更新发票状态,id={},state={}",id,state);
IInvoiceApiService invoiceService = invoiceServiceFactory.getService("elephantV6_invoice");
Companyservice companyservice = new Companyservice();
companyservice.setCompanyid(Long.valueOf(invoiceBack.getIdentity()));
BillInfo billInfo = new BillInfo();
billInfo.setFpqqlsh(invoice.getFpqqlsh());
billInfo.setOutTradeOrderno(invoice.getOutTradeOrderno());
HXResponse resultDxhy = invoiceService.batchQueryInvoices(billInfo, "fpqqlsh", companyservice);
invoice = invoiceMapper.selectByOutTradeOrderno(Long.valueOf(identity), id, "0");
if (invoice == null) {
log.info(ZQ_BACK_DXHY + "重新拉取结果后,发票信息未查询到,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() );
continue;
}
log.info(ZQ_BACK_DXHY + "拉去后查询状态为,id={},state={}",id,state);
try {
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;
}
} 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);
}
}
log.info(ZQ_BACK_DXHY + "定时任务执行结束---");
}
}

Loading…
Cancel
Save