Files
wecom_it_smart_desk/docs/07-项目管理/项目全面评估报告-2026-06-25-archived-20260704.md
Simon facc04aa65 chore: docs 结构整改 + compose 双目录对齐(合并重建提交)
本提交为 .git 对象库损坏后的重建提交,内容等价于原先三个本地提交
(5e2fd4c2 / 57a53c98 / 5d7e1873)的累积结果,未做任何额外改动。

一、docs 结构整改(整改 #14)
根因:重构时新结构为 untracked 文件,执行 git stash(未带 -u)未纳入,
随后 git reset 拉回 HEAD 旧 tracked 树,导致旧树复活、新旧两棵目录
树并存于 docs/,共 791 文件、双分类体系冲突。

修复动作:
- b2 同名异主题文件改名迁移保全 9 个
- C 类 39 个孤立文件按主题正确归类
- A/B1 类 222 个重复文件删除(新结构已有内容副本)
- 9 个旧独有空目录删除
- 270 处内部引用按 verified 映射改写
- 整改记录 #14 登记于 04-运维文档/部署运维

结果:docs 791 → 569 文件,顶层仅规范 8 类 + 治理文件,单树恢复。
残留:约 20 处指向从未存在文件的陈旧死链,归入独立文档卫生任务。

二、compose 双目录对齐(消除踩坑 A)
- docker-compose.yml:nginx 前端挂载全部由根目录 frontend-*/dist
  改为 src/frontend-*/dist(h5 / agent / admin / terminal)
- docker-compose.dev.yml:dev 服务 build context 与卷同步改 src/
- 效果:本地 docker compose up 不再把根目录 stale dist 挂回,
  与线上一致,分叉隐患消除(已 docker compose config 校验通过)

防复发铁律:
- 重构须提交;仓库修复须 git stash -u 或先 commit
- 新结构须 git add 并提交,避免再次 untracked 复活
- H5 改动只动 src/frontend-h5/,禁改根目录遗留 frontend-*/
2026-08-07 22:31:32 +08:00

18 KiB
Raw Permalink Blame History

企微IT智能服务台 — 项目全面评估报告

评估日期: 2026-06-25
评估范围: 全量代码库(后端 178 个 .py 文件 + 4 个前端 + 部署配置 + 文档体系)
项目周期: 2025-12 至今(约 7 个月)
当前版本: v0.7.1
目标用户: 公司 6000+ 员工


一、评估总览

评估维度 评分 说明
架构设计 ⚠️ 7/10 层次清晰,但单体瓶颈已显现
代码质量 ⚠️ 6.5/10 后端良好,前端可优化空间大
测试覆盖 ⚠️ 5/10 后端有测试但 64 条失败,前端零测试
安全性 ⚠️ 6.5/10 多次 P0 修复,但仍有遗留风险
文档完整性 9/10 50+ 份文档,远超同类项目
部署运维 ⚠️ 5.5/10 手动部署,单点风险,无 CI/CD
项目管理 ⚠️ 6/10 任务跟踪良好但用户是唯一瓶颈
综合健康度 🟡 6.5/10 — 可用但有风险

二、架构评估

2.1 优势

  1. 清晰的层次分离 — API 层 / Service 层 / Model 层职责分明,28 个 router 文件 + 20 个 service 文件组织合理
  2. 合理的抽象设计ExternalSystemAdapter 抽象层统一外部系统集成接口,支持降级和缓存
  3. WebSocket 双模式 — 实时推送 + 轮询降级,含指数退避重连
  4. 统一响应格式{code, data, message} 统一错误码体系
  5. 4 前端独立工程 — 坐席/H5/管理后台/Portal 各司其职

2.2 关键问题

# 问题 严重度 影响
A1 单体后端无拆分 — 20 个 service 全部在一个 Python 进程 🟠 不可独立扩缩,故障影响面大;message_router.py 671 行,session_service.py 1234 行已经过大
A2 无消息队列 — 所有业务同步处理,未引入 RabbitMQ/Kafka/Redis Stream 🟠 AI 回复耗时会阻塞请求链路;高并发下后端的请求处理能力受限于最慢的同步操作
A3 WebSocket 单点 — 一个 ws_manager 进程管理所有连接 🔴 容器重启导致所有连接断开,生产环境已有坑记录;无跨进程 WS 广播方案
A4 AI 层未集成 — Dify/RAGFlow 仅基础占位,路由已就绪但未启用 🔴 README 自述"AI 自助解决率 70.2%",但当前新会话直接进人工队列 — 核心能力缺失
A5 单数据库实例 — 无读写分离,无连接池监控 🟢 6000 用户并发访问压力下,单 PG 实例是潜在瓶颈

2.3 改进建议

  1. 引入消息队列:用 Redis Stream(已有 Redis 基础设施)解耦 AI 回复、消息路由等耗时操作
  2. WebSocket 水平扩展:改用 Redis Pub/Sub 实现跨进程 WS 广播(ws_manager 框架化)
  3. 后端模块化:将 AI 处理、消息路由、外部系统集成拆分为独立微服务或异步 Worker
  4. AI 集成优先Dify 凭证已在 docker-compose 中预留,应优先补齐 AI 自动回复能力

三、代码质量评估

3.1 后端

  • 28 个 API 文件, 20 个 service 文件, 18 个模型文件 — 组织合理
  • 文件注解完备(每个 API 文件注释齐全),参数命名规范
  • 部分文件过大:admin_service.py (1,728 行), session_service.py (1,234 行), message_router.py (671 行)

3.2 前端(4 端)

  • 坐席工作台 Workspace.vue 复杂度高(三栏动态切换,多个 v-if/v-else-if
  • 前端类型定义与后端存在字段映射问题(已知 MessageResponse.id vs message_id 的 CRITICAL 映射)
  • 缺少前端单元测试和组件测试
  • 部分组件缺少 loading/error/empty 三态处理

3.3 依赖管理

  • requirements.txt 版本锁定清晰,含完整注释说明每个依赖的作用
  • 已知历史问题:pydantic==2.7.5 被 PyPI yank,需锁定 2.7.4
  • 无前端依赖 lock 文件package-lock.jsonyarn.lock 未归档
  • 无依赖安全审计 — dependabot 配置了 .gitea/dependabot.yml 但 Gitea 是否支持不确定

3.4 改进建议

  1. 大文件拆分admin_service.py 按模块拆分,session_service.py 按生命周期阶段拆分
  2. 前端测试:核心组件(ChatArea/ConversationList)引入 Vitest + Vue Test Utils
  3. 前端依赖锁npm run build 前验证 package-lock.json 存在
  4. 类型对齐:后端 OpenAPI → 前端 TypeScript 代码生成(使用 openapi-typescript 工具)

四、测试评估

4.1 现状

测试类型 数据 状态
后端 pytest 文件 25 个测试文件 存在
总测试用例 ~538 条 ⚠️
通过 470 passed + 4 xfailed
失败 64 条 pre-existing 失败 🔴
前端测试 0 🔴 完全缺失
E2E 测试 176 行检查清单 文档化但未自动化
集成测试 62 tests collectedWindows 环境卡 conftest ⚠️ 已知问题

4.2 关键问题

# 问题 严重度
T1 64 条测试持续失败 — 被标记为 pre-existing,无人修复 🔴
T2 conftest SQLite+StaticPool 在 Windows 卡死 — 本地无法跑全量测试 🔴
T3 前端零测试 — 4 个前端项目没有任何单元/组件/E2E 测试 🔴
T4 无 CI 门禁 — 没有"测试通过才能合入"的流水线 🟠
T5 Mock 依赖强耦合 — conftest 的 patch 路径耦合代码结构 🟠

4.3 改进建议

  1. 根治 64 条失败 — 每个 sprint 分配 10% 时间专门修复,按模块优先级推进
  2. conftest 重写 — 用 PostgreSQL testcontainers 替代 SQLite,彻底解决兼容性问题
  3. 前端测试筑基 — 从最核心的消息列表和发送组件开始,逐步扩展到 30% 覆盖率
  4. Git Hookspre-commit-check.sh 已存在,但应加入"新增 API 端点必加 Depends"的静态检查

五、安全评估

5.1 已完成的安全工作(值得肯定)

  • 5 个 P0 鉴权漏洞已修复
  • WS token 改走 Sec-WebSocket-Protocol
  • 坐席密码 bcrypt 迁移
  • nginx access_log 脱敏
  • MFA/TOTP 二次验证(Google Authenticator 兼容)
  • 高危操作守卫(HighRiskGuard
  • CSP/HSTS/X-Frame-Options 等安全头
  • 异常信息脱敏

5.2 遗留风险

# 风险项 状态 严重度 存在时间
S1 nginx IP 白名单开 0.0.0.0/0 — 临时方案,攻击面大 ⚠️ 待处理 🔴 11 天
S2 Token 未绑定 IP/设备 — 任何获取 token 者可冒用 ⚠️ 待处理 🟠 11 天
S3 未实现全端速率限制 — 仅登录端点有限制 ⚠️ 待处理 🟠 11 天
S4 Upload 路径在容器本地 — 容器重建后文件丢失 ⚠️ 待处理 🟠 11 天
S5 Gitea 无异地备份 — 仅 NAS 本地 ⚠️ 待处理 🟠 11 天
S6 Nginx client_max_body_size 未按路径细分 ⚠️ 待处理 🟢 11 天
S7 前端硬编码配置 — 配置未通过运行时注入 ⚠️ 待处理 🟢 11 天

5.3 改进建议

  1. 立即收窄 IP 白名单:联系网络组确认 WAF/堡垒机/CDN 出口 IP,替换 0.0.0.0/0
  2. Token 绑定增强Redis 中存储 token 时绑定用户 IP 段(可选 /24)或浏览器指纹
  3. 全端速率限制:用 slowapi 为所有 API 端点分级限流(登录 10/min,通用 60/min,管理 30/min
  4. Upload 持久化:加 docker volume mount 解决重建丢文件问题
  5. Gitea 异地备份:备份到 NAS 另一存储池 + 定期下载到本地(或公司备份系统)

六、部署与运维评估

6.1 现状

维度 当前状态 目标状态
编排方式 Docker Compose 单机 K8s 集群(规划中)
部署方式 手动打包 → 堡垒机上传 → 解压部署 CI/CD 自动化
HTTPS 已配置(443 + 301 跳转)
健康检查 已配置但有 curl 已知坑 稳定可靠
容器镜像管理 本地构建,无 registry Harbor/阿里云镜像仓库
数据库备份 无自动化备份 cron 定期备份
日志管理 docker logs + json-file driver 集中式日志(ELK/Loki
监控 /health 端点 + dashboard.py Prometheus + Grafana

6.2 关键问题

# 问题 严重度
D1 手动部署高风险 — 依赖堡垒机手动上传,无回滚按钮 🔴
D2 无容器镜像 Registry — 每台机器本地构建镜像,版本不可追溯 🟠
D3 单点故障 — 后端/PG/Redis 全部在同一 Docker 主机 🔴
D4 无自动化备份策略 — 数据库无定期 dumpRedis 仅 AOF 🔴
D5 Docker Compose env 密码明文风险 — .env 文件存密码 🟠
D6 部署包打包工具 package.py 曾缺少 Portal 和 Admin — 2026-06-15 已修复 已修

6.3 改进建议

  1. 短期:加固部署流程

    • scripts/deploy.sh 增加回滚模式(保留前 3 个版本的部署包)
    • 部署前自动备份数据库(docker compose exec postgres pg_dump
    • 部署后自动触发健康检查 + 5 分钟观察期
  2. 中期:镜像管理与 CI/CD

    • 搭建 Harbor(NAS 上即可)作为私有镜像仓库
    • GitHub Actions 或 Gitea Actions 实现自动构建 + push
    • 服务器 pull 新镜像实现零停机部署
  3. 长期:高可用架构

    • PostgreSQL 主从 + PgPool-II
    • Redis Sentinel 集群
    • 后端多副本 + Nginx 负载均衡
    • 多 Docker 主机(Swarm/K8s

七、文档与项目管理评估

7.1 文档优势

  • 50+ 份文档覆盖架构/PRD/部署/审计/风险/SOP/ADR
  • README 有分角色阅读指南(新人/开发/运维/测试)
  • 风险跟踪表 22 项(含处理计划和责任人)
  • CHANGELOG 严格按 Keep a Changelog 格式
  • CURRENT-FOCUS.md 作为驾驶舱仪表盘
  • 知识库 KNOWLEDGE.md 23 章 1000+ 行

7.2 问题

# 问题 严重度
P1 工作记忆文件过大被截断MEMORY.md 超过 3000 字符限制 🔴
P2 风险跟踪表 11 天未更新(上次 2026-06-14 🟠
P3 用户是唯一决策者 — 所有 P2 任务标的"等用户决策",无自主推进机制 🟠
P4 CURRENT-FOCUS.md 状态混乱 — 同时存在多个不同时间的 P2 等决策表 🟠
P5 无 Sprint 回顾记录 — 无经验教训的结构化沉淀 🟢

7.3 改进建议

  1. 立即整理 MEMORY.md:合并重复项,删除过期记录,控制在 3000 字符内
  2. 风险跟踪表定期更新:每周一自动检查,标注处理进度
  3. 设立"自动推进"机制:对重复出现的 P2 项(如镜像仓库、HTTPS),设定 next-review-date 到期自动提醒
  4. 文档审计周期:每两周审查一次关键文档(风险跟踪表 + CURRENT-FOCUS.md

八、风险汇总矩阵

级别 基础架构 安全 功能交付 运维 项目管理
🔴 WS 单点 / 单体后端瓶颈 IP 白名单全开 / Token 无绑定 AI 集成未完成 无备份 / 手动部署高风险 MEMORY.md 截断
🟠 无消息队列 / 单 DB 速率限制不全 / Upload 丢文件 外部系统集成不全(aTrust/eHR) 无镜像 Registry / 单点故障 用户单一瓶颈 / 风险表过期
🟢 前端组件未拆分 前端硬编码 / Nginx 文件限制 满意度评价未开始 .env 明文密码 无 Sprint 回顾

当前风险热力图

高危区(P0,须即刻处理):
  ┌─────────────────────────────────────────────┐
  │ ■ AI 集成未完成(核心功能缺失)              │
  │ ■ nginx IP 白名单 0.0.0.0/0(攻击面大)     │
  │ ■ MEMORY.md 截断(项目记忆丢失风险)         │
  │ ■ 无自动化数据库备份(数据丢失即永远丢失)    │
  └─────────────────────────────────────────────┘

中危区(P1,2 周内处理):
  ┌─────────────────────────────────────────────┐
  │ ■ 64 条测试失败(质量信号失真)             │
  │ ■ 前端零测试(回归风险不可控)              │
  │ ■ 上传文件容器重建丢失(数据不持久)         │
  │ ■ 单体后端超负荷(session_service 1234行)   │
  └─────────────────────────────────────────────┘

低危区(P2,纳入 Sprint):
  ┌─────────────────────────────────────────────┐
  │ ■ WebSocket 单点(断连重建体验差)          │
  │ ■ 无镜像 Registry(版本不可追溯)           │
  │ ■ 风险跟踪表过期(11 天未更新)              │
  │ ■ 用户单一决策瓶颈(P2 任务堆积)            │
  └─────────────────────────────────────────────┘

九、推进计划

9.1 Phase 1 — 立即止血(1-3 天)

优先级 任务 关联问题 预计耗时
P0 收窄 nginx IP 白名单 — 联系网络组获取 WAF/CDN 出口 IP S1 1 天(等回复)
P0 清理 MEMORY.md — 合并去重,控制 3000 字符 P1 1 小时
P0 配置数据库自动备份 — 写入 cron,每天凌晨全量 dump D4 2 小时
P1 Upload 加 volume mount — 解决容器重建丢文件 S4, D6 30 分钟
P1 修复 conftest SQLite+StaticPool — 让本地测试可用 T2 2 小时

9.2 Phase 2 — 核心功能补齐(1-2 周)

优先级 任务 关联问题 预计耗时
P0 AI 集成 — Dify 接入(凭证已有,路由就绪,缺工作流对接) A4 3-5 天
P1 修复 64 条测试 — 按模块逐个排查修复 T1 3 天
P1 前端测试筑基 — ChatArea/ConversationList 核心组件测试 T3 2 天
P1 全端速率限制 — slowapi 覆盖所有 API 端点 S3 1 天
P2 Token 绑定 IP — Redis 存储时绑定客户端 IP S2 1 天

9.3 Phase 3 — 基础设施加固(2-4 周)

优先级 任务 关联问题 预计耗时
P1 搭建私有镜像 RegistryNAS Harbor D2 2 天
P1 Gitea Actions CI/CD — 自动构建 + push + 部署 D1, T4 3 天
P1 大文件服务拆分 — admin_service / session_service 按模块拆分 A1 2 天
P2 WebSocket 改用 Redis Pub/Sub — 支持多进程广播 A3 3 天
P2 消息队列引入(Redis Stream — AI 回复异步化 A2 3 天

9.4 Phase 4 — 架构演进(1-2 月)

优先级 任务 关联问题 预计耗时
P1 PostgreSQL 主从 — 配置流复制 A5 3 天
P2 前端组件全面重构 — 按功能模块拆分"巨石组件" 1 周
P2 E2E 自动化 — Playwright/Cypress 端到端测试 1 周
P3 外部系统集成补齐 — aTrust + eHR 对接 1 周/系统
P3 K8s 迁移评估 — 可行性分析 + 资源估算 3 天

9.5 时间线总览

Week 1          Week 2          Week 3-4        Month 2
┌─────────┐    ┌─────────┐    ┌──────────┐    ┌──────────────┐
│ Phase 1 │ →  │ Phase 2 │ →  │ Phase 3  │ →  │  Phase 4     │
│ 止血    │    │ 补功能  │    │ 加固     │    │  演进        │
├─────────┤    ├─────────┤    ├──────────┤    ├──────────────┤
│ IP白名单│    │ AI集成  │    │ 镜像Registry│ │ PG主从       │
│ MEMORY  │    │ 修测试  │    │ CI/CD    │    │ 前端重构     │
│ 数据库备份 │  │ 前端测试 │    │ 服务拆分  │    │ E2E自动化    │
│ Upload修复│  │ 限流     │    │ WS优化    │    │ 外部系统补齐  │
│ conftest│    │ Token绑定│    │ 消息队列  │    │ K8s评估      │
└─────────┘    └─────────┘    └──────────┘    └──────────────┘

十、总结

10.1 值得肯定的成就

  • 7 个月从零到 v0.7.1,4 个前端 + 完整后端,产品功能全面
  • 安全意识高 — 多次 P0 安全修复,已实施 MFA、高危守卫、安全头等
  • 文档体系远超同类项目 — 50+ 份文档,ADR、SOP、风险跟踪表一应俱全
  • 工程规范良好 — CHANGELOG 标准格式、提交约定、分支模型

10.2 最需要关注的 3 件事

  1. 🔴 AI 集成 — 这是项目的核心价值主张,"AI 驱动"写在项目名称里,不能只有人肉坐席
  2. 🔴 测试体系 — 64 条失败 + 前端零测试,质量门禁缺失,这是长期积累的债务
  3. 🔴 部署与运维 — 无自动化备份、手动部署、单点故障,一旦出问题恢复时间不可控

10.3 一句话评估

项目功能完整、文档优秀、安全根基扎实,但核心 AI 能力缺失和测试体系薄弱是当前最大的风险敞口。建议在推进新功能前,集中 1-2 周补齐这两块短板。


报告由 软件开发团队·主理人 齐活林 编制 | 2026-06-25