Files
wxsales/demo/2-impl.md
T
freedakgmail 5926c73ff1 微信营销管理系统 - 益童宝销售管理平台
- 数据库: PostgreSQL schema + 3名销售/21客户/341消息/6成交
- 采集代理: mock_sync.py 模拟微信聊天同步
- AI分析: analyze.py 规则模式 + 千问LLM模式
- 后端: FastAPI 11个API接口
- 前端: 仪表盘/销售列表/客户列表/成交记录/交流分析/录入成交
- 交流分析: 全部客户对话概览 + LLM标准范式对话生成
- 部署: systemd + nginx, 已部署至 sale.all8ai.top
2026-07-14 22:31:29 +08:00

9.5 KiB
Raw Blame History

微信营销管理系统 MVP 实施计划

文档日期:2026-07-14 版本:v0.1 依赖:0-req.md, 1-design.md


一、实施阶段

阶段 1:数据库与基础设施

目标:启动独立 PostgreSQL,建表,预置销售数据。

产出文件

  • demo/db/schema.sql — 完整建表 SQL
  • demo/db/init_db.sh — 数据库启动与初始化脚本
  • demo/requirements.txt — Python 依赖

任务清单

  • 编写 schema.sql6 张表 + 索引)
  • 编写 init_db.sh(启动 PG 5434 → 建库 → 建表 → 插入 3 名销售)
  • 编写 requirements.txt
  • 验证:执行 init_db.sh 后,psql 能查到 3 名销售

验证命令

/usr/local/opt/postgresql@17/bin/psql -h demo/db/socket -p 5434 -d wxchat_sales -c "SELECT * FROM salesperson;"

阶段 2:模拟采集代理

目标:3 个模拟代理生成微信数据并写入中央库。

产出文件

  • demo/agent/mock_sync.py — 模拟采集代理

任务清单

  • 定义 5 个销售场景模板(询价成交、犹豫、咨询、长期跟进、竞品对比)
  • 定义非客户联系人模板(广告、社交、群聊)
  • 实现 generate_contacts() — 每销售 1530 个联系人
  • 实现 generate_conversations() — 每销售 1020 个会话
  • 实现 generate_messages() — 基于场景模板生成消息
  • 实现 sync_to_central() — 批量写入 PG
  • 实现增量同步(递增 source_local_id
  • 支持 --salesperson-id 参数
  • 支持 --batch 参数控制生成数量

验证命令

python demo/agent/mock_sync.py --salesperson-id 1
python demo/agent/mock_sync.py --salesperson-id 2
python demo/agent/mock_sync.py --salesperson-id 3
# 检查数据
psql ... -c "SELECT salesperson_id, count(*) FROM message GROUP BY salesperson_id;"
# 再次运行验证增量
python demo/agent/mock_sync.py --salesperson-id 1
psql ... -c "SELECT count(*) FROM message WHERE salesperson_id=1;"
# 消息数应增加

阶段 3AI 分析服务

目标:规则引擎实现客户识别和沟通摘要。

产出文件

  • demo/ai/analyze.py — AI 分析服务

任务清单

  • 实现客户识别规则引擎
    • 消息数量过滤
    • 关键词匹配(价格词、产品词、合作词)
    • 行业推断
    • 意向等级判断
  • 实现沟通摘要规则引擎
    • 阶段判断
    • 异议提取
    • 摘要生成
    • 下一步建议
  • 支持 --mode rule|llm 参数
  • 支持 --force 强制重新分析
  • 已分析客户跳过(last_analysis IS NULL 过滤)

验证命令

python demo/ai/analyze.py --mode rule
# 检查客户表
psql ... -c "SELECT customer_name, industry, intent_level, stage FROM customer;"
# 应有客户记录,非客户不在其中

阶段 4Web 后端

目标FastAPI 提供全部 API 接口。

产出文件

  • demo/web/server.py — FastAPI 后端

任务清单

  • 实现 DB 连接池
  • 实现 /api/dashboard
  • 实现 /api/salespersons
  • 实现 /api/customers(支持筛选)
  • 实现 /api/customers/{id}
  • 实现 /api/customers/{id}/messages(分页)
  • 实现 /api/customers/{id}/deals
  • 实现 POST /api/deals
  • 实现 /api/deals(支持筛选)
  • 实现 POST /api/analyze
  • 实现 /api/sync/status
  • 静态文件托管(/web/static/index.html

验证命令

uvicorn demo.web.server:app --port 8770 &
curl http://127.0.0.1:8770/api/dashboard | python -m json.tool
curl http://127.0.0.1:8770/api/customers | python -m json.tool
curl -X POST http://127.0.0.1:8770/api/deals \
  -H "Content-Type: application/json" \
  -d '{"salesperson_id":1,"customer_id":1,"product_name":"收银系统","amount":12000,"deal_date":"2026-07-14"}'

阶段 5Web 前端

目标:单页 HTML 实现 5 个页面。

产出文件

  • demo/web/static/index.html — 单页前端

任务清单

  • 页面骨架 + TailwindCSS CDN + 导航栏
  • 仪表盘面板(统计卡片 + 销售对比图)
  • 销售列表面板
  • 客户列表面板(筛选 + 列表)
  • 客户详情面板(基本信息 + 摘要 + 聊天时间线 + 成交记录)
  • 成交录入表单
  • 成交列表面板
  • SPA 路由切换(hash 或手动切换)
  • API 调用封装
  • 错误提示

验证方式

  • 浏览器访问 http://127.0.0.1:8770
  • 逐个页面检查数据展示
  • 录入一条成交,检查列表和客户详情

阶段 6:一键启动与集成

目标run_demo.sh 一键启动全部服务。

产出文件

  • demo/run_demo.sh — 一键启动
  • demo/stop_demo.sh — 一键停止
  • demo/README.md — 项目说明

任务清单

  • 编写 run_demo.sh
    • 检查 PG 17
    • 启动 PG 5434
    • 建库建表
    • 运行 3 个 mock_sync
    • 运行 analyze
    • 启动 uvicorn 后台
    • 输出访问地址
  • 编写 stop_demo.sh
    • 停止 uvicorn
    • 停止 PG
  • 编写 README.md
  • 端到端验证

验证命令

cd demo && bash run_demo.sh
# 浏览器访问 http://127.0.0.1:8770
bash stop_demo.sh
# 再次运行验证幂等
bash run_demo.sh

二、依赖清单

Python 包

psycopg2-binary>=2.9
fastapi>=0.111
uvicorn>=0.30

系统依赖

  • PostgreSQL 17(本机已安装于 /usr/local/opt/postgresql@17/
  • Python 3.11+
  • macOSlaunchd、pg_ctl 等)

可选依赖

  • Ollama + qwen2.5LLM 分析模式,非必需)

三、风险与对策

风险 影响 对策
PG 5434 端口被占用 启动失败 脚本检测并提示
psycopg2 安装失败 无法连接 DB 使用 psycopg2-binary 避免编译
模拟数据不够真实 演示效果差 场景模板覆盖 5 种典型销售对话
规则引擎误判 客户识别不准 MVP 可接受,后续替换为 LLM
前端无框架 代码维护性差 MVP 可接受,后续可迁移到 React

三点五、测试计划

测试分层

层级 范围 方式 产出文件
数据库层 建表、约束、索引 SQL 验证脚本 demo/tests/test_db.sql
采集代理层 联系人/消息生成、增量同步、去重 Python 单元测试 demo/tests/test_mock_sync.py
AI 分析层 客户识别准确率、阶段判断、异议提取 Python 单元测试 demo/tests/test_analyze.py
API 层 全部 11 个接口的输入输出 Python HTTP 测试 demo/tests/test_api.py
端到端 run_demo.sh → 浏览器 → 成交录入 Shell 脚本 + curl demo/tests/test_e2e.sh

各阶段测试任务

阶段 1 测试(数据库)

  • 执行 test_db.sql 验证 6 张表存在
  • 验证唯一约束生效(插入重复数据应失败)
  • 验证外键约束生效
  • 验证 3 名预置销售数据正确

阶段 2 测试(采集代理)

  • 运行 mock_sync 后联系人数量在预期范围
  • 运行 mock_sync 后消息数量 > 0
  • 重复运行 mock_sync 不产生重复消息(增量同步)
  • 消息类型分布合理(text 占比最高)
  • 非客户联系人的消息不含业务关键词

阶段 3 测试(AI 分析)

  • 真实客户被正确识别(is_customer=true
  • 非客户不被识别为客户(广告/社交/家人)
  • 意向等级判断合理(成交场景=high,犹豫场景=medium
  • 销售阶段判断合理(成交场景=成交,犹豫场景=异议处理)
  • 异议提取包含"贵""考虑""商量"等关键词
  • 重复运行不重复分析(last_analysis 过滤)

阶段 4 测试(API

  • GET /api/dashboard 返回非空统计数据
  • GET /api/customers 返回客户列表
  • GET /api/customers?intent_level=high 筛选正确
  • GET /api/customers/{id} 返回客户详情含摘要
  • GET /api/customers/{id}/messages 返回聊天记录
  • POST /api/deals 成功创建成交记录
  • GET /api/deals 返回成交列表
  • POST /api/analyze 触发分析并返回统计

阶段 6 测试(端到端)

  • run_demo.sh 执行无报错
  • curl http://127.0.0.1:8770/api/dashboard 返回 200
  • stop_demo.sh 停止所有进程
  • 重复运行 run_demo.sh 幂等

测试执行命令

# 数据库测试
psql -h demo/db/socket -p 5434 -d wxchat_sales -f demo/tests/test_db.sql

# Python 单元测试
python -m pytest demo/tests/ -v

# 端到端测试
bash demo/tests/test_e2e.sh

四、工作量估算

阶段 预计工作量 产出文件数
阶段 1:数据库 12 小时 3 个文件
阶段 2:采集代理 34 小时 1 个文件(大)
阶段 3AI 分析 23 小时 1 个文件
阶段 4Web 后端 23 小时 1 个文件
阶段 5Web 前端 34 小时 1 个文件(大)
阶段 6:集成启动 1 小时 3 个文件
合计 1217 小时 10 个文件

五、里程碑

里程碑 标志 验收标准
M1 数据库就绪 init_db.sh 成功执行 3 名销售在库中
M2 数据采集就绪 3 个 mock_sync 运行完成 消息数 > 600
M3 AI 分析就绪 analyze.py 运行完成 客户表非空
M4 API 就绪 FastAPI 启动 所有 API 返回正确数据
M5 前端就绪 浏览器可访问 5 个页面数据正确
M6 一键启动 run_demo.sh 成功 AC-1 AC-12 全部通过