diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/InvoiceBack.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/InvoiceBack.java new file mode 100644 index 0000000..0d51d5d --- /dev/null +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/domain/InvoiceBack.java @@ -0,0 +1,108 @@ +package com.jianshui.invoice.domain; + +import com.jianshui.common.annotation.Excel; +import com.jianshui.common.core.domain.BaseEntity; +import net.logstash.logback.encoder.org.apache.commons.lang3.builder.ToStringBuilder; +import net.logstash.logback.encoder.org.apache.commons.lang3.builder.ToStringStyle; + +/** + * 开票接口回调对象 invoice_back + * + * @author jianshui + * @date 2023-10-26 + */ +public class InvoiceBack extends BaseEntity +{ + private static final long serialVersionUID = 1L; + + /** $column.columnComment */ + private String id; + + /** 系统订单号 */ + @Excel(name = "系统订单号") + private String systemOrderno; + + /** 回调状态0未回调 1回调成功 2回调失败 3回调多次失败,不再回调 */ + @Excel(name = "回调状态0未回调 1回调成功 2回调失败 3回调多次失败,不再回调") + private String status; + + /** 回调地址 */ + @Excel(name = "回调地址") + private String backUrl; + + /** $column.columnComment */ + @Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()") + private String identity; + + /** 回调信息 */ + @Excel(name = "回调信息") + private String backMsg; + + public void setId(String id) + { + this.id = id; + } + + public String getId() + { + return id; + } + public void setSystemOrderno(String systemOrderno) + { + this.systemOrderno = systemOrderno; + } + + public String getSystemOrderno() + { + return systemOrderno; + } + public void setStatus(String status) + { + this.status = status; + } + + public String getStatus() + { + return status; + } + public void setBackUrl(String backUrl) + { + this.backUrl = backUrl; + } + + public String getBackUrl() + { + return backUrl; + } + public void setIdentity(String identity) + { + this.identity = identity; + } + + public String getIdentity() + { + return identity; + } + public void setBackMsg(String backMsg) + { + this.backMsg = backMsg; + } + + public String getBackMsg() + { + return backMsg; + } + + @Override + public String toString() { + return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE) + .append("id", getId()) + .append("systemOrderno", getSystemOrderno()) + .append("status", getStatus()) + .append("backUrl", getBackUrl()) + .append("identity", getIdentity()) + .append("createTime", getCreateTime()) + .append("backMsg", getBackMsg()) + .toString(); + } +} diff --git a/jianshui-invoice/src/main/java/com/jianshui/invoice/mapper/InvoiceBackMapper.java b/jianshui-invoice/src/main/java/com/jianshui/invoice/mapper/InvoiceBackMapper.java new file mode 100644 index 0000000..0467431 --- /dev/null +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/mapper/InvoiceBackMapper.java @@ -0,0 +1,63 @@ +package com.jianshui.invoice.mapper; + +import java.util.List; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jianshui.invoice.domain.InvoiceBack; + +/** + * 开票接口回调Mapper接口 + * + * @author jianshui + * @date 2023-10-26 + */ +public interface InvoiceBackMapper extends BaseMapper +{ + /** + * 查询开票接口回调 + * + * @param id 开票接口回调主键 + * @return 开票接口回调 + */ + public InvoiceBack selectInvoiceBackById(String id); + + /** + * 查询开票接口回调列表 + * + * @param invoiceBack 开票接口回调 + * @return 开票接口回调集合 + */ + public List selectInvoiceBackList(InvoiceBack invoiceBack); + + /** + * 新增开票接口回调 + * + * @param invoiceBack 开票接口回调 + * @return 结果 + */ + public int insertInvoiceBack(InvoiceBack invoiceBack); + + /** + * 修改开票接口回调 + * + * @param invoiceBack 开票接口回调 + * @return 结果 + */ + public int updateInvoiceBack(InvoiceBack invoiceBack); + + /** + * 删除开票接口回调 + * + * @param id 开票接口回调主键 + * @return 结果 + */ + public int deleteInvoiceBackById(String id); + + /** + * 批量删除开票接口回调 + * + * @param ids 需要删除的数据主键集合 + * @return 结果 + */ + public int deleteInvoiceBackByIds(String[] ids); +} 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 7b462f4..771acf0 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 @@ -4,7 +4,6 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.io.FileUtil; import cn.hutool.core.util.ObjectUtil; -import cn.hutool.core.util.ReUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpUtil; import cn.hutool.json.JSON; @@ -31,13 +30,8 @@ import com.jianshui.invoice.domain.dto.api.aisino.console.vehicle.TaxEquipmentIn import com.jianshui.invoice.domain.dto.api.aisino.console.vehicle.VehicleInvoiceExpBo; import com.jianshui.invoice.domain.ele.EleNewMessage; import com.jianshui.invoice.domain.vo.api.aisino.console.AisinoConsoleInvoiceAddVO; -import com.jianshui.invoice.mapper.BillInfoMapper; -import com.jianshui.invoice.mapper.InvoiceMapper; -import com.jianshui.invoice.mapper.RedinfoMapper; -import com.jianshui.invoice.mapper.SkDyjMapper; +import com.jianshui.invoice.mapper.*; 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; @@ -79,6 +73,8 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer @Autowired private RedinfoMapper redinfoMapper; + @Autowired + private InvoiceBackMapper invoiceBackMapper; /** @@ -337,16 +333,35 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer // TODO: 2023/9/26 增加主动回调方式,可配置 - // TODO: 2023/10/25 回调改成异步的,执行20次,直到获取到结果 + // TODO: 2023/10/25 回调改成异步的,执行10次,直到获取到结果 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(); - // 异步回调 - AsyncManager.me().execute(new QueryBackZhongQiTask(callBackUrl,invoice.getId())); -// callBackAisino(callBackUrl, invoice.getId()); + InvoiceBack queryInvoiceBack = new InvoiceBack(); + queryInvoiceBack.setSystemOrderno(billInfo.getSystemOrderno()); + List invoiceBackList = invoiceBackMapper.selectInvoiceBackList(queryInvoiceBack); + if (CollectionUtils.isEmpty(invoiceBackList)) { + queryInvoiceBack.setIdentity(companyservice.getIdentity()); + queryInvoiceBack.setBackUrl(callBackUrl); + queryInvoiceBack.setStatus("0"); + queryInvoiceBack.setCreateTime(new Date()); + queryInvoiceBack.setSystemOrderno(billInfo.getSystemOrderno()); + queryInvoiceBack.setBackMsg(""); + } else { + queryInvoiceBack = invoiceBackList.get(0); + } + + // 异步回调,失败的交给定时任务 + InvoiceBack finalQueryInvoiceBack = queryInvoiceBack; + AsyncManager.me().execute(new TimerTask() { + @Override + public void run() { + callBackAisino(finalQueryInvoiceBack,callBackUrl, invoice.getId()); + } + }); } @@ -365,7 +380,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer * @param callBackUrl * @param id */ - private void callBackAisino(String callBackUrl, Long id) { + private void callBackAisino(InvoiceBack invoiceBack,String callBackUrl, Long id) { if (id == null) { log.info("【控制台】发票回调,id为空"); @@ -379,12 +394,35 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer } try { + log.info("【控制台】发票回调接口,发送数据开始,id={}", id); String result = HttpUtil.post(callBackUrl, JSONUtil.toJsonStr(invoice)); + log.info("【控制台】发票回调接口,发送数据结束,id={},接口返回信息={}", id, result); - log.info("【控制台】发票回调接口,发送数据结束,id={},接口返回信息={}", id, JSONUtil.toJsonStr(invoice)); + cn.hutool.json.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("发票信息未查询到"); + invoiceBackMapper.updateInvoiceBack(invoiceBack); + }else if("9999".equals(status)){ + invoiceBack.setStatus("3"); + invoiceBack.setBackMsg(message); + invoiceBackMapper.updateInvoiceBack(invoiceBack); + }else { + invoiceBack.setStatus("2"); + invoiceBack.setBackMsg(status+message); + invoiceBackMapper.updateInvoiceBack(invoiceBack); + } + } } catch (Exception e) { log.info("【控制台】发票回调接口,发送数据异常,id={}", id); + invoiceBack.setStatus("2"); + invoiceBack.setBackMsg("发送数据异常!"); + invoiceBackMapper.updateInvoiceBack(invoiceBack); throw new RuntimeException(e); } @@ -747,7 +785,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer //发起请求 AjaxResult ajaxResult = null; try { - ajaxResult = AisinoConsoleUtil.sendRequestXML(AisinoConsoleConstants.RED_UPLOAD,"129", param, companyservice); + ajaxResult = AisinoConsoleUtil.sendRequestXML(AisinoConsoleConstants.RED_UPLOAD, "129", param, companyservice); } catch (Exception e) { log.error("【销项发票】【总部控制台接口】【发票作废】发票请求异常,请求报文{},销方信息{}", "", JSONObject.toJSONString(companyservice)); e.printStackTrace(); @@ -793,7 +831,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer List companyserviceDetailList = companyservice.getCompanyserviceDetailList(); - if(CollectionUtils.isEmpty(companyserviceDetailList) || StrUtil.isEmpty(companyserviceDetailList.get(0).getGoldenTaxDiskNo())){ + if (CollectionUtils.isEmpty(companyserviceDetailList) || StrUtil.isEmpty(companyserviceDetailList.get(0).getGoldenTaxDiskNo())) { throw new JianshuiServiceException("金税盘编号未配置,请联系管理员!"); } String goldenTaxDiskNo = companyserviceDetailList.get(0).getGoldenTaxDiskNo(); @@ -811,7 +849,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer // TODO: 2023/10/25 这里改为空的属性也传 String param = JSONUtil.toXmlStr(JSONUtil.parse(downloadDTO)); - + param = "\n" + "\n" + " \n" + param + "\n" + @@ -850,7 +888,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer //发起请求 AjaxResult ajaxResult = null; try { - ajaxResult = AisinoConsoleUtil.sendRequestXML(AisinoConsoleConstants.RED_DOWLOAD, "0201",param, companyservice); + ajaxResult = AisinoConsoleUtil.sendRequestXML(AisinoConsoleConstants.RED_DOWLOAD, "0201", param, companyservice); } catch (Exception e) { log.error("【销项发票】【总部控制台接口】【发票作废】发票请求异常,请求报文{},销方信息{}", "", JSONObject.toJSONString(companyservice)); e.printStackTrace(); @@ -1031,12 +1069,12 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer * "KSRQ":"", * "StrGuid":"" * } - */ + */ // 发起请求 AjaxResult ajaxResult = null; - JSON json = JSONUtil.parse(decryptResult); + JSON json = JSONUtil.parse(decryptResult); try { ajaxResult = AisinoConsoleUtil.sendRequest(AisinoConsoleConstants.VEHIC, json, companyservice); } catch (Exception e) { @@ -1055,20 +1093,20 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer String retcode = resultJSON.get("retcode") != null ? resultJSON.get("retcode").toString() : ""; String retmsg = resultJSON.get("retmsg") != null ? resultJSON.get("retmsg").toString() : ""; - if("0".equals(retcode)){ + if ("0".equals(retcode)) { // TODO: 2023/10/25 机动车加密数据导出推送 /** - * 推送逻辑: + * 推送逻辑: * 调用加密接口,调用成功后推送,推送中间状态断了停止推送 * 否则获取到推送结果之后停止推送 * 需要个手动重推的操作。 - */ + */ ICompanyservicePropService companyserviceProp = SpringUtils.getBean(ICompanyservicePropService.class); CompanyserviceProp secretIdProp = companyserviceProp.selectPropByKey(companyservice.getCompanyid(), "aisino_nginx_url"); - if(secretIdProp == null || StrUtil.isEmpty(secretIdProp.getValue())){ + if (secretIdProp == null || StrUtil.isEmpty(secretIdProp.getValue())) { log.info("【销项发票】【总部控制台发票-机动车加密】推送nginx地址未配置!aisino_nginx_url"); return new HXResponse("推送中间件地址未配置!"); } @@ -1076,7 +1114,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer String downloadUrl = secretIdProp.getValue(); cn.hutool.json.JSONObject queryDto = JSONUtil.parseObj(json); - if(queryDto == null){ + if (queryDto == null) { log.info("【销项发票】【总部控制台发票-机动车加密】查询条件未获取到!"); return new HXResponse("查询条件未获取到!"); } @@ -1085,12 +1123,12 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer try { indexPage = HttpUtil.get(downloadUrl); } catch (Exception e) { - log.info("【销项发票】【总部控制台发票-机动车加密】{}",e); + log.info("【销项发票】【总部控制台发票-机动车加密】{}", e); return new HXResponse("中间件读取失败!"); } - String startDate = queryDto.get("KSRQ") != null ? queryDto.get("KSRQ").toString().replace("-",".") : ""; - String endDate = queryDto.get("JSRQ") != null ? queryDto.get("JSRQ").toString().replace("-",".") : ""; + String startDate = queryDto.get("KSRQ") != null ? queryDto.get("KSRQ").toString().replace("-", ".") : ""; + String endDate = queryDto.get("JSRQ") != null ? queryDto.get("JSRQ").toString().replace("-", ".") : ""; // 构建要匹配的日期范围字符串 String dateRange = startDate + "-" + endDate; @@ -1104,7 +1142,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer // 遍历标签,提取href属性内容 for (Element aTag : aTags) { href = aTag.attr("href"); - log.info("读取到的机动车加密文件名为"+href); + log.info("读取到的机动车加密文件名为" + href); continue; } @@ -1119,10 +1157,10 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer paramMap.put("zdr", companyservice.getCompanyid()); CompanyserviceProp pushUrl = companyserviceProp.selectPropByKey(companyservice.getCompanyid(), "aisino_upload_url"); - if(pushUrl == null || StrUtil.isEmpty(pushUrl.getValue())){ + if (pushUrl == null || StrUtil.isEmpty(pushUrl.getValue())) { return new HXResponse("重汽推送机动车地址未设置!"); } - String result = HttpUtil.post(pushUrl.getValue(),paramMap); + String result = HttpUtil.post(pushUrl.getValue(), paramMap); cn.hutool.json.JSONObject jsonObject = JSONUtil.parseObj(result); @@ -1130,23 +1168,14 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer String retMsg = jsonObject.get("retMsg") != null ? jsonObject.get("retMsg").toString() : ""; // 重汽返回接口信息 - return new HXResponse(retCode,retMsg); - }else { - return new HXResponse("9999","导出失败、发票不存在!"); + return new HXResponse(retCode, retMsg); + } else { + return new HXResponse("9999", "导出失败、发票不存在!"); } } - - - - - - - - - @Override public AjaxResult syncStockInfo(Companyservice companyservice) { return null; @@ -1293,8 +1322,6 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer } - - /** * 机动车加密接口(走的大象,重汽用控制台) *//* @@ -1429,6 +1456,7 @@ public class AisinoConsoleInvoiceApiZhongQiServiceImpl implements IInvoiceApiSer /** * 调用基础服务获取税控设备 + * * @param nsrsbh * @param entId * @return 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 new file mode 100644 index 0000000..352b94e --- /dev/null +++ b/jianshui-invoice/src/main/java/com/jianshui/invoice/task/InvoiceBackTask.java @@ -0,0 +1,144 @@ +package com.jianshui.invoice.task; + +import cn.hutool.http.HttpUtil; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.jianshui.common.utils.StringUtils; +import com.jianshui.common.utils.spring.SpringUtils; +import com.jianshui.invoice.domain.Invoice; +import com.jianshui.invoice.domain.InvoiceBack; +import com.jianshui.invoice.domain.Redinfo; +import com.jianshui.invoice.mapper.InvoiceBackMapper; +import com.jianshui.invoice.mapper.InvoiceMapper; +import com.jianshui.system.domain.CompanyserviceProp; +import com.jianshui.system.service.ICompanyservicePropService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * 定时任务-发票推送 + * + * @author 简税平台 + */ +@Component("invoiceBackTask") +@Slf4j +public class InvoiceBackTask +{ + + @Autowired + private InvoiceBackMapper invoiceBackMapper; + + @Autowired + private InvoiceMapper invoiceMapper; + + + public void bkParams(String params) + { + // 默认10次 + int j = params == null ? 10: Integer.parseInt(params) ; + + log.info("[重汽回调定时任务开始执行]---{}次",params); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status", "0").eq("status","2"); + List invoiceBackList = invoiceBackMapper.selectList(queryWrapper); + + for (InvoiceBack invoiceBack : invoiceBackList) { + + int i = 0; + + while (i < j){ + + String id = invoiceBack.getSystemOrderno(); + String identity = invoiceBack.getIdentity(); + + 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("【控制台】发票回调,未配置回调地址{}"+identity); + invoiceBack.setStatus("3"); + invoiceBack.setBackMsg("未配置回调地址"); + invoiceBackMapper.updateInvoiceBack(invoiceBack); + break; + } + + String callBackUrl = secretIdProp.getValue(); + log.info("【控制台】发票回调,回调地址{}",callBackUrl); + + if (id == null) { + log.info("【控制台】发票回调,id为空"); + invoiceBack.setStatus("3"); + invoiceBack.setBackMsg("id为空"); + invoiceBackMapper.updateInvoiceBack(invoiceBack); + break; + } + + Invoice invoice = invoiceMapper.selectBySystemOrderNo(null,id); + if (invoice == null) { + log.info("【控制台】发票信息未查询到,id={}", id); + invoiceBack.setStatus("3"); + invoiceBack.setBackMsg("发票信息未查询到"); + invoiceBackMapper.updateInvoiceBack(invoiceBack); + break; + } + + try { + log.info("【控制台】发票回调接口,发送数据开始,id={}", id); + 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("发票信息未查询到"); + invoiceBackMapper.updateInvoiceBack(invoiceBack); + }else if("9999".equals(status)){ + invoiceBack.setStatus("3"); + invoiceBack.setBackMsg(message); + invoiceBackMapper.updateInvoiceBack(invoiceBack); + }else { + invoiceBack.setStatus("3"); + invoiceBack.setBackMsg(status+message); + invoiceBackMapper.updateInvoiceBack(invoiceBack); + } + break; + } + } catch (Exception e) { + log.info("【控制台】发票回调接口,发送数据异常,id={}", id); + invoiceBack.setStatus("2"); + invoiceBack.setBackMsg("发送数据异常"); + invoiceBackMapper.updateInvoiceBack(invoiceBack); + } + i++; + + } + + // 一直没结果 + if(i == j){ + invoiceBack.setStatus("3"); + invoiceBack.setBackMsg("调用次数上限一直失败!"); + invoiceBackMapper.updateInvoiceBack(invoiceBack); + } + + } + log.info("[重汽回调定时任务执行结束]---"); + } + + + + + + + + + +} 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 deleted file mode 100644 index 97253d6..0000000 --- a/jianshui-invoice/src/main/java/com/jianshui/invoice/task/QueryBackZhongQiTask.java +++ /dev/null @@ -1,87 +0,0 @@ -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/resources/mapper/invoice/InvoiceBackMapper.xml b/jianshui-invoice/src/main/resources/mapper/invoice/InvoiceBackMapper.xml new file mode 100644 index 0000000..79777ea --- /dev/null +++ b/jianshui-invoice/src/main/resources/mapper/invoice/InvoiceBackMapper.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + select id, system_orderno, status, back_url, identity, create_time, back_msg from invoice_back + + + + + + + + insert into invoice_back + + id, + system_orderno, + status, + back_url, + identity, + create_time, + back_msg, + + + #{id}, + #{systemOrderno}, + #{status}, + #{backUrl}, + #{identity}, + #{createTime}, + #{backMsg}, + + + + + update invoice_back + + system_orderno = #{systemOrderno}, + status = #{status}, + back_url = #{backUrl}, + identity = #{identity}, + create_time = #{createTime}, + back_msg = #{backMsg}, + + where id = #{id} + + + + delete from invoice_back where id = #{id} + + + + delete from invoice_back where id in + + #{id} + + + \ No newline at end of file diff --git a/jianshui-platform/src/main/resources/mapper/InvoiceBackDao.xml b/jianshui-platform/src/main/resources/mapper/InvoiceBackDao.xml new file mode 100644 index 0000000..72bb8f7 --- /dev/null +++ b/jianshui-platform/src/main/resources/mapper/InvoiceBackDao.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + insert into jianshui_dev.invoice_back(system_ordernostatusback_urlidentitycreate_timeback_msg) + values + + (#{entity.systemOrderno}#{entity.status}#{entity.backUrl}#{entity.identity}#{entity.createTime}#{entity.backMsg}) + + + + + insert into jianshui_dev.invoice_back(system_ordernostatusback_urlidentitycreate_timeback_msg) + values + + (#{entity.systemOrderno}#{entity.status}#{entity.backUrl}#{entity.identity}#{entity.createTime}#{entity.backMsg}) + + on duplicate key update +system_orderno = values(system_orderno) status = values(status) back_url = values(back_url) identity = values(identity) create_time = values(create_time) back_msg = values(back_msg) + + +