Files
along_django/houtai/dongjie_views.py
XingQue 8678f54459 实现提现资金冻结:手动/自动打款共用冻结拆分,驳回仅退 shenqing_jine。
新增公共/用户冻结配置、流水表与后台解冻接口;修复冻结与扣款重复扣余额问题。

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-10 04:06:08 +08:00

91 lines
3.3 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.
"""后台 — 提现冻结配置/解冻接口"""
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():
new_balance = admin_unfreeze_balance(
user_main, leixing, jine,
operator_id=username, beizhu=beizhu,
)
info = get_user_freeze_info(user_main, leixing)
info['balance'] = str(new_balance)
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'})