feat: Implement core API endpoints for AI content generation, user management, and Alipay payment processing.

This commit is contained in:
公司git 2026-01-20 16:01:58 +08:00
parent 1202291e4b
commit 2453bb05ea
4 changed files with 20 additions and 24 deletions

View File

@ -95,7 +95,7 @@ def generate():
# 5. 启动异步生图任务 # 5. 启动异步生图任务
app = current_app._get_current_object() app = current_app._get_current_object()
task_id = start_async_image_task(app, user_id, payload, api_key, target_api, cost, data.get('mode'), model_value) task_id = start_async_image_task(app, user_id, payload, api_key, target_api, cost, data.get('mode'), model_value, use_trial)
return jsonify({ return jsonify({
"task_id": task_id, "task_id": task_id,

View File

@ -4,7 +4,7 @@ from models import Order, User, to_bj_time, get_bj_now
from services.alipay_service import AlipayService from services.alipay_service import AlipayService
from services.logger import system_logger from services.logger import system_logger
import uuid import uuid
from datetime import timedelta from datetime import datetime, timedelta
payment_bp = Blueprint('payment', __name__, url_prefix='/payment') payment_bp = Blueprint('payment', __name__, url_prefix='/payment')
@ -102,8 +102,7 @@ def payment_history():
) )
).order_by(Order.created_at.desc()).all() ).order_by(Order.created_at.desc()).all()
import datetime as dt_module return render_template('recharge_history.html', orders=orders, modules={'datetime': datetime})
return render_template('recharge_history.html', orders=orders, modules={'datetime': dt_module})
@payment_bp.route('/api/history', methods=['GET']) @payment_bp.route('/api/history', methods=['GET'])
def api_payment_history(): def api_payment_history():

View File

@ -117,7 +117,7 @@ def handle_chat_generation_sync(user_id, api_key, model_value, prompt, use_trial
refund_points(user_id, cost) refund_points(user_id, cost)
return {"error": str(e)}, 500 return {"error": str(e)}, 500
def start_async_image_task(app, user_id, payload, api_key, target_api, cost, mode, model_value): def start_async_image_task(app, user_id, payload, api_key, target_api, cost, mode, model_value, use_trial=False):
"""启动异步生图任务""" """启动异步生图任务"""
task_id = str(uuid.uuid4()) task_id = str(uuid.uuid4())
@ -126,7 +126,7 @@ def start_async_image_task(app, user_id, payload, api_key, target_api, cost, mod
threading.Thread( threading.Thread(
target=process_image_generation, target=process_image_generation,
args=(app, user_id, task_id, payload, api_key, target_api, cost) args=(app, user_id, task_id, payload, api_key, target_api, cost, use_trial)
).start() ).start()
return task_id return task_id
@ -153,7 +153,7 @@ def start_async_video_task(app, user_id, payload, cost, model_value):
threading.Thread( threading.Thread(
target=process_video_generation, target=process_video_generation,
args=(app, user_id, task_id, payload, api_key, cost) args=(app, user_id, task_id, payload, api_key, cost, True) # 视频目前默认为积分模式
).start() ).start()
return task_id return task_id

View File

@ -90,7 +90,7 @@ def sync_images_background(app, record_id, raw_urls):
except Exception as e: except Exception as e:
print(f"❌ 更新记录失败: {e}") print(f"❌ 更新记录失败: {e}")
def process_image_generation(app, user_id, task_id, payload, api_key, target_api, cost): def process_image_generation(app, user_id, task_id, payload, api_key, target_api, cost, use_trial=False):
"""异步执行图片生成并存入 Redis""" """异步执行图片生成并存入 Redis"""
with app.app_context(): with app.app_context():
try: try:
@ -99,10 +99,9 @@ def process_image_generation(app, user_id, task_id, payload, api_key, target_api
resp = requests.post(target_api, json=payload, headers=headers, timeout=1000) resp = requests.post(target_api, json=payload, headers=headers, timeout=1000)
if resp.status_code != 200: if resp.status_code != 200:
user = db.session.get(User, user_id) if use_trial:
if user and "sk-" in api_key: from services.generation_service import refund_points
user.points += cost refund_points(user_id, cost)
db.session.commit()
# 记录详细的失败上下文 # 记录详细的失败上下文
system_logger.error(f"生图任务失败: {resp.text}", user_id=user_id, task_id=task_id, prompt=payload.get('prompt'), model=payload.get('model')) system_logger.error(f"生图任务失败: {resp.text}", user_id=user_id, task_id=task_id, prompt=payload.get('prompt'), model=payload.get('model'))
@ -135,10 +134,9 @@ def process_image_generation(app, user_id, task_id, payload, api_key, target_api
except Exception as e: except Exception as e:
# 异常处理:退还积分 # 异常处理:退还积分
user = db.session.get(User, user_id) if use_trial:
if user and "sk-" in api_key: from services.generation_service import refund_points
user.points += cost refund_points(user_id, cost)
db.session.commit()
system_logger.error(f"生图任务异常: {str(e)}", user_id=user_id, task_id=task_id, prompt=payload.get('prompt'), model=payload.get('model')) system_logger.error(f"生图任务异常: {str(e)}", user_id=user_id, task_id=task_id, prompt=payload.get('prompt'), model=payload.get('model'))
redis_client.setex(f"task:{task_id}", 3600, json.dumps({"status": "error", "message": str(e)})) redis_client.setex(f"task:{task_id}", 3600, json.dumps({"status": "error", "message": str(e)}))
@ -203,7 +201,7 @@ def sync_video_background(app, record_id, raw_url, internal_task_id=None):
except Exception as dbe: except Exception as dbe:
system_logger.error(f"更新视频记录失败: {str(dbe)}") system_logger.error(f"更新视频记录失败: {str(dbe)}")
def process_video_generation(app, user_id, internal_task_id, payload, api_key, cost): def process_video_generation(app, user_id, internal_task_id, payload, api_key, cost, use_trial=True):
"""异步提交并查询视频任务状态""" """异步提交并查询视频任务状态"""
with app.app_context(): with app.app_context():
try: try:
@ -273,11 +271,10 @@ def process_video_generation(app, user_id, internal_task_id, payload, api_key, c
except Exception as e: except Exception as e:
system_logger.error(f"视频生成执行异常: {str(e)}", user_id=user_id, task_id=internal_task_id, prompt=payload.get('prompt')) system_logger.error(f"视频生成执行异常: {str(e)}", user_id=user_id, task_id=internal_task_id, prompt=payload.get('prompt'))
# 尝试退费 # 尝试退费
if use_trial:
try: try:
user = db.session.get(User, user_id) from services.generation_service import refund_points
if user: refund_points(user_id, cost)
user.points += cost
db.session.commit()
except Exception as re: except Exception as re:
system_logger.error(f"退费失败: {str(re)}") system_logger.error(f"退费失败: {str(re)}")