Cpte-Boot/cpte-wms-service/ARCHITECTURE.md

474 lines
15 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# WMS 微服务架构设计文档
## 1. 架构概述
### 1.1 架构目标
- 将单体 WMS 系统拆分为独立的微服务
- 实现业务解耦,提高系统可维护性
- 支持独立部署和扩展
- 保留原有业务代码作为参考
### 1.2 架构原则
- **单一职责**: 每个服务只负责一个业务领域
- **自治性**: 服务可独立开发、部署、扩展
- **轻量级通信**: 使用 RESTful API 进行服务间通信
- **数据一致性**: 保证最终一致性,支持补偿机制
## 2. 服务拆分
### 2.1 服务划分
```
┌─────────────────────────────────────────────────────────┐
│ WMS 微服务架构 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │
│ │ 基础服务 │ │ 入库服务 │ │ 出库服务 │ │
│ │ (8001) │ │ (8002) │ │ (8003) │ │
│ │ - 物品管理 │ │ - ASN 管理 │ │ - 拣货管理 │ │
│ │ - 区域管理 │ │ - 收货管理 │ │ - 拣货任务 │ │
│ │ - 点位管理 │ │ - 上架管理 │ │ - 下架管理 │ │
│ │ │ │ - MOM 对接 │ │ - MOM 对接 │ │
│ └─────────────┘ └─────────────┘ └─────────────┘ │
│ │
│ ┌─────────────┐ ┌─────────────┐ │
│ │ 库存服务 │ │ 调度服务 │ │
│ │ (8004) │ │ (8005) │ │
│ │ - 库存管理 │ │ - AGV 调度 │ │
│ │ - 库存流水 │ │ - 海康 AGV │ │
│ │ - 盘点管理 │ │ - 特斯 AGV │ │
│ │ - 统计分析 │ │ - 输送线 │ │
│ │ - 序列号 │ │ - 定时任务 │ │
│ └─────────────┘ └─────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
```
### 2.2 服务职责
#### 2.2.1 基础服务 (cpte-wms-basic-service)
**核心职责**:
- 管理 WMS 系统的基础数据
**主要功能**:
1. 物品信息管理Item
2. 仓库区域管理Area
3. 库位点位管理Point
**对外接口**:
- `/api/wms/basic/item/**` - 物品管理
- `/api/wms/basic/area/**` - 区域管理
- `/api/wms/basic/point/**` - 点位管理
---
#### 2.2.2 调度服务 (cpte-wms-schedule-service)
**核心职责**:
- 提供 AGV 和输送线调度能力
- 管理定时任务
**主要功能**:
1. AGV 任务调度AgvTask
2. 海康 AGV 对接HikAgv
3. 特斯 AGV 对接TesAgv
4. 输送线管理ConveyorLine
5. 数据同步定时任务
**对外接口**:
- `/api/wms/schedule/agv-task/**` - AGV 任务
- `/api/wms/schedule/hik-agv/**` - 海康 AGV
- `/api/wms/schedule/tes-agv/**` - 特斯 AGV
- `/api/wms/schedule/conveyor/**` - 输送线
**依赖服务**:
- 基础服务:获取物品、库位信息
- 库存服务:获取库存信息
---
#### 2.2.3 入库服务 (cpte-wms-inbound-service)
**核心职责**:
- 处理所有入库业务流程
- 对接 MOM 系统入库接口
**主要功能**:
1. ASN 单管理Asn
2. ASN 明细管理AsnDetail
3. 收货登记Receive
4. 上架作业
5. 收货记录ReceiveRecord
6. MOM 入库对接
**对外接口**:
- `/api/wms/inbound/asn/**` - ASN 管理
- `/api/wms/inbound/receive/**` - 收货管理
- `/api/wms/inbound/sai-wms/**` - MOM 对接
**依赖服务**:
- 基础服务:获取物品、库位信息
- 调度服务:生成 AGV 上架任务
- 库存服务:更新库存
---
#### 2.2.4 出库服务 (cpte-wms-outbound-service)
**核心职责**:
- 处理所有出库业务流程
- 对接 MOM 系统出库接口
**主要功能**:
1. 拣货单管理Pick
2. 拣货明细管理PickDetail
3. 拣货任务管理Task
4. 任务分配
5. 下架作业
6. MOM 出库对接
**对外接口**:
- `/api/wms/outbound/pick/**` - 拣货管理
- `/api/wms/outbound/task/**` - 任务管理
- `/api/wms/outbound/sai-wms/**` - MOM 对接
**依赖服务**:
- 基础服务:获取物品、库位信息
- 调度服务:生成 AGV 搬运任务
- 库存服务:扣减库存
---
#### 2.2.5 库存服务 (cpte-wms-inventory-service)
**核心职责**:
- 管理库存核心业务
- 记录库存流水
- 提供库存查询和统计
**主要功能**:
1. 库存管理Inventory
2. 库存流水InventoryLog
3. 盘点计划CountPlan
4. 盘点明细CountDetail
5. 数据看板Dashboard
6. 序列号管理
**对外接口**:
- `/api/wms/inventory/**` - 库存管理
- `/api/wms/inventory/log/**` - 库存流水
- `/api/wms/inventory/count/**` - 盘点管理
- `/api/wms/inventory/dashboard/**` - 数据看板
**依赖服务**:
- 调度服务:调用 AGV 任务
---
## 3. 服务间调用关系
### 3.1 调用矩阵
```
│ 基础 │ 调度 │ 入库 │ 出库 │ 库存 │
──────────────┼──────┼──────┼──────┼──────┼──────┤
基础服务 │ - │ │ → │ → │ → │
──────────────┼──────┼──────┼──────┼──────┼──────┤
调度服务 │ ← │ - │ ← │ ← │ ← │
──────────────┼──────┼──────┼──────┼──────┼──────┤
入库服务 │ ← │ → │ - │ │ → │
──────────────┼──────┼──────┼──────┼──────┼──────┤
出库服务 │ ← │ → │ │ - │ → │
──────────────┼──────┼──────┼──────┼──────┼──────┤
库存服务 │ ← │ → │ ← │ ← │ - │
──────────────┴──────┴──────┴──────┴──────┴──────┘
图例:
→ 调用其他服务
← 被其他服务调用
```
### 3.2 典型业务流程
#### 3.2.1 入库流程
```
1. 入库服务创建 ASN 单
2. 入库服务执行收货
3. 入库服务调用库存服务 → 增加库存
4. 库存服务记录库存流水
5. 入库服务调用调度服务 → 生成 AGV 上架任务
```
#### 3.2.2 出库流程
```
1. 出库服务创建拣货单
2. 出库服务生成拣货任务
3. 出库服务调用库存服务 → 预占库存
4. 出库服务调用调度服务 → 生成 AGV 搬运任务
5. 拣货完成后调用库存服务 → 扣减库存
6. 库存服务记录库存流水
```
#### 3.2.3 盘点流程
```
1. 库存服务创建盘点计划
2. 库存服务执行盘点
3. 库存服务生成盘点差异
4. 库存服务调整库存
5. 库存服务记录库存流水
```
#### 3.2.4 AGV 调度流程
```
1. 入库/出库服务调用调度服务 → 请求 AGV 任务
2. 调度服务调用基础服务 → 获取库位信息
3. 调度服务生成 AGV 任务
4. 调度服务对接 AGV 设备(海康/特斯)
5. AGV 执行任务并返回结果
```
---
## 4. 数据设计
### 4.1 数据库表归属
#### 基础服务表
```sql
wms_basic_item -- 物品信息
wms_basic_item_key -- 物品关键信息
wms_basic_area -- 区域信息
wms_basic_point -- 点位信息
wms_basic_stock -- 库存(基础数据)
```
#### 调度服务表
```sql
wms_agv_task -- AGV 任务
wms_hik_agv -- 海康 AGV
wms_tes_agv -- 特斯 AGV
wms_conveyor_line -- 输送线
```
#### 入库服务表
```sql
wms_inbound_asn -- ASN 单
wms_inbound_asn_detail -- ASN 明细
wms_inbound_receive -- 收货记录
```
#### 出库服务表
```sql
wms_outbound_pick -- 拣货单
wms_outbound_pick_detail -- 拣货明细
wms_outbound_task -- 拣货任务
```
#### 库存服务表
```sql
wms_inventory -- 库存
wms_inventory_log -- 库存流水
wms_count_plan -- 盘点计划
wms_count_detail -- 盘点明细
```
### 4.2 数据一致性方案
#### 方案一:本地事务(推荐初期)
- 所有服务共享数据库
- 使用本地事务保证一致性
- 优点:简单、可靠
- 缺点:数据库耦合
#### 方案二:分布式事务(推荐后期)
- 每个服务独立数据库
- 使用 Seata 管理分布式事务
- 优点:服务解耦
- 缺点:复杂度高
#### 方案三:最终一致性
- 使用消息队列
- 补偿机制保证最终一致性
- 优点:高性能、高可用
- 缺点:实现复杂
---
## 5. 接口设计
### 5.1 接口规范
#### 统一响应格式
```java
{
"code": 200,
"message": "success",
"data": {},
"timestamp": 1234567890
}
```
#### 统一错误码
```
200 - 成功
400 - 参数错误
401 - 未授权
403 - 禁止访问
404 - 资源不存在
500 - 服务器内部错误
```
### 5.2 核心接口
#### 基础服务接口
```
GET /api/wms/basic/item/{id} # 获取物品信息
POST /api/wms/basic/item/list # 分页查询物品
GET /api/wms/basic/area/{id} # 获取区域信息
GET /api/wms/basic/point/{id} # 获取点位信息
POST /api/wms/basic/agv-task/submit # 提交 AGV 任务
```
#### 入库服务接口
```
POST /api/wms/inbound/asn/create # 创建 ASN 单
GET /api/wms/inbound/asn/{id} # 获取 ASN 详情
POST /api/wms/inbound/receive # 收货登记
```
#### 出库服务接口
```
POST /api/wms/outbound/pick/create # 创建拣货单
GET /api/wms/outbound/pick/{id} # 获取拣货详情
POST /api/wms/outbound/task/allocate # 分配拣货任务
```
#### 库存服务接口
```
GET /api/wms/inventory/query # 查询库存
POST /api/wms/inventory/increase # 增加库存
POST /api/wms/inventory/decrease # 扣减库存
GET /api/wms/inventory/log/list # 库存流水
POST /api/wms/inventory/count/execute # 执行盘点
```
---
## 6. 部署架构
### 6.1 开发环境
```
┌──────────────┐
│ Nginx │ (可选,统一入口)
└──────────────┘
┌──────┴──────┬──────────┬──────────┬──────────┬──────────┐
│ │ │ │ │ │
│ 基础服务 │ 调度服务 │ 入库服务 │ 出库服务 │ 库存服务 │
│ :8001 │ :8005 │ :8002 │ :8003 │ :8004 │
│ │ │ │ │ │
└─────────────┴──────────┴──────────┴──────────┴──────────┘
┌───────┴───────┐
│ │
MySQL Redis
```
### 6.2 生产环境(推荐)
```
┌──────────┐
│ Gateway │
└──────────┘
┌────────────────┼────────────────┐
│ │ │
┌────┴────┐ ┌─────┴────┐ ┌─────┴────┐
│ 负载均衡 │ │ 负载均衡 │ │ 负载均衡 │
└────┬────┘ └─────┬────┘ └─────┬────┘
│ │ │
┌────┴────┐ ┌─────┴────┐ ┌─────┴────┐
│基础服务 1│ │入库服务 1│ │出库服务 1│
│基础服务 2│ │入库服务 2│ │出库服务 2│
└─────────┘ └──────────┘ └──────────┘
┌────┴────┐
│库存服务 1│
│库存服务 2│
└─────────┘
```
---
## 7. 监控和日志
### 7.1 健康检查
每个服务提供健康检查端点:
```
GET /actuator/health
```
### 7.2 指标监控
```
GET /actuator/metrics
```
### 7.3 日志规范
- 使用 SLF4J + Logback
- 按日期滚动保存
- 包含 traceId 便于链路追踪
---
## 8. 开发计划
### 阶段一:架构搭建(已完成)
- [x] 设计微服务架构
- [x] 创建项目结构
- [x] 配置 pom.xml
- [x] 创建配置文件
- [x] 创建启动类
### 阶段二:代码迁移
- [ ] 迁移基础服务代码
- [ ] 迁移入库服务代码
- [ ] 迁移出库服务代码
- [ ] 迁移库存服务代码
### 阶段三:服务间接口
- [ ] 定义服务间接口
- [ ] 实现服务间调用
- [ ] 测试接口连通性
### 阶段四:集成测试
- [ ] 单元测试
- [ ] 集成测试
- [ ] 性能测试
### 阶段五:部署上线
- [ ] 编写部署文档
- [ ] 配置生产环境
- [ ] 灰度发布
- [ ] 正式上线
---
## 9. 风险管理
### 技术风险
1. **服务间调用延迟**: 优化网络调用,使用连接池
2. **数据不一致**: 实现补偿机制,保证最终一致性
3. **单点故障**: 服务集群部署,使用负载均衡
### 业务风险
1. **业务中断**: 灰度发布,逐步迁移流量
2. **数据丢失**: 完善备份机制,定期演练恢复
---
## 10. 总结
本架构设计将 WMS 系统拆分为四个独立的微服务,实现了:
- ✅ 业务解耦,职责清晰
- ✅ 独立部署,灵活扩展
- ✅ 保留原代码,便于参考
- ✅ 平滑迁移,降低风险
后续可根据业务发展逐步引入服务治理、API 网关、链路追踪等能力。