131 lines
5.3 KiB
Python
131 lines
5.3 KiB
Python
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="未获取到需要审核的数据或已审核过")
|
||
|