Browse Source

feat(decode_task): 改进get_user_count函数以支持日期参数并优化查询逻辑

重构get_user_count函数,增加对日期参数的支持,并优化SQL查询逻辑。现在可以:
1. 通过day参数指定查询日期
2. 同时检查created_at和create字段
3. 返回合并后的任务计数
4. 添加更详细的日志记录
max_liu 1 month ago
parent
commit
4a9aa87390
1 changed files with 33 additions and 14 deletions
  1. 33 14
      decode_task/topicTask.py

+ 33 - 14
decode_task/topicTask.py

@@ -4,7 +4,7 @@ from loguru import logger
 import sys
 import time
 from utils.sync_mysql_help import mysql
-import utils.params as DecodeWorkflowParam
+from datetime import datetime
 
 
 
@@ -42,18 +42,37 @@ def update_topic_result_by_id(param):
     return video_id, status, video_url, title
 
 
-def get_user_count(name: str):
-    now = int(time.time())
-    lt = time.localtime(now)
-    start_of_day = time.mktime((lt.tm_year, lt.tm_mon, lt.tm_mday, 0, 0, 0, lt.tm_wday, lt.tm_yday, lt.tm_isdst))
-    start_ts = int(start_of_day)
+def get_user_count(name: str, day: str = None):
+    if day:
+        dt = datetime.strptime(day, "%Y-%m-%d")
+        start_ts = int(dt.timestamp())
+    else:
+        now = int(time.time())
+        lt = time.localtime(now)
+        start_ts = int(time.mktime((lt.tm_year, lt.tm_mon, lt.tm_mday, 0, 0, 0, lt.tm_wday, lt.tm_yday, lt.tm_isdst)))
     end_ts = start_ts + 86400
-    sql = "SELECT COUNT(*) FROM decode_workflow WHERE account = %s AND created_at >= %s AND created_at < %s"
-    count = mysql.fetchall(sql, (name, start_ts, end_ts))
-    if not count:
-        logger.info(f"account = {name} , 任务不存在")
-        return None
-    return count[0][0]
+    sql1 = (
+        "SELECT COUNT(*) AS cnt FROM decode_workflow "
+        "WHERE account = %s AND created_at IS NOT NULL AND created_at >= %s AND created_at < %s"
+    )
+    row1 = mysql.fetchone(sql1, (name, start_ts * 1000, end_ts * 1000))
+    cnt1 = int(row1.get('cnt', 0)) if row1 else 0
+    sql_has_create = (
+        "SELECT 1 AS ok FROM information_schema.COLUMNS "
+        "WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = 'decode_workflow' AND COLUMN_NAME = 'create'"
+    )
+    has_create = mysql.fetchone(sql_has_create)
+    cnt2 = 0
+    if has_create:
+        sql2 = (
+            "SELECT COUNT(*) AS cnt FROM decode_workflow "
+            "WHERE account = %s AND `create` IS NOT NULL AND `create` >= %s AND `create` < %s"
+        )
+        row2 = mysql.fetchone(sql2, (name, start_ts, end_ts))
+        cnt2 = int(row2.get('cnt', 0)) if row2 else 0
+    cnt = cnt1 + cnt2
+    logger.info(f"account = {name} , 任务数量 = {cnt}")
+    return cnt
 
 
 
@@ -96,6 +115,6 @@ def search_topic_list(param=None):
     return tasks  
 
 
-# if __name__ == "__main__":
-#     decode_task_status_handler()
+if __name__ == "__main__":
+    get_user_count("liubin")