2.6 KiB
2.6 KiB
中台引擎(L2 · :8088)
城轨智能中台四层架构中的 L2 中台层,Express API 服务,仅绑定 127.0.0.1 本机回环。中台只解决"接入"与"安全",业务能力在各子系统内部实现——本目录不含业务子系统代码。
架构位置
L1 AI 客户端(:8090)
↓
L2 中台引擎 = 本目录(:8088,仅 127.0.0.1)
↓ MCP 路由
L3 子系统 MCP Server(:7777 排班 / :7778 画像)
↓ dispatcher
L4 业务工具层(子系统内部,2496 个既有业务函数,零侵入)
核心模块(附具体代码位置)
| 模块 | 位置 | 说明 |
|---|---|---|
| 服务入口 | src/main.js:20 |
app.listen(config.port, '127.0.0.1'),本地回环监听 |
| 路由装配 | src/app.js |
Express 装配 + 鉴权中间件挂载(:87 经 hasPermission 校验) |
| JWT Ed25519 鉴权 | src/auth/jwt-ed25519.js:29,47 |
signEdDsa / verifyEdDsa;校验入口 src/auth/auth.js:28;密钥强制 ed25519 src/auth/jwt-keys.js:47 |
| 审计·链式哈希 | src/audit/audit.js:45,58,90-94 |
:45 承接上一条 current_hash(首条为 64 个 0);:58 SHA-256(prev_hash + canonical(entry));:90-94 逐条校验,断链返回 brokenAtId——篡改任一条,整链断裂 |
| RBAC 权限 | src/rbac/rbac.js:64 |
hasPermission(userId, module, action);权限缓存 TTL 5 分钟(:7) |
| 数据导入 | src/import/monthly-materials.js(月度材料)、monthly-exams.js(月考)、personnel-roster.js(人员名册)、question-bank.js(题库);src/upload/kilometers-import.js(公里数) |
上传登记 src/upload/upload.js:90(batch_uuid 入库)、:103(同月重复上传即覆盖,§5.1 幂等) |
| 预计算 | src/precompute/service.js:13,38,42 |
recomputePeriod / onUploadComplete / recomputeAll;指标实现在 src/precompute/impls/(公里数/在线考试/实操考试)——AI 不算账,业务系统算好 |
| 导出工作队列 | src/export/queue.js:12(BullMQ Queue)、src/export/worker.js:10(Worker) |
报表异步生成;另含 backup.js(备份) |
| 公共包 | ../packages/shared/ |
module-registry.js(模块注册)、constants.js(常量)、backup-tables.js(备份表定义) |
运行
cp .env.example .env # 按需修改(开发占位值,生产密钥走本地密钥目录)
npm install
npm start # node src/main.js
密钥说明
JWT Ed25519 密钥对由 scripts/generate-jwt-keys.js 本地生成,存放于本地密钥目录(keys/ 已被 .gitignore 排除,任何情况下不入库);PII 字段加密密钥(DATA_ENC_KEY / DATA_HMAC_KEY)同理,生产环境由密钥目录管理。