feat: initial commit and ignore qwen files

This commit is contained in:
dxc
2026-04-30 10:06:32 +08:00
commit def4f7d71f
55 changed files with 5252 additions and 0 deletions

View File

@ -0,0 +1,85 @@
"""项目相关 Schema"""
from pydantic import BaseModel
from datetime import date, datetime
from app.models.production import ProjectStatus
class ProjectBase(BaseModel):
"""项目基础 Schema"""
project_no: str
name: str
start_date: date | None = None
end_date: date | None = None
status: ProjectStatus = ProjectStatus.DRAFT
class ProjectCreate(ProjectBase):
"""创建项目"""
pass
class ProjectUpdate(BaseModel):
"""更新项目"""
name: str | None = None
start_date: date | None = None
end_date: date | None = None
status: ProjectStatus | None = None
class ProjectResponse(ProjectBase):
"""项目响应"""
id: int
created_at: datetime
updated_at: datetime | None
class Config:
from_attributes = True
class ProjectStats(BaseModel):
"""项目统计信息"""
project_id: int
project_no: str
project_name: str
status: ProjectStatus
start_date: date | None
end_date: date | None
# 进度相关
total_work_orders: int
completed_work_orders: int
in_progress_work_orders: int
pending_work_orders: int
progress_percentage: float # 完成百分比
# 物料到位率(基于缺料审批)
total_approvals: int
pending_approvals: int
approved_approvals: int
rejected_approvals: int
material_ready_rate: float # 物料到位率 (approved / total_approvals * 100)
# 延期预警
is_overdue: bool # 当前日期超过 end_date 且状态未完成
overdue_days: int | None # 延期天数(正数表示延期,负数表示提前)
created_at: datetime
class ProjectSummary(BaseModel):
"""项目总览汇总"""
total_projects: int
active_projects: int
completed_projects: int
overdue_projects: int
# 全局统计
total_work_orders: int
completed_work_orders: int
overall_progress: float # 全局进度
total_pending_approvals: int
overall_material_ready_rate: float
# 项目列表
projects: list[ProjectStats]