210 lines
5.8 KiB
Markdown
210 lines
5.8 KiB
Markdown
|
|
# WMS 微服务架构说明
|
|||
|
|
|
|||
|
|
## 项目概述
|
|||
|
|
|
|||
|
|
本项目将 WMS(仓库管理系统)拆分为五个独立的微服务模块,实现业务解耦和独立部署。
|
|||
|
|
|
|||
|
|
## 微服务模块划分
|
|||
|
|
|
|||
|
|
### 1. WMS 基础服务 (cpte-wms-basic-service)
|
|||
|
|
- **端口**: 8001
|
|||
|
|
- **职责**: 提供 WMS 系统的基础数据管理
|
|||
|
|
- **包含模块**:
|
|||
|
|
- 基础数据管理(区域、物品、点位)
|
|||
|
|
|
|||
|
|
### 2. WMS 调度服务 (cpte-wms-schedule-service)
|
|||
|
|
- **端口**: 8005
|
|||
|
|
- **职责**: 提供 AGV 和输送线调度功能
|
|||
|
|
- **包含模块**:
|
|||
|
|
- AGV 任务管理
|
|||
|
|
- 海康 AGV 调度
|
|||
|
|
- 特斯 AGV 调度
|
|||
|
|
- 输送线管理
|
|||
|
|
- 定时任务
|
|||
|
|
|
|||
|
|
### 3. WMS 入库服务 (cpte-wms-inbound-service)
|
|||
|
|
- **端口**: 8002
|
|||
|
|
- **职责**: 处理所有入库相关的业务流程
|
|||
|
|
- **包含模块**:
|
|||
|
|
- ASN(预入库通知单)管理
|
|||
|
|
- 收货登记
|
|||
|
|
- 上架作业
|
|||
|
|
- MOM 系统入库对接
|
|||
|
|
|
|||
|
|
### 4. WMS 出库服务 (cpte-wms-outbound-service)
|
|||
|
|
- **端口**: 8003
|
|||
|
|
- **职责**: 处理所有出库相关的业务流程
|
|||
|
|
- **包含模块**:
|
|||
|
|
- 拣货单管理
|
|||
|
|
- 拣货任务生成和分配
|
|||
|
|
- 下架作业
|
|||
|
|
- MOM 系统出库对接
|
|||
|
|
|
|||
|
|
### 5. WMS 库存服务 (cpte-wms-inventory-service)
|
|||
|
|
- **端口**: 8004
|
|||
|
|
- **职责**: 管理库存核心业务和库存流水
|
|||
|
|
- **包含模块**:
|
|||
|
|
- 库存查询和管理
|
|||
|
|
- 库存流水记录
|
|||
|
|
- 盘点计划执行
|
|||
|
|
- 库存统计分析
|
|||
|
|
- 序列号管理
|
|||
|
|
|
|||
|
|
### 6. WMS 调度服务 (cpte-wms-schedule-service)
|
|||
|
|
- **端口**: 8005
|
|||
|
|
- **职责**: AGV 和输送线设备调度
|
|||
|
|
- **包含模块**:
|
|||
|
|
- AGV 任务调度
|
|||
|
|
- 设备对接(海康、特斯)
|
|||
|
|
- 输送线控制
|
|||
|
|
- 定时任务
|
|||
|
|
|
|||
|
|
## 技术栈
|
|||
|
|
|
|||
|
|
- **框架**: Spring Boot 3.5.5
|
|||
|
|
- **持久层**: MyBatis-Plus 3.5.12
|
|||
|
|
- **数据库**: MySQL 8.0+
|
|||
|
|
- **缓存**: Redis 5.0+
|
|||
|
|
- **连接池**: Druid 1.2.24
|
|||
|
|
- **API 文档**: Knife4j 4.5.0
|
|||
|
|
- **工具类**: Hutool 5.8.25
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### 环境要求
|
|||
|
|
- JDK 17+
|
|||
|
|
- Maven 3.6+
|
|||
|
|
- MySQL 8.0+
|
|||
|
|
- Redis 5.0+
|
|||
|
|
|
|||
|
|
### 配置说明
|
|||
|
|
|
|||
|
|
1. **数据库配置**
|
|||
|
|
- 修改各服务 `src/main/resources/application-dev.yml`
|
|||
|
|
- 配置数据库连接信息
|
|||
|
|
- 配置 Redis 连接信息
|
|||
|
|
|
|||
|
|
2. **端口配置**
|
|||
|
|
- 基础服务:8001
|
|||
|
|
- 入库服务:8002
|
|||
|
|
- 出库服务:8003
|
|||
|
|
- 库存服务:8004
|
|||
|
|
- 调度服务:8005
|
|||
|
|
|
|||
|
|
### 启动顺序
|
|||
|
|
|
|||
|
|
1. 启动数据库和 Redis
|
|||
|
|
2. 启动 WMS 基础服务
|
|||
|
|
3. 启动 WMS 调度服务
|
|||
|
|
4. 启动 WMS 库存服务
|
|||
|
|
5. 启动 WMS 入库服务
|
|||
|
|
6. 启动 WMS 出库服务
|
|||
|
|
|
|||
|
|
### 启动命令
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 进入项目目录
|
|||
|
|
cd cpte-wms-service
|
|||
|
|
|
|||
|
|
# 编译项目
|
|||
|
|
mvn clean package -DskipTests
|
|||
|
|
|
|||
|
|
# 启动基础服务
|
|||
|
|
java -jar cpte-wms-basic-service/target/cpte-wms-basic-service-3.8.3.jar
|
|||
|
|
|
|||
|
|
# 启动入库服务
|
|||
|
|
java -jar cpte-wms-inbound-service/target/cpte-wms-inbound-service-3.8.3.jar
|
|||
|
|
|
|||
|
|
# 启动出库服务
|
|||
|
|
java -jar cpte-wms-outbound-service/target/cpte-wms-outbound-service-3.8.3.jar
|
|||
|
|
|
|||
|
|
# 启动库存服务
|
|||
|
|
java -jar cpte-wms-inventory-service/target/cpte-wms-inventory-service-3.8.3.jar
|
|||
|
|
|
|||
|
|
# 启动调度服务
|
|||
|
|
java -jar cpte-wms-schedule-service/target/cpte-wms-schedule-service-3.8.3.jar
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## API 访问地址
|
|||
|
|
|
|||
|
|
启动成功后,访问各服务的 API 文档:
|
|||
|
|
|
|||
|
|
- **基础服务**: http://localhost:8001/cpte-wms-basic/doc.html
|
|||
|
|
- **入库服务**: http://localhost:8002/cpte-wms-inbound/doc.html
|
|||
|
|
- **出库服务**: http://localhost:8003/cpte-wms-outbound/doc.html
|
|||
|
|
- **库存服务**: http://localhost:8004/cpte-wms-inventory/doc.html
|
|||
|
|
- **调度服务**: http://localhost:8005/cpte-wms-schedule/doc.html
|
|||
|
|
|
|||
|
|
## 服务间接口调用
|
|||
|
|
|
|||
|
|
### 服务间调用方式
|
|||
|
|
|
|||
|
|
1. **同步调用**: 使用 RestTemplate 或 WebClient
|
|||
|
|
2. **异步消息**: 使用消息队列(可选)
|
|||
|
|
|
|||
|
|
### 接口示例
|
|||
|
|
|
|||
|
|
```java
|
|||
|
|
// 调用基础服务获取物品信息
|
|||
|
|
String itemUrl = "http://localhost:8001/cpte-wms-basic/api/wms/basic/item/{id}";
|
|||
|
|
RestTemplate restTemplate = new RestTemplate();
|
|||
|
|
ItemResponse item = restTemplate.getForObject(itemUrl, ItemResponse.class, itemId);
|
|||
|
|
|
|||
|
|
// 调用库存服务查询库存
|
|||
|
|
String stockUrl = "http://localhost:8004/cpte-wms-inventory/api/wms/inventory/query";
|
|||
|
|
StockQueryDTO queryDTO = new StockQueryDTO();
|
|||
|
|
StockResponse stock = restTemplate.postForObject(stockUrl, queryDTO, StockResponse.class);
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 数据库设计
|
|||
|
|
|
|||
|
|
### 方案一:共享数据库(推荐)
|
|||
|
|
所有微服务共享同一个数据库,通过表前缀区分:
|
|||
|
|
- `wms_basic_*` - 基础服务表
|
|||
|
|
- `wms_inbound_*` - 入库服务表
|
|||
|
|
- `wms_outbound_*` - 出库服务表
|
|||
|
|
- `wms_inventory_*` - 库存服务表
|
|||
|
|
|
|||
|
|
### 方案二:独立数据库
|
|||
|
|
每个微服务使用独立的数据库,通过服务间调用或消息队列进行数据交互。
|
|||
|
|
|
|||
|
|
## 开发指南
|
|||
|
|
|
|||
|
|
### 代码迁移
|
|||
|
|
|
|||
|
|
从 `cpte-module-wms` 模块迁移代码时,请遵循以下规则:
|
|||
|
|
|
|||
|
|
1. **基础服务**: 迁移 `base/`, `agvTask/`, `hikAgv/`, `tesAgv/`, `conveyorLine/` 目录
|
|||
|
|
2. **入库服务**: 迁移 `receive/` 目录
|
|||
|
|
3. **出库服务**: 迁移 `shipping/` 目录
|
|||
|
|
4. **库存服务**: 迁移 `inventory/`, `inventoryLog/`, `count/` 目录
|
|||
|
|
|
|||
|
|
### 包命名规范
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
org.jeecg.modules.wms.basic.* # 基础服务
|
|||
|
|
org.jeecg.modules.wms.inbound.* # 入库服务
|
|||
|
|
org.jeecg.modules.wms.outbound.* # 出库服务
|
|||
|
|
org.jeecg.modules.wms.inventory.* # 库存服务
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 注意事项
|
|||
|
|
|
|||
|
|
1. **原 WMS 模块保留**: `cpte-module-wms` 模块保留作为参考,不要删除
|
|||
|
|
2. **数据一致性**: 服务间调用时注意数据一致性和事务处理
|
|||
|
|
3. **接口幂等性**: 确保关键接口支持幂等性
|
|||
|
|
4. **错误处理**: 完善服务间调用的错误处理和重试机制
|
|||
|
|
5. **日志记录**: 记录详细的服务间调用日志,便于问题排查
|
|||
|
|
|
|||
|
|
## 后续优化
|
|||
|
|
|
|||
|
|
1. **服务治理**: 引入 Nacos 作为服务注册与配置中心
|
|||
|
|
2. **API 网关**: 引入 Spring Cloud Gateway 统一入口
|
|||
|
|
3. **链路追踪**: 引入 SkyWalking 进行链路追踪
|
|||
|
|
4. **消息队列**: 引入 RabbitMQ/RocketMQ 实现异步解耦
|
|||
|
|
5. **分布式事务**: 引入 Seata 处理分布式事务
|
|||
|
|
|
|||
|
|
## 联系方式
|
|||
|
|
|
|||
|
|
如有问题,请联系开发团队。
|