2026-01-17 23:15:58 +08:00
|
|
|
|
from models import GenerationRecord, to_bj_time
|
|
|
|
|
|
from flask import request
|
|
|
|
|
|
import json
|
|
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
|
|
|
|
|
|
|
|
def get_user_history_data(user_id, page=1, per_page=10, filter_type='all'):
|
|
|
|
|
|
"""获取用户历史记录业务逻辑"""
|
|
|
|
|
|
|
|
|
|
|
|
# 计算 90 天前的时间
|
|
|
|
|
|
ninety_days_ago = datetime.now() - timedelta(days=90)
|
|
|
|
|
|
|
|
|
|
|
|
query = GenerationRecord.query.filter(
|
|
|
|
|
|
GenerationRecord.user_id == user_id,
|
|
|
|
|
|
GenerationRecord.created_at >= ninety_days_ago,
|
|
|
|
|
|
GenerationRecord.prompt != "解读验光单"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
if filter_type == 'video':
|
|
|
|
|
|
# 只看视频
|
|
|
|
|
|
query = query.filter(GenerationRecord.image_urls.like('%"type": "video"%'))
|
|
|
|
|
|
elif filter_type == 'image':
|
|
|
|
|
|
# 只看图片 (排除视频)
|
|
|
|
|
|
query = query.filter(~GenerationRecord.image_urls.like('%"type": "video"%'))
|
|
|
|
|
|
|
|
|
|
|
|
pagination = query.order_by(GenerationRecord.created_at.desc())\
|
|
|
|
|
|
.paginate(page=page, per_page=per_page, error_out=False)
|
|
|
|
|
|
|
|
|
|
|
|
# 格式化 URL,兼容新旧数据格式
|
2026-01-21 19:32:02 +08:00
|
|
|
|
def fix_minio_url(url):
|
|
|
|
|
|
if url and ":9000/images/" in url:
|
|
|
|
|
|
return "/files/" + url.split(":9000/images/")[-1]
|
|
|
|
|
|
return url
|
|
|
|
|
|
|
2026-01-17 23:15:58 +08:00
|
|
|
|
history_list = []
|
|
|
|
|
|
for r in pagination.items:
|
|
|
|
|
|
raw_urls = json.loads(r.image_urls)
|
|
|
|
|
|
formatted_urls = []
|
|
|
|
|
|
for u in raw_urls:
|
|
|
|
|
|
if isinstance(u, str):
|
|
|
|
|
|
# 旧数据:直接返回原图作为缩略图
|
2026-01-21 19:32:02 +08:00
|
|
|
|
fixed_u = fix_minio_url(u)
|
|
|
|
|
|
formatted_urls.append({"url": fixed_u, "thumb": fixed_u})
|
2026-01-17 23:15:58 +08:00
|
|
|
|
else:
|
2026-01-21 19:32:02 +08:00
|
|
|
|
# 修复对象格式中的 URL
|
|
|
|
|
|
if 'url' in u:
|
|
|
|
|
|
u['url'] = fix_minio_url(u['url'])
|
|
|
|
|
|
if 'thumb' in u:
|
|
|
|
|
|
u['thumb'] = fix_minio_url(u['thumb'])
|
|
|
|
|
|
|
|
|
|
|
|
# 如果是视频类型,提供默认预览图
|
2026-01-17 23:15:58 +08:00
|
|
|
|
if u.get('type') == 'video' and not u.get('thumb'):
|
|
|
|
|
|
u['thumb'] = "https://img.icons8.com/flat-round/64/000000/play--v1.png"
|
|
|
|
|
|
formatted_urls.append(u)
|
|
|
|
|
|
|
|
|
|
|
|
history_list.append({
|
|
|
|
|
|
"id": r.id,
|
|
|
|
|
|
"prompt": r.prompt,
|
|
|
|
|
|
"model": r.model,
|
|
|
|
|
|
"urls": formatted_urls,
|
|
|
|
|
|
"created_at": r.created_at_bj.strftime('%m-%d %H:%M')
|
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
|
|
return {
|
|
|
|
|
|
"history": history_list,
|
|
|
|
|
|
"has_next": pagination.has_next,
|
|
|
|
|
|
"total": pagination.total
|
|
|
|
|
|
}
|