“# 渠道分组过滤业务流程说明

文档生成时间:2025-05-29
最后更新:2025-05-29

概述

本文档详细描述了AI Hub平台的渠道分组过滤业务流程,包括渠道选择逻辑、优先级规则、配置解析顺序以及各层级渠道配置的处理机制。


业务背景

在AI Hub平台中,用户使用AI服务时需要通过渠道进行请求转发。为了满足不同用户、组织和分销商的渠道使用需求,系统实现了多层次的渠道分组过滤机制。

核心概念

1. 渠道组 (Channel Groups)

  • 预定义的渠道分组,如 defaultpremiumenterprise
  • 每个渠道组包含一组具体的渠道实例

2. 配置字段

  • UseChannels: 渠道白名单,逗号分隔的渠道组名称
  • ExcludeChannels: 渠道黑名单,逗号分隔的渠道组名称

3. 配置层级

  • 组织层级: 组织级别的渠道配置
  • 用户层级: 用户个人的渠道配置
  • 分销商层级: 分销商相关的渠道配置

业务流程总览

主流程:GetChannelGroupsHandler

Syntax error in graphmermaid version 8.13.0

详细处理逻辑

1. 缓存读取与降级处理

入口函数: GetChannelGroupsHandler(userId int, autoChannels []string) []string

  • 输入: 用户ID + 系统自动筛选的基础渠道组
  • 第一步: 尝试读取用户缓存信息
  • 降级策略: 如果缓存读取失败,直接返回 autoChannels,不做额外过滤
  • 目的: 确保系统在异常情况下仍能正常工作

2. 组织链渠道配置解析

函数: getChannelGroupsOrgHandle(orgId int, autoChannels []string) ([]string, bool)

处理逻辑:

  1. 当前组织检查: 检查当前组织是否配置了 UseChannels
  2. 递归向上查找: 如果当前组织无配置,递归向上级组织查找
  3. 顶级组织处理: 到达顶级组织后,查找组织类型分销商配置
  4. 返回值:
    • 过滤后的渠道组列表
    • 布尔值表示是否在组织链中找到有效配置

递归查找示例:

组织层级: 公司总部 → 事业部 → 部门 → 团队
查找顺序: 团队 → 部门 → 事业部 → 公司总部

3. 用户层级配置解析

函数: getChannelGroupsUserHandle(cache *model.UserBase, autoChannels []string) []string

处理逻辑:

  1. 用户配置优先: 如果用户自身配置了 UseChannels,按用户配置过滤
  2. 分销商备选: 否则查找个人类型分销商的渠道配置
  3. 默认返回: 如果都无配置,返回原始 autoChannels

4. 分销商渠道配置

函数: GetChannelGroupsByResellerByTargetIdAndType(targetType string, targetId int, autoChannels []string) ([]string, bool)

分销商类型:

  • 个人分销商 (ResellerTypePersonal): 针对单个用户
  • 组织分销商 (ResellerTypeOrganization): 针对整个组织

处理逻辑:

  1. 根据目标类型和ID查找对应的分销商
  2. 获取分销商父级用户的渠道配置
  3. 应用分销商配置到渠道组过滤

5. 渠道组过滤算法

核心函数: AppendAndRemoveChannelGroups(channels []string, useChannels string, excludeChannels string) []string

两步过滤策略:

  1. 白名单追加 (AppendChannelGroups)

    • UseChannels 中的渠道组追加到基础渠道组
    • 跳过已存在的渠道组,避免重复
    • 忽略空字符串和空白项
  2. 黑名单移除 (RemoveChannelGroups)

    • 从结果中移除 ExcludeChannels 指定的渠道组
    • 同样忽略空字符串和空白项

示例:

// 输入
channels = [\"default\", \"premium\"]
useChannels = \"enterprise,vip\"
excludeChannels = \"premium\"

// 处理过程
1. 追加白名单: [\"default\", \"premium\", \"enterprise\", \"vip\"]
2. 移除黑名单: [\"default\", \"enterprise\", \"vip\"]

配置优先级规则

优先级顺序(从高到低)

  1. 组织链配置 ← 最高优先级
  2. 用户个人配置
  3. 分销商配置 ← 最低优先级

规则说明

  • 组织配置优先: 只要组织链中任意级别配置了 UseChannels,就以其为准
  • 用户配置次之: 仅当组织无配置时,才检查用户个人配置
  • 分销商兜底: 前两者都无配置时,才使用分销商配置
  • 黑名单覆盖: 黑名单在所有情况下都会生效

异常处理与容错

1. 缓存读取失败

  • 场景: 用户缓存信息无法获取
  • 处理: 直接返回基础 autoChannels,保障服务可用性

2. 配置解析异常

  • 空配置处理: 空字符串或空白项自动忽略
  • 无效渠道组: 不存在的渠道组名称会被过滤算法自然排除

3. 递归保护

  • 终止条件: 到达顶级组织(ParentId=0)时停止递归
  • 循环检测: 依赖数据库约束防止组织链循环引用

性能考虑

1. 缓存优化

  • 用户信息缓存减少数据库查询
  • 渠道组配置缓存提升过滤性能

2. 递归深度控制

  • 组织层级通常不会过深(一般3-5级)
  • 递归查找在合理范围内

3. 算法效率

  • 使用map进行存在性检查,O(1)时间复杂度
  • 避免不必要的数组操作

使用场景示例

场景1:企业统一渠道管理

组织配置:
  UseChannels: "enterprise,stable"
  ExcludeChannels: "experimental"

效果: 该组织下所有用户只能使用enterprise和stable渠道组

场景2:VIP用户特殊渠道

用户配置:
  UseChannels: "vip,premium"
  ExcludeChannels: ""

效果: 该用户可以使用vip和premium渠道组,覆盖组织配置

场景3:分销商渠道限制

分销商配置:
  UseChannels: "partner"
  ExcludeChannels: "internal"

效果: 该分销商下的用户/组织只能使用partner渠道组

相关配置接口

参考其他文档中的相关接口:

  • 组织渠道配置更新接口
  • 用户渠道配置更新接口
  • 分销商管理接口

注意事项

  1. 配置生效时间: 渠道配置修改后需要等待缓存刷新
  2. 权限控制: 渠道配置修改需要相应权限
  3. 监控告警: 建议监控渠道过滤异常情况
  4. 日志记录: 关键操作需要记录审计日志

文档版本: v1.0”