Browse Source

发布计划未发布完成报警

wangyunpeng 9 months ago
parent
commit
ad1474ccda

+ 3 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/mapper/aigc/AigcBaseMapper.java

@@ -1,5 +1,6 @@
 package com.tzld.longarticle.recommend.server.mapper.aigc;
 
+import com.tzld.longarticle.recommend.server.model.dto.NotPublishPlan;
 import com.tzld.longarticle.recommend.server.model.entity.aigc.CrawlerPlan;
 import com.tzld.longarticle.recommend.server.model.entity.aigc.CrawlerPlanResultRel;
 import com.tzld.longarticle.recommend.server.model.entity.aigc.PublishContent;
@@ -20,4 +21,6 @@ public interface AigcBaseMapper {
     List<CrawlerPlanResultRel> getCrawlerPlanRelByChannelContentIds(List<String> channelContentIds);
 
     List<CrawlerPlan> getCrawlerPlanByPlanIds(List<String> planIds);
+
+    List<NotPublishPlan> getNotPublishPlan();
 }

+ 15 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/NotPublishPlan.java

@@ -0,0 +1,15 @@
+package com.tzld.longarticle.recommend.server.model.dto;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class NotPublishPlan {
+
+    private String planId;
+
+    private String planName;
+
+    private String publishWindowStart;
+}

+ 54 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/XxlJobService.java

@@ -0,0 +1,54 @@
+package com.tzld.longarticle.recommend.server.service;
+
+import com.tzld.longarticle.recommend.server.mapper.aigc.AigcBaseMapper;
+import com.tzld.longarticle.recommend.server.model.dto.NotPublishPlan;
+import com.tzld.longarticle.recommend.server.util.DateUtils;
+import com.tzld.longarticle.recommend.server.util.feishu.FeishuMessageSender;
+import com.xxl.job.core.biz.model.ReturnT;
+import com.xxl.job.core.handler.annotation.XxlJob;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.StringUtils;
+
+import java.util.List;
+
+@Service
+@Slf4j
+public class XxlJobService {
+
+    @Autowired
+    private AigcBaseMapper aigcBaseMapper;
+
+    @XxlJob("checkPublishPlan")
+    public ReturnT<String> checkPublishPlan(String param) {
+        List<NotPublishPlan> notPublishPlan = aigcBaseMapper.getNotPublishPlan();
+        for (NotPublishPlan publishPlan : notPublishPlan) {
+            Long now = System.currentTimeMillis();
+            int nowHour = DateUtils.getHourByTimestamp(now / 1000);
+            int nowMinute = DateUtils.getMinuteByTimestamp(now / 1000);
+            if (!StringUtils.hasText(publishPlan.getPublishWindowStart())) {
+                continue;
+            }
+            String[] planTime = publishPlan.getPublishWindowStart().split(":");
+            int planHour = Integer.parseInt(planTime[0]);
+            int planMinute = Integer.parseInt(planTime[1]);
+            if (nowHour - planHour == 1 && nowMinute > planMinute) {
+                sendFeishuPublishPlanNotPushWarn(publishPlan);
+            } else if (nowHour - planHour > 1) {
+                sendFeishuPublishPlanNotPushWarn(publishPlan);
+            }
+        }
+        return ReturnT.SUCCESS;
+    }
+
+    private void sendFeishuPublishPlanNotPushWarn(NotPublishPlan publishPlan) {
+        FeishuMessageSender.sendWebHookMessage("07026a9f-43f5-448b-ba40-a8d71bd6e634",
+                "发布计划超1H未发送完成\n"
+                        + "发布计划ID: " + publishPlan.getPlanId() + "\n"
+                        + "发布计划名称: " + publishPlan.getPlanName() + "\n"
+                        + "发布时间: " + publishPlan.getPublishWindowStart() + "\n"
+                        + "<at user_id=\"all\">所有人</at> ");
+    }
+
+}

+ 1 - 1
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/rank/strategy/DefaultRankStrategy.java

@@ -81,7 +81,7 @@ public class DefaultRankStrategy implements RankStrategy {
             }
         }
         // 相似度评分为0 报警返回
-                      if (CollectionUtils.isNotEmpty(items)
+        if (CollectionUtils.isNotEmpty(items)
                 && items.get(0).getScoreMap().containsKey(SimilarityStrategy.class.getSimpleName())
                 && items.get(0).getScoreMap().get(SimilarityStrategy.class.getSimpleName()) == 0) {
             FeishuMessageSender.sendWebHookMessage("07026a9f-43f5-448b-ba40-a8d71bd6e634",

+ 10 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/util/DateUtils.java

@@ -187,6 +187,16 @@ public final class DateUtils {
         return calendar.get(Calendar.HOUR_OF_DAY);
     }
 
+    public static int getMinuteByTimestamp(long timestamp) {
+        Calendar calendar = Calendar.getInstance();
+        // 设置时区为UTC(你可以根据需要更改时区)
+        calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));
+        // 将时间戳转换为毫秒并设置时间
+        calendar.setTimeInMillis(timestamp * 1000L);
+        // 获取小时
+        return calendar.get(Calendar.MINUTE);
+    }
+
 
     public static void main(String[] args) {
         Calendar calendar = Calendar.getInstance();

+ 16 - 0
long-article-recommend-service/src/main/resources/mapper/aigc/AigcBaseMapper.xml

@@ -64,5 +64,21 @@
         </foreach>
     </select>
 
+    <select id="getNotPublishPlan" resultType="com.tzld.longarticle.recommend.server.model.dto.NotPublishPlan">
+        SELECT
+            plan.id as planId,
+            plan.NAME as planName,
+            setting.publish_window_start
+        FROM
+            publish_plan plan
+                JOIN publish_plan_stat stat ON plan.id = stat.plan_id
+                JOIN publish_plan_setting setting ON plan.id = setting.plan_id
+        WHERE
+            stat.today_expect_publish_count > stat.today_publish_count
+          AND plan.plan_status = 1
+          AND plan.NAME LIKE '%自动化%'
+          AND setting.push_type = 2
+    </select>
+
 
 </mapper>