Files
Django/jituan/views_fund_freeze.py

106 lines
4.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""客服后台资金冻结 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'})