101 lines
4.8 KiB
Python
101 lines
4.8 KiB
Python
from datetime import datetime
|
|
from typing import cast
|
|
|
|
from channels.layers import BaseChannelLayer, get_channel_layer
|
|
from django.db import models
|
|
from django.db.models import Case, Count, IntegerField, Sum, When
|
|
from rest_framework.decorators import action
|
|
from rest_framework.request import Request
|
|
from rest_framework.response import Response
|
|
from rest_framework.viewsets import ViewSet
|
|
|
|
from wechat_数据库.用户数据库.小程序积分数据库 import share积分表
|
|
from wechat_项目工具包.数据库的工具包.更新用户积分 import miniUser提现状态
|
|
|
|
default_channel_layer = cast(BaseChannelLayer, get_channel_layer(alias="default"))
|
|
|
|
from functools import wraps
|
|
import threading
|
|
|
|
|
|
def sync_lock(lock):
|
|
def decorator(fn):
|
|
@wraps(fn)
|
|
def wrapper(*args, **kwargs):
|
|
with lock:
|
|
return fn(*args, **kwargs)
|
|
|
|
return wrapper
|
|
|
|
return decorator
|
|
|
|
|
|
class 积分查询接口ViewSets(ViewSet):
|
|
lock = threading.Lock() # 所有请求 共享这一个 lock对象
|
|
|
|
@sync_lock(lock=lock) # 锁住这个接口所有并发请求,
|
|
@action(detail=False, methods=["get", "post", "put", "delete"], url_path="统计积分查询")
|
|
def 统计积分查询(self, request: Request):
|
|
""""""
|
|
"""这里查询的数据,用于在商品详情页面 显示的 点击次数+累计积分总和"""
|
|
pass
|
|
self_mini_openid = request.data.get("self_mini_openid", None)
|
|
self_mini_unionid = request.data.get("self_mini_unionid", None, ) # 这里的查询者,就是积分表中的分享者
|
|
查询当前用户是否有记录结果 = share积分表.objects.filter(share分享者unionid=self_mini_unionid, ).exists()
|
|
if 查询当前用户是否有记录结果 is False:
|
|
pass
|
|
return Response(data={"share分享者unionid": self_mini_unionid, "share总积分": 0, "share分享点击人数": 0, "share不可提现积分": 0, "share已提现积分": 0}, )
|
|
else:
|
|
xiaozizidata = (
|
|
share积分表.objects
|
|
.filter(share分享者unionid="oy4Jw6P1FnuTNF-hSoJHNztSAoQ0")
|
|
.aggregate(
|
|
share总积分=Sum("share分享者积分值"),
|
|
share可提现积分=Sum(
|
|
Case(
|
|
When(models.Q(share积分是否可以提现的状态=miniUser提现状态().可提现) & models.Q(share提现微信侧返回的提现状态__isnull=True), then="share分享者积分值"),
|
|
default=0,
|
|
output_field=IntegerField()
|
|
)
|
|
),
|
|
|
|
share不可提现积分=Sum(
|
|
Case(
|
|
When(share积分是否可以提现的状态=miniUser提现状态().不可提现, then="share分享者积分值"
|
|
),
|
|
default=0,
|
|
output_field=IntegerField()
|
|
)
|
|
),
|
|
share已提现积分=Sum(
|
|
Case(
|
|
When(share提现微信侧返回的提现状态="SUCCESS", then="share分享者积分值"
|
|
),
|
|
default=0,
|
|
output_field=IntegerField()
|
|
)
|
|
),
|
|
share提现中积分=Sum(
|
|
Case(
|
|
When(models.Q(share提现微信侧返回的提现状态="WAIT_USER_CONFIRM"), then="share分享者积分值", ),
|
|
default=0,
|
|
output_field=IntegerField()
|
|
)
|
|
),
|
|
share点击次数=Count("id_主键")
|
|
)
|
|
)
|
|
xiaozizidata["unionid"] = self_mini_unionid
|
|
return Response(data=xiaozizidata)
|
|
|
|
@action(detail=False, methods=["get", "post", "put", "delete"], url_path="查询当前用户积列详情列表数据")
|
|
def 查询当前用户积列详情列表数据(self, request: Request):
|
|
"""本接口处理的: 当用户进入积分详情页面时候, 返回给当前用户所有的积分列表详情"""
|
|
pass
|
|
self_mini_openid = request.data.get("self_mini_openid", None)
|
|
self_mini_unionid = request.data.get("self_mini_unionid", None)
|
|
当前的月份 = datetime.now().month
|
|
shareDaat = share积分表.objects.filter(share分享者unionid=self_mini_unionid, ).order_by("-dateAndTime").values()
|
|
print("shareDaatshareDaatshareDaatshareDaatshareDaatshareDaatshareDaatshareDaat", shareDaat)
|
|
return Response(data=shareDaat)
|