56 lines
5.5 KiB
Markdown
56 lines
5.5 KiB
Markdown
# 渠道列表与新增渠道:源码核对记录
|
||
|
||
|
||
## 页面
|
||
|
||
来源 `sw/web/src/views/BusMgmt/ChannelList.vue`、`components/AddChannelDrawer.vue`、`components/ChannelGameDrawer.vue`。
|
||
|
||
- 筛选:平台默认全选、商务账号、关键词、渠道层级、注册类型、锁定状态。实际关键词后端只查询渠道账号;旧占位文案“渠道账号 / 负责人姓名”与实现不一致。
|
||
- 列:平台、ID、渠道账号、渠道层级、归属商务、上级渠道、负责人、渠道类型、推广游戏、玩家数量、累计充值、锁定状态、画像。没有编辑入口。
|
||
- 列表的注册类型选项只有“个人 0 / 公会 1”,其余选项被注释;新增抽屉则是“个人 0 / 企业 1”,不能擅自根据其中一处统一名称。
|
||
- 状态筛选及列使用 `lockStatus`:0 正常、-1 已锁定、-2 解除合作,与渠道审批字段 `status` 不同。
|
||
- “添加渠道”只按按钮权限判断,旧代码没有额外要求三级商务。游戏商务下拉随平台变化加载,选项取平台商务 ID 并去重。
|
||
- 新增字段:平台、游戏商务、推广类型、渠道账号、密码。账号为 `[\u4e00-\u9fa5a-zA-Z0-9]{4,30}`,提交前 trim;密码原值保留,按 Java UTF-16 长度 6–15 校验。
|
||
- 推广游戏与画像均是右侧抽屉,必须同时传 `sourceDb` 与渠道 ID。游戏抽屉调用 `/system/promote/game-distribution`,累计口径,列为游戏、玩家数量、充值金额。画像已迁移。
|
||
|
||
## 列表权限和查询
|
||
|
||
来源 `PromoteServiceImpl`、`BusinessBindScopeServiceImpl`、`BusierAccountFilters`。
|
||
|
||
- 非超管查询本人及全部下级的已通过平台绑定,三级仅本人。列表自身并不会因全局“包含下级渠道”关闭而只列一级;该偏好用于指标聚合。
|
||
- 超管默认不限绑定;一旦指定 `busierUserId` 或商务账号关键词,必须按匹配绑定收窄。
|
||
- `busierUserId` 是指定用户本人绑定,不能套用预警筛选“该商务及全部下级”的语义。
|
||
- 商务账号关键词在 Java 中按忽略大小写的文字子串匹配平台商务账号或 SW 用户名。`%`、`_` 在这里是普通字符,不能随意变成 SQL 通配符。
|
||
- 平台商务与渠道以 `(source_db, busier_id)` 关联,跨平台同号不得混用。用户名展示为 `平台账号(SW用户名)`;两者相同或其中为空时不重复拼接。
|
||
- 支持平台、层级、注册类型、审批状态、锁定状态、渠道账号关键词。默认按创建时间、ID 倒序;新增稳定的平台排序可用于跨平台同号并列。
|
||
|
||
## 列表指标
|
||
|
||
来源 `PromoteListMetricsSupport`、`PromotePortraitScopeHelper` 和三个 Mapper。
|
||
|
||
- `gameCount`:`tab_promote_apply.status=1`,按该行渠道自身去重 `game_id`;不随包含下级扩展。
|
||
- `playerCount`:`tab_user` 主账号(`puid=0 OR puid IS NULL`)。不去重时累计行数;身份证去重时在整棵统计树内去重,空证件不计入。
|
||
- 身份证规范化仅 trim,并将末尾大写 X 改为小写 x,不能做额外证件合法性校验或把无证件用户按 ID 计入。
|
||
- `totalPayAmount`:`tab_spend.pay_status=1` 累计 `pay_amount`,不按身份证去重,也没有日期上限。
|
||
- 关闭包含下级、层级为空或 >=3:只统计当前渠道。二级:本级与 `parent_id=当前ID AND promote_level=3`。一级:本级与同平台 `top_promote_id=当前ID OR parent_id=当前ID`。
|
||
- 注意一级旧加载函数还会加载第二跳子渠道,但最终 `PromotePortraitScopeHelper` 再按 top/parent 条件过滤;不能仅看加载函数就扩大最终统计集合。
|
||
|
||
## 源平台创建事务
|
||
|
||
来源 `PlatformPromoteWriteServiceImpl`、`PlatformTabPromote`、`TabPromoteSettlementTime`、`TabPromoteBusinessMapper`。
|
||
|
||
1. 先验证当前用户可用的已通过绑定与目标平台商务匹配,再进入对应 `lx/hw/yq` 源库写入事务。
|
||
2. 源库 `tab_promote` 账号不得重复。密码为 `XiguPasswordUtils.cmfPassword` 格式,需要复用已有环境盐适配器,不能用 Kra 登录密码算法替换。
|
||
3. 新渠道 `status=-3`、`promote_level=1`、`parent_id=0`、`top_promote_id=0`、`game_ids2=''`,注册类型默认 0;时间为 Unix 秒。
|
||
4. 同事务创建 `tab_promote_settlement_time`:`time_type=0`、`day_period=7`,下一次结算为当前秒数加 7 天。
|
||
5. 游戏商务必须存在,原子追加新渠道 ID 到 `tab_promote_business.promote_ids`,避免并发覆盖;任一步失败整体回滚。
|
||
6. 返回新 ID 与 `sourceDb`,原成功文案提示“添加成功,数据同步到列表可能有延迟”。不直接制造主库同步副本,不在真实平台库创建测试渠道。
|
||
|
||
## 游戏分布的已核对依赖
|
||
|
||
游戏分布依赖 `PromotePortraitServiceImpl.buildGameDistribution`、`SwReportDayQueryServiceImpl` 和日汇总/身份键 Mapper。当前实现只列根渠道已通过的游戏,用同渠道统计树读取日汇总:人数对 metric=1 的 identity_key 去重,dedup_mode 随偏好;金额固定 dedup_mode=0。累计起点从当前人数模式的最早日汇总取得,缺失则使用上海当天,即使模式 0 有更早数据也不改写该起点。截止上海当天,排除未来日期。先将金额保留两位再按金额降序、游戏 ID 升序排列。
|
||
|
||
完整渠道画像已接入,规则及验证见 `channel-portrait-source-notes.md`。报表汇总任务、预警生成任务和最终实库验收仍属于后续范围。
|
||
|
||
当前验证状态统一见 [验收与性能记录](validation.md),不再维护阶段性运行报告。
|