From e2e68ccd8baa3245c0df272680f2b3e5bf66a0e1 Mon Sep 17 00:00:00 2001 From: aaron <> Date: Wed, 4 Jun 2025 10:31:44 +0800 Subject: [PATCH] update --- cryptoai/routes/analysis.py | 11 +++++++++++ cryptoai/task_endpoint.py | 4 +++- cryptoai/tasks/user.py | 22 ++++++++++++++++++++++ docker-compose.yml | 4 ++-- test.py | 18 +++--------------- 5 files changed, 41 insertions(+), 18 deletions(-) create mode 100644 cryptoai/tasks/user.py diff --git a/cryptoai/routes/analysis.py b/cryptoai/routes/analysis.py index aee470a..46d8a22 100644 --- a/cryptoai/routes/analysis.py +++ b/cryptoai/routes/analysis.py @@ -12,6 +12,8 @@ from cryptoai.models.user_question import UserQuestionManager from cryptoai.models.token import TokenManager from sqlalchemy.orm import Session from cryptoai.utils.db_manager import get_db +from cryptoai.models.user import UserManager + class AnalysisHistoryRequest(BaseModel): symbol: str content: str @@ -200,6 +202,11 @@ async def get_conversation_messages(conversation_id: str, async def chat(request: ChatRequest, current_user: dict = Depends(get_current_user), session: Session = Depends(get_db)): + + # 检查用户积分 + if current_user["points"] < 20: + raise HTTPException(status_code=400, detail="您的积分不足,请先充值。") + payload = { "inputs" : {}, "query": request.message, @@ -227,6 +234,10 @@ async def chat(request: ChatRequest, status_code=response.status_code, detail=f"Failed to get response from Dify API: {response.text}" ) + + # 扣除用户积分 + manager = UserManager(session) + manager.consume_user_points(current_user["id"], 20) # 获取response的stream def stream_response(): diff --git a/cryptoai/task_endpoint.py b/cryptoai/task_endpoint.py index 85ff471..10fef07 100644 --- a/cryptoai/task_endpoint.py +++ b/cryptoai/task_endpoint.py @@ -17,7 +17,7 @@ sys.path.append(parent_dir) from cryptoai.agents.crypto_agent import CryptoAgent from cryptoai.agents.gold_agent import GoldAgent from cryptoai.utils.config_loader import ConfigLoader - +from cryptoai.tasks.user import task_run logger = logging.getLogger(__name__) logger.setLevel(logging.DEBUG) @@ -35,6 +35,8 @@ def task_start(): schedule.every().day.at("16:00").do(CryptoAgent().start_agent) schedule.every().day.at("20:00").do(CryptoAgent().start_agent) + schedule.every().day.at("00:00").do(task_run) + while True: schedule.run_pending() time.sleep(1) diff --git a/cryptoai/tasks/user.py b/cryptoai/tasks/user.py new file mode 100644 index 0000000..bf4e3ed --- /dev/null +++ b/cryptoai/tasks/user.py @@ -0,0 +1,22 @@ +from cryptoai.models.user import User +from cryptoai.utils.db_manager import get_db_context, SessionLocal +from sqlalchemy.orm import Session +import logging + +logger = logging.getLogger(__name__) +logger.setLevel(logging.DEBUG) + +def task_run(): + try: + session = SessionLocal() + users = session.query(User).filter(User.points < 100).all() + for user in users: + user.points = 100 + session.commit() + logger.info(f"用户 {user.mail} 积分复位成功") + except Exception as e: + logger.error(f"用户积分复位失败: {e}") + finally: + if session: + session.close() + diff --git a/docker-compose.yml b/docker-compose.yml index 99a4a34..a4f008b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -4,7 +4,7 @@ services: cryptoai-task: build: . container_name: cryptoai-task - image: cryptoai:0.0.16 + image: cryptoai:0.0.17 restart: always volumes: - ./cryptoai/data:/app/cryptoai/data @@ -29,7 +29,7 @@ services: cryptoai-api: build: . container_name: cryptoai-api - image: cryptoai-api:0.1.38 + image: cryptoai-api:0.1.39 restart: always ports: - "8000:8000" diff --git a/test.py b/test.py index ffb9a7f..cdfada6 100644 --- a/test.py +++ b/test.py @@ -4,19 +4,7 @@ import json from time import sleep from cryptoai.models.token import TokenManager from cryptoai.utils.db_manager import get_db_context +from cryptoai.tasks.user import task_run + if __name__ == "__main__": - - symbols = get_binance_api().get_all_symbols() - # for symbol in symbols: - # # 移除 symbol 中的 USDT - # symbol = symbol.replace('USDT', '') - # print(symbol) - - session = get_db_context() - manager = TokenManager(session) - - for symbol in symbols: - base_asset = symbol.split('USDT')[0] - quote_asset = 'USDT' - - manager.create_token(symbol,base_asset, quote_asset) + task_run()