PDD:一个基于 Go 的全链路自动化派单管理系统
标签: Go / Gin / 派单系统 / 企微 / WebSocket / AI OCR / 四方分润 / React / Wails
原文: https://mp.weixin.qq.com/s/aNUTV8r1Nqls7n-B66ORUw
核心亮点
从客服截图到设计师交付,一键搞定全链路自动化。
- AI OCR 截图粘贴即解析,订单号 + 金额 + 时间三字段锁定
- 双模型容灾:智谱 GLM-4V-Plus 优先,通义千问 VL 自动回退
- 企微深度集成:自动建群、消息通知、状态流转同步,全程闭环
- 四方分润引擎:平台 + 设计师 + 谈单客服 + 跟单客服,可配置费率
- 设备指纹绑定:AES-256-GCM 加密本地会话
一、整体架构
┌──────────────────────────────────────────────────────────────────────┐
│ Clients │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
│ │ Desktop App │ │ Admin Web │ │ WeChat Work │ │
│ │ Wails + Vue │ │ React+Vite │ │ Callback + Bot │ │
│ └──────┬───────┘ └──────┬───────┘ └────────┬─────────┘ │
└──────────┼──────────────────┼─────────────────────┼──────────────────┘
│ │ │
▼ ▼ ▼
┌──────────────────────────────────────────────────────────────────────┐
│ Go Backend (Gin) :8201 │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│ │ Auth │ │ Orders │ │ Admin │ │ WebSocket │ │
│ │ JWT+Token│ │ State │ │Dashboard │ │ Real-time │ │
│ │ Blacklist│ │ Machine │ │ Revenue │ │ Broadcast │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └───────┬──────────┘ │
│ │ │ │ │ │
│ ┌────────────────────────────────▼────────────────────────────────┐ │
│ │ Service Layer │ │
│ │ OCR (GLM-4V/Qwen-VL) · WeCom API · Profit Engine · WS Hub │ │
│ └─────────────────────────────────────────────────────────────────┘ │
└──────────────────────────────────────────────────────────────────────┘
技术栈:
| 模块 | 技术 |
|---|---|
| 后端主语言 | Go 1.24 |
| HTTP 框架 | Gin |
| ORM | GORM(双驱动 SQLite / PostgreSQL) |
| 前端管理端 | React 19 + Vite 6 + TailwindCSS v4 |
| 桌面客户端 | Wails v2 + Vue 3 |
| 认证 | JWT + bcrypt + Token 黑名单 + 刷新机制 |
| 实时推送 | WebSocket Hub |
| 安全扫描 | golangci-lint + gosec |
二、核心流程
截图粘贴 ──→ AI OCR 识别 ──→ 订单锁定 ──→ 企微派单 ──→ 设计师抢单 ──→ 建群协作
文本粘贴 ──→ AI 智能提取 ─┘
两种录入方式:
- 截图粘贴:截图标题即解析,AI OCR 识别订单号 + 金额 + 时间,三字段锁定杜绝人工篡改
- 文本粘贴:一键提取联系方式、PPT 主题、页数、交付时间,支持正则预提取 + LLM 兜底
三、四角色体系
| 角色 | 权限 | 分润 |
|---|---|---|
| 管理员 | 全局数据 · 员工增删 · 设备管理 · 营收图表 · 订单转派 | — |
| 谈单客服 | 订单创建 · 客户管理 · OCR 录单 | 谈单佣金(可配置) |
| 跟单客服 | 订单跟进 · 客户管理 · 催单 · 收款对账 | 跟单佣金(可配置) |
| 设计师 | 抢单 · 设计交付 · 改稿 | 设计师佣金(可配置) |
四、订单状态机
PENDING ──▶ GROUP_CREATED ──▶ DESIGNING ──▶ DELIVERED ──▶ COMPLETED
(待处理) (已建群) (设计中) (已交付) (已完成)
│ │
│ AFTER_SALE ◀── REVISION
│ (售后中) (改稿中)
REFUNDED (已退款) / CLOSED (已关闭)
五、四方分润引擎
以总营收 ¥1000 为例:
| 角色 | 费率 | 金额 |
|---|---|---|
| 平台手续费 | 6% | ¥60 |
| 设计师佣金 | 30% | ¥300 |
| 谈单客服佣金 | 10% | ¥100 |
| 跟单客服佣金 | 5% | ¥50 |
| 净利润 | 49% | ¥490 |
支持 Excel / CSV 一键导出,佣金薪资表支持底薪设置(应发合计 = 底薪 + 佣金)。
六、安全设计
| 安全措施 | 实现方式 |
|---|---|
| 设备指纹绑定 | 硬件 UUID + MAC + 主机名三重指纹,AES-256-GCM 加密会话 |
| Token 黑名单 | JTI 黑名单 + 用户级全量失效,密码重置即时注销 |
| Token 刷新 | /auth/refresh 签发新 token,旧 token 自动加入黑名单 |
| OCR 防篡改 | SHA256 哈希锁定表单,后端校验哈希一致性 |
| 限速防护 | Nginx 层(30r/s API,5r/m 登录)+ 应用层双重限速 |
| CSRF 保护 | 双重 Cookie + Header Token 校验 |
| 暴力破解防护 | 连续失败自动锁定 IP,滑动窗口计数 |
| 安全响应头 | HSTS / X-Frame-Options / CSP / X-Content-Type-Options |
| CI 安全扫描 | golangci-lint + gosec 静态安全分析 |
七、快速启动
# 后端
cd server
cp .env.example .env # 配置 JWT_SECRET, WECOM_*, ZHIPU_API_KEY
go run . # 启动 :8201
# 管理前端
cd web && npm install && npm run dev # 启动 :8200(自动代理 API)
# 桌面客户端
cd desktop-client && wails dev # 开发模式
wails build # 构建 .app / .exe
# Docker 生产环境
docker compose up -d # 完整版(PostgreSQL + Nginx)
docker compose -f docker-compose.lite.yml up -d # 轻量版(SQLite 单容器)
八、关键 .env 配置
| 变量 | 说明 | 必填 |
|---|---|---|
SERVER_PORT | 后端端口(默认 8201) | ✅ |
JWT_SECRET_KEY | JWT HMAC-SHA256 签名密钥 | ✅ |
ZHIPU_API_KEY | 智谱 AI OCR 密钥 | ✅ |
DASHSCOPE_API_KEY | 通义千问 VL 备用密钥 | ❌ |
WECOM_CORP_ID | 企微企业 ID | ✅ |
WECOM_AGENT_ID | 企微应用 ID | ✅ |
WECOM_CORP_SECRET | 企微应用 Secret | ✅ |
PLATFORM_FEE_RATE | 平台手续费率 | ❌ |
DESIGNER_COMMISSION_RATE | 设计师佣金率 | ❌ |
九、GitHub Actions CI/CD
| Trigger | Backend | Frontend |
|---|---|---|
| Push / PR to main | go vet → golangci-lint → gosec → go test -cover → go build | npm ci → eslint → vite build |
| Tag v* | 交叉编译 Linux AMD64 二进制 | 构建生产产物 |
| Release | 自动创建 GitHub Release + 附件下载 | — |
十、项目地址
🔗 https://github.com/daxia778/qywechat/
本文整理自微信公众号「码农先森」,原文链接:https://mp.weixin.qq.com/s/aNUTV8r1Nqls7n-B66ORUw