|
|
@@ -1594,36 +1594,44 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
|
|
|
|
|
|
break;
|
|
|
case "17":
|
|
|
- // 飞书看课链接
|
|
|
- Long companyIdLong = Long.parseLong(companyId);
|
|
|
- Long companyUserIdLong = Long.parseLong(companyUserId);
|
|
|
- Long externalIdLong = null;
|
|
|
- String chatIdForFeishu = null;
|
|
|
- if (isGroupChat) {
|
|
|
- chatIdForFeishu = externalId;
|
|
|
- } else if (FeiShuService.isAuthRequired(setting.getFeishuNeedAuth())) {
|
|
|
- externalIdLong = Long.parseLong(externalId);
|
|
|
- addWatchLogIfNeeded(sopLogs, videoId, courseId, sendTime, qwUserId, companyUserId, companyId, externalId, logVo, 2);
|
|
|
- } else {
|
|
|
- externalIdLong = Long.parseLong(externalId);
|
|
|
- }
|
|
|
+ // 飞书看课链接:失败仅记录日志并跳过本条,不阻塞整批 SOP 生成
|
|
|
+ try {
|
|
|
+ Long companyIdLong = Long.parseLong(companyId);
|
|
|
+ Long companyUserIdLong = Long.parseLong(companyUserId);
|
|
|
+ Long externalIdLong = null;
|
|
|
+ String chatIdForFeishu = null;
|
|
|
+ if (isGroupChat) {
|
|
|
+ chatIdForFeishu = externalId;
|
|
|
+ } else if (FeiShuService.isAuthRequired(setting.getFeishuNeedAuth())) {
|
|
|
+ externalIdLong = Long.parseLong(externalId);
|
|
|
+ addWatchLogIfNeeded(sopLogs, videoId, courseId, sendTime, qwUserId, companyUserId, companyId, externalId, logVo, 2);
|
|
|
+ } else {
|
|
|
+ externalIdLong = Long.parseLong(externalId);
|
|
|
+ }
|
|
|
|
|
|
- Map<String, String> feiShuLinkMap = createFeiShuLinkByMiniApp(setting, sopLogs.getCorpId(), sendTime, courseId, videoId,
|
|
|
- qwUserId, companyUserId, companyId, externalIdLong, chatIdForFeishu, cachedCourseConfig);
|
|
|
- String shortLink = feiShuLinkMap.get("link");
|
|
|
+ Map<String, String> feiShuLinkMap = createFeiShuLinkByMiniApp(setting, sopLogs.getCorpId(), sendTime, courseId, videoId,
|
|
|
+ qwUserId, companyUserId, companyId, externalIdLong, chatIdForFeishu, cachedCourseConfig);
|
|
|
+ String shortLink = feiShuLinkMap.get("link");
|
|
|
|
|
|
- try {
|
|
|
String feishuLink = feiShuService.resolveFeishuSendLink(videoId, companyIdLong, courseId, companyUserIdLong,
|
|
|
shortLink, setting.getFeishuAccountId(), setting.getFeishuNeedAuth());
|
|
|
if (StringUtils.isEmpty(feishuLink)) {
|
|
|
- log.error("生成飞书注册链接失败,sopId={}, videoId={}, externalId={}", logVo.getSopId(), videoId, externalId);
|
|
|
- throw new RuntimeException("生成飞书注册链接失败");
|
|
|
+ log.error("生成飞书注册链接失败,跳过本条: sopId={}, videoId={}, externalId={}",
|
|
|
+ logVo.getSopId(), videoId, externalId);
|
|
|
+ recordFeishuLinkGenerationFailed(logVo, sendTime, content.getTime(), qwUserId, qwUserName,
|
|
|
+ companyUserId, companyId, logVo.getCorpId(), sopLogs.getExternalId(), fsUserId, videoId,
|
|
|
+ "生成飞书注册链接失败");
|
|
|
+ return;
|
|
|
}
|
|
|
setting.setLinkUrl(feishuLink);
|
|
|
setting.setIsBindUrl("2");
|
|
|
} catch (Exception e) {
|
|
|
- log.error("生成飞书注册链接异常,sopId={}, videoId={}, externalId={}", logVo.getSopId(), videoId, externalId, e);
|
|
|
- throw new RuntimeException("生成飞书注册链接失败: " + e.getMessage(), e);
|
|
|
+ log.error("生成飞书注册链接异常,跳过本条: sopId={}, videoId={}, externalId={}",
|
|
|
+ logVo.getSopId(), videoId, externalId, e);
|
|
|
+ recordFeishuLinkGenerationFailed(logVo, sendTime, content.getTime(), qwUserId, qwUserName,
|
|
|
+ companyUserId, companyId, logVo.getCorpId(), sopLogs.getExternalId(), fsUserId, videoId,
|
|
|
+ "生成飞书注册链接失败: " + e.getMessage());
|
|
|
+ return;
|
|
|
}
|
|
|
break;
|
|
|
default:
|
|
|
@@ -3276,4 +3284,49 @@ public class SopLogsTaskServiceImpl implements SopLogsTaskService {
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 飞书看课链接生成失败时写入 sop_generation_failed_log
|
|
|
+ */
|
|
|
+ private void recordFeishuLinkGenerationFailed(SopUserLogsVo logVo,
|
|
|
+ Date sendTime,
|
|
|
+ String elementTime,
|
|
|
+ String qwUserId,
|
|
|
+ String qwUserName,
|
|
|
+ String companyUserId,
|
|
|
+ String companyId,
|
|
|
+ String corpId,
|
|
|
+ Long externalId,
|
|
|
+ Long fsUserId,
|
|
|
+ Long videoId,
|
|
|
+ String failReason) {
|
|
|
+ try {
|
|
|
+ SopGenerationFailedLog failedLog = new SopGenerationFailedLog();
|
|
|
+ failedLog.setSopId(logVo.getSopId());
|
|
|
+ failedLog.setUserLogsId(logVo.getId());
|
|
|
+ failedLog.setExternalId(externalId);
|
|
|
+ failedLog.setFsUserId(fsUserId);
|
|
|
+ failedLog.setQwUserId(qwUserId);
|
|
|
+ failedLog.setQwUserName(qwUserName);
|
|
|
+ failedLog.setCompanyUserId(companyUserId);
|
|
|
+ failedLog.setCompanyId(companyId);
|
|
|
+ failedLog.setCorpId(corpId);
|
|
|
+ failedLog.setFailType(SopGenerationFailedLog.FailType.OTHER.getCode());
|
|
|
+ String reason = failReason;
|
|
|
+ if (videoId != null) {
|
|
|
+ reason = failReason + " (videoId=" + videoId + ")";
|
|
|
+ }
|
|
|
+ failedLog.setFailReason(reason);
|
|
|
+ failedLog.setIsRetry(SopGenerationFailedLog.RetryStatus.NOT_RETRY.getCode());
|
|
|
+ failedLog.setDayNum(0L);
|
|
|
+ if (sendTime != null) {
|
|
|
+ failedLog.setSendTime(sendTime.toInstant().atZone(ZoneId.systemDefault()).format(DATE_TIME_FORMATTER));
|
|
|
+ }
|
|
|
+ failedLog.setElementTime(elementTime);
|
|
|
+ sopGenerationFailedLogService.batchInsert(Collections.singletonList(failedLog));
|
|
|
+ } catch (Exception e) {
|
|
|
+ log.error("记录飞书链接生成失败日志异常: sopId={}, externalId={}, error={}",
|
|
|
+ logVo.getSopId(), externalId, e.getMessage(), e);
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|