覆盖商家/管事/组长资金与封禁、冻结解冻、后台账号变更;列表接口权限 000001。 Co-authored-by: Cursor <cursoragent@cursor.com>
103 lines
3.1 KiB
Python
103 lines
3.1 KiB
Python
"""
|
||
后台敏感操作统一写入 xiugaijilu(修改/操作日志)。
|
||
|
||
leixing 约定:
|
||
0=系统配置, 2=打手, 3=管事, 4=商家, 5=组长, 9=后台账号
|
||
"""
|
||
from __future__ import annotations
|
||
|
||
from decimal import Decimal
|
||
from typing import Any, Optional
|
||
|
||
from .models import Xiugaijilu
|
||
|
||
LEIXING_SYSTEM = 0
|
||
LEIXING_DASHOU = 2
|
||
LEIXING_GUANSHI = 3
|
||
LEIXING_SHANGJIA = 4
|
||
LEIXING_ZUZHANG = 5
|
||
LEIXING_KEFU = 9
|
||
|
||
LEIXING_NAME = {
|
||
LEIXING_SYSTEM: '系统配置',
|
||
LEIXING_DASHOU: '打手',
|
||
LEIXING_GUANSHI: '管事',
|
||
LEIXING_SHANGJIA: '商家',
|
||
LEIXING_ZUZHANG: '组长',
|
||
LEIXING_KEFU: '后台账号',
|
||
}
|
||
|
||
# 冻结提现类型 → 操作日志用户类型
|
||
FREEZE_TO_XIUGAI_LEIXING = {
|
||
1: LEIXING_DASHOU, # 打手佣金
|
||
2: LEIXING_GUANSHI, # 管事
|
||
5: LEIXING_DASHOU, # 打手押金
|
||
6: LEIXING_SHANGJIA, # 商家
|
||
}
|
||
|
||
FREEZE_LEIXING_NAME = {
|
||
1: '打手佣金',
|
||
2: '管事分红',
|
||
5: '打手押金',
|
||
6: '商家余额',
|
||
}
|
||
|
||
|
||
def _d(v: Any) -> Decimal:
|
||
if v is None:
|
||
return Decimal('0.00')
|
||
if isinstance(v, Decimal):
|
||
return v
|
||
return Decimal(str(v))
|
||
|
||
|
||
def write_xiugai_log(
|
||
*,
|
||
yonghuid: str,
|
||
operator_phone: str,
|
||
leixing: int,
|
||
qitashuoming: str = '',
|
||
dashou_yue_before=None,
|
||
dashou_yue_after=None,
|
||
jifen_before=None,
|
||
jifen_after=None,
|
||
yajin_before=None,
|
||
yajin_after=None,
|
||
shangjia_yue_before=None,
|
||
shangjia_yue_after=None,
|
||
guanshi_yue_before=None,
|
||
guanshi_yue_after=None,
|
||
zuzhang_yue_before=None,
|
||
zuzhang_yue_after=None,
|
||
huiyuants: int = 0,
|
||
huiyuan_id: Optional[str] = None,
|
||
) -> Xiugaijilu:
|
||
"""写入一条操作日志;金额类字段仅在传入时覆盖默认 0。"""
|
||
kwargs = {
|
||
'yonghuid': str(yonghuid or '')[:7],
|
||
'xiugaiid': str(operator_phone or '')[:30],
|
||
'leixing': int(leixing),
|
||
'qitashuoming': (qitashuoming or '')[:2000] or None,
|
||
'huiyuants': int(huiyuants or 0),
|
||
'huiyuan_id': (str(huiyuan_id)[:6] if huiyuan_id else None),
|
||
}
|
||
if dashou_yue_before is not None or dashou_yue_after is not None:
|
||
kwargs['xiugaitijiaoq'] = _d(dashou_yue_before)
|
||
kwargs['xiugaitijiao'] = _d(dashou_yue_after)
|
||
if jifen_before is not None or jifen_after is not None:
|
||
kwargs['yjifen'] = int(jifen_before or 0)
|
||
kwargs['jifen'] = int(jifen_after or 0)
|
||
if yajin_before is not None or yajin_after is not None:
|
||
kwargs['yyajin'] = _d(yajin_before)
|
||
kwargs['yajin'] = _d(yajin_after)
|
||
if shangjia_yue_before is not None or shangjia_yue_after is not None:
|
||
kwargs['shangjiayueq'] = _d(shangjia_yue_before)
|
||
kwargs['shangjiayue'] = _d(shangjia_yue_after)
|
||
if guanshi_yue_before is not None or guanshi_yue_after is not None:
|
||
kwargs['guanshiyueq'] = _d(guanshi_yue_before)
|
||
kwargs['guanshiyue'] = _d(guanshi_yue_after)
|
||
if zuzhang_yue_before is not None or zuzhang_yue_after is not None:
|
||
kwargs['zuzhangyueq'] = _d(zuzhang_yue_before)
|
||
kwargs['zuzhangyue'] = _d(zuzhang_yue_after)
|
||
return Xiugaijilu.objects.create(**kwargs)
|