Ver código fonte

完善飞书错误记录

cgp 2 dias atrás
pai
commit
3423bc824b

+ 14 - 6
fs-ipad-task/src/main/java/com/fs/app/service/FeishuAsyncService.java

@@ -42,7 +42,7 @@ public class FeishuAsyncService {
             // 成功时需要更新docId的文档内容为已填充
             String amountKey = FEISHU_CLIENT+docId;
             account.setDocumentIdFillFlag(Boolean.TRUE);
-            redisCache.setCacheObject(amountKey, account,30, TimeUnit.DAYS);
+            redisCache.setCacheObject(amountKey, account,3, TimeUnit.DAYS);
         } catch (CustomException e) {
             // 调用原Service的方法处理异常
             Integer code = e.getCode();
@@ -54,9 +54,12 @@ public class FeishuAsyncService {
             }
             if (FeishuErrorCode.isAccountDisable(code)) {
                 feiShuService.disablePersonalAccount(account, e.getMessage());
-                log.warn("个人账号[{}]被禁用,尝试下一个", account.getAppId());
+                log.warn("个人账号[{}]被禁用-", account.getAppId());
+                feiShuService.recordLinkError(videoId, companyId, courseId,
+                        companyUserId, shortLink,
+                        "账号被禁用:" + e.getMessage(), 2);
             } else if (FeishuErrorCode.isRateLimit(code) || FeishuErrorCode.isInternalRetryable(code)) {
-                log.warn("个人账号[{}]可重试错误,切换下一个", account.getAppId());
+                log.warn("个人账号[{}]可重试错误-", account.getAppId());
                 feiShuService.recordLinkError(videoId, companyId, courseId,
                         companyUserId, shortLink,
                         e.getMessage(), 1);
@@ -83,10 +86,12 @@ public class FeishuAsyncService {
             // 成功时需要更新docId的课程内容为已填充
             String amountKey = FEISHU_CLIENT+docId;
             account.setCourseFillFlag(Boolean.TRUE);
-            redisCache.setCacheObject(amountKey, account,30, TimeUnit.DAYS);
+            redisCache.setCacheObject(amountKey, account,3, TimeUnit.DAYS);
         } catch (CustomException e) {
             // 调用原Service的方法处理异常
             Integer code = e.getCode();
+            log.error("异步填充课程失败,docId={}, videoId={}, appId={}, code={}, msg={}",
+                    docId, videoId, account.getAppId(), code, e.getMessage(), e);
             if (code == null) {
                 feiShuService.recordLinkError(videoId, companyId, courseId,
                         companyUserId, shortLink,
@@ -95,9 +100,12 @@ public class FeishuAsyncService {
             }
             if (FeishuErrorCode.isAccountDisable(code)) {
                 feiShuService.disablePersonalAccount(account, e.getMessage());
-                log.warn("个人账号[{}]被禁用,尝试下一个", account.getAppId());
+                log.warn("个人账号[{}]被禁用", account.getAppId());
+                feiShuService.recordLinkError(videoId, companyId, courseId,
+                        companyUserId, shortLink,
+                        "账号被禁用:" + e.getMessage(), 2);
             } else if (FeishuErrorCode.isRateLimit(code) || FeishuErrorCode.isInternalRetryable(code)) {
-                log.warn("个人账号[{}]可重试错误,切换下一个", account.getAppId());
+                log.warn("个人账号[{}]可重试错误", account.getAppId());
                 feiShuService.recordLinkError(videoId, companyId, courseId,
                         companyUserId, shortLink,
                         e.getMessage(), 2);

+ 17 - 0
fs-ipad-task/src/main/java/com/fs/app/service/IpadSendServer.java

@@ -347,6 +347,12 @@ public class IpadSendServer {
         } else if ("19".equals(content.getContentType())){
             completeNotionCourseLink(vo, content,qwSopLogs, externalId,qwUserId);
         }
+
+        // ---- 如果链接获取失败,则不发送 ----
+        if (content.getSendStatus() == 2) {
+            log.info("ID:{}-链接消息已标记失败,跳过发送,原因:{}", vo.getId(), content.getSendRemarks());
+            return;
+        }
         // 文本
         LinkVo linkVo = LinkVo.builder()
                 .title(content.getLinkTitle())
@@ -407,11 +413,19 @@ public class IpadSendServer {
                 param.setLink(shortLink);
                 param.setUserId(qwSopLogs.getFsUserId());
                 param.setLogId(logId);
+                try {
                 String feishuRegisterLink = feiShuService.getFeishuCoursePageLink(param);
                 content.setLinkUrl(feishuRegisterLink);
                 //更新qwSopLogs
                 qwSopLogsService.updateLinkUrlInContentJson(qwSopLogs, feishuRegisterLink);
                 return content;
+                } catch (Exception e) {
+                    log.error("飞书-获取飞书链接异常", e);
+                    // ---- 异常时也标记失败 ----
+                    content.setSendStatus(2);
+                    content.setSendRemarks("获取飞书课程链接异常:" + e.getMessage());
+                    return content;
+                }
             }
             log.error("新飞书-命中飞书课程链接缓存key:{}",docIdKey);
             //根据虚拟飞书链接组装真实飞书链接
@@ -441,6 +455,9 @@ public class IpadSendServer {
             return content;
         }catch (Exception e){
             log.error("ID:{}-新飞书完善飞书课程链接异常:{}", vo.getId(), e.getMessage());
+            // 外层异常也标记失败
+            content.setSendStatus(2);
+            content.setSendRemarks("完善飞书课程链接异常:" + e.getMessage());
         }
         return content;
     }

+ 4 - 4
fs-service/src/main/java/com/fs/feishu/service/FeiShuService.java

@@ -233,10 +233,10 @@ public class FeiShuService {
                     //有视频短链+外部联系人id,需要缓存docId和account
                     if (fsCourseLink.getQwExternalId()!=null){
                         String docIdKey=FEISHU_DOC_ID + fsCourseLink.getQwExternalId()+ "_" + param.getVideoId();
-                        redisCache.setCacheObject(docIdKey, docId);
+                        redisCache.setCacheObject(docIdKey, docId,3,TimeUnit.DAYS);//3天过期
                         String accountKey = FEISHU_CLIENT+docId;
                         account.setCourseFillFlag(Boolean.TRUE);//这里要记录一下课程内容已填充
-                        redisCache.setCacheObject(accountKey, account);
+                        redisCache.setCacheObject(accountKey, account,3,TimeUnit.DAYS);
                     }
                     String result = "https://www.feishu.cn/docx/" + docId;
                     return result;
@@ -281,10 +281,10 @@ public class FeiShuService {
                 FsCourseLink fsCourseLink = courseLinkMapper.selectFsCourseLinkByLink(param.getLink());
                 if (fsCourseLink.getQwExternalId()!=null){
                     String docIdKey=FEISHU_DOC_ID + fsCourseLink.getQwExternalId()+ "_" + param.getVideoId();
-                    redisCache.setCacheObject(docIdKey, docId);
+                    redisCache.setCacheObject(docIdKey, docId,3,TimeUnit.DAYS);
                     String accountKey = FEISHU_CLIENT+docId;
                     account.setCourseFillFlag(Boolean.TRUE);//这里要记录一下课程内容已填充
-                    redisCache.setCacheObject(accountKey, account);
+                    redisCache.setCacheObject(accountKey, account,3,TimeUnit.DAYS);
                 }
                 String result = "https://www.feishu.cn/docx/" + docId;
                 return result;

+ 10 - 10
fs-user-app/src/main/java/com/fs/app/controller/course/CourseFsUserController.java

@@ -177,16 +177,16 @@ public class CourseFsUserController extends AppBaseController {
         return courseLinkService.getLinkInfo(param.getLogId());
     }
 
-    @ApiOperation("获取飞书课程链接")
-    @PostMapping("/getFeiShuCourseNewLink")
-    public R getFeiShuCourseNewLink(@RequestBody FeishuLinkParam param) {
-        if (StringUtils.isBlank(param.getLink())){
-            return R.error("飞书课程短链不能为空");
-        }
-        logger.info("【获取飞书课程完整链接入参】:{}",param);
-        String feishuCourseNewLink = feiShuService.getFeishuCourseNewLink(param);
-        return R.ok().put("data", feishuCourseNewLink);
-    }
+//    @ApiOperation("获取飞书课程链接")
+//    @PostMapping("/getFeiShuCourseNewLink")
+//    public R getFeiShuCourseNewLink(@RequestBody FeishuLinkParam param) {
+//        if (StringUtils.isBlank(param.getLink())){
+//            return R.error("飞书课程短链不能为空");
+//        }
+//        logger.info("【获取飞书课程完整链接入参】:{}",param);
+//        String feishuCourseNewLink = feiShuService.getFeishuCourseNewLink(param);
+//        return R.ok().put("data", feishuCourseNewLink);
+//    }
 
 
 }