Files
dukang/杜康好客-v3-城市仓库与日志架构.md
T

5.7 KiB
Raw Blame History

杜康好客 · V3 城市 / 仓库 / 日志架构

版本2026-07-12
状态P1 城市多合伙 + P2 仓库 已实现(2026-07-12);合伙人端管仓日志仍待 Wave 3
分工:刘景尧任务暂由 jacy-dukang 代管(见 AGENTS.md


1. 目标数据模型(城市顶层)

CommonCity (开城)
  ├── PartnerAccount[]  1:N 主账号(isPrimary=1,含城市绑定 + 购酒/核销佣金)
  ├── CityWarehouse[]   1:N 城市仓库(HQ 管 / 合伙人管)
  └── CatalogProduct[]  按城市上架

PartnerAccount (主账号 = 城市合伙人主体)
  ├── cityId / scopeType / districtCodes / bindingStatus
  ├── orderCommissionRate / redeemCommissionRate
  ├── companyName / 银行 / 合同等主体信息
  ├── managedWarehouseId?  可选管仓
  └── PartnerAccount[]     子账号(parentAccountIdpermissions JSON

CityWarehouse
  ├── cityId
  ├── managerType: HQ | PARTNER
  └── partnerAccountId?    合伙人管仓时绑定主账号

Store
  ├── partnerAccountId     FK → 主账号
  └── settlementRate       门店核销结算比例(默认 0.60)

迁移要点(2026-07:删除 partner_partnercommon_city_partnercommon_city_commission_rule;城市绑定与购酒分佣合并至 partner_account 主账号;门店结算比例下沉至 store_store.settlementRate;订单快照字段为 partnerAccountIdAtPay + orderCommissionRateAtPay


2. 日志表与职责划分

操作主体 日志表 eventType / eventName 查询入口
HQ WebAdmin 写操作 common_event HQ_OPERATION + param1=action admin-web /logs/hq
合伙人端 行为 log_partner_analytics partner_* eventName admin-web /logs/partner
门店端 行为 log_store_analytics store_* admin-web /logs/store
C 端 行为 log_user_analytics 埋点 eventName admin-web /logs/user
权益/订单状态机 common_event BENEFIT_LEDGER / ORDER_STATUS 领域查询

原则HQ 侧 CRUD / 审核 / 结算确认 一律 @HqOperationcommon_event;端侧 登录 / 业务操作 走对应 log_*_analytics


3. CRUD → 日志映射(新业务)

3.1 HQ 侧(common_event.HQ_OPERATION

实体 refType action 常量 装饰器状态
开城城市 CITY CITY_CREATE / CITY_UPDATE 已接入
开城城市 CITY CITY_DELETE 待 API
城市仓库 WAREHOUSE WAREHOUSE_CREATE / UPDATE / DELETE 已接入
城市合伙人(主账号) PARTNER PARTNER_CREATE / PARTNER_UPDATE 已接入
合伙人账号(HQ PARTNER_ACCOUNT PARTNER_ACCOUNT_CREATE / UPDATE / DELETE 已接入
HQ 管理员 HQ_ACCOUNT HQ_ACCOUNT_CREATE / UPDATE 已接入
HQ 权限 HQ_PERMISSION HQ_PERMISSION_UPDATE 已接入

实现约定:

  • Controller 方法加 @HqOperation({ action, refType, refIdField|refIdParam, includeBody })
  • extraJson 自动写入 requestBody(脱敏 password+ response 摘要
  • 常量定义:server/.../hq-operation.constants.tsadmin 筛选项:apps/admin-web/src/lib/hq-log.ts

3.2 合伙人端子账号(log_partner_analytics

操作 eventName refType 状态
主账号新增子账号 partner_staff_create PARTNER_ACCOUNT PartnerStaffService
编辑子账号 partner_staff_update PARTNER_ACCOUNT
仅改角色/权限 partner_staff_permission_update PARTNER_ACCOUNT
删除子账号 partner_staff_delete PARTNER_ACCOUNT
仓库查看/维护(合伙人管仓) partner_warehouse_view / partner_warehouse_update WAREHOUSE Wave 3

分类:packages/shared-types/src/partner-log.tsaccount_ops / warehouse_ops

3.3 门店子账号

操作 日志表 action / eventName 状态
HQ 创建/编辑门店账号 common_event STORE_ACCOUNT_CREATE / UPDATE
门店端自助(若有) log_store_analytics 待定义 store_staff_*

4. 实现检查清单(DoD

每条 CRUD 合并前确认:

  • HQ 写接口有 @HqOperation,且 HqOperationAction + hq-log.ts 标签已同步
  • 合伙人端写接口调用 AnalyticsService.trackPartnerOneSafeeventName 已登记在 partner-log.ts
  • extraJson 不含明文密码/令牌;手机号脱敏
  • admin-web 日志页可按 action / category 筛选到新事件
  • 跨模块不直写他人日志表(经 Analytics / HqOperationLogService

5. 分阶段交付

阶段 内容 依赖
P0 日志补全 子账号 CRUD 落 log_partner_analytics;扩展 HQ action 常量
P1 城市架构 city_partner 表、迁移 partner_id、HQ CRUD + @HqOperation 2026-07-12
P2 仓库 city_warehouse 表、HQ CRUD + 合伙人管仓校验 2026-07-12
P3 权限 JSON PartnerAccount.permissions 替代纯 staffRole;权限变更双写 HQ/合伙人日志 P1

6. 相关文件

路径 说明
server/dukang-api/src/common/hq-operation/ HQ 审计装饰器 + 拦截器
server/dukang-api/src/modules/iam/partner-staff.service.ts 合伙人子账号 + 日志
packages/shared-types/src/partner-log.ts 合伙人日志分类
apps/admin-web/src/pages/HqLogsPage.tsx HQ 操作日志
apps/admin-web/src/pages/PartnerLogsPage.tsx 合伙人日志