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
+14 -4
View File
@@ -16,6 +16,7 @@ from app.core.exceptions import BizException, ForbiddenException, NotFoundExcept
from app.models.crm import CrmCustomer
from app.models.erp import ProductSku
from app.models.order import ErpOrder, ErpOrderItem
from app.models.sys import SysUser
from app.schemas.auth import CurrentUserPayload
from app.schemas.order import (
OrderBriefResponse,
@@ -156,6 +157,7 @@ async def create_order(
db: AsyncSession,
user: CurrentUserPayload,
body: OrderCreate,
company_id: uuid.UUID,
) -> OrderResponse:
# 校验客户存在
cust = (
@@ -193,6 +195,7 @@ async def create_order(
order_no=order_no,
customer_id=body.customer_id,
salesperson_id=user.user_id,
company_id=company_id,
total_amount=total,
shipping_state="pending",
payment_state="unpaid",
@@ -236,8 +239,11 @@ async def list_orders(
shipping_state: str | None = None,
payment_state: str | None = None,
keyword: str | None = None,
company_id: uuid.UUID | None = None,
) -> OrderListResponse:
where: list[Any] = [ErpOrder.is_deleted.is_(False)]
if company_id:
where.append(ErpOrder.company_id == company_id)
if user.data_scope == "self":
where.append(ErpOrder.salesperson_id == user.user_id)
@@ -284,13 +290,17 @@ async def get_order(
db: AsyncSession,
user: CurrentUserPayload,
order_id: uuid.UUID,
company_id: uuid.UUID | None = None,
) -> OrderResponse:
where_clause = [
ErpOrder.id == order_id,
ErpOrder.is_deleted.is_(False),
]
if company_id:
where_clause.append(ErpOrder.company_id == company_id)
order = (
await db.execute(
select(ErpOrder).where(
ErpOrder.id == order_id,
ErpOrder.is_deleted.is_(False),
)
select(ErpOrder).where(*where_clause)
)
).scalar_one_or_none()
if order is None: