This commit is contained in:
HuangHai
2026-01-21 08:41:47 +08:00
parent 306a3a4127
commit e51dc18d06
40 changed files with 1309 additions and 965 deletions

View File

@@ -9,7 +9,7 @@ from sqlalchemy.sql import text
from Util.BananaClient import BananaClient
from Util.LlmUtil import get_llm_response
from DbKit.Db import Db
from Model.HaiBaoModel import HaiBaoModel
router = APIRouter(prefix="/haibao")
logger = logging.getLogger("HaiBaoController")
@@ -21,43 +21,8 @@ class GenerateRequest(BaseModel):
@router.on_event("startup")
async def startup_event():
"""初始化时检查并创建表"""
db = Db()
await db.init_db()
# Doris 建表语句
create_table_sql = """
CREATE TABLE IF NOT EXISTS haibao_history (
id VARCHAR(50) COMMENT "ID",
prompt TEXT COMMENT "提示词",
image_url VARCHAR(500) COMMENT "图片URL",
scheme_content TEXT COMMENT "文案方案",
created_at DATETIME COMMENT "创建时间"
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES (
"replication_num" = "1"
);
"""
try:
# 使用 engine 直接执行 DDL
async with db.engine.begin() as conn:
await conn.execute(text(create_table_sql))
# 尝试添加列(如果表已存在但列不存在)
# Doris 不支持 IF NOT EXISTS for ADD COLUMN directly nicely in all versions without error if exists
# 所以这里简单捕获异常,如果列已存在则忽略
try:
alter_sql = "ALTER TABLE haibao_history ADD COLUMN scheme_content TEXT COMMENT '文案方案'"
await conn.execute(text(alter_sql))
except Exception as e:
# 忽略列已存在的错误
pass
logger.info("海报历史表检查/更新成功")
except Exception as e:
logger.error(f"海报历史表创建/更新失败: {e}")
"""初始化时逻辑"""
logger.info("海报控制器启动成功")
class RefineRequest(BaseModel):
prompt: str
@@ -184,26 +149,11 @@ async def generate_poster(req: GenerateRequest):
image_url, scheme_content = await asyncio.gather(generate_image_task(), generate_text_task())
# 4. 保存到数据库
db = Db()
model = HaiBaoModel()
record_id = str(uuid.uuid4())
created_at = datetime.now()
insert_sql = """
INSERT INTO haibao_history (id, prompt, image_url, scheme_content, created_at)
VALUES (:id, :prompt, :image_url, :scheme_content, :created_at)
"""
params = {
"id": record_id,
"prompt": req.prompt,
"image_url": image_url,
"scheme_content": scheme_content,
"created_at": created_at
}
async with await db.get_session() as session:
async with session.begin():
await session.execute(text(insert_sql), params)
await model.insert_record(record_id, req.prompt, image_url, scheme_content, created_at)
return {
"id": record_id,
@@ -220,10 +170,9 @@ async def generate_poster(req: GenerateRequest):
@router.get("/history")
async def get_history():
"""获取海报生成历史"""
db = Db()
sql = "SELECT * FROM haibao_history ORDER BY created_at DESC LIMIT 50"
try:
result = await db.find(sql)
model = HaiBaoModel()
result = await model.get_history(50)
formatted_result = []
for item in result: