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 d3232a5..5830788 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,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 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 queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status", "5"); + List 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 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 + "定时任务执行结束---"); + } + + }