Selaa lähdekoodia

fix(decode): 修复状态处理和SQL语法错误

修正DecodeVideo模型中状态枚举到整型的转换逻辑
修复decodeTask.py中SQL语句的语法错误和状态更新条件
移除to_dict方法中多余的status_description字段
max_liu 3 päivää sitten
vanhempi
commit
2d8ae69a92
2 muutettua tiedostoa jossa 29 lisäystä ja 18 poistoa
  1. 17 14
      decode_task/decodeTask.py
  2. 12 4
      src/models/decode_video.py

+ 17 - 14
decode_task/decodeTask.py

@@ -19,10 +19,10 @@ logger.add(sink=sys.stderr, level="ERROR", backtrace=True, diagnose=True)
 
 def invoke_decode_workflow(task_params: Dict[str, Any]):
     """主函数"""
-
-    result = DecodeWorkflow(task_params)
+    workflow = DecodeWorkflow()
+    result = workflow.invoke(task_params)
     if result:
-            return result
+        return result
     else:
         print(f"❌ 保存结果失败,但将继续处理")
         return None
@@ -39,8 +39,7 @@ def get_decode_result_by_id(task_id:str):
 
 def  decode_task_status_handler():
     # 从数据库中获取任务,每次获取一个
-    sql = "SELECT * FROM decode_record WHERE task_status = 0 "
-    """json"""
+    sql = "SELECT * FROM decode_record WHERE task_status = 0 ORDER BY create_timestamp ASC LIMIT 1"
     task = mysql.fetchone(sql)
    
 
@@ -49,8 +48,8 @@ def  decode_task_status_handler():
         return
     else:
         task_id = task['task_id']
-        sql = "UPDATE decode_record SET task_status = 1 WHERE task_id = %s"
-        mysql.execute(sql, (task_id,))     
+        sql = "UPDATE decode_record SET task_status = 1 WHERE task_id = %s AND task_status = 0"
+        mysql.execute(sql, (task_id,))
         
         # 获取任务结果
     try:
@@ -66,20 +65,24 @@ def  decode_task_status_handler():
 
         if decode_result:
             # 更新任务状态为2,任务完成
-            sql = "UPDATE decode_record SET task_status = 2, WHERE task_id = %s"
-            mysql.execute(sql, (task_id))
+            sql = "UPDATE decode_record SET task_status = 2 WHERE task_id = %s"
+            mysql.execute(sql, (task_id,))
             logger.info(f"task_id = {task_id} , decode_result = {decode_result}")
 
            
         else:
             if current_timestamp - task_create_timestamp > 1000 * 60 * 60:
-                sql = "UPDATE decode_record SET task_status = 3, WHERE task_id = %s"
-                mysql.execute(sql, (task_id))
+                sql = "UPDATE decode_record SET task_status = 3 WHERE task_id = %s"
+                mysql.execute(sql, (task_id,))
                 logger.info(f"task_id = {task_id} ,任务状态异常")
     except Exception as e:
         logger.error(f"task_id = {task_id} , error = {e}")
-        sql = "UPDATE decode_record SET task_status = 3, WHERE task_id = %s"
-        mysql.execute(sql,  (task_id))
+        sql = "UPDATE decode_record SET task_status = 3 WHERE task_id = %s"
+        mysql.execute(sql,  (task_id,))
         logger.info(f"task_id = {task_id} ,任务异常")
-        raise {"task_id": task_id, "error": '任务异常'}
+        raise RuntimeError(f"task_id={task_id} 任务异常: {e}")
+
 
+if __name__ == "__main__":
+    decode_task_status_handler()
+   

+ 12 - 4
src/models/decode_video.py

@@ -73,7 +73,7 @@ class DecodeVideo(Base):
     result = Column(Text, nullable=True, comment="解码结果")
     
     # 状态
-    status = Column(Integer, nullable=True, default=DecodeStatus.PENDING, index=True, comment="状态: 0:待执行 / 1:执行中 / 2:执行成功 / 3:执行失败")
+    status = Column(Integer, nullable=True, default=int(DecodeStatus.PENDING), index=True, comment="状态: 0:待执行 / 1:执行中 / 2:执行成功 / 3:执行失败")
     
     # 失败原因
     error_reason = Column(Text, nullable=True, comment="失败原因")
@@ -97,7 +97,6 @@ class DecodeVideo(Base):
             "video_id": self.video_id,
             "result": self.result,
             "status": self.status,
-            "status_description": DecodeStatus.get_description(self.status) if self.status is not None else None,
             "error_reason": self.error_reason,
             "created_at": self.created_at.isoformat() if self.created_at else None,
             "updated_at": self.updated_at.isoformat() if self.updated_at else None,
@@ -124,10 +123,20 @@ class DecodeVideo(Base):
         Returns:
             DecodeVideo: 新创建的模型实例
         """
+        # 统一将枚举转换为整型值
+        if status is None:
+            status_value = int(DecodeStatus.PENDING)
+        else:
+            try:
+                # 支持传入 IntEnum 或具体的整数
+                status_value = int(status)
+            except Exception:
+                status_value = int(DecodeStatus.PENDING)
+
         return cls(
             task_id=task_id,
             video_id=video_id,
-            status=status if status is not None else DecodeStatus.PENDING,
+            status=status_value,
             result=result,
             error_reason=error_reason
         )
@@ -154,4 +163,3 @@ class DecodeVideo(Base):
         self.result = result
         if self.status == DecodeStatus.EXECUTING:
             self.update_status(DecodeStatus.SUCCESS)
-