ai_member_xiaoai/business_knowledge/references/手机号查询角色ID方法.md

2.8 KiB
Raw Permalink Blame History

手机号 → 账号ID → 角色ID 检索方法

⚠️ 本文为脱敏参考版。凭证已移至 ~/.hermes/.env,数据库字典见 data_dict/vala_user.md

数据关系

手机号 (明文)
  │  XXTEA 加密
  ▼
tel_encrypt (密文)          account_id
  │                           │
  ▼                           ▼
vala_app_account ──────────► vala_app_character
  (账号表)       1:N 关联       (角色表)
  • 一个账号 (vala_app_account) 可以有 多个角色 (vala_app_character)
  • 关联字段:vala_app_character.account_id = vala_app_account.id

数据库

项目
数据库 MySQL 线上环境
库名 vala_user
用户 read_only

具体连接信息从 ~/.hermes/.env 读取。

表结构

vala_app_account账号表

字段 类型 说明
id bigint 账号ID主键
tel varchar(20) 手机号(脱敏显示,如 158****7007
tel_encrypt varchar(100) 手机号密文(用于精确匹配)

vala_app_character角色表

字段 类型 说明
id bigint 角色ID主键
account_id bigint 所属账号ID
nickname varchar(20) 角色昵称
gender tinyint(1) 性别
birthday varchar(50) 生日
purchase_season_package text 已购赛季包

手机号加密方式

手机号在数据库中以密文存储,加密算法为 XXTEA + Base64 URL-safe

密钥从 ~/.hermes/.envVALA_PHONE_XXTEA_KEY 读取。

查询步骤

步骤 1加密手机号

python3 business_knowledge/scripts/phone_encrypt.py encrypt 15849377007

步骤 2用密文查询账号和角色

SELECT 
    a.id AS account_id,
    a.tel,
    c.id AS character_id,
    c.nickname,
    c.gender,
    c.birthday,
    c.purchase_season_package,
    c.created_at
FROM vala_app_account a
LEFT JOIN vala_app_character c ON c.account_id = a.id
WHERE a.tel_encrypt = '<密文>';

步骤 3解读结果

account_id  tel          character_id  nickname  gender  birthday    purchase_season_package
18279       158****7007  23600         Morris    1       2021-09-09  [16,17,18,19,20]
18279       158****7007  23686         Nathan    1       2018-03-13  [16]
  • 账号ID: 18279
  • 角色: 23600 (Morris)、23686 (Nathan)
  • 一个账号下可能有多个角色(一个孩子一个角色)

注意事项

  1. tel 字段是脱敏的(如 158****7007),不能直接用于精确匹配
  2. 必须用 tel_encrypt 密文匹配,密文由 XXTEA 加密生成
  3. 一个账号可以有多个角色,查询结果可能返回多行
  4. 测试环境和线上环境的 tel_encrypt 值相同(加密算法一致)