从零搭建销售生产ERP系统——大三项目实战记录(二)
从零搭建销售生产ERP系统——大三项目实战记录(二)
项目背景
软件体系结构课程的大作业:开发一套面向中小制造企业的销售生产ERP系统,涵盖4个子系统——销售订单管理、生产计划排程、物料控制、销售发货。6人团队,我主要负责后端架构和飞书机器人集成。
系统架构
┌──────────┐ ┌──────────────┐ ┌──────────┐
│ React │────▶│ Node Express │────▶│ SQLite │
│ 前端 │ │ :3001 │ │ erp.db │
└──────────┘ └──────────────┘ └──────────┘
▲
┌──────────┐ ┌─────┴────────┐
│ 飞书 │────▶│ Spring Boot │
│ 机器人 │ │ :8080 │
└──────────┘ └──────────────┘
│
└──── WebSocket ────▶ DeepSeek LLM
双后端设计:Node.js Express(端口3001)负责前端API和业务逻辑;Spring Boot(端口8080)专门处理飞书机器人的WebSocket长连接和DeepSeek LLM调用。两者共用同一SQLite数据库。
核心难点
1. 飞书机器人 + LLM 意图解析
飞书机器人"期末考试"(是的,这名字是课程要求)通过WebSocket接收用户消息,转发给DeepSeek进行意图识别和函数调用。关键挑战:
- 中文数字解析:用户说"帮我创建二十三个订单"→ LLM要准确识别"二十"=20、"三"=3
- 单位词处理:个/件/台/套等量词的归一化
- 上下文保持:多轮对话中记住用户之前提到的订单号、产品名
2. 订单CRUD + 评审流程
不只是简单增删改查,还要实现: - 订单评审(多级审批状态流转) - 工单自动生成 - 待办事项推送 - 日报/KPI统计
3. SQLite并发问题
双后端同时读写SQLite,偶尔出现SQLITE_BUSY。解决方案:设置busy_timeout=5000ms + WAL模式,确保写入串行化。
技术栈清单
| 层 | 技术 |
|---|---|
| 后端1 | Spring Boot 2.7.18 + Java 21 + Maven |
| 后端2 | Node.js Express |
| 前端 | React |
| 数据库 | SQLite |
| 消息 | 飞书机器人 WebSocket |
| AI | DeepSeek LLM(意图解析+函数调用) |
小结
双后端架构在小型项目中其实有点过度设计了,但课程要求分别展示Java和Node.js能力。真正有价值的是飞书机器人+LLM的集成实践——让自然语言直接驱动业务操作,这个方向很有意思。
大三博客系列,持续更新中...

浙公网安备 33010602011771号