提交文件
This commit is contained in:
431
.qoder/repowiki/zh/content/核心功能模块/绩效考核管理/考核流程管理.md
Normal file
431
.qoder/repowiki/zh/content/核心功能模块/绩效考核管理/考核流程管理.md
Normal file
@@ -0,0 +1,431 @@
|
||||
# 考核流程管理
|
||||
|
||||
<cite>
|
||||
**本文档引用的文件**
|
||||
- [models.py](file://backend/app/models/models.py)
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py)
|
||||
- [assessment_service.py](file://backend/app/services/assessment_service.py)
|
||||
- [assessments.py](file://backend/app/api/v1/assessments.py)
|
||||
- [assessment.js](file://frontend/src/api/assessment.js)
|
||||
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue)
|
||||
- [AssessmentDetail.vue](file://frontend/src/views/assessment/AssessmentDetail.vue)
|
||||
- [security.py](file://backend/app/core/security.py)
|
||||
- [001_initial.py](file://backend/alembic/versions/001_initial.py)
|
||||
- [002_template.py](file://backend/alembic/versions/002_template.py)
|
||||
</cite>
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
2. [项目结构](#项目结构)
|
||||
3. [核心组件](#核心组件)
|
||||
4. [架构概览](#架构概览)
|
||||
5. [详细组件分析](#详细组件分析)
|
||||
6. [依赖关系分析](#依赖关系分析)
|
||||
7. [性能考虑](#性能考虑)
|
||||
8. [故障排除指南](#故障排除指南)
|
||||
9. [结论](#结论)
|
||||
|
||||
## 简介
|
||||
|
||||
本系统是一个完整的医院绩效考核管理系统,专注于考核流程的全生命周期管理。系统实现了从草稿创建到最终确认的完整工作流,包括审批流转、复核确认、状态管理和权限控制等核心功能。
|
||||
|
||||
系统采用前后端分离架构,后端使用FastAPI提供RESTful API,前端使用Vue.js构建用户界面。数据库采用PostgreSQL,通过SQLAlchemy ORM进行数据持久化。
|
||||
|
||||
## 项目结构
|
||||
|
||||
系统采用典型的三层架构设计:
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
subgraph "前端层"
|
||||
FE_API[API封装层]
|
||||
FE_VIEWS[视图组件]
|
||||
FE_STORE[状态管理]
|
||||
end
|
||||
subgraph "后端层"
|
||||
BE_ROUTER[路由层]
|
||||
BE_SERVICE[服务层]
|
||||
BE_MODEL[模型层]
|
||||
BE_DB[(数据库)]
|
||||
end
|
||||
subgraph "基础设施"
|
||||
AUTH[认证授权]
|
||||
DB[(PostgreSQL)]
|
||||
SCHEMA[数据模式]
|
||||
end
|
||||
FE_API --> FE_VIEWS
|
||||
FE_VIEWS --> FE_STORE
|
||||
FE_API --> BE_ROUTER
|
||||
BE_ROUTER --> BE_SERVICE
|
||||
BE_SERVICE --> BE_MODEL
|
||||
BE_MODEL --> BE_DB
|
||||
BE_DB --> DB
|
||||
AUTH --> BE_ROUTER
|
||||
SCHEMA --> BE_MODEL
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L1-L311)
|
||||
- [assessment.js](file://frontend/src/api/assessment.js#L1-L50)
|
||||
- [assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
|
||||
- [assessment_service.py](file://backend/app/services/assessment_service.py#L1-L263)
|
||||
|
||||
**章节来源**
|
||||
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L1-L311)
|
||||
- [assessment.js](file://frontend/src/api/assessment.js#L1-L50)
|
||||
- [assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
|
||||
|
||||
## 核心组件
|
||||
|
||||
### 数据模型层
|
||||
|
||||
系统的核心数据模型围绕考核流程展开,主要包括以下关键实体:
|
||||
|
||||
```mermaid
|
||||
classDiagram
|
||||
class Assessment {
|
||||
+int id
|
||||
+int staff_id
|
||||
+int period_year
|
||||
+int period_month
|
||||
+str status
|
||||
+float total_score
|
||||
+float weighted_score
|
||||
+datetime submit_time
|
||||
+datetime review_time
|
||||
+int assessor_id
|
||||
+int reviewer_id
|
||||
+str remark
|
||||
}
|
||||
class AssessmentDetail {
|
||||
+int id
|
||||
+int assessment_id
|
||||
+int indicator_id
|
||||
+float actual_value
|
||||
+float score
|
||||
+str evidence
|
||||
+str remark
|
||||
}
|
||||
class Staff {
|
||||
+int id
|
||||
+str employee_id
|
||||
+str name
|
||||
+int department_id
|
||||
+str position
|
||||
+str status
|
||||
+float performance_ratio
|
||||
}
|
||||
class Indicator {
|
||||
+int id
|
||||
+str name
|
||||
+str code
|
||||
+str indicator_type
|
||||
+float weight
|
||||
+float max_score
|
||||
+bool is_active
|
||||
}
|
||||
Assessment "1" -- "many" AssessmentDetail : contains
|
||||
Assessment "1" -- "1" Staff : evaluates
|
||||
AssessmentDetail "1" -- "1" Indicator : measures
|
||||
Staff "1" -- "many" Assessment : creates
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L149-L202)
|
||||
- [models.py](file://backend/app/models/models.py#L181-L202)
|
||||
- [models.py](file://backend/app/models/models.py#L88-L114)
|
||||
- [models.py](file://backend/app/models/models.py#L117-L147)
|
||||
|
||||
### 状态枚举定义
|
||||
|
||||
系统定义了完整的考核状态流转:
|
||||
|
||||
```mermaid
|
||||
stateDiagram-v2
|
||||
[*] --> 草稿
|
||||
草稿 --> 已提交 : 提交申请
|
||||
已提交 --> 已审核 : 审核通过
|
||||
已提交 --> 已驳回 : 审核驳回
|
||||
已审核 --> 已确认 : 确认完成
|
||||
已确认 --> [*]
|
||||
已驳回 --> 草稿 : 修改后重新提交
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [models.py](file://backend/app/models/models.py#L45-L51)
|
||||
|
||||
**章节来源**
|
||||
- [models.py](file://backend/app/models/models.py#L45-L51)
|
||||
- [schemas.py](file://backend/app/schemas/schemas.py#L31-L36)
|
||||
|
||||
## 架构概览
|
||||
|
||||
系统采用RESTful API设计模式,前后端通过HTTP协议通信:
|
||||
|
||||
```mermaid
|
||||
sequenceDiagram
|
||||
participant Client as 前端客户端
|
||||
participant API as API网关
|
||||
participant Service as 服务层
|
||||
participant Model as 模型层
|
||||
participant DB as 数据库
|
||||
Client->>API : GET /assessments
|
||||
API->>Service : get_list()
|
||||
Service->>Model : 查询评估记录
|
||||
Model->>DB : SQL查询
|
||||
DB-->>Model : 查询结果
|
||||
Model-->>Service : 评估记录列表
|
||||
Service-->>API : 处理后的数据
|
||||
API-->>Client : JSON响应
|
||||
Note over Client,DB : 异步数据库操作
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [assessments.py](file://backend/app/api/v1/assessments.py#L20-L52)
|
||||
- [assessment_service.py](file://backend/app/services/assessment_service.py#L18-L55)
|
||||
|
||||
## 详细组件分析
|
||||
|
||||
### 考核流程状态管理
|
||||
|
||||
#### 草稿状态(Draft)
|
||||
|
||||
草稿状态是考核流程的初始阶段,允许员工录入和编辑考核信息:
|
||||
|
||||
**操作权限控制:**
|
||||
- 仅考核人本人可编辑
|
||||
- 支持保存草稿和提交申请
|
||||
- 可修改考核明细和备注
|
||||
|
||||
**数据验证规则:**
|
||||
- 总分 = 各指标得分之和
|
||||
- 加权得分 = Σ(指标得分 × 指标权重)
|
||||
- 实际值必须符合指标最大值限制
|
||||
|
||||
#### 已提交状态(Submitted)
|
||||
|
||||
已提交状态表示考核已进入审批流程:
|
||||
|
||||
**审批权限控制:**
|
||||
- 需要管理员或经理权限
|
||||
- 自动记录提交时间和提交人
|
||||
- 系统自动计算加权得分
|
||||
|
||||
**业务逻辑:**
|
||||
- 审批前自动刷新计算结果
|
||||
- 支持通过或驳回两种处理方式
|
||||
- 记录审核人和审核时间
|
||||
|
||||
#### 已审核状态(Reviewed)
|
||||
|
||||
已审核状态表示考核通过审批,等待最终确认:
|
||||
|
||||
**权限控制:**
|
||||
- 管理员或经理可进行最终确认
|
||||
- 系统自动锁定后续修改
|
||||
- 生成最终的加权得分
|
||||
|
||||
**数据完整性:**
|
||||
- 确认后状态不可逆
|
||||
- 用于后续薪资计算的基础数据
|
||||
|
||||
#### 已确认状态(Finalized)
|
||||
|
||||
已确认状态表示考核流程完成:
|
||||
|
||||
**系统影响:**
|
||||
- 考核结果正式生效
|
||||
- 用于薪资核算的数据源
|
||||
- 不再允许任何修改操作
|
||||
|
||||
#### 已驳回状态(Rejected)
|
||||
|
||||
已驳回状态表示考核被拒绝:
|
||||
|
||||
**处理机制:**
|
||||
- 自动退回至草稿状态
|
||||
- 允许重新编辑和提交
|
||||
- 记录驳回原因和时间
|
||||
|
||||
**章节来源**
|
||||
- [assessment_service.py](file://backend/app/services/assessment_service.py#L117-L205)
|
||||
- [assessments.py](file://backend/app/api/v1/assessments.py#L105-L145)
|
||||
|
||||
### 前端交互组件
|
||||
|
||||
#### 考核列表页面
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
Start([页面加载]) --> LoadData[加载考核数据]
|
||||
LoadData --> RenderTable[渲染表格]
|
||||
RenderTable --> CheckStatus{检查状态}
|
||||
CheckStatus --> |草稿| ShowDraftOps[显示提交按钮]
|
||||
CheckStatus --> |已提交| ShowReviewOps[显示审核按钮]
|
||||
CheckStatus --> |已审核| ShowFinalizeOp[显示确认按钮]
|
||||
CheckStatus --> |其他| HideOps[隐藏操作按钮]
|
||||
ShowDraftOps --> SubmitAssessment[提交考核]
|
||||
ShowReviewOps --> ReviewAssessment[审核考核]
|
||||
ShowFinalizeOp --> FinalizeAssessment[确认考核]
|
||||
SubmitAssessment --> RefreshData[刷新数据]
|
||||
ReviewAssessment --> RefreshData
|
||||
FinalizeAssessment --> RefreshData
|
||||
RefreshData --> RenderTable
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L55-L63)
|
||||
|
||||
**章节来源**
|
||||
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L1-L311)
|
||||
- [AssessmentDetail.vue](file://frontend/src/views/assessment/AssessmentDetail.vue#L1-L257)
|
||||
|
||||
### API接口设计
|
||||
|
||||
系统提供了完整的RESTful API接口:
|
||||
|
||||
| 接口 | 方法 | 权限 | 功能描述 |
|
||||
|------|------|------|----------|
|
||||
| `/assessments` | GET | 任意用户 | 获取考核列表 |
|
||||
| `/assessments/{id}` | GET | 任意用户 | 获取考核详情 |
|
||||
| `/assessments` | POST | 任意用户 | 创建考核记录 |
|
||||
| `/assessments/{id}` | PUT | 任意用户 | 更新考核记录 |
|
||||
| `/assessments/{id}/submit` | POST | 任意用户 | 提交考核 |
|
||||
| `/assessments/{id}/review` | POST | 管理员/经理 | 审核考核 |
|
||||
| `/assessments/{id}/finalize` | POST | 管理员/经理 | 确认考核 |
|
||||
| `/assessments/batch-create` | POST | 管理员/经理 | 批量创建考核 |
|
||||
|
||||
**章节来源**
|
||||
- [assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
|
||||
|
||||
## 依赖关系分析
|
||||
|
||||
系统的关键依赖关系如下:
|
||||
|
||||
```mermaid
|
||||
graph LR
|
||||
subgraph "认证层"
|
||||
Security[security.py]
|
||||
User[User模型]
|
||||
end
|
||||
subgraph "服务层"
|
||||
AssessmentService[AssessmentService]
|
||||
StaffService[StaffService]
|
||||
IndicatorService[IndicatorService]
|
||||
end
|
||||
subgraph "数据层"
|
||||
Assessment[Assessment模型]
|
||||
AssessmentDetail[AssessmentDetail模型]
|
||||
Staff[Staff模型]
|
||||
Indicator[Indicator模型]
|
||||
end
|
||||
subgraph "API层"
|
||||
AssessmentAPI[Assessments路由]
|
||||
StaffAPI[Staff路由]
|
||||
IndicatorAPI[Indicator路由]
|
||||
end
|
||||
Security --> AssessmentAPI
|
||||
AssessmentAPI --> AssessmentService
|
||||
AssessmentService --> Assessment
|
||||
AssessmentService --> AssessmentDetail
|
||||
AssessmentService --> Staff
|
||||
AssessmentService --> Indicator
|
||||
AssessmentAPI --> Assessment
|
||||
AssessmentAPI --> Staff
|
||||
AssessmentAPI --> Indicator
|
||||
```
|
||||
|
||||
**图表来源**
|
||||
- [security.py](file://backend/app/core/security.py#L94-L109)
|
||||
- [assessment_service.py](file://backend/app/services/assessment_service.py#L14-L263)
|
||||
- [assessments.py](file://backend/app/api/v1/assessments.py#L1-L166)
|
||||
|
||||
**章节来源**
|
||||
- [security.py](file://backend/app/core/security.py#L1-L110)
|
||||
- [assessment_service.py](file://backend/app/services/assessment_service.py#L1-L263)
|
||||
|
||||
## 性能考虑
|
||||
|
||||
### 数据库优化
|
||||
|
||||
系统采用了多项数据库优化策略:
|
||||
|
||||
1. **索引优化**:为常用查询字段建立索引
|
||||
- `idx_assessment_status`:状态查询优化
|
||||
- `idx_assessment_period`:周期查询优化
|
||||
- `idx_assessment_staff`:员工查询优化
|
||||
|
||||
2. **查询优化**:使用`selectinload`避免N+1查询问题
|
||||
|
||||
3. **分页查询**:支持大数据量的分页展示
|
||||
|
||||
### 缓存策略
|
||||
|
||||
虽然当前实现未使用缓存,但系统设计支持未来扩展:
|
||||
|
||||
- 可以引入Redis缓存热门查询结果
|
||||
- 考核状态统计信息可以缓存
|
||||
- 用户权限信息可以本地缓存
|
||||
|
||||
### 并发控制
|
||||
|
||||
系统通过以下机制保证数据一致性:
|
||||
|
||||
1. **事务管理**:所有状态变更都在事务中执行
|
||||
2. **乐观锁**:使用版本号防止并发修改冲突
|
||||
3. **状态检查**:每次操作前验证当前状态
|
||||
|
||||
## 故障排除指南
|
||||
|
||||
### 常见问题及解决方案
|
||||
|
||||
#### 状态转换异常
|
||||
|
||||
**问题现象:** 点击提交按钮无反应
|
||||
|
||||
**可能原因:**
|
||||
1. 当前状态不是草稿状态
|
||||
2. 用户权限不足
|
||||
3. 网络请求超时
|
||||
|
||||
**解决步骤:**
|
||||
1. 检查考核记录状态
|
||||
2. 验证用户角色权限
|
||||
3. 查看浏览器开发者工具Network标签
|
||||
4. 检查后端日志
|
||||
|
||||
#### 数据不一致
|
||||
|
||||
**问题现象:** 显示的总分与实际不符
|
||||
|
||||
**排查步骤:**
|
||||
1. 检查指标权重设置
|
||||
2. 验证分数输入范围
|
||||
3. 确认计算公式正确性
|
||||
4. 查看数据库中存储的原始数据
|
||||
|
||||
#### 权限问题
|
||||
|
||||
**问题现象:** 无法看到某些操作按钮
|
||||
|
||||
**解决方法:**
|
||||
1. 检查用户角色设置
|
||||
2. 确认当前用户的权限
|
||||
3. 刷新页面重新登录
|
||||
4. 检查系统配置
|
||||
|
||||
**章节来源**
|
||||
- [Assessments.vue](file://frontend/src/views/assessment/Assessments.vue#L227-L255)
|
||||
- [AssessmentDetail.vue](file://frontend/src/views/assessment/AssessmentDetail.vue#L177-L213)
|
||||
|
||||
## 结论
|
||||
|
||||
本考核流程管理系统实现了完整的绩效考核生命周期管理,具有以下特点:
|
||||
|
||||
1. **完整的状态管理**:覆盖从草稿到最终确认的全流程
|
||||
2. **严格的权限控制**:基于角色的细粒度权限管理
|
||||
3. **清晰的业务逻辑**:每个状态都有明确的操作规则
|
||||
4. **良好的用户体验**:直观的前端界面和实时的状态反馈
|
||||
5. **可扩展的设计**:模块化的架构便于功能扩展
|
||||
|
||||
系统通过标准化的API接口和清晰的业务流程,为医院的绩效管理提供了可靠的技术支撑。建议在未来版本中增加更多的监控和审计功能,以及移动端支持。
|
||||
Reference in New Issue
Block a user