|
|
@@ -4,8 +4,6 @@ import com.alibaba.fastjson.JSON;
|
|
|
import com.jeeplus.common.config.Global;
|
|
|
import com.jeeplus.common.utils.JedisUtils;
|
|
|
import com.jeeplus.common.utils.StringUtils;
|
|
|
-import com.jeeplus.modules.sys.entity.MainDictDetail;
|
|
|
-import com.jeeplus.modules.sys.utils.DictUtils;
|
|
|
import com.jeeplus.modules.workclientinfo.dao.WorkClientBankDao;
|
|
|
import com.jeeplus.modules.workclientinfo.dao.WorkClientInfoDao;
|
|
|
import com.jeeplus.modules.workclientinfo.entity.WorkClientBank;
|
|
|
@@ -14,6 +12,7 @@ import com.jeeplus.modules.workinvoice.dao.WorkInvoiceDao;
|
|
|
import com.jeeplus.modules.workinvoice.entity.OMS.OMSAccessTokenInfo;
|
|
|
import com.jeeplus.modules.workinvoice.entity.WorkInvoice;
|
|
|
import com.jeeplus.modules.workinvoice.entity.WorkInvoiceTaxClassificationCode;
|
|
|
+import com.jeeplus.modules.workinvoice.service.WorkInvoiceService;
|
|
|
import com.jeeplus.modules.workinvoice.utils.HttpPostJsonUtil;
|
|
|
import com.jeeplus.modules.workinvoice.utils.OMSNationUtil;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
@@ -49,13 +48,16 @@ public class OMSDisposeService {
|
|
|
@Autowired
|
|
|
private WorkClientBankDao workClientBankDao;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private WorkInvoiceService workInvoiceService;
|
|
|
+
|
|
|
/**
|
|
|
* 用于生成开蓝票信息
|
|
|
* @param map
|
|
|
* @param workInvoiceId 需要开票的开票信息id
|
|
|
*/
|
|
|
@Transactional(readOnly = false)
|
|
|
- public void doInvoiceBusiness(Map<String,Object> map, String workInvoiceId) {
|
|
|
+ public void doInvoiceBusiness(Map<String,Object> map, String workInvoiceId, String informType) {
|
|
|
Jedis jedis = null;
|
|
|
String accessToken = null;
|
|
|
try {
|
|
|
@@ -89,20 +91,22 @@ public class OMSDisposeService {
|
|
|
if(null != workClientInfo){
|
|
|
workInvoice.setClient(workClientInfo);
|
|
|
}else{
|
|
|
- handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败"); // 解析失败直接兜底
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败", informType); // 解析失败直接兜底
|
|
|
return;
|
|
|
}
|
|
|
}else{
|
|
|
- handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败"); // 解析失败直接兜底
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败", informType); // 解析失败直接兜底
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- WorkClientBank workClientBank = workClientBankDao.get(workInvoice.getBank());
|
|
|
- if(null != workClientBank){
|
|
|
- workInvoice.setBank(workClientBank.getOurBank());
|
|
|
- }else{
|
|
|
- handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败"); // 解析失败直接兜底
|
|
|
- return;
|
|
|
+ if(StringUtils.isNotBlank(workInvoice.getBank())){
|
|
|
+ WorkClientBank workClientBank = workClientBankDao.get(workInvoice.getBank());
|
|
|
+ if(null != workClientBank){
|
|
|
+ workInvoice.setBank(workClientBank.getOurBank());
|
|
|
+ }else{
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败", informType); // 解析失败直接兜底
|
|
|
+ return;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -112,6 +116,8 @@ public class OMSDisposeService {
|
|
|
if(null != billingContentDetail){
|
|
|
workInvoice.setBillingContent(billingContentDetail.getGoodName());
|
|
|
workInvoice.setGoodsTaxno(billingContentDetail.getGoodsTaxno());
|
|
|
+ }else{
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "未找到对应税收编码,请联系信息部确认后重新发起", informType); // 解析失败直接兜底
|
|
|
}
|
|
|
//生成开票基础信息
|
|
|
String string = util.neatenData(workInvoiceId,workInvoice,billingContentDetail);
|
|
|
@@ -137,19 +143,19 @@ public class OMSDisposeService {
|
|
|
|
|
|
String finalAccessToken = accessToken;
|
|
|
String finalJsonInvoiceStr = jsonInvoiceStr;
|
|
|
- executeOrderUploadRetry(workInvoiceId, remainRetryTimes, jsonInvoicResultStr, finalJsonInvoiceStr, finalAccessToken, map,"accessToken", "blueTicket");
|
|
|
+ executeOrderUploadRetry(workInvoiceId, remainRetryTimes, jsonInvoicResultStr, finalJsonInvoiceStr, finalAccessToken, map,"accessToken", "blueTicket", informType);
|
|
|
}else{
|
|
|
- handleInvoiceRetryAllFail(jsonInvoiceStr,workInvoiceId, "蓝票发送订单生成接口返回值为空,开票失败。节点访问参数为:" + jsonInvoicResultStr); // 解析失败直接兜底
|
|
|
+ handleInvoiceRetryAllFail(jsonInvoiceStr,workInvoiceId, "蓝票发送订单生成接口返回值为空,开票失败。节点访问参数为:" + jsonInvoicResultStr, informType); // 解析失败直接兜底
|
|
|
|
|
|
}
|
|
|
}else{
|
|
|
- handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败"); // 解析失败直接兜底
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败", informType); // 解析失败直接兜底
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}else{
|
|
|
- handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败"); // 解析失败直接兜底
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败", informType); // 解析失败直接兜底
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -249,16 +255,17 @@ public class OMSDisposeService {
|
|
|
* @param map 作用不大,仅作为保留
|
|
|
* @param getKey 用来判定的参数值
|
|
|
* @param initiationType 用来判定是什么类型的,比如蓝票、全类型红票、还是快捷红票
|
|
|
+ * @param informType 流程用来通知的类型
|
|
|
*/
|
|
|
|
|
|
@Transactional(readOnly = false)
|
|
|
- public void executeOrderUploadRetry(String workInvoiceId, int remainRetryTimes, String jsonInvoicResultStr, String jsonInvoiceStr, String accessToken, Map<String,Object> map, String getKey, String initiationType) {
|
|
|
+ public void executeOrderUploadRetry(String workInvoiceId, int remainRetryTimes, String jsonInvoicResultStr, String jsonInvoiceStr, String accessToken, Map<String,Object> map, String getKey, String initiationType, String informType) {
|
|
|
String jsonInvoicResult = "";
|
|
|
try {
|
|
|
OMSAccessTokenInfo resultTokenInfo = JSON.parseObject(jsonInvoicResultStr, OMSAccessTokenInfo.class);
|
|
|
if(null == resultTokenInfo || null == resultTokenInfo.getResult()){
|
|
|
System.err.println("❌ 订单上传解析失败,剩余重试次数:"+remainRetryTimes);
|
|
|
- handleInvoiceRetryAllFail(accessToken, workInvoiceId, ""); // 解析失败也执行兜底方法
|
|
|
+ handleInvoiceRetryAllFail(accessToken, workInvoiceId, "", informType); // 解析失败也执行兜底方法
|
|
|
return;
|
|
|
}
|
|
|
String code = resultTokenInfo.getResult().getCode();
|
|
|
@@ -277,7 +284,7 @@ public class OMSDisposeService {
|
|
|
}
|
|
|
String finalWorkInvoiceId = workInvoiceId;
|
|
|
// 存入Redis,由InvoiceDownloadTask接管
|
|
|
- saveInvoiceDownloadTaskToRedis(accessToken, finalWorkInvoiceId);
|
|
|
+ saveInvoiceDownloadTaskToRedis(accessToken, finalWorkInvoiceId, informType);
|
|
|
System.out.println("✅ 解析开票数据任务["+finalWorkInvoiceId+"]已存入Redis,由InvoiceDownloadTask接管重试");
|
|
|
|
|
|
} else if ("9998".equals(code)) {
|
|
|
@@ -298,19 +305,19 @@ public class OMSDisposeService {
|
|
|
} finally {
|
|
|
if(jedis != null) jedis.close();
|
|
|
}
|
|
|
- doInvoiceBusiness(map, workInvoiceId);
|
|
|
+ doInvoiceBusiness(map, workInvoiceId, informType);
|
|
|
} else {
|
|
|
// ✅ ✅ ✅ 核心修正:0001/0002/其他任意错误码 → 直接调用handleInvoiceRetryAllFail执行修改系统信息逻辑 ✅ ✅ ✅
|
|
|
System.err.println("❌ 订单上传返回业务错误码:"+code+",立即执行失败兜底逻辑修改系统信息!");
|
|
|
System.err.println("❌ 订单上传返回业务错误原因:"+message);
|
|
|
map.put("订单状态", "失败,错误码:"+code);
|
|
|
- handleInvoiceRetryAllFail(accessToken, workInvoiceId, "订单上传返回业务错误码:"+code+",错误原因:"+message); // 解析失败也执行兜底方法
|
|
|
+ handleInvoiceRetryAllFail(accessToken, workInvoiceId, "订单上传返回业务错误码:"+code+",错误原因:"+message, informType); // 解析失败也执行兜底方法
|
|
|
remainRetryTimes = 0;
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
System.err.println("❌ 订单上传重试异常,剩余次数:"+remainRetryTimes);
|
|
|
- handleInvoiceRetryAllFail(accessToken, workInvoiceId, "订单上传重试异常,请重新发起"); // 解析失败也执行兜底方法
|
|
|
+ handleInvoiceRetryAllFail(accessToken, workInvoiceId, "订单上传重试异常,请重新发起", informType); // 解析失败也执行兜底方法
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -365,13 +372,14 @@ public class OMSDisposeService {
|
|
|
* @param accessToken
|
|
|
* @param workInvoiceId 开票的id
|
|
|
*/
|
|
|
- public void saveInvoiceDownloadTaskToRedis(String accessToken, String workInvoiceId) {
|
|
|
+ public void saveInvoiceDownloadTaskToRedis(String accessToken, String workInvoiceId, String informType) {
|
|
|
Jedis jedis = null;
|
|
|
try {
|
|
|
jedis = JedisUtils.getResource();
|
|
|
String redisKey = "OMS_invoice_download:" + workInvoiceId;
|
|
|
jedis.hset(redisKey, "accessToken", accessToken);
|
|
|
jedis.hset(redisKey, "workInvoiceId", workInvoiceId);
|
|
|
+ jedis.hset(redisKey, "informType", informType);
|
|
|
jedis.hset(redisKey, "firstExecTime", String.valueOf(System.currentTimeMillis()));
|
|
|
jedis.expire(redisKey, seconds); // 1天过期
|
|
|
} catch (Exception e) {
|
|
|
@@ -386,7 +394,7 @@ public class OMSDisposeService {
|
|
|
* @param accessToken
|
|
|
*/
|
|
|
@Transactional(readOnly = false)
|
|
|
- public void handleInvoiceRetryAllFail(String accessToken, String workInvoiceId, String errorMessage) {
|
|
|
+ public void handleInvoiceRetryAllFail(String accessToken, String workInvoiceId, String errorMessage, String informType) {
|
|
|
// ============ 你的所有【修改系统信息/更新订单状态/写失败日志】逻辑 全部写在这里!!! ============
|
|
|
try {
|
|
|
System.err.println("============ 开始执行【失败兜底-系统信息修改逻辑】 ============");
|
|
|
@@ -401,6 +409,8 @@ public class OMSDisposeService {
|
|
|
|
|
|
|
|
|
//通知发起人或者开票管理员
|
|
|
+ workInvoiceService.handleInvoiceRetryAllFail(workInvoice, errorMessage, informType);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -420,7 +430,7 @@ public class OMSDisposeService {
|
|
|
* @param allEinvno
|
|
|
*/
|
|
|
@Transactional(readOnly = false)
|
|
|
- public void doFastRedInvoiceBusiness(Map<String,Object> map, String allEinvno, String workInvoiceId) {
|
|
|
+ public void doFastRedInvoiceBusiness(Map<String,Object> map, String allEinvno, String workInvoiceId, String informType) {
|
|
|
Jedis jedis = null;
|
|
|
String accessToken = null;
|
|
|
try {
|
|
|
@@ -460,7 +470,7 @@ public class OMSDisposeService {
|
|
|
if(StringUtils.isNotBlank(jsonInvoicResultStr)){
|
|
|
String finalAccessToken = accessToken;
|
|
|
String finalJsonInvoiceStr = jsonInvoiceStr;
|
|
|
- executeOrderUploadRetry(workInvoiceId, 5, jsonInvoicResultStr, finalJsonInvoiceStr, finalAccessToken, map, "orderno", "fastRed");
|
|
|
+ executeOrderUploadRetry(workInvoiceId, 5, jsonInvoicResultStr, finalJsonInvoiceStr, finalAccessToken, map, "orderno", "fastRed", informType);
|
|
|
}
|
|
|
|
|
|
} catch (Exception e) {
|
|
|
@@ -477,11 +487,13 @@ public class OMSDisposeService {
|
|
|
/**
|
|
|
* 调用生成红字确认申请单
|
|
|
* @param map
|
|
|
- * @param workInvoiceId 需要开票的开票id信息
|
|
|
+ * @param workInvoiceId 需要开红字票的开票id信息
|
|
|
+ * @param redInvoiceRelevancyId 开红票对应蓝票的invoiceid
|
|
|
* @param originalInvno 原蓝票发票号码(数电票号码)
|
|
|
+ * @param informType 用于流程通知的判定条件
|
|
|
*/
|
|
|
@Transactional(readOnly = false)
|
|
|
- public void doAllScenarioRedInvoiceBusiness(Map<String,Object> map, String workInvoiceId, String originalInvno) {
|
|
|
+ public void doAllScenarioRedInvoiceBusiness(Map<String,Object> map, String workInvoiceId, String redInvoiceRelevancyId, String originalInvno, String informType) {
|
|
|
Jedis jedis = null;
|
|
|
String accessToken = null;
|
|
|
try {
|
|
|
@@ -505,37 +517,96 @@ public class OMSDisposeService {
|
|
|
OMSNationUtil util = new OMSNationUtil();
|
|
|
//获取需要开票的发票信息
|
|
|
WorkInvoice workInvoice = workInvoiceDao.get(workInvoiceId);
|
|
|
+
|
|
|
if(null != workInvoice){
|
|
|
- //生成红冲的数据
|
|
|
- String string = util.neatenAllScenarioRedInvoiceData(workInvoiceId, originalInvno,workInvoice);
|
|
|
|
|
|
- OMSAccessTokenInfo InvoiceTokenInfo = new OMSAccessTokenInfo();
|
|
|
- InvoiceTokenInfo.setAppId(appId);
|
|
|
- InvoiceTokenInfo.setAppKey(appKey);
|
|
|
- InvoiceTokenInfo.setExchangeId(UUID.randomUUID().toString());
|
|
|
- InvoiceTokenInfo.setAccessToken(accessToken);
|
|
|
- InvoiceTokenInfo.setData(string);
|
|
|
- String jsonInvoiceStr = JSON.toJSONString(InvoiceTokenInfo);
|
|
|
+ if(null != workInvoice.getClient() && StringUtils.isNotBlank(workInvoice.getClient().getId())){
|
|
|
+ //查询关联的客户开票信息
|
|
|
+ WorkClientInfo workClientInfo = workClientInfoDao.get(workInvoice.getClient().getId());
|
|
|
+ if(null != workClientInfo){
|
|
|
+ workInvoice.setClient(workClientInfo);
|
|
|
+ }else{
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败", informType); // 解析失败直接兜底
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败", informType); // 解析失败直接兜底
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //获取开票银行信息
|
|
|
+ if(StringUtils.isNotBlank(workInvoice.getBank())){
|
|
|
+ WorkClientBank workClientBank = workClientBankDao.get(workInvoice.getBank());
|
|
|
+ if(null != workClientBank){
|
|
|
+ workInvoice.setBank(workClientBank.getOurBank());
|
|
|
+ }else{
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败", informType); // 解析失败直接兜底
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
- String jsonInvoicResultStr = HttpPostJsonUtil.doPost("https://oms-sandbox.einvoice.js.cn:7079/prod-api/output/server/redApply/apply", jsonInvoiceStr);
|
|
|
- System.out.println("✅ 全场景红冲订单提交接口返回值:" + jsonInvoicResultStr);
|
|
|
- map.put("全场景红冲订单接口信息", jsonInvoicResultStr);
|
|
|
+ //获取被红冲发票的基本信息
|
|
|
|
|
|
- // 调用订单上传重试方法(包含所有码值规则)
|
|
|
- if(StringUtils.isNotBlank(jsonInvoicResultStr)){
|
|
|
|
|
|
- //将上个节点获取的值存到数据库,留作redis崩溃后进行重新获取处理
|
|
|
- workInvoice.setOrderForGoodsResultStr(jsonInvoicResultStr);
|
|
|
- workInvoiceDao.updateOrderForGoodsResultStrById(workInvoice);
|
|
|
+ if(StringUtils.isNotBlank(workInvoice.getBillingContent())){
|
|
|
+ WorkInvoiceTaxClassificationCode billingContentDetail = workInvoiceDao.getBillingContentDetail(workInvoice);
|
|
|
+ if(null != billingContentDetail){
|
|
|
+ workInvoice.setBillingContent(billingContentDetail.getGoodName());
|
|
|
+ workInvoice.setGoodsTaxno(billingContentDetail.getGoodsTaxno());
|
|
|
+ }else{
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "未找到对应税收编码,请联系信息部确认后重新发起", informType); // 解析失败直接兜底
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取本次红冲对应蓝票的基本信息
|
|
|
+ WorkInvoice workInvoiceRelevancy = workInvoiceDao.get(redInvoiceRelevancyId);
|
|
|
+ if(null == workInvoiceRelevancy || null == workInvoiceRelevancy.getClient()){
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "未找到需要红冲票的信息,请确认后重新发起", informType); // 解析失败直接兜底
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ //获取被红冲蓝票的税率信息
|
|
|
+ WorkInvoiceTaxClassificationCode relevancyBillingContentDetail = workInvoiceDao.getBillingContentDetail(workInvoiceRelevancy);
|
|
|
+ if(null == relevancyBillingContentDetail){
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "未找到被红冲蓝票的对应税收编码,请联系信息部确认后重新发起", informType); // 解析失败直接兜底
|
|
|
+ return;
|
|
|
+ }
|
|
|
|
|
|
+ //生成红冲的数据
|
|
|
+ String string = util.neatenAllScenarioRedInvoiceData(workInvoiceId, originalInvno,workInvoice, workInvoiceRelevancy, billingContentDetail,relevancyBillingContentDetail);
|
|
|
|
|
|
- String finalAccessToken = accessToken;
|
|
|
- queryRedInvoiceConfirm (workInvoiceId, 5, jsonInvoicResultStr, finalAccessToken);
|
|
|
- } else {
|
|
|
- handleInvoiceRetryAllFail(accessToken,workInvoiceId, "全场景红冲订单接口返回值为空,开票失败。节点申请参数为:"+ jsonInvoiceStr); // 解析失败直接兜底
|
|
|
+ OMSAccessTokenInfo InvoiceTokenInfo = new OMSAccessTokenInfo();
|
|
|
+ InvoiceTokenInfo.setAppId(appId);
|
|
|
+ InvoiceTokenInfo.setAppKey(appKey);
|
|
|
+ InvoiceTokenInfo.setExchangeId(UUID.randomUUID().toString());
|
|
|
+ InvoiceTokenInfo.setAccessToken(accessToken);
|
|
|
+ InvoiceTokenInfo.setData(string);
|
|
|
+ String jsonInvoiceStr = JSON.toJSONString(InvoiceTokenInfo);
|
|
|
+
|
|
|
+ String jsonInvoicResultStr = HttpPostJsonUtil.doPost("https://oms-sandbox.einvoice.js.cn:7079/prod-api/output/server/redApply/apply", jsonInvoiceStr);
|
|
|
+ System.out.println("✅ 全场景红冲订单提交接口返回值:" + jsonInvoicResultStr);
|
|
|
+ map.put("全场景红冲订单接口信息", jsonInvoicResultStr);
|
|
|
+
|
|
|
+ // 调用订单上传重试方法(包含所有码值规则)
|
|
|
+ if(StringUtils.isNotBlank(jsonInvoicResultStr)){
|
|
|
+
|
|
|
+ //将上个节点获取的值存到数据库,留作redis崩溃后进行重新获取处理
|
|
|
+ workInvoice.setOrderForGoodsResultStr(jsonInvoicResultStr);
|
|
|
+ workInvoiceDao.updateOrderForGoodsResultStrById(workInvoice);
|
|
|
+
|
|
|
+
|
|
|
+ String finalAccessToken = accessToken;
|
|
|
+ queryRedInvoiceConfirm (workInvoiceId, 5, jsonInvoicResultStr, finalAccessToken,informType);
|
|
|
+ } else {
|
|
|
+ handleInvoiceRetryAllFail(accessToken,workInvoiceId, "全场景红冲订单接口返回值为空,开票失败。节点申请参数为:"+ jsonInvoiceStr, informType); // 解析失败直接兜底
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败", informType); // 解析失败直接兜底
|
|
|
+ return;
|
|
|
}
|
|
|
+
|
|
|
}else{
|
|
|
- handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败"); // 解析失败直接兜底
|
|
|
+ handleInvoiceRetryAllFail("",workInvoiceId, "开票获取发票信息失败", informType); // 解析失败直接兜底
|
|
|
+ return;
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -557,28 +628,28 @@ public class OMSDisposeService {
|
|
|
* @param workInvoiceId 开票的id
|
|
|
*/
|
|
|
@Transactional(readOnly = false)
|
|
|
- public void queryRedInvoiceConfirm (String workInvoiceId, int remainRetryTimes, String jsonInvoicResultStr, String accessToken) {
|
|
|
+ public void queryRedInvoiceConfirm (String workInvoiceId, int remainRetryTimes, String jsonInvoicResultStr, String accessToken, String informType) {
|
|
|
try {
|
|
|
OMSAccessTokenInfo resultTokenInfo = JSON.parseObject(jsonInvoicResultStr, OMSAccessTokenInfo.class);
|
|
|
if(null == resultTokenInfo || null == resultTokenInfo.getResult()){
|
|
|
System.err.println("❌ 全场景红冲订单提交接口返回值解析失败,剩余重试次数:"+remainRetryTimes);
|
|
|
- handleInvoiceRetryAllFail(accessToken, workInvoiceId, ""); // 解析失败也执行兜底方法
|
|
|
+ handleInvoiceRetryAllFail(accessToken, workInvoiceId, "", informType); // 解析失败也执行兜底方法
|
|
|
return;
|
|
|
}
|
|
|
String code = resultTokenInfo.getResult().getCode();
|
|
|
|
|
|
if ("0000".equals(code)) {
|
|
|
// 仅存入Redis,删除所有业务执行逻辑
|
|
|
- saveRedInvoiceTaskToRedis(workInvoiceId, remainRetryTimes, jsonInvoicResultStr, accessToken, workInvoiceId, System.currentTimeMillis());
|
|
|
+ saveRedInvoiceTaskToRedis(workInvoiceId, remainRetryTimes, jsonInvoicResultStr, accessToken, workInvoiceId, System.currentTimeMillis(),informType);
|
|
|
System.out.println("✅ 红冲任务["+workInvoiceId+"]已存入Redis,由定时任务接管执行");
|
|
|
} else {
|
|
|
String message = resultTokenInfo.getResult().getMessage();
|
|
|
System.err.println("❌ 全类型红冲--红字确认单查询接口返回业务错误码:"+code+",错误原因为:"+message);
|
|
|
- handleInvoiceRetryAllFail(accessToken, workInvoiceId, "全类型红冲--红字确认单查询接口返回业务错误码:"+code+",错误原因为:"+message); // 解析失败也执行兜底方法
|
|
|
+ handleInvoiceRetryAllFail(accessToken, workInvoiceId, "全类型红冲--红字确认单查询接口返回业务错误码:"+code+",错误原因为:"+message, informType); // 解析失败也执行兜底方法
|
|
|
}
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
- handleInvoiceRetryAllFail(accessToken, workInvoiceId, "全类型红冲--红字确认单查询接口发起失败,请重新发起"); // 解析失败也执行兜底方法
|
|
|
+ handleInvoiceRetryAllFail(accessToken, workInvoiceId, "全类型红冲--红字确认单查询接口发起失败,请重新发起", informType); // 解析失败也执行兜底方法
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -591,7 +662,7 @@ public class OMSDisposeService {
|
|
|
* @param applyNo 发票id
|
|
|
* @param startTime 这个任务开始时间。限制:开始3天内如果双方没有全部确认,则本次红冲失败
|
|
|
*/
|
|
|
- public void saveRedInvoiceTaskToRedis(String workInvoiceId, int remainRetryTimes, String jsonInvoicResultStr, String accessToken, String applyNo, long startTime) {
|
|
|
+ public void saveRedInvoiceTaskToRedis(String workInvoiceId, int remainRetryTimes, String jsonInvoicResultStr, String accessToken, String applyNo, long startTime, String informType) {
|
|
|
Jedis jedis = null;
|
|
|
try {
|
|
|
jedis = JedisUtils.getResource();
|
|
|
@@ -601,11 +672,12 @@ public class OMSDisposeService {
|
|
|
jedis.hset(redisKey, "jsonInvoicResultStr", jsonInvoicResultStr);
|
|
|
jedis.hset(redisKey, "accessToken", accessToken);
|
|
|
jedis.hset(redisKey, "workInvoiceId", workInvoiceId);
|
|
|
+ jedis.hset(redisKey, "informType", informType);
|
|
|
jedis.hset(redisKey, "startTime", String.valueOf(startTime));
|
|
|
jedis.expire(redisKey, 259200 + 3600); // 3天+1小时过期
|
|
|
} catch (Exception e) {
|
|
|
e.printStackTrace();
|
|
|
- handleInvoiceRetryAllFail(accessToken, workInvoiceId, "全类型红冲--红字确认单查询接口发起失败,请重新发起"); // 解析失败也执行兜底方法
|
|
|
+ handleInvoiceRetryAllFail(accessToken, workInvoiceId, "全类型红冲--红字确认单查询接口发起失败,请重新发起", informType); // 解析失败也执行兜底方法
|
|
|
} finally {
|
|
|
if (jedis != null) jedis.close();
|
|
|
}
|