This commit is contained in:
2026-08-25 16:41:06 +08:00
parent 0904f411c7
commit 70585aea00
4 changed files with 10 additions and 11 deletions
+2 -6
View File
@@ -42,10 +42,9 @@ Namespace 名称不是服务名。环境变量必须填写 Nacos 实际 Namespac
### 3.2 海外区域
- `gateway-overseas`
- `lastleg-service`
- `lastleg-service`,同时持有 `baiyue_lastleg` 内的 IAM 安全事件 Inbox/投影,并开放内部事件接收和实时校验端点
- `warehouse-overseas-service`
- `overseas-security-service`,持有 `baiyue_overseas_security` 的 IAM 安全事件 Inbox/投影,只开放内部事件和校验端点
- 海外 Event Bridge,用于接收目标区域为 `OVERSEAS` 的事件;业务事件投递本地 Lastleg,三类 IAM 安全事件投递海外安全服务
- 海外 Event Bridge,用于接收目标区域为 `OVERSEAS` 的事件;业务事件和三类 IAM 安全事件按事件类型投递 Lastleg 的不同内部入口
海外浏览器请求直接进入海外 Gateway,不经过国内 Gateway。Auth 仍只部署在国内;海外服务通过受控 JWKS 地址验证 Auth 签发的短时海外 Token,不访问国内 Redis。
@@ -71,9 +70,6 @@ DATA_RESIDENCY=CN
OVERSEAS_NACOS_SERVER_ADDR=<当前环境Nacos地址>
OVERSEAS_NACOS_NAMESPACE=<当前环境海外Namespace ID>
OVERSEAS_DEPLOYMENT_CELL=<environment>-overseas
OVERSEAS_SECURITY_DB_URL=<海外安全投影MySQL连接>
OVERSEAS_SECURITY_DB_USERNAME=<账号>
OVERSEAS_SECURITY_DB_PASSWORD=<凭据>
```
海外 Compose 必须强制传入 `REGION_CODE=OVERSEAS` 和 `DATA_RESIDENCY=OVERSEAS`,不得继承共享文件中的国内默认值。
+1 -1
View File
@@ -51,7 +51,7 @@ curl -fsS --user "$JENKINS_USER:$JENKINS_API_TOKEN" \
后端可部署服务:
`gateway`、`gateway-overseas`、`auth`、`iam`、`firstleg`、`finance`、`order`、`warehouse`、`file`、`print`、`integration-service`、`lastleg-service`、`warehouse-overseas-service`、`overseas-security-service`、`event-bridge-service`、`audit-service`。
`gateway`、`gateway-overseas`、`auth`、`iam`、`firstleg`、`finance`、`order`、`warehouse`、`file`、`print`、`integration-service`、`lastleg-service`、`warehouse-overseas-service`、`event-bridge-service`、`audit-service`。海外安全投影随 `lastleg-service` 部署,不再有独立 Job。
正常从总控 Job 发起。只有重跑同一提交的单个失败服务时,才直接触发下游 Job。
+1 -1
View File
@@ -47,7 +47,7 @@
| `01a01e56-bed3-75f3-ba02-cc28479cd8ee` | `01a0194a-259c-7171-8967-074731a27618` | 四期后端专项三:海外入仓与库存 | 负责 Lastleg 与 Warehouse Overseas 的尾程订单、接柜、入仓计划、卸货入库、换标、平台公共托盘、SKU 库存和库内操作后端;排除箱号平台、产品库、海外出库、退货出库、海外派送,不向 Admin 暴露 PDA 或内部事件端点 |
| `01a01e56-c0f2-71f1-9c74-02f6709233f1` | `01a0194a-259c-7171-8967-074731a27618` | 四期后端专项四:海外本土业务 | 负责 Lastleg 海外采购订单、本土卡车、本土散板完整后端,以及客户/仓库候选、字段清空语义、流水、平台写接口、权限、OpenAPI、SQL 和测试;排除采购出库、海外仓出库、退货出库与海外派送 |
| `01a01e56-c30b-7513-be9e-03262a387696` | `01a0194a-259c-7171-8967-074731a27618` | 四期后端专项五:船节点自动查询 | 负责国内确认出仓后至还柜的 CarrierScheduleQuery 自动任务、租约、幂等、退避、十个标准节点、异常事实、预计/实际时间、人工补录、还柜停止条件、Integration 供应商适配、查询尝试与历史、货柜 DTO 及跨区衔接;不新建重复轮询体系,不承接海外派送、PDA 或前端页面 |
| `01a03702-e35b-7202-a395-62643ab77ec2` | `01a036f9-1d1c-77a0-a4d4-a99bb0d2532a` | Java架构专项一:拓扑与质量门禁 | 负责当前 23 Maven 模块、16 个可运行服务的拓扑合同,POM、service-map、GitLab 制品、Jenkins、Compose、Nacos 清单一致性,以及 Maven、OpenAPI、JaCoCo、静态分析和 ArchUnit 共享质量门禁;不修改业务状态机、不部署,海外基础设施内容与四期后端基础设施专项协调 |
| `01a03702-e35b-7202-a395-62643ab77ec2` | `01a036f9-1d1c-77a0-a4d4-a99bb0d2532a` | Java架构专项一:拓扑与质量门禁 | 负责当前 22 Maven 模块、15 个可运行服务的拓扑合同,POM、service-map、GitLab 制品、Jenkins、Compose、Nacos 清单一致性,以及 Maven、OpenAPI、JaCoCo、静态分析和 ArchUnit 共享质量门禁;不修改业务状态机、不部署,海外基础设施内容与四期后端基础设施专项协调 |
| `01a03702-e52e-7503-8c4e-b24ebf6aa925` | `01a036f9-1d1c-77a0-a4d4-a99bb0d2532a` | Java架构专项二:同步依赖与失败传播 | 负责 Java 后端 Feign/HTTP 同步调用图,双向依赖、调用链深度、超时、重试、熔断、幂等、错误映射和失败传播治理;不擅自改变财务或四期业务状态机,不以默认成功、空数据或静默降级掩盖远端失败 |
| `01a03702-e749-7ce1-9c50-25961c7dfc83` | `01a036f9-1d1c-77a0-a4d4-a99bb0d2532a` | Java架构专项三:Event Bridge可靠传输 | 负责当前 HTTP+DB 跨区事件链路的 common-event-contract、Event Bridge、Firstleg、Lastleg 和 IAM Outbox/Inbox、租约、退避、投递记录、死信、人工补投、幂等冲突、文档口径和链路测试;不定义财务或四期业务语义,不承接部署基础设施 |
| `01a03702-e92c-7b12-815d-5e02f1e1adf0` | `01a036f9-1d1c-77a0-a4d4-a99bb0d2532a` | Java架构专项四:Firstleg内部模块化 | 负责 Firstleg 同一部署单元内入库、测量计价、分柜装柜、订舱报关拖车、出仓、船节点、客户统计和财务集成切片的应用 Port、依赖方向与 ArchUnit 治理;不拆新微服务、不扩大业务范围、不替代财务总控 |
+6 -3
View File
@@ -13,6 +13,7 @@
- 平台 `WAREHOUSE_PICKER` 必须在 IAM 成员关系中绑定一个启用的实际海外收货仓;Auth 将该绑定以可空 `overseas_warehouse_id` Claim 同步写入国内与海外 Token,海外 Token 同时携带账号 `token_version`。该 Claim 只用于已绑定的平台仓管员,页面和 PDA 请求不得传入或覆盖仓库身份;修改或清空仓绑定时 IAM 必须调用 Auth 撤销该账号全部会话并递增 `token_version`,随后重新签发 Token。
- 用户只登录一次,由前端统一认证模块按目标 API 自动选择 Token,不在页面或业务模块中分叉登录逻辑。
- JWKS 只暴露公钥验证能力,不暴露私钥;国内服务验证登录 Token 并结合 Redis 会话实现即时退出和权限变更,海外业务服务不访问国内 Redis。`gateway-overseas` 对普通 Admin/Client 海外接口只验证海外 Token 的签名、Issuer、Audience、有效期、应用域、客户范围和权限 Claims;仅 `/api/pda/**` 在本地验签后,以内部服务身份向 Auth 发送 `userId/tokenVersion/overseasWarehouseId` 做无缓存实时核对。该调用不得传递 raw Token 或用户凭据,Auth 超时、不可用、账号停用、版本或仓绑定不一致均 fail-closed。
- 本期普通 Admin/Client 海外 Token 的即时失效范围固定为 IAM 投影的账号停用、客户停用和权限版本推进;Gateway 向 Lastleg 安全投影仅发送 `userId/tenantId/permissionVersion`,旧 Token 被拒绝后客户端必须退出并重新登录。`token_version` 仍是海外 JWT 必填 Claim,但其权威实时比对只用于上述 PDA→Auth 链;普通 Admin/Client 的退出、密码重置或普通会话撤销依赖短时 Token 自然过期,不得宣称已由 Lastleg 即时撤销。
## 区域 API 路由
@@ -30,10 +31,12 @@
### IAM 安全事件海外投影冻结
- `IamUserStatusChanged`、`IamTenantStatusChanged`、`IamPermissionVersionChanged` V1 固定由海外 `overseas-security-service` 消费;不得投递到 Lastleg 的 LoadingCompletedConsumer。
- `IamUserStatusChanged`、`IamTenantStatusChanged`、`IamPermissionVersionChanged` V1 固定由 Lastleg 独立安全入口 `/internal/lastleg/security/v1/events` 消费;不得投递到 Lastleg 的 LoadingCompletedConsumer。
- 安全状态只使用 `ACTIVE`/`DISABLED`:`IamTenantStatusChanged` 仅在 IAM 客户业务状态为 `ACTIVE` 时发布 `ACTIVE`,`PROFILE_REQUIRED`、`PENDING`、`REJECTED`、`DISABLED`、`ARCHIVED` 及其他不可用状态统一折叠为 `DISABLED`。Lastleg 只校验该两态安全快照,不解释国内建档/审核工作流。
- Event Bridge 只按冻结的 eventType→consumer URL 选择下游,不解析状态、权限版本或 payload 业务字段。海外业务事件仍投 Lastleg,国内回流事件仍投 Firstleg。
- 安全服务以 MySQL `overseas_security_event_inbox` 和 `overseas_security_projection` 为可靠来源:eventId 相同 hash 相同幂等,异 hash 冲突;聚合版本只单调推进,旧版本标记 STALE,同版本异 hash 冲突。Redis 仅为提交后写入的可重建镜像,授权校验不依赖 Redis 默认放行。
- 海外 Gateway 对全部 `/api/**` 在本地 JWT 验签后,仅传递 `userId/tenantId/tokenVersion/permissionVersion` 到安全服务。用户停用返回 A0401;客户停用或 Token 权限版本落后返回 A0403;安全服务、SQL 或调用链不可用均 fail-closed。PDA 在此基础上继续执行 Auth 仓绑定实时核验。
- Lastleg 以 MySQL `ll_security_event_inbox` 和 `ll_security_projection` 为可靠来源:eventId 相同 hash 相同幂等,异 hash 冲突;聚合版本只单调推进,旧版本标记 STALE,同版本异 hash 冲突。Redis 仅为提交后写入的可重建镜像,授权校验不依赖 Redis 默认放行。
- 海外 Gateway 对全部 `/api/**` 在本地 JWT 验签后,仅传递 `userId/tenantId/permissionVersion` 到 Lastleg 安全入口。用户停用返回 A0401;客户停用或 Token 权限版本落后返回 A0403;安全投影、SQL 或调用链不可用均 fail-closed。PDA 在此基础上继续执行 Auth 仓绑定实时核验。
- 新客户创建、审核激活以及新用户授权均由 IAM 在业务事务内写初始安全事件。开发阶段不提供历史账号长期 Bootstrap 或兼容入口;固定 `platform_admin` 由 Lastleg 数据库基线初始化 version=0 的 USER/AUTHORIZATION 投影,其余既有开发账号只允许在部署后由总控按 IAM 当前事实一次性重建,不纳入产品代码。任何缺失投影继续 fail-closed,不能在 Lastleg 运行时代填或默认放行。
## 修改与验收