L-20260822-01 DIP1 V2.0 全量重写(五服务模块化单体)¶
任务编号:L-20260822-01 / 执行人:听码 WDE / 日期:2026-08-22 任务来源:人类决策 —— dip1 旧成果移存
dip1/dip1.0/(仅参考,将删除),按最新 TND V2.0 设计在dip1/完全重新开发
1. 任务起止与输入产物¶
- 开始:2026-08-22 上午;完成:2026-08-22
- 输入产物(唯一权威依据):
docs/技术文档/TND V2.0 阶段三设计包 - D01 系统总体架构设计(9 铁律 P1-P9 / ADR-009~018 / NATS 20 Topic / Docker Compose→K8s 演进)
- D02 报价引擎技术方案
- D03+D08+D09 合并稿 师傅端跟踪表楼宇三合一技术方案
- D04 订单与派单系统技术设计
- D05+D06+D07 合并稿 B端对接与安全权限综合设计
- D10 MDS主数据服务技术方案
- OpenAPI 3.0.3 契约:
docs/技术文档/openapi/{qsv,cpt,mds,dis,ops}.yaml(160 条契约路由) - 参考(非依据):
dip1/dip1.0/(V3.3 旧版,源码已被移除,仅文档可考)
2. 输出产物¶
2.1 后端 dip1/backend/(Python 3.12 + FastAPI + SQLAlchemy 2.0 asyncio + Alembic)¶
DDD 四层 + 模块化单体(D01 §二/§三,P1-P9 铁律落地):
| 模块 | 路由数 | 核心领域资产 | 事件发布/订阅 | 测试 |
|---|---|---|---|---|
| QSV 报价 | 9(含 V3.3 兼容路由 /api/qsv/quote/create) |
domain/qsv/pricing_engine.py 32 因子 9 步计价 + DME M1/M2/M3 + 封顶价/品牌溢价(1.0/1.2/1.4) + 快照不可变 |
发 2 / 订 1 | 36 |
| CPT 跟踪 | 34 | domain/cpt/state_machine.py 8 阶段状态机 + 183 字段采集规格(L3≥70%/L6≥95%/L8=100% 门槛)+ L6 三重校验 + NPS/REF 码 |
发 7 / 订 6 | 70 |
| MDS 主数据 | 42 | 六库 SCL/BPL/WPL/CPL/PPL/DLV + 校准引擎四通道 + MDM 审批状态机 + PDPO 分级脱敏 | 发 2 / 订 1 | 53 |
| DIS 派单 | 35 | domain/dis/services/dispatch_matching_engine.py 9 组合评分(运输×0.55+安装×0.45)+ C7 四档赔付 + SAGA 状态 + 拒单 -25 处罚 |
发 5 / 订 2 | 67 |
| OPS 运营 | 41 | 活动/物料/口碑 3 聚合状态机 + 9 层漏斗 + 6 场景线索接入(联系方式 SHA256) | 发 2 / 订 3 | 43 |
| 公共 | webhooks×2 + health | 共享内核 Money/GPS/Address + 幂等/审计表 | — | — |
| 合计 | 165 operations | — | 20 Topic 全覆盖 | 269 全绿 |
共享基础设施(主代理编写,模块代理复用):
- app/core/:config(DIP1_ 前缀,D01 §十一 全兼容项)/ security(Keycloak JWKS + dev HS256,RBAC 12 角色)/ events(NATS JetStream + 进程内总线降级)/ exceptions(DomainError→HTTP 统一映射)
- app/infrastructure/db/:Base/JSONVariant(PG→JSONB、SQLite→JSON)/ common(IdempotencyLog + AuditLog)
- 44 张表 Alembic 迁移 0001_initial_5svc(autogenerate,upgrade head 验证通过)
- 跨模块协作:异步一律走事件总线(P6);同步读经 ProviderPort + lazy import adapter + 默认参数回落(模块可独立测试)
2.2 部署层 dip1/deploy/¶
docker-compose.yml:8 服务(PG16+PostGIS / Redis7.2 / NATS2.10-js / Keycloak25 / Kong3.6 / Mailpit / Jaeger / backend[profile=ci]),对齐 D01 §四.1kong.yml:DB-less 声明式配置(限流 600/min + correlation-id)keycloak/realm-dip1.json:12 角色 Realm + 2 客户端
2.3 前端 dip1/frontend/(pnpm monorepo 脚手架)¶
详见 L-20260822-02:pnpm workspace + @dip1/shared(API客户端/5服务类型/三语文案)+ 5 端骨架;opr-admin(Next.js 14)build+tsc 通过,驾驶舱真实对接 OPS/CPT API。
2.4 验证记录¶
pytest tests -q:269 passed(domain 纯 Python 单测 + API 冒烟经 ASGI 全路由)ruff check app tests:全过(B008/UP042 为 FastAPI 惯用法豁免)- 真实 uvicorn 启动冒烟:
/health正常;/api/v2/qsv/quote/calculate以 dev JWT 调通,返回 32 因子分步明细(P1_BASE 1375 → P5_TRANS +150 → FINAL 1525 HKD) - P1 铁律校验:各
domain/*包零 fastapi/sqlalchemy/nats/redis import
3. 关键决策点¶
- QSV quote_id 用
QTE-前缀(ORM 约定优先于 yaml 示例 pattern);CPT project_id 用契约格式CPT-YYYYMMDD-NNNN(cpt.yaml pattern 权威)——两模块各自对齐了契约,ID 格式不统一属已知偏差,待 TL 裁决是否统一 - C7 加价险公式 D02 未给出,暂定 final×2%/最低 30HKD(代码注释标注待 QMD 细化)
- 183 字段按阶段 JSONB 合并存储(cpt_stage_collection),未逐列建 D09 8 张 DDL 表;I6 完成率 Python 侧计算
- AES-256-GCM 列级加密未实现:L3/L4 字段明文存储 + 输出强制脱敏 + AuditLog 留痕(加密落 KMS 属 OCM/D07 范围)
- DIP1_INTERNAL_SECRET / DIP1_OPS_PUBLIC_TOKEN:内部服务间与公开线索端点的密钥经环境变量外置(默认值仅开发用)
4. 遗留简化点(后续迭代)¶
| # | 事项 | 归属 |
|---|---|---|
| 1 | AES-256-GCM 列级加密 + 阿里云 KMS 密钥托管 | OCM/D07 |
| 2 | PostGIS geom 列 + GIST 索引(当前 haversine + lat/lng) | WDE 迁移增量 |
| 3 | R2 预签名 URL(上传/下载/导出当前为占位) | OCM 对象存储 |
| 4 | Redis 缓存层(mds_params_config 缓存)、Sentry/OTLP 接入 | 生产部署项 |
| 5 | NATS JetStream 真实联调(当前默认进程内总线,代码路径已具备) | OCM 联调 |
| 6 | 前端 5 端完整实现(本次仅脚手架 + OPR 驾驶舱) | WDE 下一阶段 |
| 7 | Kong 生产模式(PG 存储 + Keycloak OIDC 插件 + Webhook HMAC 验签插件) | OCM |
5. 阻塞与风险¶
- 无未解阻塞。风险:dip1.0 删除前如需找回 V3.3 源码,仅剩
__pycache__字节码(可反编译但成本高);V2.0 已全量覆盖其能力,评估可删。