Files
sixGuoDjango/django_app/积分查询管理接口.py
2026-09-19 11:51:34 +08:00

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)