暂存提交
This commit is contained in:
@@ -0,0 +1,288 @@
|
||||
# 头程项目目录结构与服务说明
|
||||
|
||||
## 1. 项目定位
|
||||
|
||||
`baiyue-firstleg` 是国内头程业务后端仓库,采用 Maven 多模块单仓结构。仓库内包含 7 个公共模块和 11 个可独立启动、构建、制作镜像的微服务。
|
||||
|
||||
当前技术基线:
|
||||
|
||||
- Java 17、Spring Boot 3.2.9
|
||||
- Spring Cloud 2023.0.3、Spring Cloud Alibaba 2023.0.3.2
|
||||
- Nacos 注册与配置中心
|
||||
- Spring Cloud Gateway 统一入口
|
||||
- MyBatis-Plus、MySQL
|
||||
- Redis 登录会话校验
|
||||
- Spring Security、JWT
|
||||
- SpringDoc OpenAPI / Swagger
|
||||
- GitLab、Jenkins、Docker Compose
|
||||
|
||||
本仓库只保存头程代码。尾程业务位于独立 Git 仓库,不允许把尾程源码、数据库或配置重新放回本仓库。
|
||||
|
||||
## 2. 根目录结构
|
||||
|
||||
```text
|
||||
baiyue-firstleg/
|
||||
├─ platform-bom/ # 公共依赖版本清单
|
||||
├─ common-core/ # 统一返回、错误码、基础实体、MyBatis-Plus
|
||||
├─ common-web/ # Web 通用能力、全局异常、请求链路标识
|
||||
├─ common-security/ # JWT、Redis 会话、鉴权异常处理
|
||||
├─ common-openapi/ # Swagger / OpenAPI 自动配置
|
||||
├─ common-audit/ # 业务审计注解、切面、脱敏和发送能力
|
||||
├─ common-event-contract/ # 国内外跨区域事件统一契约
|
||||
│
|
||||
├─ gateway/ # 统一 API 网关
|
||||
├─ auth/ # 统一登录与账号凭据
|
||||
├─ iam/ # 租户、成员、角色、权限、企业审核
|
||||
├─ order/ # 头程订单中心
|
||||
├─ firstleg/ # 头程履约任务与分配
|
||||
├─ warehouse/ # 仓库与往来单位主数据
|
||||
├─ file/ # 文件中心
|
||||
├─ print/ # 打印中心
|
||||
├─ audit-service/ # 审计日志中心
|
||||
├─ integration-service/ # 第三方平台集成适配
|
||||
├─ event-bridge-service/ # 国内外跨区域事件接收桥
|
||||
│
|
||||
├─ config/ # Nacos 配置模板
|
||||
├─ deploy/ # Jenkins、Docker 使用的部署文件
|
||||
├─ docs/ # 架构、接口、测试和部署文档
|
||||
├─ scripts/ # 本地启动、配置发布和回归脚本
|
||||
├─ reports/ # 回归测试结果,不属于业务源码
|
||||
│
|
||||
├─ pom.xml # Maven 聚合父工程
|
||||
├─ Jenkinsfile # 多服务增量构建和部署流水线
|
||||
├─ .gitlab-ci.yml # GitLab 校验与打包流水线
|
||||
├─ docker-compose-infra.yml # 本地基础设施编排
|
||||
├─ .gitignore # Git 忽略规则
|
||||
├─ .gitattributes # Git 文本和换行规则
|
||||
└─ README.md # 仓库入口说明
|
||||
```
|
||||
|
||||
`target/`、`.idea/`、运行日志、上传文件和本地 `.env` 都不是源码,不应提交到 Git。
|
||||
|
||||
## 3. 公共模块说明
|
||||
|
||||
| 文件夹 | Maven artifactId | 主要职责 | 使用边界 |
|
||||
| --- | --- | --- | --- |
|
||||
| `platform-bom` | `baiyue-platform-bom` | 集中管理公共组件版本 | 只管理版本,不放业务代码 |
|
||||
| `common-core` | `baiyue-common-core` | `ApiResponse`、`PageResult`、`ResultCode`、`BizException`、基础实体和 MyBatis-Plus 配置 | 不调用具体业务服务 |
|
||||
| `common-web` | `baiyue-common-web` | 统一异常处理、请求 ID 和链路上下文 | 不存放具体 Controller |
|
||||
| `common-security` | `baiyue-common-security` | JWT 解码、认证过滤器、Redis Token 会话校验、401/403 JSON 返回 | 负责通用鉴权,不负责角色业务维护 |
|
||||
| `common-openapi` | `baiyue-common-openapi` | SpringDoc 分组和 Swagger 自动配置 | 只提供文档能力 |
|
||||
| `common-audit` | `baiyue-common-audit` | `@BusinessAudit`、审计切面、敏感数据脱敏、HTTP/日志审计输出 | 审计持久化由 `audit-service` 负责 |
|
||||
| `common-event-contract` | `common-event-contract` | 事件信封、事件类型、区域编码、幂等标识、Payload 哈希和校验 | 只放稳定跨区域契约,不放头程领域实体 |
|
||||
|
||||
公共模块只能提供技术能力和稳定契约。订单、仓库、权限等业务实体不能放入公共模块,否则后续服务会再次耦合成单体。
|
||||
|
||||
## 4. 可运行服务总览
|
||||
|
||||
| 文件夹 | 注册服务名 | 端口 | 数据库 | 当前职责与实现情况 |
|
||||
| --- | --- | ---: | --- | --- |
|
||||
| `gateway` | `gateway` | 9000 | 无 | 统一路由、CORS、JWT/Redis 会话校验、商户端与平台端访问域隔离、Swagger 聚合 |
|
||||
| `auth` | `auth-service` | 9100 | `baiyue_auth` | 登录、刷新 Token、退出、商户注册、账号密码和账号内部管理 |
|
||||
| `iam` | `iam-service` | 9201 | `baiyue_iam` | 租户、企业资料、企业审核、成员、角色、权限、按钮权限、个人资料和授权快照 |
|
||||
| `firstleg` | `firstleg-service` | 9202 | `baiyue_firstleg` | 履约任务、操作分配和分配历史;不是订单主数据服务 |
|
||||
| `order` | `order-service` | 9204 | `baiyue_order` | 订单草稿、编辑、提交、详情、状态历史、货物、往来单位快照、内部备注和 Outbox |
|
||||
| `warehouse` | `warehouse-service` | 9205 | `baiyue_warehouse` | 仓库、仓库地址、服务能力、启停校验,以及往来单位查询;往来单位不单独拆服务 |
|
||||
| `file` | `file-service` | 9206 | `baiyue_file` | 文件存储与鉴权;当前主要实现企业资质、营业执照上传和预览 |
|
||||
| `print` | `print-service` | 9207 | `baiyue_print` | 打印中心边界已经建立;当前主要是服务骨架、健康检查和数据库结构,打印模板与任务仍需继续完善 |
|
||||
| `integration-service` | `integration-service` | 9210 | 无 | 百度 OCR、Amazon SP-API 等第三方适配器和启停状态;默认关闭外部调用 |
|
||||
| `event-bridge-service` | `event-bridge-service` | 9300 | `baiyue_event_bridge` | 国内外事件接收、签名/内部令牌保护、幂等 Inbox 和接收结果 |
|
||||
| `audit-service` | `audit-service` | 9700 | `baiyue_audit` | 接收公共审计事件并持久化;当前配置默认关闭业务审计发送,可按环境开启 |
|
||||
|
||||
MySQL、Redis、Nacos 是外部基础设施,不属于上述 11 个业务服务,也不应打包进业务镜像。
|
||||
|
||||
## 5. 各服务文件夹说明
|
||||
|
||||
### 5.1 `gateway/`:统一入口
|
||||
|
||||
主要内容:
|
||||
|
||||
- `config/`:网关安全、CORS、访问域规则和 Redis 会话过滤
|
||||
- `filter/`:可信身份请求头处理
|
||||
- `application.yml`:本地默认路由与安全配置
|
||||
- `application-cn.yml`:国内环境路由和 Swagger 聚合配置
|
||||
|
||||
前端只应访问 Gateway,不应直接暴露各业务服务端口。网关负责入口认证和路由,业务服务仍需执行租户、数据范围和按钮权限检查。
|
||||
|
||||
### 5.2 `auth/`:统一登录与账号凭据
|
||||
|
||||
主要内容:
|
||||
|
||||
- `controller/AuthController`:登录、刷新 Token、退出、注册入口
|
||||
- `controller/InternalAccountController`:IAM 调用的账号管理接口
|
||||
- `service/AuthService`:认证和 Token 生命周期
|
||||
- `service/AccountManagementService`:密码修改、密码重置和账号状态处理
|
||||
- `service/MerchantRegistrationService`:商户注册协作
|
||||
- `client/`:向 IAM 获取授权快照和企业注册结果
|
||||
- `resources/db/`:账号和刷新 Token 表结构、一期初始化账号
|
||||
|
||||
密码散列、登录失败锁定和刷新 Token 属于 Auth。成员资料、角色和权限属于 IAM,不能放入 Auth。
|
||||
|
||||
### 5.3 `iam/`:租户、成员和权限中心
|
||||
|
||||
主要内容:
|
||||
|
||||
- `MerchantTenantController`:商户端企业、成员相关接口
|
||||
- `PlatformTenantController`:平台端企业审核和管理接口
|
||||
- `ProfileResourceController`:个人资料、企业资料和资质资源
|
||||
- `RbacController`:角色、权限资源、启停和角色授权
|
||||
- `InternalAuthorizationController`:向 Auth/其他服务返回权限快照
|
||||
- `entity/`:租户、用户、成员关系、角色、权限、数据范围、企业地址和资质审核
|
||||
- `resources/db/`:IAM 主结构及一期成员、角色、权限、企业入驻扩展脚本
|
||||
|
||||
IAM 以 `tenant_id` 作为核心隔离维度,同时维护两套访问域:商户端和平台后台端。按钮权限通过 permission code / permissionIds 管理,不能只依赖前端隐藏按钮。
|
||||
|
||||
### 5.4 `order/`:订单中心
|
||||
|
||||
主要内容:
|
||||
|
||||
- `MerchantFirstLegOrderController`:商户端订单草稿、编辑、提交和查询
|
||||
- `PlatformFirstLegOrderController`:平台端订单查询和内部处理入口
|
||||
- `OrderApplicationService`:订单业务编排和状态转换
|
||||
- `OrderEligibilityGuard`:企业审核资格校验
|
||||
- `OrderMasterDataGuard`:仓库、往来单位和主数据有效性校验
|
||||
- `OrderScopeGuard`:租户与访问范围校验
|
||||
- `entity/`:订单、货物、订单参与方快照、状态历史、内部备注和 Outbox 事件
|
||||
- `client/`:调用 IAM、Warehouse 获取资格和主数据
|
||||
|
||||
订单保存的是仓库、往来单位等关键字段的业务快照,主数据后续修改不能改变历史订单。跨服务通知通过 Outbox/事件方式演进,不应让数据库跨库直连。
|
||||
|
||||
### 5.5 `firstleg/`:头程履约中心
|
||||
|
||||
主要内容:
|
||||
|
||||
- `PlatformFulfillmentAssignmentController`:平台端履约分配入口
|
||||
- `FulfillmentTaskService`:履约任务和分配业务
|
||||
- `FulfillmentTaskEntity`:履约任务
|
||||
- `AssignmentHistoryEntity`:分配历史
|
||||
|
||||
该服务承担订单提交后的执行过程。订单主单及商户草稿仍属于 `order`,避免订单交易状态与履约作业状态混在同一张表。
|
||||
|
||||
### 5.6 `warehouse/`:仓库与往来单位
|
||||
|
||||
主要内容:
|
||||
|
||||
- 商户端、平台端和内部仓库 Controller
|
||||
- `WarehouseApplicationService`:仓库查询、地址、能力和状态校验
|
||||
- `PartnerQueryService`:往来单位只读查询和停用过滤
|
||||
- `WarehouseEntity`、`WarehouseAddressEntity`、`ServiceCapabilityEntity`
|
||||
- `PartnerEntity`:往来单位
|
||||
- `warehouse-seed.sql`:测试环境仓库初始化数据
|
||||
|
||||
往来单位只是 Warehouse 服务下的主数据配置,数据库表为 `baiyue_warehouse.wh_partner`,不创建独立微服务和数据库。
|
||||
|
||||
### 5.7 `file/`:文件中心
|
||||
|
||||
主要内容:
|
||||
|
||||
- `QualificationFileController`:商户端企业资质文件
|
||||
- `PlatformQualificationFileController`:平台端鉴权查看
|
||||
- `QualificationFileStorage`:存储抽象
|
||||
- `LocalQualificationStorage`:当前本地磁盘实现
|
||||
- `IamQualificationClient`:校验企业资质访问权限
|
||||
|
||||
生产环境应把存储实现替换为对象存储或共享文件存储。数据库保存元数据,文件内容不写入 Git,也不依赖应用容器临时目录。
|
||||
|
||||
### 5.8 `print/`:打印中心
|
||||
|
||||
当前目录已有独立应用、端口、数据库脚本、公共安全和审计依赖,但业务 Controller 目前只有健康检查。后续应在此目录增加:
|
||||
|
||||
- 打印模板版本管理
|
||||
- 打印任务和状态机
|
||||
- PDF/标签生成
|
||||
- 失败重试和幂等键
|
||||
- 打印文件与 File 服务的引用关系
|
||||
|
||||
订单服务只提交打印请求,不应自己生成面单或直接操作打印机。
|
||||
|
||||
### 5.9 `audit-service/`:审计日志中心
|
||||
|
||||
通过 `AuditIngestController` 接收审计事件,`AuditIngestService` 处理后写入 `baiyue_audit`。公共模块负责采集和脱敏,本服务负责集中持久化、查询扩展和留存策略。
|
||||
|
||||
### 5.10 `integration-service/`:第三方集成中心
|
||||
|
||||
当前包含百度 OCR 和 Amazon Logistics/SP-API 适配器,以及第三方能力状态查询。服务不使用业务数据库,密钥必须通过 Jenkins Credentials、环境变量或 Nacos 密文注入。
|
||||
|
||||
### 5.11 `event-bridge-service/`:跨区域事件桥
|
||||
|
||||
负责接收国内外服务器之间的业务事件,并通过 Inbox 表实现事件去重。它只传输必要业务事件,不共享头程和尾程数据库。事件载荷遵循 `common-event-contract`,应包含事件 ID、来源区域、目标区域、业务键、版本、时间和 Payload 哈希。
|
||||
|
||||
## 6. 配置、部署和辅助目录
|
||||
|
||||
### `config/`
|
||||
|
||||
```text
|
||||
config/nacos/
|
||||
├─ local/ # 本地联调配置
|
||||
└─ cn/ # 国内服务器配置模板
|
||||
```
|
||||
|
||||
每套目录包含公共配置 `baiyue-common.yml` 和 11 个服务配置。配置模板可以提交,真实密码和第三方密钥不能提交。
|
||||
|
||||
### `deploy/`
|
||||
|
||||
```text
|
||||
deploy/
|
||||
├─ docker/Dockerfile # 通用 Java 17 镜像
|
||||
├─ env/.env.test.example # 环境变量示例
|
||||
├─ scripts/deploy-services.sh # Jenkins 增量部署脚本
|
||||
├─ docker-compose.yml # 11 个业务服务编排
|
||||
└─ service-map.yml # 模块、JAR、端口映射
|
||||
```
|
||||
|
||||
### `scripts/`
|
||||
|
||||
- `local-env.ps1`:本地服务环境变量
|
||||
- `publish-local-nacos-config.ps1`:发布本地 Nacos 配置
|
||||
- `phase1-acceptance.ps1`:一期验收入口
|
||||
- `phase1-business-maturity-regression.ps1`:业务成熟度回归
|
||||
- `phase1-onboarding-order-e2e.ps1`:企业入驻到订单端到端验证
|
||||
- `order-warehouse-real-api-regression.ps1`:订单、仓库、往来单位真实 API 回归
|
||||
|
||||
### `docs/` 与 `reports/`
|
||||
|
||||
`docs/` 保存长期有效的架构、数据库、接口、部署与验收说明。`reports/` 保存某一次测试执行结果,可以用于追踪联调结论,但不能替代长期文档。
|
||||
|
||||
## 7. 主要调用关系
|
||||
|
||||
```text
|
||||
前端
|
||||
└─ Gateway
|
||||
├─ Auth ── IAM(授权快照、企业注册)
|
||||
├─ IAM ── Auth(内部账号管理)
|
||||
├─ Order ── IAM(企业资格)
|
||||
│ └─ Warehouse(仓库、往来单位)
|
||||
├─ Firstleg(履约任务与分配)
|
||||
├─ File ── IAM(资质文件鉴权)
|
||||
├─ Print
|
||||
└─ 平台内部能力
|
||||
├─ Audit Service
|
||||
├─ Integration Service
|
||||
└─ Event Bridge Service ── 国外尾程事件入口
|
||||
```
|
||||
|
||||
服务间优先使用 Nacos 服务发现。跨区域通信只走事件桥或明确的公网契约,不直接调用对方内部接口,不共享 MySQL、Redis 或 Nacos。
|
||||
|
||||
## 8. 本地启动顺序
|
||||
|
||||
推荐顺序:
|
||||
|
||||
1. 外部基础设施:MySQL、Redis、Nacos。
|
||||
2. 核心认证:IAM、Auth。
|
||||
3. 业务主数据:Warehouse、File。
|
||||
4. 核心业务:Order、Firstleg、Print。
|
||||
5. 支撑能力:Audit、Integration、Event Bridge。
|
||||
6. 最后启动 Gateway。
|
||||
|
||||
Nacos 服务发现允许部分服务交换顺序,但联调时按上述顺序更容易判断故障来源。
|
||||
|
||||
## 9. 开发和拆分约束
|
||||
|
||||
- 每个业务服务只访问自己的数据库;禁止跨库 Join 和直接读取其他服务表。
|
||||
- 所有商户业务数据必须带租户维度,并在后端执行租户隔离。
|
||||
- 平台端和商户端权限分别管理,接口与按钮权限都必须由后端校验。
|
||||
- Controller 负责协议转换,Service 负责业务编排,Repository/Mapper 负责持久化。
|
||||
- 服务之间只传 DTO 或事件契约,不能依赖其他服务的 Entity、Mapper。
|
||||
- 公共模块变化会影响多个服务,Jenkins 会自动重建全部 11 个服务。
|
||||
- 单一 Git 仓库不等于单一部署单元;每个服务仍生成独立 JAR、镜像和容器。
|
||||
- 头程与尾程保持两个 Git 仓库、两套数据库和两套运行环境。
|
||||
Reference in New Issue
Block a user