106 lines
4.0 KiB
Python
106 lines
4.0 KiB
Python
"""客服后台资金冻结 API。"""
|
||
from rest_framework.parsers import JSONParser
|
||
from rest_framework.permissions import IsAuthenticated
|
||
from rest_framework.response import Response
|
||
from rest_framework.views import APIView
|
||
|
||
from backend.utils import verify_kefu_permission
|
||
from jituan.services import fund_freeze_admin as admin_svc
|
||
|
||
PERM_CFG = 'djcfg001'
|
||
PERM_LED = 'djled001'
|
||
PERM_RISK = 'djrisk001'
|
||
|
||
|
||
def _auth(request, perm_code: str):
|
||
username = (request.data.get('username') or request.data.get('phone') or '').strip()
|
||
if not username:
|
||
return None, None, Response({'code': 400, 'msg': '缺少username'})
|
||
kefu, permissions = verify_kefu_permission(request, username)
|
||
if kefu is None:
|
||
return None, None, permissions
|
||
codes = set(permissions or [])
|
||
user = getattr(request, 'user', None)
|
||
if getattr(user, 'IsSuperuser', False) or '000001' in codes:
|
||
return kefu, permissions, None
|
||
if perm_code not in codes:
|
||
return None, None, Response({'code': 403, 'msg': f'无权限(需要 {perm_code})'})
|
||
return kefu, permissions, None
|
||
|
||
|
||
class FundFreezeConfigView(APIView):
|
||
"""
|
||
POST /jituan/houtai/fund-freeze-config
|
||
action: get | save
|
||
"""
|
||
permission_classes = [IsAuthenticated]
|
||
parser_classes = [JSONParser]
|
||
|
||
def post(self, request):
|
||
kefu, permissions, err = _auth(request, PERM_CFG)
|
||
if err:
|
||
return err
|
||
action = (request.data.get('action') or 'get').strip().lower()
|
||
if action == 'get':
|
||
return Response({'code': 0, 'msg': 'ok', 'data': admin_svc.build_config_payload(request)})
|
||
if action == 'save':
|
||
operator = getattr(getattr(request, 'user', None), 'UserUID', '') or ''
|
||
data, msg = admin_svc.save_config(request, request.data, operator=operator)
|
||
if msg:
|
||
return Response({'code': 400, 'msg': msg})
|
||
return Response({'code': 0, 'msg': '已保存', 'data': data})
|
||
return Response({'code': 400, 'msg': '无效 action'})
|
||
|
||
|
||
class FundFreezeLedgerView(APIView):
|
||
"""
|
||
POST /jituan/houtai/fund-freeze-ledger
|
||
action: list | events | unfreeze
|
||
"""
|
||
permission_classes = [IsAuthenticated]
|
||
parser_classes = [JSONParser]
|
||
|
||
def post(self, request):
|
||
kefu, permissions, err = _auth(request, PERM_LED)
|
||
if err:
|
||
return err
|
||
action = (request.data.get('action') or 'list').strip().lower()
|
||
if action == 'list':
|
||
return Response({'code': 0, 'msg': 'ok', 'data': admin_svc.list_ledgers(request, request.data)})
|
||
if action == 'events':
|
||
from jituan.services.fund_freeze_admin import _club
|
||
try:
|
||
lid = int(request.data.get('ledger_id') or 0)
|
||
except (TypeError, ValueError):
|
||
return Response({'code': 400, 'msg': 'ledger_id 无效'})
|
||
return Response({
|
||
'code': 0,
|
||
'msg': 'ok',
|
||
'data': {'list': admin_svc.list_unfreeze_events(lid, _club(request))},
|
||
})
|
||
if action == 'unfreeze':
|
||
operator = getattr(getattr(request, 'user', None), 'UserUID', '') or ''
|
||
data, msg = admin_svc.manual_unfreeze(request, request.data, operator=operator)
|
||
if msg:
|
||
return Response({'code': 400, 'msg': msg})
|
||
return Response({'code': 0, 'msg': '解冻成功', 'data': data})
|
||
return Response({'code': 400, 'msg': '无效 action'})
|
||
|
||
|
||
class FundFreezeRiskView(APIView):
|
||
"""
|
||
POST /jituan/houtai/fund-freeze-risk
|
||
action: list
|
||
"""
|
||
permission_classes = [IsAuthenticated]
|
||
parser_classes = [JSONParser]
|
||
|
||
def post(self, request):
|
||
kefu, permissions, err = _auth(request, PERM_RISK)
|
||
if err:
|
||
return err
|
||
action = (request.data.get('action') or 'list').strip().lower()
|
||
if action == 'list':
|
||
return Response({'code': 0, 'msg': 'ok', 'data': admin_svc.list_risk_users(request, request.data)})
|
||
return Response({'code': 400, 'msg': '无效 action'})
|