|
|
@@ -434,7 +434,7 @@ public class OMSDisposeService {
|
|
|
jedis.hPut(redisKey, "workInvoiceId", workInvoiceId);
|
|
|
jedis.hPut(redisKey, "informType", informType);
|
|
|
jedis.hPut(redisKey, "firstExecTime", String.valueOf(System.currentTimeMillis()));
|
|
|
- jedis.expire(redisKey, 7200); // 1天过期
|
|
|
+ jedis.expire(redisKey, 14400); // 1天过期
|
|
|
|
|
|
// ========== 追加:封装Redis数据→转JSON→更新发票表(和红冲方法逻辑一致) ==========
|
|
|
long redisStoreTime = System.currentTimeMillis() / 1000; // 秒级存储时间,用于后期回滚
|
|
|
@@ -445,7 +445,7 @@ public class OMSDisposeService {
|
|
|
downloadTaskMap.put("informType", informType);
|
|
|
downloadTaskMap.put("firstExecTime", String.valueOf(System.currentTimeMillis())); // 和Redis保持一致的毫秒数字符串
|
|
|
downloadTaskMap.put("redisKey", redisKey);
|
|
|
- downloadTaskMap.put("redisExpireSeconds", 7200);
|
|
|
+ downloadTaskMap.put("redisExpireSeconds", 14400);
|
|
|
downloadTaskMap.put("redisStoreTime", redisStoreTime); // 新增秒级存储时间
|
|
|
|
|
|
// Map转JSON字符串(单独捕获序列化异常,不影响核心逻辑)
|
|
|
@@ -476,22 +476,58 @@ public class OMSDisposeService {
|
|
|
try {
|
|
|
System.err.println("============ 开始执行【失败兜底-系统信息修改逻辑】 ============");
|
|
|
FinanceInvoiceDTO workInvoice = workInvoiceService.queryById(workInvoiceId);
|
|
|
- if(null != workInvoice){
|
|
|
- //将错误信息保存到数据库
|
|
|
- workInvoice.setOmsErrorMessage(errorMessage);
|
|
|
- workInvoice.setOmsAccessToken(accessToken);
|
|
|
- workInvoice.setStatus("3");
|
|
|
+ if(null != workInvoice) {
|
|
|
+
|
|
|
+ if (errorMessage.contains("订单已存在")) {
|
|
|
+ //如果开过票
|
|
|
+ workInvoice.setStatus("12");
|
|
|
+ //同时需要将下载的redis进行恢复,以及保存到数据库中
|
|
|
+ RedisUtils jedis = null;
|
|
|
+ try {
|
|
|
+ jedis = RedisUtils.getInstance();
|
|
|
+ String redisKey = "PG_OMS_invoice_download:" + workInvoiceId;
|
|
|
+ jedis.hPut(redisKey, "accessToken", accessToken);
|
|
|
+ jedis.hPut(redisKey, "workInvoiceId", workInvoiceId);
|
|
|
+ jedis.hPut(redisKey, "informType", informType);
|
|
|
+ jedis.hPut(redisKey, "firstExecTime", String.valueOf(System.currentTimeMillis()));
|
|
|
+ jedis.expire(redisKey, 14400); // 2小时过期
|
|
|
+
|
|
|
+ // ========== 追加:封装Redis数据→转JSON→更新发票表(和红冲方法逻辑一致) ==========
|
|
|
+ long redisStoreTime = System.currentTimeMillis() / 1000; // 秒级存储时间,用于后期回滚
|
|
|
+ // 封装Map:和Redis中存储的键值完全一致,方便后期回滚解析
|
|
|
+ Map<String, Object> downloadTaskMap = new HashMap<>(10);
|
|
|
+ downloadTaskMap.put("accessToken", accessToken);
|
|
|
+ downloadTaskMap.put("workInvoiceId", workInvoiceId);
|
|
|
+ downloadTaskMap.put("informType", informType);
|
|
|
+ downloadTaskMap.put("firstExecTime", String.valueOf(System.currentTimeMillis())); // 和Redis保持一致的毫秒数字符串
|
|
|
+ downloadTaskMap.put("redisKey", redisKey);
|
|
|
+ downloadTaskMap.put("redisExpireSeconds", 14400);
|
|
|
+ downloadTaskMap.put("redisStoreTime", redisStoreTime); // 新增秒级存储时间
|
|
|
+
|
|
|
+ // Map转JSON字符串(单独捕获序列化异常,不影响核心逻辑)
|
|
|
+ String downloadTaskJson = objectMapper.writeValueAsString(downloadTaskMap);
|
|
|
+
|
|
|
+ // 更新发票表(和红冲方法用相同的DAO/实体,保持风格统一)
|
|
|
+ workInvoice.setBlueDownloadInvoiceJson(downloadTaskJson);
|
|
|
+ workInvoiceDao.updateRedInvoiceJsonByWorkInvoiceId(workInvoice);
|
|
|
+
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ } else if (errorMessage.contains("该发票已经开过票")) {
|
|
|
+ workInvoice.setStatus("5");
|
|
|
+ } else {
|
|
|
+ workInvoice.setStatus("3");
|
|
|
+ }
|
|
|
//修改结果
|
|
|
workInvoiceDao.updateAccessTokenErrorById(workInvoice);
|
|
|
-
|
|
|
- //通知发起人或者开票管理员
|
|
|
- workInvoiceService.handleInvoiceRetryAllFail(workInvoice, errorMessage, informType);
|
|
|
-
|
|
|
+ if (!"12".equals(workInvoice.getStatus())) {
|
|
|
+ //通知发起人或者开票管理员
|
|
|
+ workInvoiceService.handleInvoiceRetryAllFail(workInvoice, errorMessage, informType);
|
|
|
+ }
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
System.err.println("============ 【失败兜底-系统信息修改逻辑】执行完成 ============");
|
|
|
-
|
|
|
} catch (Exception e) {
|
|
|
// 必加:捕获这个方法的异常,避免兜底方法报错导致线程异常
|
|
|
e.printStackTrace();
|