from rest_framework.views import APIView from apps.lyTiktokUnion.models import DYBalanceRecord from utils.jsonResponse import SuccessResponse,ErrorResponse,DetailResponse from utils.common import get_parameter_dic,formatdatetime from django.db.models import Q,F,Sum,Count from django.db import transaction from rest_framework import serializers from rest_framework_simplejwt.authentication import JWTAuthentication from utils.serializers import CustomModelSerializer from utils.viewset import CustomModelViewSet from rest_framework.permissions import IsAuthenticated from utils.pagination import CustomPagination from apps.oauth.models import OAuthWXUser from utils.weixinpay import WxAppPay from mysystem.models import Users import json import django_filters import logging logger = logging.getLogger(__name__) class DYBalanceRecordFilterset(django_filters.rest_framework.FilterSet): #开始时间 beginAt = django_filters.DateTimeFilter(field_name='create_datetime', lookup_expr='gte') # 指定过滤的字段 #结束时间 endAt = django_filters.DateTimeFilter(field_name='create_datetime', lookup_expr='lte') # 模糊搜索 order_no = django_filters.CharFilter(field_name='order_no', lookup_expr='icontains') # icontains表示该字段模糊搜索 # 模糊搜索 audit_status = django_filters.CharFilter(field_name='audit_status') # icontains表示该字段模糊搜索 class Meta: model = DYBalanceRecord fields = ['beginAt', 'endAt','order_no','audit_status'] class DYBalanceRecordSerializer(CustomModelSerializer): """ 提现管理-序列化器 """ userinfo = serializers.SerializerMethodField() status_name = serializers.SerializerMethodField() audit_status_name = serializers.SerializerMethodField() def get_status_name(self,obj): return obj.get_status_display() def get_audit_status_name(self,obj): return obj.get_audit_status_display() def get_userinfo(self, obj): if obj.creator_id: creator = Users.objects.filter(id=obj.creator_id).first() if creator: return { 'id': creator.id, 'nickname': creator.nickname, 'avatar': creator.avatar, 'mobile': creator.mobile, } return { 'id': "", 'nickname': "", 'avatar': "", 'mobile': "", } class Meta: model = DYBalanceRecord read_only_fields = ["id"] fields = '__all__' class DYBalanceRecordViewSet(CustomModelViewSet): """ 提现管理 接口 """ queryset = DYBalanceRecord.objects.filter(type=1).order_by("-create_datetime") serializer_class = DYBalanceRecordSerializer filterset_class = DYBalanceRecordFilterset search_fields = ("creator__nickname","creator__mobile") def audit(self, request): reqData = get_parameter_dic(request) id = reqData.get('id',None) action = reqData.get('action',None) remark = reqData.get('audit_remarks',None) # 按照原来的过滤查询 queryset = self.filter_queryset(self.get_queryset()) instance = queryset.filter(id=id,status=1).first() if instance is not None: user = instance.user if action == "pass": oldbalance = user.balance newbalance = oldbalance - instance.money # instance.status = 20 instance.audit_status = 20 instance.balance = newbalance # instance.audit_remarks = remark instance.save() #给用户钱包余额扣钱 # user.balance = newbalance # user.save() # 开始提现 trade_no = instance.order_no # 商户订单号 amount = float(instance.money)*100 # '企业付款金额,单位为分' # openid = OAuthWXUser.objects.filter(user=user).values_list('xcx_openid', flat=True).first() openid = user.username response = WxAppPay().cashout(trade_no,amount,openid) content = json.loads(response.content) if response.status_code == 200: instance.status = 20 instance.trade_no = content['batch_id'] instance.save() user.save() else: logger.error("微信小程序提现返回错误,用户openid:%s,微信返回错误信息:%s" % (openid, response.text)) instance.status = 30 instance.save() return DetailResponse(msg="已通过") elif action == "deny": instance.status = 30 instance.audit_status = 30 instance.audit_remarks = remark instance.save() return DetailResponse(msg="已拒绝") else: return ErrorResponse(msg="审核动作错误,只能为pass或deny") else: return ErrorResponse(msg="未获取到需要审核的数据或已审核过")