"""后台 — 提现冻结配置/解冻接口""" import logging from django.db import transaction from rest_framework.parsers import JSONParser from rest_framework.response import Response from rest_framework.views import APIView from yonghu.freeze_service import ( FREEZE_LEIXING_SET, admin_unfreeze_balance, get_public_freeze_settings, get_user_freeze_info, save_public_freeze_settings, save_user_freeze_settings, ) from yonghu.models import UserMain from .view import verify_kefu_permission logger = logging.getLogger(__name__) _WITHDRAW_PERMS = ('5500a', '5500b', '5500c') def _check_withdraw_perm(permissions): return any(p in permissions for p in _WITHDRAW_PERMS) class DongjieUserConfigView(APIView): """ 用户单独冻结配置 / 解冻(打手佣金1、管事2、押金5、商家6 共用) GET POST /houtai/hqdjdongjie """ permission_classes = [] parser_classes = [JSONParser] def post(self, request): username = (request.data.get('username') or '').strip() action = (request.data.get('action') or 'get').strip() kefu, permissions = verify_kefu_permission(request, username) if kefu is None: return permissions if not _check_withdraw_perm(permissions): return Response({'code': 403, 'msg': '无权限操作冻结配置'}) yonghuid = (request.data.get('yonghuid') or '').strip() leixing_raw = request.data.get('leixing') try: leixing = int(leixing_raw) except (TypeError, ValueError): return Response({'code': 400, 'msg': 'leixing 无效'}) if leixing not in FREEZE_LEIXING_SET: return Response({'code': 400, 'msg': '该提现类型不支持冻结配置'}) try: user_main = UserMain.objects.get(yonghuid=yonghuid) except UserMain.DoesNotExist: return Response({'code': 404, 'msg': '用户不存在'}) if action == 'get': return Response({'code': 0, 'data': get_user_freeze_info(user_main, leixing)}) if action == 'save': try: with transaction.atomic(): data = save_user_freeze_settings(user_main, leixing, request.data) return Response({'code': 0, 'msg': '保存成功', 'data': data}) except ValueError as e: return Response({'code': 400, 'msg': str(e)}) if action == 'unfreeze': jine = request.data.get('jiedong_jine') or request.data.get('jine') beizhu = (request.data.get('beizhu') or '').strip() if jine is None: return Response({'code': 400, 'msg': '请填写解冻金额'}) try: with transaction.atomic(): result = admin_unfreeze_balance( user_main, leixing, jine, operator_id=username, beizhu=beizhu, ) info = get_user_freeze_info(user_main, leixing) info['balance'] = str(result['balance_after']) info['dongjie_chi'] = str(result['dongjie_chi_after']) info['unfreeze_result'] = { 'balance_before': str(result['balance_before']), 'balance_after': str(result['balance_after']), 'dongjie_chi_before': str(result['dongjie_chi_before']), 'dongjie_chi_after': str(result['dongjie_chi_after']), 'unfreeze_jine': str(result['unfreeze_jine']), } return Response({'code': 0, 'msg': '解冻成功', 'data': info}) except ValueError as e: return Response({'code': 400, 'msg': str(e)}) return Response({'code': 400, 'msg': 'action 无效,支持 get/save/unfreeze'})