luojunhui 1 місяць тому
батько
коміт
04478a0ce6

+ 12 - 0
app/domains/monitor_tasks/auto_reply_cards_monitor/_mapper.py

@@ -200,6 +200,18 @@ class AutoReplyCardsMonitorMapper(AutoReplyCardsMonitorConst):
         """
         return await self.pool.async_fetch(query=query, params=(root_source_id,))
 
+    # 重置所有提取失败的 task,使其重新进入提取队列
+    async def reset_failed_extract_tasks(self):
+        query = """
+            UPDATE cooperate_accounts_task
+            SET extract_status = %s
+            WHERE extract_status = %s AND task_status = %s;
+        """
+        return await self.pool.async_save(
+            query=query,
+            params=(self.INIT_STATUS, self.FAIL_STATUS, self.SUCCESS_STATUS),
+        )
+
     # 保存封面至封面表
     async def save_cover(self, cover_id, root_source_id, oss_path):
         query = """

+ 40 - 36
app/domains/monitor_tasks/auto_reply_cards_monitor/entrance.py

@@ -73,26 +73,48 @@ class AutoReplyCardsMonitor(AutoReplyCardsMonitorConst):
                     "message": f"store_card get_cover_url failed, task_id={task_id}",
                 }
             )
-            return False
-
-        file_name = f"{task_id}_{index}.jpg"
-        save_path = self.tool.download_cover(file_name, cover_obj)
-        if save_path is None:
-            return False
-        exist_covers = await self.mapper.fetch_exist_covers(root_source_id)
-        if exist_covers:
-            exist_cover_id, oss_key = self.tool.check_cover(save_path, exist_covers)
-            if exist_cover_id is not False:
-                cover_id = exist_cover_id
-                self.tool.remove_local_cover(save_path)
+            cover_id = ""
+            oss_key = "aes 过期无法获取"
+            remark = "aes 过期无法获取封面"
+        else:
+            remark = ""
+            file_name = f"{task_id}_{index}.jpg"
+            save_path = self.tool.download_cover(file_name, cover_obj)
+            if save_path is None:
+                return False
+            exist_covers = await self.mapper.fetch_exist_covers(root_source_id)
+            if exist_covers:
+                exist_cover_id, oss_key = self.tool.check_cover(save_path, exist_covers)
+                if exist_cover_id is not False:
+                    cover_id = exist_cover_id
+                    self.tool.remove_local_cover(save_path)
+                else:
+                    # upload to oss
+                    oss_key, cover_id = self.tool.upload_cover(file_name, save_path)
+                    if oss_key is not None:
+                        await self.mapper.save_cover(
+                            cover_id=cover_id,
+                            root_source_id=root_source_id,
+                            oss_path=oss_key,
+                        )
+                    else:
+                        self.tool.remove_local_cover(save_path)
+                        await self.log_service.log(
+                            contents={
+                                "task": "auto_reply_cards_monitor",
+                                "function": "store_card",
+                                "status": "fail",
+                                "trace_id": task_id,
+                                "message": f"store_card upload_cover failed, task_id={task_id}",
+                            }
+                        )
+                        return False
             else:
                 # upload to oss
                 oss_key, cover_id = self.tool.upload_cover(file_name, save_path)
                 if oss_key is not None:
                     await self.mapper.save_cover(
-                        cover_id=cover_id,
-                        root_source_id=root_source_id,
-                        oss_path=oss_key,
+                        cover_id=cover_id, root_source_id=root_source_id, oss_path=oss_key
                     )
                 else:
                     self.tool.remove_local_cover(save_path)
@@ -106,35 +128,16 @@ class AutoReplyCardsMonitor(AutoReplyCardsMonitorConst):
                         }
                     )
                     return False
-        else:
-            # upload to oss
-            oss_key, cover_id = self.tool.upload_cover(file_name, save_path)
-            if oss_key is not None:
-                await self.mapper.save_cover(
-                    cover_id=cover_id, root_source_id=root_source_id, oss_path=oss_key
-                )
-            else:
-                self.tool.remove_local_cover(save_path)
-                await self.log_service.log(
-                    contents={
-                        "task": "auto_reply_cards_monitor",
-                        "function": "store_card",
-                        "status": "fail",
-                        "trace_id": task_id,
-                        "message": f"store_card upload_cover failed, task_id={task_id}",
-                    }
-                )
-                return False
 
         query = """
             INSERT INTO cooperate_auto_reply_detail
             (
                 task_id, position, msg_type, card_title, card_cover_id, card_cover,
-                video_id, root_source_id, mini_program_name, task_result
+                video_id, root_source_id, mini_program_name, task_result, remark
             ) VALUES
             (
                 %s, %s, %s, %s, %s, %s,
-                %s, %s, %s, %s
+                %s, %s, %s, %s, %s
             );
         """
         insert_row = (
@@ -148,6 +151,7 @@ class AutoReplyCardsMonitor(AutoReplyCardsMonitorConst):
             root_source_id,
             xml_obj.get("mini_program", ""),
             json.dumps(xml_obj, ensure_ascii=False),
+            remark,
         )
         await self.mapper.store_extract_result(query, insert_row)
         return True