提交文件
This commit is contained in:
476
.qoder/repowiki/zh/content/数据模型详解/核心数据模型/员工信息模型.md
Normal file
476
.qoder/repowiki/zh/content/数据模型详解/核心数据模型/员工信息模型.md
Normal file
@@ -0,0 +1,476 @@
|
||||
# 员工信息模型
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [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)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构概览](#架构概览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
|
||||
## 简介
|
||||
|
||||
员工信息模型是医院绩效管理系统的核心数据模型之一,负责管理医院全体员工的基础信息、状态管理和薪资相关信息。该模型采用现代化的ORM设计,结合枚举类型、关系映射和约束机制,确保数据的完整性和一致性。
|
||||
|
||||
本模型不仅存储员工的基本信息,还通过复杂的业务逻辑处理员工状态变化对系统其他模块的影响,包括与科室的多对一关系、与考核记录的一对多关系、以及与工资记录的一对多关系。
|
||||
|
||||
## 项目结构
|
||||
|
||||
基于仓库的实际结构,员工信息模型主要分布在以下文件中:
|
||||
|
||||
```mermaid
|
||||
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
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L88-L115)
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py#L107-L149)
|
||||
- [staff.py](file://backend/app/api/v1/staff.py#L1-L124)
|
||||
|
||||
**章节来源**
|
||||
- [models.py](file://backend/app/models/models.py#L1-L438)
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py#L1-L743)
|
||||
|
||||
## 核心组件
|
||||
|
||||
### 员工状态枚举 (StaffStatus)
|
||||
|
||||
员工状态枚举定义了四种核心状态,每种状态都有明确的业务含义:
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class StaffStatus {
|
||||
<<enumeration>>
|
||||
+ACTIVE
|
||||
+LEAVE
|
||||
+RESIGNED
|
||||
+RETIRED
|
||||
}
|
||||
note for StaffStatus : "员工状态枚举\n- ACTIVE : 在职\n- LEAVE : 休假\n- RESIGNED : 离职\n- RETIRED : 退休"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L37-L43)
|
||||
|
||||
### 员工实体模型
|
||||
|
||||
员工实体模型包含了完整的员工信息结构:
|
||||
|
||||
```mermaid
|
||||
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 : "一对多"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L88-L115)
|
||||
- [models.py](file://backend/app/models/models.py#L62-L80)
|
||||
- [models.py](file://backend/app/models/models.py#L149-L178)
|
||||
- [models.py](file://backend/app/models/models.py#L205-L230)
|
||||
|
||||
**章节来源**
|
||||
- [models.py](file://backend/app/models/models.py#L88-L115)
|
||||
|
||||
## 架构概览
|
||||
|
||||
员工信息模型在整个系统架构中扮演着核心角色,连接着多个业务模块:
|
||||
|
||||
```mermaid
|
||||
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
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [staff.py](file://backend/app/api/v1/staff.py#L1-L124)
|
||||
- [staff_service.py](file://backend/app/services/staff_service.py#L1-L112)
|
||||
- [salary_service.py](file://backend/app/services/salary_service.py#L1-L260)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 员工状态管理
|
||||
|
||||
员工状态管理是系统中最复杂的业务逻辑之一,不同状态对系统行为产生不同的影响:
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> 在职
|
||||
在职 --> 休假 : "LEAVE"
|
||||
在职 --> 离职 : "RESIGNED"
|
||||
在职 --> 退休 : "RETIRED"
|
||||
休假 --> 在职 : "恢复工作"
|
||||
休假 --> 离职 : "转为离职"
|
||||
休假 --> 退休 : "转为退休"
|
||||
离职 --> [*]
|
||||
退休 --> [*]
|
||||
note right of 在职 : "可参与考核\n可生成工资记录\n可进行系统操作"
|
||||
note right of 休假 : "暂停考核\n暂停工资计算\n但仍可查看信息"
|
||||
note right of 离职 : "完全停止系统访问\n历史数据保留"
|
||||
note right of 退休 : "特殊权限限制\n历史数据可查看"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L37-L43)
|
||||
- [staff_service.py](file://backend/app/services/staff_service.py#L104-L112)
|
||||
|
||||
#### 状态变更对系统的影响
|
||||
|
||||
1. **考核模块影响**:
|
||||
- 休假员工:暂停考核流程,但可查看历史考核记录
|
||||
- 离职/退休员工:无法参与新的考核,仅能查看历史记录
|
||||
|
||||
2. **工资模块影响**:
|
||||
- 休假员工:暂停工资计算,但可查看历史工资记录
|
||||
- 离职/退休员工:不再生成新的工资记录
|
||||
|
||||
3. **权限控制影响**:
|
||||
- 离职/退休员工:系统访问权限被限制
|
||||
- 休假员工:部分功能受限
|
||||
|
||||
**章节来源**
|
||||
- [staff_service.py](file://backend/app/services/staff_service.py#L104-L112)
|
||||
|
||||
### 工号唯一性设计
|
||||
|
||||
工号作为员工的唯一标识符,在系统中具有极高的重要性:
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
A[员工创建请求] --> B{检查工号是否存在}
|
||||
B --> |是| C[返回错误: 工号已存在]
|
||||
B --> |否| D[验证工号格式]
|
||||
D --> E{格式验证通过?}
|
||||
E --> |否| F[返回错误: 工号格式不正确]
|
||||
E --> |是| G[创建员工记录]
|
||||
G --> H[返回成功响应]
|
||||
I[员工更新请求] --> J{检查工号是否被其他员工使用}
|
||||
J --> |是| K[返回错误: 工号已被使用]
|
||||
J --> |否| L[更新员工记录]
|
||||
L --> M[返回成功响应]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [staff.py](file://backend/app/api/v1/staff.py#L75-L78)
|
||||
- [staff_service.py](file://backend/app/services/staff_service.py#L62-L67)
|
||||
|
||||
### 薪资系数设计
|
||||
|
||||
薪资系数是绩效工资计算的核心参数,直接影响最终的绩效奖金:
|
||||
|
||||
```mermaid
|
||||
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元"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [salary_service.py](file://backend/app/services/salary_service.py#L71-L74)
|
||||
- [salary_service.py](file://backend/app/services/salary_service.py#L167-L170)
|
||||
|
||||
**章节来源**
|
||||
- [salary_service.py](file://backend/app/services/salary_service.py#L17-L18)
|
||||
- [salary_service.py](file://backend/app/services/salary_service.py#L71-L74)
|
||||
|
||||
### 联系方式维护
|
||||
|
||||
员工联系方式的维护遵循严格的验证规则:
|
||||
|
||||
```mermaid
|
||||
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- 支持空值"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py#L126-L136)
|
||||
|
||||
### 职位职称管理
|
||||
|
||||
职位和职称信息用于区分员工的专业水平和职责范围:
|
||||
|
||||
```mermaid
|
||||
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- 用于权限和薪酬分级"
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L96-L98)
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py#L112-L117)
|
||||
|
||||
## 依赖关系分析
|
||||
|
||||
员工信息模型与其他模块的依赖关系如下:
|
||||
|
||||
```mermaid
|
||||
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枚举]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L88-L115)
|
||||
- [staff_service.py](file://backend/app/services/staff_service.py#L9-L10)
|
||||
- [salary_service.py](file://backend/app/services/salary_service.py#L10-L11)
|
||||
|
||||
**章节来源**
|
||||
- [models.py](file://backend/app/models/models.py#L88-L115)
|
||||
- [staff_service.py](file://backend/app/services/staff_service.py#L1-L112)
|
||||
- [salary_service.py](file://backend/app/services/salary_service.py#L1-L260)
|
||||
|
||||
## 性能考虑
|
||||
|
||||
### 查询优化策略
|
||||
|
||||
1. **索引设计**:
|
||||
- 员工表:`idx_staff_dept`(科室ID)、`idx_staff_status`(状态)
|
||||
- 考核表:`idx_assessment_staff`(员工ID)、`idx_assessment_period`(考核周期)
|
||||
- 工资表:`idx_salary_staff`(员工ID)、`idx_salary_period`(考核周期)
|
||||
|
||||
2. **查询优化**:
|
||||
- 使用`selectinload`进行关联查询优化
|
||||
- 实现分页查询避免大数据量加载
|
||||
- 缓存常用查询结果
|
||||
|
||||
### 数据完整性保证
|
||||
|
||||
```mermaid
|
||||
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[检查约束]
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py#L107-L136)
|
||||
- [models.py](file://backend/app/models/models.py#L93-L114)
|
||||
|
||||
## 故障排除指南
|
||||
|
||||
### 常见问题及解决方案
|
||||
|
||||
1. **工号重复错误**
|
||||
- 症状:创建员工时返回"工号已存在"
|
||||
- 解决:检查现有员工列表,使用唯一工号
|
||||
|
||||
2. **状态变更异常**
|
||||
- 症状:员工状态无法正常切换
|
||||
- 解决:检查状态枚举值的有效性,确认业务流程
|
||||
|
||||
3. **薪资计算错误**
|
||||
- 症状:绩效奖金计算结果不符合预期
|
||||
- 解决:验证绩效系数范围(0-5),检查考核得分
|
||||
|
||||
4. **关联查询性能问题**
|
||||
- 症状:员工列表加载缓慢
|
||||
- 解决:添加适当的索引,优化查询条件
|
||||
|
||||
**章节来源**
|
||||
- [staff.py](file://backend/app/api/v1/staff.py#L75-L78)
|
||||
- [staff_service.py](file://backend/app/services/staff_service.py#L104-L112)
|
||||
|
||||
## 结论
|
||||
|
||||
员工信息模型通过精心设计的数据结构和业务逻辑,为医院绩效管理系统提供了坚实的基础。该模型不仅满足了基本的员工信息管理需求,更重要的是通过完善的枚举类型、关系映射和约束机制,确保了数据的完整性和业务逻辑的正确性。
|
||||
|
||||
模型的关键优势包括:
|
||||
|
||||
1. **清晰的状态管理**:通过枚举类型明确员工状态,便于业务逻辑处理
|
||||
2. **灵活的薪资计算**:支持可调节的绩效系数,适应不同岗位的薪酬体系
|
||||
3. **完善的关联关系**:与科室、考核、工资等模块形成完整的业务闭环
|
||||
4. **严格的数据验证**:通过多种验证机制确保数据质量
|
||||
5. **良好的扩展性**:模块化设计便于后续功能扩展
|
||||
|
||||
该模型为整个系统的稳定运行奠定了坚实基础,是医院绩效管理不可或缺的重要组成部分。
|
||||
Reference in New Issue
Block a user