ai_v/services/history_service.py
24024 3d479c52e7 ```
feat(api): 新增AI生成内容检测功能

- 添加aigc-detect路由接口,用于检测图像是否为AI生成内容
- 集成阿里云AIGC检测服务,配置相关API参数
- 实现积分扣除机制,每次检测消耗1积分

feat(frontend): 前端集成AI生成检测UI组件

- 添加formatAigcDetectionResult函数用于格式化检测结果显示
- 实现detectAigcImage函数处理检测请求和响应
- 在图片展示区域添加AI生成检测按钮和结果展示框
- 更新图片容器布局,优化下载按钮显示效果

refactor(service): 优化积分管理逻辑

- 新增try_deduct_points函数实现积分预检查和扣除
- 改进错误处理机制,确保数据库事务安全

refactor(history): 过滤AI检测记录

- 在历史记录查询中排除AI生成检测类型的数据
- 使用image_urls字段过滤检测相关的记录
```
2026-05-16 23:11:08 +08:00

69 lines
2.5 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 != "解读验光单",
~GenerationRecord.image_urls.like('%"type": "aigc_detection"%')
)
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兼容新旧数据格式
def fix_minio_url(url):
if url and ":9000/images/" in url:
return "/files/" + url.split(":9000/images/")[-1]
return url
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):
# 旧数据:直接返回原图作为缩略图
fixed_u = fix_minio_url(u)
formatted_urls.append({"url": fixed_u, "thumb": fixed_u})
else:
# 修复对象格式中的 URL
if 'url' in u:
u['url'] = fix_minio_url(u['url'])
if 'thumb' in u:
u['thumb'] = fix_minio_url(u['thumb'])
# 如果是视频类型,提供默认预览图
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
}