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

210 lines
5.8 KiB
Markdown
Raw Normal View History

2026-03-06 15:19:25 +08:00
# 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 处理分布式事务
## 联系方式
如有问题,请联系开发团队。