# 实施计划 - 员工月度绩效考核系统 ## 概述 按照前后端分离架构,分阶段实施:先搭建后端基础设施和核心业务逻辑,再实现前端各角色页面,最后集成 AI 评分和统计分析功能。 ## 任务 - [x] 1. 项目初始化与基础设施搭建 - 初始化后端 Node.js + TypeScript + Express 项目结构 - 初始化前端 React + TypeScript + Ant Design 项目结构 - 配置 MySQL 数据库连接(使用 mysql2 驱动) - 创建数据库初始化脚本(6张表的 DDL) - 配置环境变量(.env:DB连接、JWT密钥、FastGPT API Key) - _Requirements: 9.1, 10.5_ - [x] 2. 用户认证模块 - [x] 2.1 实现用户登录接口 `/api/user/login` - 查询用户表验证用户名、密码(bcrypt 比对)和角色 - 生成 JWT token(有效期 24 小时),返回 userInfo - _Requirements: 1.1, 1.2_ - [x] 2.2 实现 JWT 认证中间件 - 验证请求头中的 token,解析用户信息注入 req.user - token 过期或无效时返回 401 - _Requirements: 1.4_ - [x] 2.3 实现角色权限中间件 - 根据路由配置允许的角色列表,验证当前用户角色 - 权限不足时返回 403 - _Requirements: 1.3, 1.5_ - [x] 2.4 编写认证模块属性测试 - **属性 1: 认证正确性** — 对任意凭据,认证结果与凭据有效性一致 - **属性 2: 权限隔离不变量** — 员工无法访问他人数据 - **Validates: Requirements 1.1, 1.2, 1.5** - [x] 3. 数据库访问层(DAO) - [x] 3.1 实现 UserDAO - `findByUsername(username)`: 按用户名查询 - `findSubordinates(managerId)`: 查询下属列表 - _Requirements: 1.1, 4.1_ - [x] 3.2 实现 PerformanceDAO - `upsert(data)`: 创建或更新绩效记录(支持暂存/提交) - `findByUserAndMonth(userId, month)`: 查询指定月份绩效 - `findByManagerId(managerId, filters, page)`: 查询下属绩效列表 - `updateStatus(perfId, status)`: 更新绩效状态 - `updateReview(perfId, reviewData)`: 更新审核结果 - _Requirements: 2.5, 2.6, 4.1, 4.5, 9.1_ - [x] 3.3 实现 AIResultDAO - `save(aiResult)`: 保存 AI 评分结果 - `findByPerfId(perfId)`: 查询绩效对应的 AI 结果 - _Requirements: 3.2, 3.3_ - [x] 4. 考勤分数计算与绩效等级模块 - [x] 4.1 实现考勤分数计算函数 `calculateAttendanceScore` - 基础分 10 分,事假每天扣 5 分,迟到/缺卡每次扣 2 分,下限 0 分 - _Requirements: 11.1, 11.2, 11.3, 11.5_ - [x] 4.2 实现绩效等级与奖惩计算函数 `calculateLevelAndReward` - 根据总分返回等级(excellent/qualified/need_motivation/unqualified)和奖惩说明 - _Requirements: 5.1, 5.2, 5.3, 5.4, 5.5_ - [x] 4.3 实现连续低分预警检测函数 `checkConsecutiveLowScore` - 查询员工最近 N 个月记录,检测连续低于 60 分的情况 - _Requirements: 5.6, 5.7_ - [x] 4.4 编写计算模块属性测试 - **属性 5: 绩效等级与奖惩计算正确性** — 对任意分数,等级和奖惩符合规则 - **属性 6: 连续低分预警正确性** — 连续低分正确触发预警 - **属性 8: 考勤分数计算正确性** — 对任意考勤数据,分数计算正确且不低于 0 - **Validates: Requirements 5.1-5.7, 11.1-11.5** - [x] 5. 检查点 — 确保所有测试通过,如有问题请告知 - [x] 6. 员工端绩效填报接口 - [x] 6.1 实现绩效提交接口 `/api/performance/submit` - 支持 draft(暂存)和 submit(提交)两种状态 - 使用数据库事务同时写入 performance_month、perf_item、attendance 三张表 - 提交时触发异步 AI 评分(不阻塞响应) - _Requirements: 2.1, 2.2, 2.3, 2.5, 2.6_ - [x] 6.2 实现个人绩效查询接口 `/api/performance/employee/get` - 支持按月份筛选和分页 - 返回绩效记录含 AI 结果、考勤、审核意见 - _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5_ - [x] 6.3 实现修改申请接口 `/api/performance/request-modification` - 员工发起申请,记录申请原因,通知管理层 - _Requirements: 12.1, 12.2_ - [x] 6.4 编写员工端接口属性测试 - **属性 3: 草稿暂存往返一致性** — 暂存后读取数据一致 - **属性 4: 提交幂等性** — 同一用户同月不可重复提交 - **属性 7: 绩效记录查询完整性** — 提交后查询必能找到 - **Validates: Requirements 2.5, 2.6, 6.1** - [x] 7. AI 评分模块 - [x] 7.1 实现 FastGPT 调用服务 `AIEvaluationService` - 构建包含岗位、月份、填报内容、考核规则的 Prompt - 调用 FastGPT API(超时 10s) - _Requirements: 13.1, 13.2_ - [x] 7.2 实现 AI 响应解析函数 `parseAIResponse` - 解析 JSON 格式响应,提取 ai_score_detail、ai_total_score、ai_problems、ai_suggestions - 验证格式合法性,异常时记录原始响应并抛出错误 - _Requirements: 3.2, 3.3, 3.4, 13.3, 13.4_ - [x] 7.3 实现重试机制(最多 3 次)和错误降级处理 - _Requirements: 3.5_ - [x] 7.4 编写 AI 模块属性测试 - **属性 9: AI 响应 JSON 解析往返一致性** — 解析后序列化得到等价对象 - **属性 10: AI 输出格式约束** — problems 和 suggestions 数组长度在 3-5 之间 - **Validates: Requirements 3.3, 3.4, 3.6** - [x] 8. 管理层审核接口 - [x] 8.1 实现下属绩效列表接口 `/api/performance/manager/list` - 支持按月份、部门、员工姓名、状态筛选和分页 - _Requirements: 4.1, 7.1, 7.2_ - [x] 8.2 实现绩效审核接口 `/api/performance/manager/review` - 更新各考核项管理层评分和说明 - 计算最终总分、等级、奖惩,归档绩效记录(状态改为 completed) - _Requirements: 4.3, 4.4, 4.5, 4.7_ - [x] 8.3 实现绩效驳回接口 `/api/performance/manager/reject` - 记录驳回原因,状态改为 rejected - _Requirements: 4.6_ - [x] 8.4 实现修改申请审批接口 `/api/performance/manager/approve-modification` - 同意时解锁绩效记录,拒绝时通知员工 - _Requirements: 12.3, 12.4_ - [x] 9. 检查点 — 确保所有测试通过,如有问题请告知 - [x] 10. 统计分析与导出接口 - [x] 10.1 实现团队统计接口 `/api/statistics/team` - 统计下属团队平均分、优秀/合格/需激励人数及占比 - _Requirements: 7.4, 7.5_ - [x] 10.2 实现全公司统计接口 `/api/statistics/company` - 按部门、岗位、绩效等级多维度统计 - _Requirements: 8.1, 8.2_ - [x] 10.3 实现 Excel 导出接口 `/api/performance/export` - 使用 exceljs 生成 Excel 文件,支持单员工历史和团队批量导出 - _Requirements: 7.3, 7.6, 8.4_ - [x] 11. 总经理端接口 - [x] 11.1 实现考核规则配置接口 `/api/config/rules` - 支持修改考核指标权重、评分标准、奖惩金额 - 修改后记录操作日志,应用于后续考核周期 - _Requirements: 8.5, 8.6_ - [x] 12. 前端基础框架搭建 - [x] 12.1 配置 React Router,定义三类角色的路由结构 - 员工路由:`/employee/*`,管理层路由:`/manager/*`,总经理路由:`/gm/*` - _Requirements: 1.3_ - [x] 12.2 实现登录页面和 AuthContext - 登录表单(用户名、密码、角色选择),登录成功后存储 token 跳转对应角色首页 - _Requirements: 1.1, 1.2_ - [x] 12.3 实现 Axios 请求拦截器 - 自动携带 token,处理 401/403 响应(跳转登录页) - _Requirements: 1.4_ - [x] 13. 员工端前端页面 - [x] 13.1 实现绩效填报页面 `PerformanceForm` - 自动带出考核月份、员工基础信息 - 17 项考核指标逐项填写(完成情况描述 + 自评分 + 可选佐证上传) - 考勤数据填写区域、工作汇总文本区域、暂存和提交按钮 - _Requirements: 2.1, 2.2, 2.3, 2.4, 2.5, 2.6_ - [x] 13.2 实现个人绩效历史页面 `PerformanceHistory` - 绩效记录列表(含状态、总分、等级),月份筛选和分页 - 点击查看详情(含 AI 评分、AI 问题/建议、审核意见、奖惩说明) - _Requirements: 6.1, 6.2, 6.3, 6.4, 6.5_ - [x] 14. 管理层端前端页面 - [x] 14.1 实现下属绩效列表页面 `SubordinateList` - 列表展示员工绩效状态,筛选条件(月份、部门、姓名、状态) - _Requirements: 4.1, 7.1, 7.2_ - [x] 14.2 实现绩效审核页面 `PerformanceReview` - 展示员工填报内容、自评分、AI 评分及 AI 反馈 - 可调整各考核项分数并填写说明,提交审核通过或驳回 - _Requirements: 4.2, 4.3, 4.4, 4.5, 4.6_ - [x] 14.3 实现团队统计页面 `TeamStatistics` - 显示团队平均分、各等级人数及占比,Excel 导出按钮 - _Requirements: 7.3, 7.4, 7.5_ - [x] 15. 总经理端前端页面 - [x] 15.1 实现全公司绩效总览页面 `CompanyOverview` - 各部门、各岗位绩效整体情况,ECharts 柱状图和饼图,多维度筛选 - _Requirements: 8.1, 8.2, 8.3_ - [x] 15.2 实现全量数据导出和考核规则配置页面 - 全量 Excel 导出,考核指标权重和奖惩金额配置表单 - _Requirements: 8.4, 8.5, 8.6_ - [x] 16. 最终检查点 — 确保所有测试通过,前后端联调完成,如有问题请告知 ## 备注 - 标有 `*` 的任务为可选测试任务,可跳过以加快 MVP 交付 - 每个任务引用了具体的需求条目,便于追溯 - 检查点任务确保每个阶段的增量验证 - 属性测试使用 fast-check 库,每个属性最少运行 100 次迭代