Pārlūkot izejas kodu

优化-re-extract

luojunhui 1 nedēļu atpakaļ
vecāks
revīzija
e5d5d73b69

+ 11 - 5
app/domains/monitor_tasks/auto_reply_cards_monitor/_mapper.py

@@ -161,18 +161,23 @@ class AutoReplyCardsMonitorMapper(AutoReplyCardsMonitorConst):
     async def store_extract_result(self, query, row_table):
         return await self.pool.async_save(query=query, params=row_table)
 
-    # 更新封面下载状态和封面信息
+    # 更新封面下载状态和封面信息(失败时自增重试计数,成功时重置)
     async def update_cover_info(
         self, task_id, position, cover_id, oss_key, cover_status
     ):
         query = """
             UPDATE cooperate_auto_reply_detail
-            SET card_cover_id = %s, card_cover = %s, cover_status = %s
+            SET card_cover_id = %s, card_cover = %s, cover_status = %s,
+                cover_retry_cnt = CASE WHEN %s = %s THEN cover_retry_cnt + 1 ELSE 0 END
             WHERE task_id = %s AND position = %s
         """
         return await self.pool.async_save(
             query=query,
-            params=(cover_id, oss_key, cover_status, task_id, position),
+            params=(
+                cover_id, oss_key, cover_status,
+                cover_status, self.CoverStatus.FAILED,
+                task_id, position,
+            ),
         )
 
     # 从 growth 数据库获取账号信息,并且存储在 cooperate_accounts 表中
@@ -215,12 +220,13 @@ class AutoReplyCardsMonitorMapper(AutoReplyCardsMonitorConst):
         """
         return await self.pool.async_fetch(query=query, params=(root_source_id,))
 
-    # 获取封面下载失败的记录
+    # 获取封面下载失败的记录(最多重试3次)
     async def get_failed_cover_records(self):
         query = """
             SELECT task_id, position, task_result
             FROM cooperate_auto_reply_detail
-            WHERE cover_status IN (%s, %s);
+            WHERE cover_status IN (%s, %s)
+              AND cover_retry_cnt < 3;
         """
         return await self.pool.async_fetch(
             query=query, params=(self.CoverStatus.INIT, self.CoverStatus.FAILED)