# 项目概述 **本文引用的文件** - [pom.xml](file://pom.xml) - [readme.md](file://readme.md) - [AdminApplication.java](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java) - [AuthApplication.java](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java) - [GateWayApplication.java](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/GateWayApplication.java) - [application.yml(admin)](file://nflg-wms-admin/src/main/resources/application.yml) - [application.yml(gateway)](file://nflg-wms-gateway/src/main/resources/application.yml) - [Constant.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java) - [OrderState.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/OrderState.java) - [OperationType.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/OperationType.java) - [NflgException.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java) - [BaseController.java](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java) - [WmsOutPurchase.java](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsOutPurchase.java) - [WmsOutPurchaseMapper.xml](file://nflg-wms-repository/src/main/resources/mapper/WmsOutPurchaseMapper.xml) - [SyncStorageFromSAPProcessor.java](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/SyncStorageFromSAPProcessor.java) - [SapService.java](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java) - [InCostCenterBackController.java](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java) - [nflg-wms-admin/pom.xml](file://nflg-wms-admin/pom.xml) - [nflg-wms-auth/pom.xml](file://nflg-wms-auth/pom.xml) - [nflg-wms-gateway/pom.xml](file://nflg-wms-gateway/pom.xml) ## 目录 1. [引言](#引言) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构总览](#架构总览) 5. [详细组件分析](#详细组件分析) 6. [依赖分析](#依赖分析) 7. [性能考虑](#性能考虑) 8. [故障排查指南](#故障排查指南) 9. [结论](#结论) 10. [附录](#附录) ## 引言 本项目是 NFLG WMS 仓储管理系统,旨在通过微服务架构实现对仓库、物料、订单等核心业务的数字化管理。系统围绕“统一认证、网关路由、业务服务、数据持久化、定时任务、外部集成”构建,覆盖入库、出库、移库、盘点、退库、订单执行、打印与报表等典型场景,并通过 Nacos 进行服务注册与配置管理,结合 Sa-Token 实现单点登录与会话管理,借助 MyBatis-Plus 提升数据访问效率。 本项目适合初学者理解 WMS 基本概念与系统边界,也面向有经验的开发者提供技术选型、模块职责、数据模型与流程细节,帮助快速落地与扩展。 ## 项目结构 项目采用多模块聚合工程组织,父 POM 定义版本与依赖管理,子模块按职责划分:通用层、启动器、仓储实体与映射、网关、认证、管理后台、定时任务、SRM 收货、发运、质量模块等。 ```mermaid graph TB subgraph "聚合工程" ROOT["父POM
版本与依赖管理"] end subgraph "通用与基础设施" COMMON["nflg-wms-common
常量/异常/工具"] STARTER["nflg-wms-starter
基础控制器/拦截器/注解"] REPO["nflg-wms-repository
实体/映射/DAO"] end subgraph "服务网关与认证" GATEWAY["nflg-wms-gateway
Spring Cloud Gateway"] AUTH["nflg-wms-auth
统一认证中心"] end subgraph "业务服务" ADMIN["nflg-wms-admin
管理后台/业务接口"] SRM["nflg-wms-srm-receive
SRM收货"] SHIPMENT["nflg-wms-shipment
发运"] SCHEDULED["nflg-wms-scheduled
定时任务"] QMS["nflg-qms-admin
质量模块"] end ROOT --> COMMON ROOT --> STARTER ROOT --> REPO ROOT --> GATEWAY ROOT --> AUTH ROOT --> ADMIN ROOT --> SRM ROOT --> SHIPMENT ROOT --> SCHEDULED ROOT --> QMS ``` 图表来源 - [pom.xml:17-27](file://pom.xml#L17-L27) - [nflg-wms-admin/pom.xml:14-189](file://nflg-wms-admin/pom.xml#L14-L189) - [nflg-wms-auth/pom.xml:15-61](file://nflg-wms-auth/pom.xml#L15-L61) - [nflg-wms-gateway/pom.xml:15-94](file://nflg-wms-gateway/pom.xml#L15-L94) 章节来源 - [pom.xml:17-27](file://pom.xml#L17-L27) - [nflg-wms-admin/pom.xml:14-189](file://nflg-wms-admin/pom.xml#L14-L189) - [nflg-wms-auth/pom.xml:15-61](file://nflg-wms-auth/pom.xml#L15-L61) - [nflg-wms-gateway/pom.xml:15-94](file://nflg-wms-gateway/pom.xml#L15-L94) ## 核心组件 - 通用层(nflg-wms-common) - 提供系统级常量、状态枚举、异常定义与通用工具,确保各模块一致性与可复用性。 - 关键点:统一的跟踪 ID 头部、登录扩展字段、字典服务标识、超级管理员角色等。 - 启动器(nflg-wms-starter) - 封装基础控制器、全局校验、常用工具方法,降低业务重复代码。 - 示例:二维码内容生成、参数校验等。 - 仓储与映射(nflg-wms-repository) - MyBatis-Plus 实体与 Mapper XML,承载仓储业务数据模型与查询能力。 - 示例:退库-采购中心退库实体与查询映射。 - 网关(nflg-wms-gateway) - Spring Cloud Gateway + Nacos 发现,负责请求路由、负载均衡与安全策略入口。 - 认证(nflg-wms-auth) - 统一认证中心,结合 Sa-Token 实现 SSO 与会话管理。 - 管理后台(nflg-wms-admin) - 业务主服务,提供仓储、物料、订单、打印、报表等接口;集成 LDAP、邮件、PDF、二维码、MongoDB、PowerJob 等能力。 - 定时任务(nflg-wms-scheduled) - 基于 PowerJob 的分布式调度,支撑 SAP 数据同步等周期性任务。 - 其他模块 - SRM 收货、发运、质量模块作为独立服务,按需扩展。 章节来源 - [Constant.java:5-42](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java#L5-L42) - [OrderState.java:10-28](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/OrderState.java#L10-L28) - [OperationType.java:10-26](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/OperationType.java#L10-L26) - [NflgException.java:6-17](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L6-L17) - [BaseController.java:30-37](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java#L30-L37) - [WmsOutPurchase.java:26-68](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsOutPurchase.java#L26-L68) - [WmsOutPurchaseMapper.xml:5-26](file://nflg-wms-repository/src/main/resources/mapper/WmsOutPurchaseMapper.xml#L5-L26) ## 架构总览 系统采用“网关 + 微服务 + 配置中心 + 认证中心”的云原生架构。客户端请求经网关进入,由服务发现与负载均衡分发到具体业务服务;认证中心统一鉴权;配置中心集中管理环境配置;定时任务与外部系统(如 SAP)通过适配器对接。 ```mermaid graph TB CLIENT["客户端/前端/第三方系统"] subgraph "边缘与治理" GW["Spring Cloud Gateway
路由/限流/鉴权"] NACOS["Nacos
注册与配置"] AUTH["统一认证中心(Sa-Token)
SSO/会话"] end subgraph "业务服务" ADMIN["管理后台服务"] SRM["SRM收货服务"] SHIP["发运服务"] SCHED["定时任务服务"] QMS["质量服务"] end DB["数据库(PostgreSQL)"] REDIS["Redis(缓存/会话/分布式锁)"] SAP["SAP系统(外部)"] CLIENT --> GW GW --> ADMIN GW --> SRM GW --> SHIP GW --> SCHED GW --> QMS ADMIN --- NACOS SRM --- NACOS SHIP --- NACOS SCHED --- NACOS QMS --- NACOS ADMIN --- AUTH SRM --- AUTH SHIP --- AUTH SCHED --- AUTH QMS --- AUTH ADMIN --- DB ADMIN --- REDIS SRM --- DB SRM --- REDIS SHIP --- DB SHIP --- REDIS SCHED --- DB SCHED --- REDIS ADMIN -. SAP同步 .-> SAP ``` 图表来源 - [GateWayApplication.java:10-12](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/GateWayApplication.java#L10-L12) - [AuthApplication.java:11-13](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L11-L13) - [AdminApplication.java:13-17](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L13-L17) - [application.yml(gateway):10-19](file://nflg-wms-gateway/src/main/resources/application.yml#L10-L19) - [application.yml(admin):12-23](file://nflg-wms-admin/src/main/resources/application.yml#L12-L23) ## 详细组件分析 ### 网关与服务发现 - 网关应用启用服务发现与负载均衡,基于 Nacos 注册中心自动感知服务实例,实现动态路由与健康检查。 - 管理后台与认证服务均通过 Nacos 注册,网关统一对外暴露。 ```mermaid sequenceDiagram participant C as "客户端" participant GW as "Gateway" participant N as "Nacos" participant A as "Admin服务" C->>GW : 请求 /admin/... GW->>N : 查询服务实例 N-->>GW : 返回可用实例列表 GW->>A : 转发请求(带负载均衡) A-->>GW : 返回响应 GW-->>C : 统一响应 ``` 图表来源 - [GateWayApplication.java:10-12](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/GateWayApplication.java#L10-L12) - [application.yml(gateway):20-26](file://nflg-wms-gateway/src/main/resources/application.yml#L20-L26) 章节来源 - [GateWayApplication.java:10-12](file://nflg-wms-gateway/src/main/java/com/nflg/wms/gateway/GateWayApplication.java#L10-L12) - [application.yml(gateway):20-26](file://nflg-wms-gateway/src/main/resources/application.yml#L20-L26) ### 统一认证与会话 - 认证中心提供 SSO 与会话管理,管理后台在启动时初始化 Sa-Token SSO 客户端配置,实现跨系统单点登录。 - 登录扩展字段(姓名、工号、邮箱、部门、角色、类型等)贯穿系统,便于权限与审计。 ```mermaid sequenceDiagram participant U as "用户" participant A as "Admin服务" participant AS as "认证中心" participant GW as "Gateway" U->>GW : 访问受控资源 GW->>AS : 校验票据/会话 AS-->>GW : 校验通过(附带扩展信息) GW->>A : 转发并注入用户上下文 A-->>U : 返回业务结果 ``` 图表来源 - [AuthApplication.java:11-20](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L11-L20) - [AdminApplication.java:12-25](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L12-L25) - [Constant.java:11-21](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java#L11-L21) 章节来源 - [AuthApplication.java:11-20](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L11-L20) - [AdminApplication.java:12-25](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L12-L25) - [Constant.java:11-21](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java#L11-L21) ### 业务服务与数据模型 - 管理后台服务提供仓储、物料、订单、打印、报表等能力,集成 LDAP、邮件、PDF、二维码、MongoDB、PowerJob 等。 - 仓储实体与 Mapper 映射支撑退库、库存、移库等核心业务。 ```mermaid classDiagram class WmsOutPurchase { +id : Long +no : String +ebeln : String +lifnr : String +matDoc : String +docYear : String +createBy : String +createTime : LocalDateTime } class WmsOutPurchaseMapper { +search(request) : OutPurchaseVO[] } WmsOutPurchaseMapper --> WmsOutPurchase : "映射" ``` 图表来源 - [WmsOutPurchase.java:26-68](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsOutPurchase.java#L26-L68) - [WmsOutPurchaseMapper.xml:5-26](file://nflg-wms-repository/src/main/resources/mapper/WmsOutPurchaseMapper.xml#L5-L26) 章节来源 - [nflg-wms-admin/pom.xml:14-189](file://nflg-wms-admin/pom.xml#L14-L189) - [WmsOutPurchase.java:26-68](file://nflg-wms-repository/src/main/java/com/nflg/wms/repository/entity/WmsOutPurchase.java#L26-L68) - [WmsOutPurchaseMapper.xml:5-26](file://nflg-wms-repository/src/main/resources/mapper/WmsOutPurchaseMapper.xml#L5-L26) ### 外部系统集成(SAP) - 管理后台通过服务封装调用 SAP RFC 接口,支持生产订单副产品入库查询等场景。 - 定时任务处理器可按工厂、仓库、日期范围同步仓储数据,保障数据一致性。 ```mermaid sequenceDiagram participant S as "SAP系统" participant SVC as "SapService" participant PROC as "SyncStorageFromSAPProcessor" participant DB as "数据库" PROC->>SVC : 组装参数/表参 SVC->>S : 调用RFC函数模块 S-->>SVC : 返回结构化数据 SVC-->>PROC : 转换为领域对象 PROC->>DB : 写入/更新仓储数据 ``` 图表来源 - [SapService.java:67-99](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java#L67-L99) - [SyncStorageFromSAPProcessor.java:55-69](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/SyncStorageFromSAPProcessor.java#L55-L69) 章节来源 - [SapService.java:67-99](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java#L67-L99) - [SyncStorageFromSAPProcessor.java:55-69](file://nflg-wms-scheduled/src/main/java/com/nflg/wms/scheduled/processor/SyncStorageFromSAPProcessor.java#L55-L69) ### 订单与状态机 - 订单状态与操作类型通过枚举定义,保证状态流转与操作语义的一致性。 - 控制器示例展示如何根据订单状态进行业务校验与返回。 ```mermaid flowchart TD Start(["开始"]) --> LoadOrder["加载订单"] LoadOrder --> CheckState{"状态校验"} CheckState --> |未完成| Proceed["继续处理"] CheckState --> |已完成| Stop["终止并提示"] Proceed --> End(["结束"]) Stop --> End ``` 图表来源 - [OrderState.java:10-28](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/OrderState.java#L10-L28) - [InCostCenterBackController.java:167-170](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java#L167-L170) 章节来源 - [OrderState.java:10-28](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/OrderState.java#L10-L28) - [InCostCenterBackController.java:167-170](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/InCostCenterBackController.java#L167-L170) ## 依赖分析 - 技术栈与版本 - Spring Boot 3.2.4、Spring Cloud 2023.0.1、Spring Cloud Alibaba 2023.0.1.0 - Sa-Token 1.42.0(含 SSO、Reactor、JWT、Redis Jackson) - MyBatis-Plus 3.5.12 - PostgreSQL 42.7.7 - Loki 日志采集、Redisson 分布式能力、PowerJob 调度 - ZXing 二维码、iText7 PDF、Apache Commons、Hutool 工具集 - 模块间耦合 - 管理后台依赖通用层与启动器,复用常量、异常与基础能力。 - 网关与认证中心通过 Nacos 与 Sa-Token 解耦,便于横向扩展。 - 定时任务与仓储模块通过数据库交互,避免直接耦合业务服务。 ```mermaid graph LR ADMIN["管理后台"] --> COMMON["通用层"] ADMIN --> STARTER["启动器"] GATEWAY["网关"] --> NACOS["Nacos"] AUTH["认证中心"] --> NACOS ADMIN --> DB["PostgreSQL"] ADMIN --> REDIS["Redis"] SCHED["定时任务"] --> DB SCHED --> REDIS ``` 图表来源 - [pom.xml:54-192](file://pom.xml#L54-L192) - [nflg-wms-admin/pom.xml:14-189](file://nflg-wms-admin/pom.xml#L14-L189) - [nflg-wms-gateway/pom.xml:15-94](file://nflg-wms-gateway/pom.xml#L15-L94) - [nflg-wms-auth/pom.xml:15-61](file://nflg-wms-auth/pom.xml#L15-L61) 章节来源 - [pom.xml:54-192](file://pom.xml#L54-L192) - [nflg-wms-admin/pom.xml:14-189](file://nflg-wms-admin/pom.xml#L14-L189) - [nflg-wms-gateway/pom.xml:15-94](file://nflg-wms-gateway/pom.xml#L15-L94) - [nflg-wms-auth/pom.xml:15-61](file://nflg-wms-auth/pom.xml#L15-L61) ## 性能考虑 - 服务发现与负载均衡:网关启用负载均衡,结合 Nacos 实现实例弹性伸缩与故障隔离。 - 缓存与会话:Redisson 提供分布式锁与缓存能力,Sa-Token 结合 Redis 存储会话,降低数据库压力。 - 数据访问:MyBatis-Plus 减少 SQL 开销,合理使用分页与索引提升查询性能。 - 日志与可观测:Loki 日志采集、Actuator 指标暴露、OpenTelemetry 链路追踪,便于问题定位与容量规划。 - 文件与大对象:上传与导出限制在配置中设置,避免内存溢出;PDF 与二维码生成建议异步化。 ## 故障排查指南 - 认证与会话 - 若出现登录后无用户上下文,检查认证中心日志与 Sa-Token 配置,确认票据有效与扩展字段注入。 - 参考:[AuthApplication.java:18-20](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L18-L20)、[AdminApplication.java:23-24](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L23-L24) - 网关与服务发现 - 网关无法路由到服务,检查 Nacos 地址、命名空间与组配置,确认服务已注册且健康。 - 参考:[application.yml(gateway):10-19](file://nflg-wms-gateway/src/main/resources/application.yml#L10-L19) - 数据访问与异常 - 使用通用异常类与状态码统一错误输出,便于前端与监控系统识别。 - 参考:[NflgException.java:6-17](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L6-L17) - 外部系统集成 - SAP 调用失败时,检查参数组装与表参构造,关注日志中的 RFC 返回结构。 - 参考:[SapService.java:67-99](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java#L67-L99) 章节来源 - [AuthApplication.java:18-20](file://nflg-wms-auth/src/main/java/com/nflg/wms/auth/AuthApplication.java#L18-L20) - [AdminApplication.java:23-24](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L23-L24) - [application.yml(gateway):10-19](file://nflg-wms-gateway/src/main/resources/application.yml#L10-L19) - [NflgException.java:6-17](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L6-L17) - [SapService.java:67-99](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/service/SapService.java#L67-L99) ## 结论 NFLG WMS 以微服务为核心,结合 Nacos、Gateway、Sa-Token、MyBatis-Plus 等技术栈,构建了高内聚、低耦合、可扩展的仓储管理体系。通过统一认证、集中配置与外部系统集成,系统能够稳定支撑入库、出库、移库、盘点、退库、订单执行等核心业务,并为后续扩展与优化奠定坚实基础。 ## 附录 - 部署拓扑建议 - 基础设施:Nacos、Redis、PostgreSQL、SAP - 服务编排:Gateway、Auth、Admin、SRM、Shipment、Scheduled、QMS - 监控与日志:Prometheus/Grafana、Loki、OpenTelemetry - 应用场景与收益 - 场景:多工厂、多仓库、多订单类型的协同作业;跨系统数据同步与一致性保障。 - 收益:提升出入库效率、降低人工差错、增强可视化与审计能力、加速报表与打印流程。 - 实施建议 - 分环境管理:dev/sit/prod,配置按环境隔离。 - 安全加固:启用 HTTPS、最小权限、敏感配置加密。 - 性能优化:热点数据缓存、慢查询分析、连接池与线程池调优。 - 可观测性:完善链路追踪、指标与告警,建立故障演练机制。 章节来源 - [readme.md:1-10](file://readme.md#L1-L10)