feat: 商机跟单新增跟进记录子表(后端+API模块)

- 新增 mini_business_logs 表(business_id/log_date/method/content/created_by)
- MiniBusiness 模型添加 logs relationship(cascade delete)
- 5个端点: GET列表/POST新增/PUT编辑/DELETE删除
- 跟进方式: 电话/微信/上门/邮件/其他
- lifespan 自动建表+索引

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-07-12 18:51:04 +08:00
parent 13f8b9c512
commit 17a0218b32
7 changed files with 248 additions and 2 deletions
+20 -1
View File
@@ -5,7 +5,7 @@ from sqlalchemy import select
from app.config import settings
from app.database import engine, Base, async_session
from app.api import router as api_router
from app.api import auth, users, customers, visits, work_plans, mini_business, key_visits
from app.api import auth, users, customers, visits, work_plans, mini_business, mini_business_logs, key_visits
from app.api import dashboard, upload, export, import_data, wecom, daily_notes, ai_summary, system_config, leaves
from app.models.system_config import SystemConfig
from app.services.holidays import refresh_holidays
@@ -74,6 +74,24 @@ async def lifespan(app: FastAPI):
await conn.run_sync(lambda c: c.exec_driver_sql(
"CREATE INDEX IF NOT EXISTS idx_leaves_dates ON leaves(start_date, end_date)"
))
# mini_business_logs table for v0.8
await conn.run_sync(lambda c: c.exec_driver_sql(
"CREATE TABLE IF NOT EXISTS mini_business_logs ("
" id UUID PRIMARY KEY DEFAULT gen_random_uuid(),"
" business_id UUID NOT NULL REFERENCES mini_business(id) ON DELETE CASCADE,"
" log_date DATE NOT NULL,"
" method VARCHAR(20) NOT NULL DEFAULT '电话',"
" content TEXT NOT NULL DEFAULT '',"
" created_by UUID NOT NULL REFERENCES users(id),"
" created_at TIMESTAMPTZ DEFAULT now()"
")"
))
await conn.run_sync(lambda c: c.exec_driver_sql(
"CREATE INDEX IF NOT EXISTS idx_mbl_business_id ON mini_business_logs(business_id)"
))
await conn.run_sync(lambda c: c.exec_driver_sql(
"CREATE INDEX IF NOT EXISTS idx_mbl_log_date ON mini_business_logs(log_date)"
))
# Read notification_time from DB (or use default 17:30)
notification_hour, notification_minute = 17, 30
@@ -123,6 +141,7 @@ app.include_router(customers.router, prefix="/api")
app.include_router(visits.router, prefix="/api")
app.include_router(work_plans.router, prefix="/api")
app.include_router(mini_business.router, prefix="/api")
app.include_router(mini_business_logs.router, prefix="/api")
app.include_router(key_visits.router, prefix="/api")
app.include_router(dashboard.router, prefix="/api")
app.include_router(leaves.router, prefix="/api")