Files
hospital_performance/.qoder/repowiki/zh/content/数据模型详解/核心数据模型/员工信息模型.md
2026-02-28 15:16:15 +08:00

13 KiB
Raw Blame History

员工信息模型

**本文档引用的文件** - [models.py](file://backend/app/models/models.py) - [schemas.py](file://backend/app/schemas/schemas.py) - [staff.py](file://backend/app/api/v1/staff.py) - [staff_service.py](file://backend/app/services/staff_service.py) - [salary_service.py](file://backend/app/services/salary_service.py) - [database.md](file://docs/database.md) - [001_initial.py](file://backend/alembic/versions/001_initial.py)

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

员工信息模型是医院绩效管理系统的核心数据模型之一负责管理医院全体员工的基础信息、状态管理和薪资相关信息。该模型采用现代化的ORM设计结合枚举类型、关系映射和约束机制确保数据的完整性和一致性。

本模型不仅存储员工的基本信息,还通过复杂的业务逻辑处理员工状态变化对系统其他模块的影响,包括与科室的多对一关系、与考核记录的一对多关系、以及与工资记录的一对多关系。

项目结构

基于仓库的实际结构,员工信息模型主要分布在以下文件中:

graph TB
subgraph "后端架构"
A[models.py<br/>数据模型定义]
B[schemas.py<br/>数据验证模式]
C[staff.py<br/>API路由]
D[staff_service.py<br/>业务服务层]
E[salary_service.py<br/>工资服务层]
end
subgraph "数据库层"
F[database.md<br/>数据库设计文档]
G[001_initial.py<br/>数据库迁移脚本]
end
A --> B
A --> C
A --> D
A --> E
C --> D
D --> A
E --> A
F --> A
G --> A

图表来源

章节来源

核心组件

员工状态枚举 (StaffStatus)

员工状态枚举定义了四种核心状态,每种状态都有明确的业务含义:

classDiagram
class StaffStatus {
<<enumeration>>
+ACTIVE
+LEAVE
+RESIGNED
+RETIRED
}
note for StaffStatus : "员工状态枚举\n- ACTIVE : 在职\n- LEAVE : 休假\n- RESIGNED : 离职\n- RETIRED : 退休"

图表来源

员工实体模型

员工实体模型包含了完整的员工信息结构:

classDiagram
class Staff {
+int id
+string employee_id
+string name
+int department_id
+string position
+string title
+string phone
+string email
+float base_salary
+float performance_ratio
+StaffStatus status
+datetime hire_date
+datetime created_at
+datetime updated_at
+Department department
+Assessment[] assessments
+SalaryRecord[] salary_records
}
class Department {
+int id
+string name
+string code
+DeptType dept_type
+int parent_id
+int level
+int sort_order
+bool is_active
+string description
+datetime created_at
+datetime updated_at
}
class Assessment {
+int id
+int staff_id
+int period_year
+int period_month
+string period_type
+float total_score
+float weighted_score
+AssessmentStatus status
+int assessor_id
+int reviewer_id
+datetime submit_time
+datetime review_time
+string remark
+datetime created_at
+datetime updated_at
}
class SalaryRecord {
+int id
+int staff_id
+int period_year
+int period_month
+float base_salary
+float performance_score
+float performance_bonus
+float deduction
+float allowance
+float total_salary
+string status
+string remark
+datetime created_at
+datetime updated_at
}
Staff --> Department : "多对一"
Staff --> Assessment : "一对多"
Staff --> SalaryRecord : "一对多"

图表来源

章节来源

架构概览

员工信息模型在整个系统架构中扮演着核心角色,连接着多个业务模块:

graph TB
subgraph "表现层"
A[前端界面]
B[API网关]
end
subgraph "业务逻辑层"
C[员工管理API]
D[员工服务层]
E[工资服务层]
F[统计服务层]
end
subgraph "数据访问层"
G[员工模型]
H[科室模型]
I[考核模型]
J[工资模型]
end
subgraph "数据存储"
K[员工表]
L[科室表]
M[考核表]
N[工资记录表]
end
A --> B
B --> C
C --> D
C --> E
C --> F
D --> G
D --> H
E --> G
E --> I
E --> J
G --> K
H --> L
I --> M
J --> N

图表来源

详细组件分析

员工状态管理

员工状态管理是系统中最复杂的业务逻辑之一,不同状态对系统行为产生不同的影响:

stateDiagram-v2
[*] --> 在职
在职 --> 休假 : "LEAVE"
在职 --> 离职 : "RESIGNED"
在职 --> 退休 : "RETIRED"
休假 --> 在职 : "恢复工作"
休假 --> 离职 : "转为离职"
休假 --> 退休 : "转为退休"
离职 --> [*]
退休 --> [*]
note right of 在职 : "可参与考核\n可生成工资记录\n可进行系统操作"
note right of 休假 : "暂停考核\n暂停工资计算\n但仍可查看信息"
note right of 离职 : "完全停止系统访问\n历史数据保留"
note right of 退休 : "特殊权限限制\n历史数据可查看"

图表来源

状态变更对系统的影响

  1. 考核模块影响

    • 休假员工:暂停考核流程,但可查看历史考核记录
    • 离职/退休员工:无法参与新的考核,仅能查看历史记录
  2. 工资模块影响

    • 休假员工:暂停工资计算,但可查看历史工资记录
    • 离职/退休员工:不再生成新的工资记录
  3. 权限控制影响

    • 离职/退休员工:系统访问权限被限制
    • 休假员工:部分功能受限

章节来源

工号唯一性设计

工号作为员工的唯一标识符,在系统中具有极高的重要性:

flowchart TD
A[员工创建请求] --> B{检查工号是否存在}
B --> |是| C[返回错误: 工号已存在]
B --> |否| D[验证工号格式]
D --> E{格式验证通过?}
E --> |否| F[返回错误: 工号格式不正确]
E --> |是| G[创建员工记录]
G --> H[返回成功响应]
I[员工更新请求] --> J{检查工号是否被其他员工使用}
J --> |是| K[返回错误: 工号已被使用]
J --> |否| L[更新员工记录]
L --> M[返回成功响应]

图表来源

薪资系数设计

薪资系数是绩效工资计算的核心参数,直接影响最终的绩效奖金:

flowchart TD
A[绩效奖金计算] --> B[获取员工绩效系数]
B --> C[获取考核加权得分]
B --> D[获取绩效基数]
C --> E[计算公式]
D --> E
D --> F[绩效奖金 = 绩效基数 × (加权得分/100) × 绩效系数]
E --> F
F --> G[生成工资记录]
H[默认系数] --> I[1.0]
J[最小系数] --> K[0.0]
L[最大系数] --> M[5.0]
note right of F : "示例: 基础工资8000元\n绩效系数1.2\n加权得分85分\n绩效奖金 = 3000 × (85/100) × 1.2 = 3060元"

图表来源

章节来源

联系方式维护

员工联系方式的维护遵循严格的验证规则:

classDiagram
class ContactInfo {
+string phone
+string email
+validatePhone(phone) bool
+validateEmail(email) bool
+formatPhone(phone) string
+formatEmail(email) string
}
note for ContactInfo : "联系方式验证规则\n- 电话 : 最多20位数字\n- 邮箱 : 符合标准邮箱格式\n- 支持空值"

图表来源

职位职称管理

职位和职称信息用于区分员工的专业水平和职责范围:

classDiagram
class PositionManagement {
+string position
+string title
+validatePosition(position) bool
+validateTitle(title) bool
+getPositionLevel(position) int
+getTitleRank(title) int
}
note for PositionManagement : "职位管理\n- position : 职位名称\n- title : 职称等级\n- 支持空值\n- 用于权限和薪酬分级"

图表来源

依赖关系分析

员工信息模型与其他模块的依赖关系如下:

graph TB
subgraph "核心依赖"
A[Staff模型] --> B[Department模型]
A --> C[Assessment模型]
A --> D[SalaryRecord模型]
end
subgraph "服务层依赖"
E[StaffService] --> A
E --> B
F[SalaryService] --> A
F --> C
F --> D
end
subgraph "API层依赖"
G[StaffAPI] --> E
H[SalaryAPI] --> F
end
subgraph "数据验证"
I[StaffCreate] --> A
J[StaffUpdate] --> A
K[StaffResponse] --> A
end
A -.-> L[StaffStatus枚举]
B -.-> M[DeptType枚举]
C -.-> N[AssessmentStatus枚举]
D -.-> O[SalaryStatus枚举]

图表来源

章节来源

性能考虑

查询优化策略

  1. 索引设计

    • 员工表:idx_staff_dept科室IDidx_staff_status(状态)
    • 考核表:idx_assessment_staff员工IDidx_assessment_period(考核周期)
    • 工资表:idx_salary_staff员工IDidx_salary_period(考核周期)
  2. 查询优化

    • 使用selectinload进行关联查询优化
    • 实现分页查询避免大数据量加载
    • 缓存常用查询结果

数据完整性保证

flowchart TD
A[数据操作] --> B[输入验证]
B --> C[业务规则检查]
C --> D[数据库约束验证]
D --> E[事务处理]
E --> F[数据持久化]
G[输入验证] --> H[字段长度验证]
G --> I[格式验证]
G --> J[范围验证]
K[业务规则检查] --> L[工号唯一性]
K --> M[状态有效性]
K --> N[关联关系验证]
O[数据库约束验证] --> P[唯一约束]
O --> Q[外键约束]
O --> R[检查约束]

图表来源

故障排除指南

常见问题及解决方案

  1. 工号重复错误

    • 症状:创建员工时返回"工号已存在"
    • 解决:检查现有员工列表,使用唯一工号
  2. 状态变更异常

    • 症状:员工状态无法正常切换
    • 解决:检查状态枚举值的有效性,确认业务流程
  3. 薪资计算错误

    • 症状:绩效奖金计算结果不符合预期
    • 解决验证绩效系数范围0-5检查考核得分
  4. 关联查询性能问题

    • 症状:员工列表加载缓慢
    • 解决:添加适当的索引,优化查询条件

章节来源

结论

员工信息模型通过精心设计的数据结构和业务逻辑,为医院绩效管理系统提供了坚实的基础。该模型不仅满足了基本的员工信息管理需求,更重要的是通过完善的枚举类型、关系映射和约束机制,确保了数据的完整性和业务逻辑的正确性。

模型的关键优势包括:

  1. 清晰的状态管理:通过枚举类型明确员工状态,便于业务逻辑处理
  2. 灵活的薪资计算:支持可调节的绩效系数,适应不同岗位的薪酬体系
  3. 完善的关联关系:与科室、考核、工资等模块形成完整的业务闭环
  4. 严格的数据验证:通过多种验证机制确保数据质量
  5. 良好的扩展性:模块化设计便于后续功能扩展

该模型为整个系统的稳定运行奠定了坚实基础,是医院绩效管理不可或缺的重要组成部分。