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