feat: 跨俱乐部资产迁移(计划/令牌/流水 + 用户与后台 API)
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
62
jituan/services/club_migrate_assets.py
Normal file
62
jituan/services/club_migrate_assets.py
Normal file
@@ -0,0 +1,62 @@
|
||||
"""跨俱乐部资产迁移 — 资产字段白名单字典(只迁登记过的字段)。"""
|
||||
from __future__ import annotations
|
||||
|
||||
from typing import Dict, List, Tuple
|
||||
|
||||
# key = "role.field" ;huiyuan 为特殊包
|
||||
ASSET_CATALOG: Dict[str, dict] = {
|
||||
'dashou.yue': {'role': 'dashou', 'field': 'yue', 'label': '打手可提现', 'kind': 'money'},
|
||||
'dashou.yajin': {'role': 'dashou', 'field': 'yajin', 'label': '打手押金', 'kind': 'money'},
|
||||
'dashou.jifen': {'role': 'dashou', 'field': 'jifen', 'label': '打手积分', 'kind': 'int'},
|
||||
'dashou.dongjie_yue': {'role': 'dashou', 'field': 'dongjie_yue', 'label': '打手冻结资金', 'kind': 'money'},
|
||||
'dashou.huiyuan': {'role': 'dashou', 'field': 'huiyuan', 'label': '打手会员资格', 'kind': 'huiyuan'},
|
||||
'shangjia.yue': {'role': 'shangjia', 'field': 'yue', 'label': '商家余额', 'kind': 'money'},
|
||||
'guanshi.yue': {'role': 'guanshi', 'field': 'yue', 'label': '管事可提现', 'kind': 'money'},
|
||||
'guanshi.dongjie_yue': {'role': 'guanshi', 'field': 'dongjie_yue', 'label': '管事冻结资金', 'kind': 'money'},
|
||||
'zuzhang.ketixian_jine': {'role': 'zuzhang', 'field': 'ketixian_jine', 'label': '组长可提现', 'kind': 'money'},
|
||||
'zuzhang.dongjie_yue': {'role': 'zuzhang', 'field': 'dongjie_yue', 'label': '组长冻结资金', 'kind': 'money'},
|
||||
'shenheguan.yue': {'role': 'shenheguan', 'field': 'yue', 'label': '考核官可提现', 'kind': 'money'},
|
||||
'shenheguan.dongjie_yue': {'role': 'shenheguan', 'field': 'dongjie_yue', 'label': '考核官冻结资金', 'kind': 'money'},
|
||||
}
|
||||
|
||||
ROLE_PROFILE_ATTR = {
|
||||
'dashou': 'DashouProfile',
|
||||
'shangjia': 'ShopProfile',
|
||||
'guanshi': 'GuanshiProfile',
|
||||
'zuzhang': 'ZuzhangProfile',
|
||||
'shenheguan': 'ShenheguanProfile',
|
||||
}
|
||||
|
||||
|
||||
def normalize_whitelist(raw) -> List[str]:
|
||||
if not raw:
|
||||
return []
|
||||
out = []
|
||||
seen = set()
|
||||
for x in raw:
|
||||
k = str(x or '').strip()
|
||||
if k in ASSET_CATALOG and k not in seen:
|
||||
seen.add(k)
|
||||
out.append(k)
|
||||
return out
|
||||
|
||||
|
||||
def catalog_for_admin() -> List[dict]:
|
||||
return [
|
||||
{'key': k, 'label': v['label'], 'role': v['role'], 'field': v['field'], 'kind': v['kind']}
|
||||
for k, v in ASSET_CATALOG.items()
|
||||
]
|
||||
|
||||
|
||||
def roles_from_whitelist(keys: List[str]) -> List[str]:
|
||||
roles = []
|
||||
seen = set()
|
||||
for k in keys:
|
||||
meta = ASSET_CATALOG.get(k)
|
||||
if not meta:
|
||||
continue
|
||||
r = meta['role']
|
||||
if r not in seen:
|
||||
seen.add(r)
|
||||
roles.append(r)
|
||||
return roles
|
||||
Reference in New Issue
Block a user