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 处理分布式事务
|
||
|
||
## 联系方式
|
||
|
||
如有问题,请联系开发团队。
|