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

15 KiB
Raw Permalink Blame History

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 数据库表归属

基础服务表

wms_basic_item           -- 物品信息
wms_basic_item_key       -- 物品关键信息
wms_basic_area           -- 区域信息
wms_basic_point          -- 点位信息
wms_basic_stock          -- 库存(基础数据)

调度服务表

wms_agv_task             -- AGV 任务
wms_hik_agv              -- 海康 AGV
wms_tes_agv              -- 特斯 AGV
wms_conveyor_line        -- 输送线

入库服务表

wms_inbound_asn          -- ASN 单
wms_inbound_asn_detail   -- ASN 明细
wms_inbound_receive      -- 收货记录

出库服务表

wms_outbound_pick        -- 拣货单
wms_outbound_pick_detail -- 拣货明细
wms_outbound_task        -- 拣货任务

库存服务表

wms_inventory            -- 库存
wms_inventory_log        -- 库存流水
wms_count_plan           -- 盘点计划
wms_count_detail         -- 盘点明细

4.2 数据一致性方案

方案一:本地事务(推荐初期)

  • 所有服务共享数据库
  • 使用本地事务保证一致性
  • 优点:简单、可靠
  • 缺点:数据库耦合

方案二:分布式事务(推荐后期)

  • 每个服务独立数据库
  • 使用 Seata 管理分布式事务
  • 优点:服务解耦
  • 缺点:复杂度高

方案三:最终一致性

  • 使用消息队列
  • 补偿机制保证最终一致性
  • 优点:高性能、高可用
  • 缺点:实现复杂

5. 接口设计

5.1 接口规范

统一响应格式

{
    "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. 开发计划

阶段一:架构搭建(已完成)

  • 设计微服务架构
  • 创建项目结构
  • 配置 pom.xml
  • 创建配置文件
  • 创建启动类

阶段二:代码迁移

  • 迁移基础服务代码
  • 迁移入库服务代码
  • 迁移出库服务代码
  • 迁移库存服务代码

阶段三:服务间接口

  • 定义服务间接口
  • 实现服务间调用
  • 测试接口连通性

阶段四:集成测试

  • 单元测试
  • 集成测试
  • 性能测试

阶段五:部署上线

  • 编写部署文档
  • 配置生产环境
  • 灰度发布
  • 正式上线

9. 风险管理

技术风险

  1. 服务间调用延迟: 优化网络调用,使用连接池
  2. 数据不一致: 实现补偿机制,保证最终一致性
  3. 单点故障: 服务集群部署,使用负载均衡

业务风险

  1. 业务中断: 灰度发布,逐步迁移流量
  2. 数据丢失: 完善备份机制,定期演练恢复

10. 总结

本架构设计将 WMS 系统拆分为四个独立的微服务,实现了:

  • 业务解耦,职责清晰
  • 独立部署,灵活扩展
  • 保留原代码,便于参考
  • 平滑迁移,降低风险

后续可根据业务发展逐步引入服务治理、API 网关、链路追踪等能力。