提交文件

This commit is contained in:
2026-02-28 15:16:15 +08:00
parent 1a4e50e0a4
commit 44f250f58e
159 changed files with 61268 additions and 0 deletions

View 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接口和清晰的业务流程为医院的绩效管理提供了可靠的技术支撑。建议在未来版本中增加更多的监控和审计功能以及移动端支持。