|
|
@@ -22,6 +22,7 @@ import org.springframework.stereotype.Component;
|
|
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
|
import java.net.URLEncoder;
|
|
|
+import java.util.Date;
|
|
|
import java.util.LinkedHashMap;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
@@ -93,6 +94,38 @@ public class FeiShuService {
|
|
|
return isAuthRequired(link.getFeishuNeedAuth());
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 短链是否已过有效期(fs_course_link.update_time,通常为发课日当天 23:59:59)。
|
|
|
+ */
|
|
|
+ public static boolean isCourseLinkExpired(FsCourseLink link) {
|
|
|
+ if (link == null || link.getUpdateTime() == null) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return new Date().after(link.getUpdateTime());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验飞书 SOP 免授权短链:存在、免授权、未过期。
|
|
|
+ *
|
|
|
+ * @return null 表示通过,否则为错误信息
|
|
|
+ */
|
|
|
+ public String validateNoAuthCourseLink(String linkCode) {
|
|
|
+ if (StringUtils.isBlank(linkCode)) {
|
|
|
+ return "link不能为空";
|
|
|
+ }
|
|
|
+ FsCourseLink link = courseLinkMapper.selectFsCourseLinkByLink(linkCode);
|
|
|
+ if (link == null) {
|
|
|
+ return "链接已过期";
|
|
|
+ }
|
|
|
+ if (isAuthRequired(link.getFeishuNeedAuth())) {
|
|
|
+ return "该链接需要授权,请走授权看课流程";
|
|
|
+ }
|
|
|
+ if (isCourseLinkExpired(link)) {
|
|
|
+ return "链接已过期";
|
|
|
+ }
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 生成飞书免授权看课链接(发课时直接嵌入播放页 iframe 文档)。
|
|
|
*/
|
|
|
@@ -322,6 +355,9 @@ public class FeiShuService {
|
|
|
if (fsCourseLink == null) {
|
|
|
throw new CustomException("课程链接已过期");
|
|
|
}
|
|
|
+ if (isCourseLinkExpired(fsCourseLink)) {
|
|
|
+ throw new CustomException("链接已过期");
|
|
|
+ }
|
|
|
return fsCourseLink;
|
|
|
}
|
|
|
|