wms/.qoder/repowiki/zh/content/开发指南/开发指南.md

435 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)
- [lombok.config](file://lombok.config)
- [nflg-wms-common/pom.xml](file://nflg-wms-common/pom.xml)
- [nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java)
- [nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java)
- [nflg-wms-common/src/main/java/com/nflg/wms/common/util/BeanUtil.java](file://nflg-wms-common/src/main/java/com/nflg/wms/common/util/BeanUtil.java)
- [nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java)
- [nflg-wms-admin/pom.xml](file://nflg-wms-admin/pom.xml)
- [nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java)
- [nflg-wms-admin/src/main/resources/application.yml](file://nflg-wms-admin/src/main/resources/application.yml)
- [nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TestController.java](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TestController.java)
- [nflg-wms-repository/pom.xml](file://nflg-wms-repository/pom.xml)
- [nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java](file://nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java)
</cite>
## 目录
1. [简介](#简介)
2. [项目结构](#项目结构)
3. [核心组件](#核心组件)
4. [架构总览](#架构总览)
5. [详细组件分析](#详细组件分析)
6. [依赖分析](#依赖分析)
7. [性能考虑](#性能考虑)
8. [故障排查指南](#故障排查指南)
9. [结论](#结论)
10. [附录](#附录)
## 简介
本指南面向新加入的开发者系统性介绍NFLG WMS系统的开发环境搭建、代码规范、项目结构、编码与注释规范、代码生成与模板使用、单元与集成测试策略、调试与问题定位方法、Git工作流与代码评审流程、第三方库集成与插件开发方法并提供学习路径与常见问题解决方案。文档中的所有技术细节均以仓库现有文件为依据。
## 项目结构
本项目采用多模块Maven聚合工程组织核心模块包括通用模块、基础启动器、数据访问层、网关、各业务服务如管理后台、认证、定时任务、SRM收货、运输等以及一个独立的QMS管理端。模块间通过公共依赖与版本管理统一约束。
- 聚合根顶层pom.xml定义了模块清单、Java版本、编码、依赖与插件管理。
- 公共模块nflg-wms-common 提供常量、异常、工具类与通用DTO/QO/VO等。
- 基础启动器nflg-wms-starter 提供统一控制器基类、拦截器、切面与配置骨架。
- 数据访问层nflg-wms-repository 封装MyBatis-Plus与数据库交互内置代码生成器测试用例。
- 业务服务nflg-wms-admin、nflg-wms-auth、nflg-wms-scheduled、nflg-wms-srm-receive、nflg-wms-shipment 等。
- 网关nflg-wms-gateway。
- 独立管理端nflg-qms-admin。
```mermaid
graph TB
Root["聚合根<br/>nflg-wms(pom.xml)"]
Common["公共模块<br/>nflg-wms-common"]
Starter["基础启动器<br/>nflg-wms-starter"]
Repo["数据访问层<br/>nflg-wms-repository"]
Gateway["网关<br/>nflg-wms-gateway"]
Admin["管理后台<br/>nflg-wms-admin"]
Auth["认证服务<br/>nflg-wms-auth"]
Scheduled["定时任务<br/>nflg-wms-scheduled"]
Srm["SRM收货<br/>nflg-wms-srm-receive"]
Shipment["运输模块<br/>nflg-wms-shipment"]
Qms["QMS管理端<br/>nflg-qms-admin"]
Root --> Common
Root --> Starter
Root --> Repo
Root --> Gateway
Root --> Admin
Root --> Auth
Root --> Scheduled
Root --> Srm
Root --> Shipment
Root --> Qms
Admin --> Common
Admin --> Starter
Admin --> Repo
Auth --> Common
Auth --> Starter
Scheduled --> Common
Srm --> Common
Shipment --> Common
Gateway --> Common
```
图表来源
- [pom.xml:17-27](file://pom.xml#L17-L27)
- [nflg-wms-admin/pom.xml:14-18](file://nflg-wms-admin/pom.xml#L14-L18)
- [nflg-wms-repository/pom.xml:14-18](file://nflg-wms-repository/pom.xml#L14-L18)
章节来源
- [pom.xml:1-260](file://pom.xml#L1-L260)
## 核心组件
- 通用常量与异常
- 常量集中定义在公共模块中,便于跨模块共享。
- 统一业务异常类型,配合状态码与消息返回。
- 工具类
- BeanUtil提供对象与JSON、Map之间的转换能力封装Jackson与Hutool。
- 基础控制器
- BaseController提供二维码内容生成等通用逻辑作为各业务Controller的父类。
章节来源
- [nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java:1-43](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java#L1-L43)
- [nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java:1-18](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L1-L18)
- [nflg-wms-common/src/main/java/com/nflg/wms/common/util/BeanUtil.java:1-37](file://nflg-wms-common/src/main/java/com/nflg/wms/common/util/BeanUtil.java#L1-L37)
- [nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java:1-77](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java#L1-L77)
## 架构总览
系统基于Spring Boot 3与Spring Cloud生态采用Nacos作为配置与注册中心Actuator暴露监控指标支持链路追踪与健康检查。管理后台服务负责业务编排与对外接口数据访问层通过MyBatis-Plus与PostgreSQL交互部分模块集成Redisson、PowerJob、Loki日志采集等。
```mermaid
graph TB
subgraph "客户端"
Browser["浏览器/移动端"]
end
subgraph "边缘与网关"
Gateway["Spring Cloud Gateway"]
end
subgraph "服务发现与配置"
Nacos["Nacos(配置/注册)"]
end
subgraph "业务服务"
Admin["管理后台服务"]
Auth["认证服务"]
Scheduled["定时任务服务"]
Srm["SRM收货服务"]
Shipment["运输服务"]
end
subgraph "基础设施"
DB["PostgreSQL"]
Redis["Redis"]
Loki["Loki 日志"]
Act["Spring Boot Actuator"]
end
Browser --> Gateway
Gateway --> Admin
Gateway --> Auth
Admin --> DB
Auth --> DB
Scheduled --> DB
Srm --> DB
Shipment --> DB
Admin --> Redis
Auth --> Redis
Admin --> Loki
Auth --> Loki
Admin --> Act
Auth --> Act
Admin --> Nacos
Auth --> Nacos
Scheduled --> Nacos
Srm --> Nacos
Shipment --> Nacos
```
图表来源
- [nflg-wms-admin/src/main/resources/application.yml:1-48](file://nflg-wms-admin/src/main/resources/application.yml#L1-L48)
- [nflg-wms-admin/pom.xml:14-189](file://nflg-wms-admin/pom.xml#L14-L189)
- [pom.xml:54-193](file://pom.xml#L54-L193)
## 详细组件分析
### 通用模块nflg-wms-common
- 职责
- 定义系统级常量、通用异常类型、通用工具类与DTO/QO/VO集合。
- 关键点
- 常量集中管理,便于统一维护与跨模块共享。
- 异常体系以统一状态码与消息返回,便于前端与调用方处理。
- 工具类封装常用转换逻辑,降低重复代码。
```mermaid
classDiagram
class Constant {
+String DEFAULT_LANGUAGE_CODE
+String TRACE_ID_HEADER
+String TRACE_ID
+... 多个常量
}
class NflgException {
+STATE state
+String msg
+NflgException(state, msg)
}
class BeanUtil {
+copy(source, clazz) T
+toJson(source) String
+toBean(map, clazz) T
+toMap(source) Map
}
```
图表来源
- [nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java:1-43](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java#L1-L43)
- [nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java:1-18](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L1-L18)
- [nflg-wms-common/src/main/java/com/nflg/wms/common/util/BeanUtil.java:1-37](file://nflg-wms-common/src/main/java/com/nflg/wms/common/util/BeanUtil.java#L1-L37)
章节来源
- [nflg-wms-common/pom.xml:1-84](file://nflg-wms-common/pom.xml#L1-L84)
- [nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java:1-43](file://nflg-wms-common/src/main/java/com/nflg/wms/common/constant/Constant.java#L1-L43)
- [nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java:1-18](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L1-L18)
- [nflg-wms-common/src/main/java/com/nflg/wms/common/util/BeanUtil.java:1-37](file://nflg-wms-common/src/main/java/com/nflg/wms/common/util/BeanUtil.java#L1-L37)
### 基础启动器nflg-wms-starter
- 职责
- 提供统一的控制器基类BaseController封装通用逻辑如二维码内容生成
- 关键点
- 使用Lombok简化样板代码。
- 作为其他服务的公共依赖,确保行为一致性。
```mermaid
classDiagram
class BaseController {
+generateQRContent(order) String
}
```
图表来源
- [nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java:1-77](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java#L1-L77)
章节来源
- [nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java:1-77](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java#L1-L77)
### 管理后台服务nflg-wms-admin
- 职责
- 对外提供管理后台接口集成LDAP、邮件、PDF生成、二维码、MongoDB、SAP JCo等能力。
- 关键点
- 应用入口启用组件扫描、调度与重试。
- 配置文件启用Nacos配置导入、Actuator端点、链路追踪采样。
- 包含测试控制器,演示异常抛出与序列号生成等场景。
```mermaid
sequenceDiagram
participant Client as "客户端"
participant Admin as "AdminApplication"
participant Ctl as "TestController"
participant Svc as "相关服务"
Client->>Admin : 启动应用
Admin->>Admin : 组件扫描/调度/重试启用
Client->>Ctl : GET /test/add
Ctl->>Svc : 调用业务服务
Ctl-->>Client : 返回结果
Client->>Ctl : GET /test/businessError
Ctl-->>Client : 抛出业务异常
```
图表来源
- [nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java:1-27](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L1-L27)
- [nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TestController.java:1-87](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TestController.java#L1-L87)
章节来源
- [nflg-wms-admin/pom.xml:1-281](file://nflg-wms-admin/pom.xml#L1-L281)
- [nflg-wms-admin/src/main/resources/application.yml:1-48](file://nflg-wms-admin/src/main/resources/application.yml#L1-L48)
- [nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java:1-27](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/AdminApplication.java#L1-L27)
- [nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TestController.java:1-87](file://nflg-wms-admin/src/main/java/com/nflg/wms/admin/controller/TestController.java#L1-L87)
### 数据访问层nflg-wms-repository
- 职责
- 封装数据库访问基于MyBatis-Plus与PostgreSQL提供实体、Mapper、Service生成模板与测试。
- 关键点
- 内置代码生成器测试用例演示如何生成Entity、Mapper、Service与XML。
- 支持Freemarker模板引擎与Lombok链式模型。
```mermaid
flowchart TD
Start(["执行代码生成测试"]) --> JDBC["连接PostgreSQL"]
JDBC --> Include["选择表集"]
Include --> Builder["配置实体/包结构/模板引擎"]
Builder --> Override["启用覆盖/链式模型/Lombok"]
Override --> Execute["执行生成"]
Execute --> End(["生成完成"])
```
图表来源
- [nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java:1-46](file://nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java#L1-L46)
章节来源
- [nflg-wms-repository/pom.xml:1-76](file://nflg-wms-repository/pom.xml#L1-L76)
- [nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java:1-46](file://nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java#L1-L46)
## 依赖分析
- 版本与依赖管理
- 顶层pom集中管理Spring Boot、Spring Cloud、Spring Cloud Alibaba、MyBatis-Plus、Sa-Token、PostgreSQL、MinIO、Loki、Redisson、PowerJob、ZXing等版本。
- 模块依赖
- 管理后台依赖公共模块、启动器与Web、LDAP、邮件、PDF、MongoDB、EasyExcel、Redisson、Actuator、OpenTelemetry等。
- 数据访问层依赖公共模块与MyBatis-Plus、PostgreSQL、Redisson、测试依赖。
```mermaid
graph LR
POM["顶层pom.xml"]
Common["nflg-wms-common"]
Starter["nflg-wms-starter"]
Repo["nflg-wms-repository"]
Admin["nflg-wms-admin"]
Auth["nflg-wms-auth"]
Gateway["nflg-wms-gateway"]
POM --> Common
POM --> Starter
POM --> Repo
POM --> Admin
POM --> Auth
POM --> Gateway
Admin --> Common
Admin --> Starter
Admin --> Repo
```
图表来源
- [pom.xml:54-193](file://pom.xml#L54-L193)
- [nflg-wms-admin/pom.xml:14-18](file://nflg-wms-admin/pom.xml#L14-L18)
- [nflg-wms-repository/pom.xml:14-18](file://nflg-wms-repository/pom.xml#L14-L18)
章节来源
- [pom.xml:1-260](file://pom.xml#L1-L260)
- [nflg-wms-admin/pom.xml:1-281](file://nflg-wms-admin/pom.xml#L1-L281)
- [nflg-wms-repository/pom.xml:1-76](file://nflg-wms-repository/pom.xml#L1-L76)
## 性能考虑
- 链路追踪与指标
- 启用Actuator与OpenTelemetry导出建议在生产环境合理设置采样率避免高噪声。
- 缓存与分布式锁
- Redisson提供分布式能力建议对热点查询与并发写入场景进行缓存与互斥控制。
- 数据库与分页
- MyBatis-Plus分页与SQL解析器提升查询效率建议结合索引与查询条件优化。
- 日志与可观测性
- Loki日志采集用于集中化日志检索建议按环境配置日志级别与过滤规则。
## 故障排查指南
- 异常处理
- 统一使用NflgException返回业务状态与消息便于前端与调用方识别与处理。
- 日志分析
- 应用日志与Loki结合按traceId快速定位请求链路。
- 常见问题
- PDF生成与标签打印依赖wkhtmltoimage需按readme安装对应依赖。
- SAP JCo依赖需放置在指定目录确保运行时可加载。
章节来源
- [nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java:1-18](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L1-L18)
- [readme.md:1-10](file://readme.md#L1-L10)
## 结论
本指南从环境搭建、项目结构、编码规范、代码生成、测试策略、调试与运维到Git工作流与第三方集成进行了系统阐述。建议新开发者先从公共模块与启动器入手理解通用常量、异常与工具类的使用方式再逐步深入到具体业务模块与数据访问层。
## 附录
### 开发环境搭建与IDE配置
- JDK与Maven
- Java版本17Maven版本3.6+。
- IDE推荐
- IntelliJ IDEA启用Lombok插件与Annotation Processing配置Maven自动导入与编译器参数。
- 依赖安装
- 按readme安装wkhtmltoimage满足PDF与标签打印需求。
- Nacos与数据库
- 确保Nacos地址与命名空间配置正确数据库使用PostgreSQL账号密码在代码生成测试中可见。
章节来源
- [pom.xml:29-35](file://pom.xml#L29-L35)
- [readme.md:1-10](file://readme.md#L1-L10)
### 代码规范与注释规范
- 包命名约定
- 采用反向域名+模块+子域的层级结构如com.nflg.wms.admin.controller。
- 类设计原则
- 使用Lombok减少样板代码异常类统一继承NflgException工具类集中于common模块。
- 注释规范
- 控制器与方法添加简要注释,说明用途与关键参数;复杂逻辑补充流程说明。
章节来源
- [nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java:1-18](file://nflg-wms-common/src/main/java/com/nflg/wms/common/exception/NflgException.java#L1-L18)
- [nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java:1-77](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java#L1-L77)
### 代码生成与模板使用
- 生成范围
- 通过代码生成器测试用例选择表集生成Entity、Mapper、Service与XML。
- 模板引擎
- 使用Freemarker模板引擎支持链式模型与Lombok注解。
- 输出位置
- 实体、Mapper、Service与XML分别输出到指定包路径便于后续扩展。
章节来源
- [nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java:1-46](file://nflg-wms-repository/src/test/java/com/nflg/wms/repository/CodeGeneratorTest.java#L1-L46)
### 单元测试与集成测试策略
- 测试框架
- 使用JUnit JupiterSurefire插件配置包含所有测试类。
- 测试覆盖率
- 建议在CI中引入JaCoCo或类似工具统计覆盖率目标不低于80%。
- 集成测试
- 通过Deploy*Test类在不同环境dev/sit/prod验证部署与配置。
章节来源
- [pom.xml:246-254](file://pom.xml#L246-L254)
- [nflg-wms-admin/pom.xml:38-41](file://nflg-wms-admin/pom.xml#L38-L41)
### 调试技巧与问题定位
- 日志
- 使用SLF4J与Loki日志采集按环境调整日志级别结合traceId快速定位。
- 性能分析
- 启用Actuator与OpenTelemetry导出指标与链路数据定位慢调用与异常。
- 常见问题
- PDF生成失败确认wkhtmltoimage安装与路径SAP JCo报错检查JAR路径与权限。
章节来源
- [nflg-wms-admin/src/main/resources/application.yml:28-48](file://nflg-wms-admin/src/main/resources/application.yml#L28-L48)
- [readme.md:1-10](file://readme.md#L1-L10)
### Git工作流与代码审查流程
- 分支管理
- 主干main受保护特性分支feature/*修复分支fix/*发布分支release/*。
- 提交规范
- 类型feat/fix/docs/style/refactor/test/build/ci格式type(scope): subject。
- 代码审查
- PR需至少一名Reviewer通过合并前确保通过CI与测试。
### 第三方库集成指南与插件开发方法
- 常用库
- Sa-Token认证与会话MyBatis-PlusORMRedisson分布式能力PowerJob定时任务Loki日志采集OpenTelemetry链路追踪。
- 插件开发
- 在starter模块扩展通用能力如拦截器、切面、注解由各业务模块复用。
章节来源
- [pom.xml:54-193](file://pom.xml#L54-L193)
- [nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java:1-77](file://nflg-wms-starter/src/main/java/com/nflg/wms/starter/BaseController.java#L1-L77)
### 学习路径与技能要求
- 必备技能
- Java 17、Spring Boot/Spring Cloud、MyBatis-Plus、PostgreSQL、Nacos、Docker/Kubernetes可选
- 进阶方向
- 链路追踪与可观测性、分布式缓存与限流、安全与认证、自动化测试与CI/CD。
### 常见开发问题与最佳实践
- 问题PDF生成失败
- 解决安装wkhtmltoimage并确保系统可用。
- 问题SAP JCo无法加载
- 解决将JAR放入lib目录并在构建阶段复制到输出目录。
- 最佳实践:统一异常处理、日志分级、参数校验、幂等与重试策略。
章节来源
- [readme.md:1-10](file://readme.md#L1-L10)
- [nflg-wms-admin/pom.xml:115-121](file://nflg-wms-admin/pom.xml#L115-L121)