wms/.qoder/repowiki/zh/content/项目概述.md

404 lines
19 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 项目概述
<cite>
**本文引用的文件**
- [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.ymladmin](file://nflg-wms-admin/src/main/resources/application.yml)
- [application.ymlgateway](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)
</cite>
## 目录
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<br/>版本与依赖管理"]
end
subgraph "通用与基础设施"
COMMON["nflg-wms-common<br/>常量/异常/工具"]
STARTER["nflg-wms-starter<br/>基础控制器/拦截器/注解"]
REPO["nflg-wms-repository<br/>实体/映射/DAO"]
end
subgraph "服务网关与认证"
GATEWAY["nflg-wms-gateway<br/>Spring Cloud Gateway"]
AUTH["nflg-wms-auth<br/>统一认证中心"]
end
subgraph "业务服务"
ADMIN["nflg-wms-admin<br/>管理后台/业务接口"]
SRM["nflg-wms-srm-receive<br/>SRM收货"]
SHIPMENT["nflg-wms-shipment<br/>发运"]
SCHEDULED["nflg-wms-scheduled<br/>定时任务"]
QMS["nflg-qms-admin<br/>质量模块"]
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<br/>路由/限流/鉴权"]
NACOS["Nacos<br/>注册与配置"]
AUTH["统一认证中心(Sa-Token)<br/>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.ymlgateway:10-19](file://nflg-wms-gateway/src/main/resources/application.yml#L10-L19)
- [application.ymladmin: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.ymlgateway: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.ymlgateway: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.ymlgateway: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.ymlgateway: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)