v0.2.0: CRM/ERP 系统升级 - 清理 .gitignore 并移除误提交的 venv/env/db 文件

- 更新 .gitignore:全面覆盖环境变量、数据库、日志、缓存、上传文件
- 移除误跟踪的 server/venv/、crm_data.db、.env 文件
- 新增 server/.env.example 模板
- 新增合同管理、利润核算、AI教练等功能模块
- 新增 Playwright e2e 测试套件
- 前后端多项功能升级和 bug 修复
This commit is contained in:
hankin
2026-05-11 07:24:19 +00:00
parent 0f4c6b7924
commit 815cbf9d8c
2526 changed files with 11875 additions and 804148 deletions
+16 -10
View File
@@ -14,7 +14,7 @@ from fastapi.responses import StreamingResponse
from sqlalchemy import and_, select
from sqlalchemy.ext.asyncio import AsyncSession
from app.api.deps import get_current_user
from app.api.deps import get_current_user, get_current_company_id
from app.db.database import get_db
from app.schemas.auth import CurrentUserPayload
from app.schemas.response import ok
@@ -28,15 +28,16 @@ async def generate_report(
end_date: date = Body(..., embed=True),
db: AsyncSession = Depends(get_db),
current_user: CurrentUserPayload = Depends(get_current_user),
company_id: uuid.UUID = Depends(get_current_company_id),
authorization: str | None = Header(None),
):
"""
1. 聚合该用户在时间范围内的 sales_logs 内容
1. 聚合该用户在时间范围内、涉及当前公司的 sales_logs 内容
2. 调用 Dify Workflow (streaming) 生成复盘报告
3. SSE 流式返回给前端
"""
return StreamingResponse(
_report_sse_generator(db, current_user, start_date, end_date, authorization or ""),
_report_sse_generator(db, current_user, start_date, end_date, authorization or "", company_id),
media_type="text/event-stream",
)
@@ -47,20 +48,25 @@ async def _report_sse_generator(
start_date: date,
end_date: date,
authorization: str = "",
company_id: uuid.UUID | None = None,
):
import httpx
from app.core.config import settings
from app.models.ai import SalesLog
# 1. 聚合日志
# 1. 聚合日志 — 仅提取涉及当前公司的日志
conditions = [
SalesLog.salesperson_id == user.user_id,
SalesLog.log_date >= start_date,
SalesLog.log_date <= end_date,
SalesLog.is_deleted.is_(False),
]
if company_id:
conditions.append(SalesLog.involved_company_ids.any(company_id))
stmt = (
select(SalesLog)
.where(
SalesLog.salesperson_id == user.user_id,
SalesLog.log_date >= start_date,
SalesLog.log_date <= end_date,
SalesLog.is_deleted.is_(False),
)
.where(*conditions)
.order_by(SalesLog.log_date)
)
logs = (await db.execute(stmt)).scalars().all()