171 lines
6.0 KiB
Python
171 lines
6.0 KiB
Python
import hmac
|
|
import threading
|
|
import traceback
|
|
import uuid
|
|
import hashlib
|
|
import xmltodict
|
|
import time
|
|
import logging
|
|
import requests
|
|
import os
|
|
import secrets
|
|
import random
|
|
import string
|
|
from calendar import monthrange
|
|
from decimal import Decimal
|
|
from datetime import date, datetime, timedelta
|
|
from django.utils import timezone
|
|
from django.conf import settings
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
from django.core.paginator import Paginator
|
|
from django.db import models, transaction, IntegrityError
|
|
from django.db.models import Q, Count, Sum, F, Exists, OuterRef
|
|
from gvsdsdk.fluent import db, func, FQ
|
|
from django.db.models.functions import TruncDate, TruncMonth, TruncYear
|
|
from django.contrib.auth.hashers import make_password
|
|
from django.views.decorators.csrf import csrf_exempt
|
|
from django.utils.decorators import method_decorator
|
|
|
|
from rest_framework.views import APIView
|
|
from rest_framework.response import Response
|
|
from rest_framework import status
|
|
from rest_framework.permissions import IsAuthenticated, AllowAny
|
|
from rest_framework.parsers import JSONParser, MultiPartParser, FormParser
|
|
|
|
# 工具类导入
|
|
from utils.oss_utils import validate_image, upload_to_oss, delete_from_oss
|
|
from backend.utils import (
|
|
update_dashou_daily_by_action,
|
|
update_shangjia_daily
|
|
)
|
|
from jituan.services.club_context import filter_club_char_field, filter_queryset_by_club, filter_user_related_by_club, filter_user_qs_by_club, orders_for_request
|
|
from jituan.services.catalog_scope import block_non_group_catalog_scope
|
|
from jituan.services.club_penalty import (
|
|
filter_penalty_qs, resolve_penalty_club_id, filter_gsfenhong_qs,
|
|
forbid_penalty_out_of_scope, resolve_penalty_record_club_id,
|
|
)
|
|
from jituan.services.club_user_access import forbid_if_user_out_of_scope, list_response_meta
|
|
from shop.utils import update_dianpu_daily_stat
|
|
from products.utils import update_shangpin_daily_stat
|
|
from orders.notice_tasks import dingdan_guangbo
|
|
from ..utils import (
|
|
verify_kefu_permission,
|
|
PERMISSION_TO_SHENFEN,
|
|
SHENFEN_PROFILE_MAP,
|
|
has_fadan_view_permission,
|
|
has_merchant_order_permission,
|
|
check_fadan_permission,
|
|
pick_order_id,
|
|
pick_penalty_create_params,
|
|
write_xiugai_log,
|
|
XIUGAI_LEIXING_DASHOU,
|
|
XIUGAI_LEIXING_GUANSHI,
|
|
XIUGAI_LEIXING_SHANGJIA,
|
|
XIUGAI_LEIXING_ZUZHANG,
|
|
XIUGAI_LEIXING_LABEL,
|
|
)
|
|
|
|
# models 集中导入
|
|
## gvsdsdk RBAC 模型(使用 PascalCase 字段名,匹配实际数据库表结构)
|
|
from gvsdsdk.models import Role, Permission, RolePermission, UserRole
|
|
## backend
|
|
from backend.models import WithdrawalDailyStats
|
|
|
|
## users
|
|
from users.models import (
|
|
UserGuanshi, UserBoss, UserZuzhang,
|
|
UserKefu, UserDashou, Xiugaijilu, UserShangjia, UserShenheguan
|
|
)
|
|
from users.business_models import User
|
|
|
|
## orders
|
|
from orders.models import (
|
|
CommissionRate, PlayerDeliveryImage, PenaltyRecord,
|
|
OrderPlayerHistory, Order, RefundRecord,
|
|
MerchantOrderExt, Penalty, PenaltyAppealImage, PenaltyBonus
|
|
)
|
|
|
|
## shop
|
|
from shop.models import Dianpu, DianpuMorenPeizhi, YonghuPingzheng, ShangpinLeixingDianpu, DianpuShangpinShenheShezhi
|
|
|
|
## products
|
|
from products.models import (
|
|
Shangpin, ShangpinLeixing, ShangpinZhuanqu, Huiyuan,
|
|
DuociFenhong, Czjilu, Huiyuangoumai, Gsfenhong
|
|
)
|
|
|
|
## config
|
|
from config.models import (
|
|
WithdrawConfig, ShangjiaLianjie, AccountPermission,
|
|
TixianQuotaDefault,
|
|
DailyIncomeStat, DailyPayoutStat, PopupPage, PopupConfig, PopupImage
|
|
)
|
|
|
|
## rank
|
|
from rank.models import (
|
|
KaoheguanBankuai, Bankuai, Chenghao, KaoheCishuFeiyong,
|
|
YonghuChenghao, ShenheJilu, KaoheJiluFeiyong, KaoheJujueJilu
|
|
)
|
|
|
|
# 序列化器
|
|
from ..serializers import PopupPageSerializer
|
|
|
|
# 全局常量、日志对象
|
|
logger = logging.getLogger('houtai')
|
|
SHOP_PRODUCT_PERMS = ['1199ab', '1199abc', '1199abd']
|
|
|
|
class GetWithdrawSettingsView(APIView):
|
|
"""
|
|
获取提现设置(手续费利率、每日限额、当日已提现总额)
|
|
权限:需要 5500a 或 5500b 或 5500c 任一
|
|
POST /houtai/hthqtxpz
|
|
"""
|
|
permission_classes = []
|
|
parser_classes = [JSONParser]
|
|
|
|
def post(self, request):
|
|
username = request.data.get('username', '').strip()
|
|
if not username:
|
|
return Response({'code': 401, 'msg': '缺少username'})
|
|
|
|
kefu, permissions = verify_kefu_permission(request, username)
|
|
if kefu is None:
|
|
return permissions
|
|
# 需要5500a/b/c任一
|
|
if not any(p in permissions for p in ('5500a', '5500b', '5500c')):
|
|
return Response({'code': 403, 'msg': '无权限查看提现设置'})
|
|
|
|
from jituan.services.withdraw_config import build_withdraw_settings_payload
|
|
return Response({'code': 0, 'data': build_withdraw_settings_payload(request)})
|
|
|
|
|
|
class UpdateWithdrawSettingsView(APIView):
|
|
"""
|
|
修改提现设置(权限细分):
|
|
- 修改打手相关(利率、个人限额、总限额)需要5500a
|
|
- 修改管事相关需要5500b
|
|
- 修改组长相关需要5500c
|
|
注意:修改每日总限额时,会联动影响“当日已提现总额”的显示(由前端实时计算),
|
|
后端不直接修改 WithdrawalDailyStats,该表由提现流程自动累加。
|
|
POST /houtai/htxgtxsz
|
|
"""
|
|
permission_classes = []
|
|
parser_classes = [JSONParser]
|
|
|
|
def post(self, request):
|
|
username = request.data.get('username', '').strip()
|
|
if not username:
|
|
return Response({'code': 401, 'msg': '缺少username'})
|
|
|
|
kefu, permissions = verify_kefu_permission(request, username)
|
|
if kefu is None:
|
|
return permissions
|
|
|
|
# 权限映射:要修改的角色需要对应的权限
|
|
# 前端传来 rates, quotas, total_limits 三个对象,每个包含 1,2,3
|
|
from jituan.services.withdraw_config import apply_withdraw_settings_update
|
|
return apply_withdraw_settings_update(request, permissions)
|
|
|
|
|
|
|