Переглянути джерело

会计、评估OMS开票-添加是否短信通知字段

huangguoce 1 місяць тому
батько
коміт
f55086827a
14 змінених файлів з 179 додано та 71 видалено
  1. 1 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/domain/FinanceInvoice.java
  2. 10 4
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/mapper/xml/FinanceInvoiceMapper.xml
  3. 29 26
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/service/FinanceInvoiceService.java
  4. 50 14
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/service/OMS/OMSDisposeService.java
  5. 1 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/service/dto/FinanceInvoiceDTO.java
  6. 4 1
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/thread/ApprovalThread.java
  7. 3 0
      jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/thread/RedApprovalThread.java
  8. 2 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/domain/CwFinanceInvoice.java
  9. 5 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/mapper/xml/CwFinanceInvoiceMapper.xml
  10. 14 13
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/CwFinanceInvoiceService.java
  11. 50 11
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/OMS/OMSDisposeService.java
  12. 3 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/dto/CwFinanceInvoiceDTO.java
  13. 4 1
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/thread/ApprovalThread.java
  14. 3 0
      jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/thread/RedApprovalThread.java

+ 1 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/domain/FinanceInvoice.java

@@ -195,6 +195,7 @@ public class FinanceInvoice extends BaseEntity {
     private String situationDetail;	//情况说明
     private String redFlushReason;	//红冲原因
 
+    private String isSmsNotice; //是否短信通知
 
     private static final long serialVersionUID = 1L;
 }

+ 10 - 4
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/mapper/xml/FinanceInvoiceMapper.xml

@@ -51,6 +51,7 @@
             <result property="relatedInvoice" column="related_invoice" jdbcType="VARCHAR"/>
             <result property="situationDetail" column="situation_detail" jdbcType="VARCHAR"/>
             <result property="redFlushReason" column="red_flush_reason" jdbcType="VARCHAR"/>
+            <result property="isSmsNotice" column="is_sms_notice" jdbcType="VARCHAR"/>
 
         <result property="actualDrawerEmailAddress" column="actual_drawer_email_address" jdbcType="VARCHAR"/>
             <association property="financeInvoiceInvalidDTO" column="id" select="getFii" javaType="com.jeeplus.assess.invoice.service.dto.FinanceInvoiceInvalidDTO"></association>
@@ -107,7 +108,7 @@
         <result property="relatedInvoice" column="related_invoice" jdbcType="VARCHAR"/>
         <result property="situationDetail" column="situation_detail" jdbcType="VARCHAR"/>
         <result property="redFlushReason" column="red_flush_reason" jdbcType="VARCHAR"/>
-
+        <result property="isSmsNotice" column="is_sms_notice" jdbcType="VARCHAR"/>
         <result property="actualDrawerEmailAddress" column="actual_drawer_email_address" jdbcType="VARCHAR"/>
     </resultMap>
 
@@ -219,7 +220,8 @@
         fi.red_invoice_relevancy_number,
         fi.related_invoice,
         fi.situation_detail,
-        fi.red_flush_reason
+        fi.red_flush_reason,
+        fi.is_sms_notice
     </sql>
 
     <sql id="New_Base_Column_List">
@@ -265,8 +267,12 @@
         fi.red_invoice_relevancy_number,
         fi.related_invoice,
         fi.situation_detail,
-        fi.red_flush_reason
-    </sql>
+        fi.red_flush_reason,
+        fi.is_sms_notice
+
+
+
+                                                     </sql>
 
     <select id="getFii" resultType="com.jeeplus.assess.invoice.service.dto.FinanceInvoiceInvalidDTO">
         select

+ 29 - 26
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/service/FinanceInvoiceService.java

@@ -453,6 +453,9 @@ public class FinanceInvoiceService extends ServiceImpl<FinanceInvoiceMapper, Fin
         if(StringUtils.isNotBlank(financeInvoiceDTO.getRedFlushReason())){
             financeInvoice.setRedFlushReason(financeInvoiceDTO.getRedFlushReason());
         }
+        if(StringUtils.isNotBlank(financeInvoiceDTO.getIsSmsNotice())){
+            financeInvoice.setIsSmsNotice(financeInvoiceDTO.getIsSmsNotice());
+        }
         if (ObjectUtil.isNotEmpty(financeInvoice)) {
             if(StringUtils.isBlank(financeInvoice.getId())){
                 //获取当前登录人信息
@@ -1279,33 +1282,33 @@ public class FinanceInvoiceService extends ServiceImpl<FinanceInvoiceMapper, Fin
         }
 
         //发起短信通知,用于通知开票人
-        //查询开票人员的手机号
-        if (StringUtils.isNotBlank(userDTO.getMobile()) && mobilePattern.matcher(userDTO.getMobile().trim()).matches() ) {
-            //验证手机号是否已经注册
-            if(StringUtils.isNotBlank(userDTO.getMobile())){
-                Map<String,Object> result = null;
-                try{
-                    //调用工具类返回结果
-                    result = SpringUtil.getBean ( IUserApi.class ).sendEntryRandomCodesByInvoice(userDTO.getMobile(),unitName,workInvoice.getNo(),"开票成功",smsCode);
-                    Integer statusCode = (Integer) result.get("statusCode");
-                    if (200 == statusCode) {
-                        System.out.println("短信发送成功!");
-                    } else if (10001 == statusCode) {
-                        String message = (String) result.get("message");
-                        System.out.println(message);
-                    }else if(10002 == statusCode){
-                        System.out.println("账户短信量余额不足,请联系管理员进行充值!");
-                    }else if(10003 == statusCode){
-                        System.out.println("手机号获取验证码次数已达每日上限!");
-                    } else {
-                        System.out.println("短信发送失败,错误代码:101,请联系管理员!");
-                    }
-                }catch (Exception e){
-                    System.out.println("阿里云发送短信失败。失败原因为:" + e.getMessage());
-                    e.printStackTrace();
-                }
-                finally {
+        if(workInvoice.getIsSmsNotice().equals("1")) {
+            if (StringUtils.isNotBlank(userDTO.getMobile()) && mobilePattern.matcher(userDTO.getMobile().trim()).matches()) {
+                //验证手机号是否已经注册
+                if (StringUtils.isNotBlank(userDTO.getMobile())) {
+                    Map<String, Object> result = null;
+                    try {
+                        //调用工具类返回结果
+                        result = SpringUtil.getBean(IUserApi.class).sendEntryRandomCodesByInvoice(userDTO.getMobile(), unitName, workInvoice.getNo(), "开票成功", smsCode);
+                        Integer statusCode = (Integer) result.get("statusCode");
+                        if (200 == statusCode) {
+                            System.out.println("短信发送成功!");
+                        } else if (10001 == statusCode) {
+                            String message = (String) result.get("message");
+                            System.out.println(message);
+                        } else if (10002 == statusCode) {
+                            System.out.println("账户短信量余额不足,请联系管理员进行充值!");
+                        } else if (10003 == statusCode) {
+                            System.out.println("手机号获取验证码次数已达每日上限!");
+                        } else {
+                            System.out.println("短信发送失败,错误代码:101,请联系管理员!");
+                        }
+                    } catch (Exception e) {
+                        System.out.println("阿里云发送短信失败。失败原因为:" + e.getMessage());
+                        e.printStackTrace();
+                    } finally {
 
+                    }
                 }
             }
         }

+ 50 - 14
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/service/OMS/OMSDisposeService.java

@@ -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();

+ 1 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/service/dto/FinanceInvoiceDTO.java

@@ -355,6 +355,7 @@ public class FinanceInvoiceDTO extends BaseDTO {
 
     private List<WorkAttachmentInfo> invoiceList;
 
+    private String isSmsNotice; //是否短信通知
 
     private static final long serialVersionUID = 1L;
 }

+ 4 - 1
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/thread/ApprovalThread.java

@@ -5,6 +5,7 @@ package com.jeeplus.assess.invoice.thread;
 import com.jeeplus.assess.invoice.service.OMS.OMSDisposeService;
 import com.jeeplus.assess.invoice.service.dto.FinanceInvoiceDTO;
 import com.jeeplus.assess.invoice.utils.OMS.SpringContextHolderAccess;
+import org.apache.commons.lang3.StringUtils;
 
 import java.util.HashMap;
 import java.util.Map;
@@ -32,10 +33,12 @@ public class ApprovalThread extends Thread {
             if(null == workInvoice){
                 disposeResult = "查询不到该开票信息";
                 omsDisposeService.handleInvoiceRetryAllFail("","",disposeResult, informType);
+                return;
             }
-            if(null!= workInvoice.getOmsOfdUrl()){
+            if(StringUtils.isNotBlank(workInvoice.getOmsOfdUrl())){
                 disposeResult = "该发票已经开过票";
                 omsDisposeService.handleInvoiceRetryAllFail("",workInvoice.getId(),disposeResult, informType);
+                return;
             }
             omsDisposeService.doInvoiceBusiness(map,workInvoice.getId(), informType);
 

+ 3 - 0
jeeplus-modules/jeeplus-assess/src/main/java/com/jeeplus/assess/invoice/thread/RedApprovalThread.java

@@ -36,14 +36,17 @@ public class RedApprovalThread extends Thread {
             if(null == workInvoice){
                 disposeResult = "查询不到该开票信息";
                 omsDisposeService.handleInvoiceRetryAllFail("","",disposeResult, informType);
+                return;
             }
             if(StringUtils.isNotBlank(workInvoice.getOmsOfdUrl())){
                 disposeResult = "该发票已经开过票";
                 omsDisposeService.handleInvoiceRetryAllFail("",workInvoice.getId(),disposeResult, informType);
+                return;
             }
             if(StringUtils.isBlank(workInvoice.getRedInvoiceRelevancyId())){
                 disposeResult = "未找到该发票关联需要开红字票的发票";
                 omsDisposeService.handleInvoiceRetryAllFail("",workInvoice.getId(),disposeResult, informType);
+                return;
             }
             omsDisposeService.doAllScenarioRedInvoiceBusiness(map,workInvoice.getId(), workInvoice.getRedInvoiceRelevancyId(), originalInvno, informType);
 

+ 2 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/domain/CwFinanceInvoice.java

@@ -214,5 +214,7 @@ public class CwFinanceInvoice extends BaseEntity {
     private String situationDetail;	//情况说明
     private String redFlushReason;	//红冲原因
 
+    private String isSmsNotice;//是否短信通知
+
     private static final long serialVersionUID = 1L;
 }

+ 5 - 1
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/mapper/xml/CwFinanceInvoiceMapper.xml

@@ -207,7 +207,8 @@
         fi.red_invoice_relevancy_number,
         fi.related_invoice,
         fi.situation_detail,
-        fi.red_flush_reason
+        fi.red_flush_reason,
+        fi.is_sms_notice
     </sql>
 
     <sql id="File_Column_List">
@@ -586,6 +587,9 @@
         <if test="null != redFlushReason and redFlushReason != ''">
             red_flush_reason= #{redFlushReason},
         </if>
+        <if test="null != isSmsNotice and isSmsNotice != ''">
+            is_sms_notice= #{isSmsNotice},
+        </if>
         remarks = #{remarks}
         where id = #{id}
     </update>

+ 14 - 13
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/CwFinanceInvoiceService.java

@@ -742,6 +742,9 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
         if (StringUtils.isNotEmpty(cwFinanceInvoiceDTO.getRedFlushReason())) {
             cwFinanceInvoice.setRedFlushReason(cwFinanceInvoiceDTO.getRedFlushReason());
         }
+        if (StringUtils.isNotEmpty(cwFinanceInvoiceDTO.getIsSmsNotice())) {
+            cwFinanceInvoice.setIsSmsNotice(cwFinanceInvoiceDTO.getIsSmsNotice());
+        }
         if (StringUtils.isNotBlank(cwFinanceInvoiceDTO.getId())) {
             cwFinanceInvoiceMapper.updateInfoById(cwFinanceInvoice);
         } else {
@@ -2136,7 +2139,6 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
             for (UserDTO notifiedPartyUser : notifiedPartyUsers) {
                // 通知
                 sendNotify(notifiedPartyUser,workInvoice.getProcessDefinitionId(),workInvoice.getProcInsId(),title);
-                //短信
                 if (StringUtils.isNotBlank(notifiedPartyUser.getMobile()) && mobilePattern.matcher(notifiedPartyUser.getMobile().trim()).matches() ) {
                     Map<String,Object> result = null;
                     try{
@@ -2250,34 +2252,33 @@ public class CwFinanceInvoiceService extends ServiceImpl<CwFinanceInvoiceMapper,
         if (StringUtils.isNotBlank(workInvoice.getStatus()) && !workInvoice.getStatus().equals("3")){
             workInvoice.setStatus("5");
             sendNotify(userDTO,workInvoice.getProcessDefinitionId(),workInvoice.getProcInsId(),title);
-
-            //发起短信通知,用于通知开票人
-            //查询开票人员的手机号
+        }
+        //发起短信通知,用于通知开票人
+        if(workInvoice.getIsSmsNotice().equals("1")){
             if (StringUtils.isNotBlank(userDTO.getMobile()) && mobilePattern.matcher(userDTO.getMobile().trim()).matches() ) {
                 //验证手机号是否已经注册
-                if(StringUtils.isNotBlank(userDTO.getMobile())){
-                    Map<String,Object> result = null;
-                    try{
+                if (StringUtils.isNotBlank(userDTO.getMobile())) {
+                    Map<String, Object> result = null;
+                    try {
                         //调用工具类返回结果
-                        result = SpringUtil.getBean ( IUserApi.class ).sendEntryRandomCodesByInvoice(userDTO.getMobile(),unitName,workInvoice.getNo(),"开票成功",smsCode);
+                        result = SpringUtil.getBean(IUserApi.class).sendEntryRandomCodesByInvoice(userDTO.getMobile(), unitName, workInvoice.getNo(), "开票成功", smsCode);
                         Integer statusCode = (Integer) result.get("statusCode");
                         if (200 == statusCode) {
                             System.out.println("短信发送成功!");
                         } else if (10001 == statusCode) {
                             String message = (String) result.get("message");
                             System.out.println(message);
-                        }else if(10002 == statusCode){
+                        } else if (10002 == statusCode) {
                             System.out.println("账户短信量余额不足,请联系管理员进行充值!");
-                        }else if(10003 == statusCode){
+                        } else if (10003 == statusCode) {
                             System.out.println("手机号获取验证码次数已达每日上限!");
                         } else {
                             System.out.println("短信发送失败,错误代码:101,请联系管理员!");
                         }
-                    }catch (Exception e){
+                    } catch (Exception e) {
                         System.out.println("阿里云发送短信失败。失败原因为:" + e.getMessage());
                         e.printStackTrace();
-                    }
-                    finally {
+                    } finally {
 
                     }
                 }

+ 50 - 11
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/OMS/OMSDisposeService.java

@@ -447,7 +447,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; // 秒级存储时间,用于后期回滚
@@ -458,7 +458,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字符串(单独捕获序列化异常,不影响核心逻辑)
@@ -489,18 +489,57 @@ public class OMSDisposeService {
         try {
             System.err.println("============ 开始执行【失败兜底-系统信息修改逻辑】 ============");
             CwFinanceInvoiceDTO 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 = "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) {

+ 3 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/service/dto/CwFinanceInvoiceDTO.java

@@ -416,6 +416,9 @@ public class CwFinanceInvoiceDTO extends BaseDTO {
     private String redDownloadInvoiceJson;//将对应的红票redis中数据进行存储到数据库中,放置redis数据崩溃丢失
 
     private List<WorkAttachmentInfo> invoiceList;
+    
+
+    private String isSmsNotice;//是否短信通知
 
     private static final long serialVersionUID = 1L;
 }

+ 4 - 1
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/thread/ApprovalThread.java

@@ -4,6 +4,7 @@ package com.jeeplus.finance.invoice.thread;
 import com.jeeplus.finance.invoice.service.OMS.OMSDisposeService;
 import com.jeeplus.finance.invoice.service.dto.CwFinanceInvoiceDTO;
 import com.jeeplus.finance.invoice.util.OMS.SpringContextHolderFinance;
+import com.jeeplus.utils.StringUtils;
 
 
 import java.util.HashMap;
@@ -35,10 +36,12 @@ public class ApprovalThread extends Thread {
             if(null == workInvoice){
                 disposeResult = "查询不到该开票信息";
                 omsDisposeService.handleInvoiceRetryAllFail("","",disposeResult, informType);
+                return;
             }
-            if(null!= workInvoice.getOmsOfdUrl()){
+            if(StringUtils.isNotBlank( workInvoice.getOmsOfdUrl())){
                 disposeResult = "该发票已经开过票";
                 omsDisposeService.handleInvoiceRetryAllFail("",workInvoice.getId(),disposeResult, informType);
+                return;
             }
             omsDisposeService.doInvoiceBusiness(map,workInvoice.getId(), informType);
 

+ 3 - 0
jeeplus-modules/jeeplus-finance/src/main/java/com/jeeplus/finance/invoice/thread/RedApprovalThread.java

@@ -36,14 +36,17 @@ public class RedApprovalThread extends Thread {
             if(null == workInvoice){
                 disposeResult = "查询不到该开票信息";
                 omsDisposeService.handleInvoiceRetryAllFail("","",disposeResult, informType);
+                return;
             }
             if(StringUtils.isNotBlank(workInvoice.getOmsOfdUrl())){
                 disposeResult = "该发票已经开过票";
                 omsDisposeService.handleInvoiceRetryAllFail("",workInvoice.getId(),disposeResult, informType);
+                return;
             }
             if(StringUtils.isBlank(workInvoice.getRedInvoiceRelevancyId())){
                 disposeResult = "未找到该发票关联需要开红字票的发票";
                 omsDisposeService.handleInvoiceRetryAllFail("",workInvoice.getId(),disposeResult, informType);
+                return;
             }
             omsDisposeService.doAllScenarioRedInvoiceBusiness(map,workInvoice.getId(), workInvoice.getRedInvoiceRelevancyId(), originalInvno, informType);