# 考核流程管理 **本文档引用的文件** - [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) ## 目录 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接口和清晰的业务流程,为医院的绩效管理提供了可靠的技术支撑。建议在未来版本中增加更多的监控和审计功能,以及移动端支持。