加入了 GVSDSDK 模块,进行了 QModel 兼容层的尝试,生产环境可用

This commit is contained in:
2026-06-16 00:13:10 +08:00
parent 9d9cfa53a4
commit 63e0f4edfc
68 changed files with 10256 additions and 1143 deletions

View File

@@ -1,8 +1,9 @@
from django.db import models
from gvsdsdk.model_base import QModel
from django.utils import timezone
class Shangpin(models.Model):
class Shangpin(QModel):
"""商品表 - 100-1000条数据"""
id = models.AutoField(primary_key=True, verbose_name='商品ID')
biaoqian = models.CharField(max_length=45,null=True, blank=True, verbose_name='商品标题') # 15汉字
@@ -67,7 +68,7 @@ class Shangpin(models.Model):
class ShangpinLeixing(models.Model):
class ShangpinLeixing(QModel):
"""商品类型表 - <10条数据"""
id = models.AutoField(primary_key=True, verbose_name='类型ID')
yaoqiuleixing = models.PositiveIntegerField(null=True, blank=True, verbose_name='抢单要求类型')
@@ -94,7 +95,7 @@ class ShangpinLeixing(models.Model):
return f"{self.jieshao}"
class ShangpinZhuanqu(models.Model):
class ShangpinZhuanqu(QModel):
"""商品专区表 - <50条数据"""
id = models.AutoField(primary_key=True, verbose_name='专区ID')
mingzi = models.CharField(max_length=45, null=True, blank=True, verbose_name='专区名称') # 15汉字
@@ -131,7 +132,7 @@ class ShangpinZhuanqu(models.Model):
return f"{self.mingzi}"
class Huiyuan(models.Model):
class Huiyuan(QModel):
huiyuan_id = models.CharField(max_length=6, unique=True, verbose_name='会员ID')
jieshao = models.CharField(max_length=30, verbose_name='会员介绍')
jtjieshao = models.TextField(null=True, blank=True, verbose_name='会员规则介绍')
@@ -159,7 +160,7 @@ class Huiyuan(models.Model):
return f"会员{self.huiyuan_id}:{self.jieshao}"
class Huiyuangoumai(models.Model):
class Huiyuangoumai(QModel):
id = models.AutoField(primary_key=True, verbose_name='购买记录ID')
huiyuan_id = models.CharField(max_length=6, db_index=True, verbose_name='会员ID')
yonghu_id = models.CharField(max_length=32, db_index=True, verbose_name='用户ID')
@@ -203,7 +204,7 @@ class Huiyuangoumai(models.Model):
return False
class Czjilu(models.Model):
class Czjilu(QModel):
dingdan_id = models.CharField(max_length=32, unique=True, db_index=True, verbose_name='订单ID')
huiyuan_id = models.CharField(max_length=6, null=True, blank=True, verbose_name='会员ID')
zhuangtai = models.IntegerField(null=True, blank=True, verbose_name='订单状态')
@@ -228,7 +229,7 @@ class Czjilu(models.Model):
class Gsfenhong(models.Model):
class Gsfenhong(QModel):
dingdan_id = models.CharField(max_length=32, unique=True, verbose_name='订单ID')
guanshi = models.CharField(max_length=7, db_index=True, verbose_name='管事ID')
dashouid = models.CharField(max_length=7, db_index=True,verbose_name='打手ID')
@@ -267,7 +268,7 @@ class Gsfenhong(models.Model):
class DuociFenhong(models.Model):
class DuociFenhong(QModel):
"""
多次分红配置表
用于配置不同次数下管事和组长的分红金额
@@ -300,7 +301,7 @@ class DuociFenhong(models.Model):
class ShangpinMeiriTongji(models.Model):
class ShangpinMeiriTongji(QModel):
"""
商品每日统计表
按商品 + 日期维度记录点单、成交、退款及收益数据

View File

@@ -17,6 +17,7 @@ import defusedxml.ElementTree as ET
from django.conf import settings
from django.db import transaction, connection
from django.db.models import Q
from gvsdsdk.fluent import db, func, FQ
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse
from django.utils import timezone
@@ -78,12 +79,12 @@ class ShangpinHuoquView(APIView):
# 1. 查询商品类型(只查询正常状态的类型,并排序)
# 正常运营:只显示 shenhezhuangtai=2 的商品类型
leixing_queryset = ShangpinLeixing.objects.filter(
leixing_queryset = ShangpinLeixing.query.filter(
shenhezhuangtai=1 # 只取正常状态
).order_by('-paixu', 'id') # 先按paixu降序再按id升序
# 注意:审核期间使用下面这行代码(先注释掉)
'''leixing_queryset = ShangpinLeixing.objects.filter(
'''leixing_queryset = ShangpinLeixing.query.filter(
shenhezhuangtai=2 # 审核期间:只取审核专用状态
).order_by('-paixu', 'id')'''
@@ -101,12 +102,12 @@ class ShangpinHuoquView(APIView):
visible_leixing_ids = [leixing['id'] for leixing in shangpinleixing_data]
if visible_leixing_ids:
zhuanqu_queryset = ShangpinZhuanqu.objects.filter(
zhuanqu_queryset = ShangpinZhuanqu.query.filter(
leixing_id__in=visible_leixing_ids,
shenhezhuangtai=1 # 🔴【添加】只筛选审核状态为2的专区
).order_by('-paixu', 'id') # 先按paixu降序再按id升序
else:
zhuanqu_queryset = ShangpinZhuanqu.objects.none()
zhuanqu_queryset = ShangpinZhuanqu.query.none()
shangpinzhuanqu_data = []
for zhuanqu in zhuanqu_queryset:
@@ -123,7 +124,7 @@ class ShangpinHuoquView(APIView):
if visible_zhuanqu_ids:
# 注意这里使用values()只获取指定字段,提高查询效率
shangpin_queryset = Shangpin.objects.filter(
shangpin_queryset = Shangpin.query.filter(
zhuanqu_id__in=visible_zhuanqu_ids,
shenhezhuangtai=1 # 🔴【添加】只筛选审核状态为2的商品
).values(
@@ -186,7 +187,7 @@ class ShangpinXiangqingHuoquView(APIView):
}, status=400)
# 直接查询,数据量小,性能没问题
shangpin = Shangpin.objects.filter(id=shangpin_id).first()
shangpin = Shangpin.query.filter(id=shangpin_id).first()
if not shangpin:
return Response({
@@ -256,7 +257,7 @@ class DashouHuiyuanList(APIView):
}, status=status.HTTP_400_BAD_REQUEST)
# 3. 查询所有会员数据ORM查询确保性能
huiyuan_queryset = Huiyuan.objects.all().only(
huiyuan_queryset = Huiyuan.query.all().only(
'huiyuan_id', # 会员ID
'jieshao', # 会员名字注意jieshao字段实际存储的是会员名字
'jtjieshao', # 会员具体介绍
@@ -349,7 +350,7 @@ class YajinGoumai(APIView):
dingdanid = f"CzYJ{timestamp_ms:011d}{timestamp_ns:06d}{random_num:02d}"
# 4. 创建充值记录订单
chongzhi_jilu = Czjilu.objects.create(
chongzhi_jilu = Czjilu.query.create(
dingdan_id=dingdanid,
zhuangtai=9, # 未支付状态
yonghuid=request.user.yonghuid,
@@ -576,7 +577,7 @@ class YajinHuitiao(View):
# 4. 查询订单
try:
order = Czjilu.objects.get(dingdan_id=out_trade_no)
order = Czjilu.query.get(dingdan_id=out_trade_no)
logger.info(f"找到订单: {order.dingdan_id}, 状态: {order.zhuangtai}, 金额: {order.jine}")
except Czjilu.DoesNotExist:
logger.error(f"订单不存在: {out_trade_no}")
@@ -605,7 +606,7 @@ class YajinHuitiao(View):
# 8. 更新打手押金
try:
# 通过用户ID查找打手高效查询
dashou = UserDashou.objects.get(user__yonghuid=order.yonghuid)
dashou = UserDashou.query.get(user__yonghuid=order.yonghuid)
# 增加押金使用Decimal确保精度
dashou.yajin += Decimal(str(order_amount_yuan))
@@ -619,10 +620,10 @@ class YajinHuitiao(View):
guanshi_id = dashou.yaoqingren
if not guanshi_id:
logger.info(f"押金分红跳过: 打手{order.yonghuid}无邀请管事")
elif Gsfenhong.objects.filter(dingdan_id=order.dingdan_id).exists():
elif Gsfenhong.query.filter(dingdan_id=order.dingdan_id).exists():
logger.info(f"押金分红已处理: 订单{order.dingdan_id}")
else:
lilu_obj = Lilubiao.objects.filter(fadanpingtai='12').first()
lilu_obj = Lilubiao.query.filter(fadanpingtai='12').first()
rate = lilu_obj.lilu if lilu_obj and lilu_obj.lilu is not None else Decimal('0')
if rate <= 0:
logger.info(f"押金分红跳过: 费率未配置或为0")
@@ -639,7 +640,7 @@ class YajinHuitiao(View):
guanshi.save(update_fields=['yue', 'chongzhifenrun'])
user_main = dashou.user
Gsfenhong.objects.create(
Gsfenhong.query.create(
dingdan_id=order.dingdan_id,
guanshi=guanshi_id,
dashouid=order.yonghuid,
@@ -684,7 +685,7 @@ class YajinHuitiao(View):
# 查询或创建ID=1的收支记录
update_daily_income(jine_decimal)
szjilu, created = Szjilu.objects.get_or_create(
szjilu, created = Szjilu.query.get_or_create(
id=1,
defaults={
'zongsy': Decimal('0.00'),
@@ -795,7 +796,7 @@ class YajinShibai(APIView):
# 2. 查询订单(确保是当前用户的订单)
try:
order = Czjilu.objects.get(
order = Czjilu.query.get(
dingdan_id=dingdanid,
yonghuid=request.user.yonghuid
)
@@ -853,7 +854,7 @@ class YajinLunxun(APIView):
# 2. 查询订单(确保是当前用户的订单)
try:
order = Czjilu.objects.get(
order = Czjilu.query.get(
dingdan_id=dingdanid,
yonghuid=request.user.yonghuid
)
@@ -945,7 +946,7 @@ class JifenBuchong(APIView):
# 5. 创建积分充值记录订单固定5元
jine = 5.00 # 固定5元
chongzhi_jilu = Czjilu.objects.create(
chongzhi_jilu = Czjilu.query.create(
dingdan_id=dingdanid,
zhuangtai=9, # 未支付状态
yonghuid=request.user.yonghuid,
@@ -1170,7 +1171,7 @@ class JifenHuitiao(View):
# 4. 查询订单
try:
order = Czjilu.objects.get(dingdan_id=out_trade_no)
order = Czjilu.query.get(dingdan_id=out_trade_no)
logger.info(f"找到积分订单: {order.dingdan_id}, 状态: {order.zhuangtai}, 金额: {order.jine}")
except Czjilu.DoesNotExist:
logger.error(f"积分订单不存在: {out_trade_no}")
@@ -1199,7 +1200,7 @@ class JifenHuitiao(View):
update_daily_income(jine_decimal)
# 查询或创建ID=1的收支记录
szjilu, created = Szjilu.objects.get_or_create(
szjilu, created = Szjilu.query.get_or_create(
id=1,
defaults={
'zongsy': Decimal('0.00'),
@@ -1233,7 +1234,7 @@ class JifenHuitiao(View):
# 8. 更新打手积分
try:
# 通过用户ID查找打手
dashou = UserDashou.objects.get(user__yonghuid=order.yonghuid)
dashou = UserDashou.query.get(user__yonghuid=order.yonghuid)
# 检查积分是否小于10
if dashou.jifen < 10:
@@ -1339,7 +1340,7 @@ class JifenShibai(APIView):
# 2. 查询订单(确保是当前用户的订单)
try:
order = Czjilu.objects.get(
order = Czjilu.query.get(
dingdan_id=dingdanid,
yonghuid=request.user.yonghuid
)
@@ -1404,7 +1405,7 @@ class JifenLunxun(APIView):
# 2. 查询订单(确保是当前用户的订单)
try:
order = Czjilu.objects.get(
order = Czjilu.query.get(
dingdan_id=dingdanid,
yonghuid=request.user.yonghuid
)
@@ -1497,7 +1498,7 @@ class HuiyuanGoumai(APIView):
# 4. 查询会员信息
try:
huiyuan = Huiyuan.objects.get(huiyuan_id=huiyuanid)
huiyuan = Huiyuan.query.get(huiyuan_id=huiyuanid)
except Huiyuan.DoesNotExist:
return Response({
'code': 400,
@@ -1516,7 +1517,7 @@ class HuiyuanGoumai(APIView):
# 组合订单说明:会员介绍 + 配置描述
shuoming = f"{huiyuan.jieshao} - {settings.HUIYUAN_PAY_DESCRIPTION}"
chongzhi_jilu = Czjilu.objects.create(
chongzhi_jilu = Czjilu.query.create(
dingdan_id=dingdanid,
zhuangtai=9, # 未支付状态
yonghuid=request.user.yonghuid,
@@ -1741,7 +1742,7 @@ class HuiyuanHuitiao(View):
# 查询订单
try:
order = Czjilu.objects.get(dingdan_id=out_trade_no)
order = Czjilu.query.get(dingdan_id=out_trade_no)
except Czjilu.DoesNotExist:
logger.error(f"会员订单不存在: {out_trade_no}")
return self.wechat_response('FAIL', '订单不存在')
@@ -1763,7 +1764,7 @@ class HuiyuanHuitiao(View):
# 查询会员信息
try:
huiyuan = Huiyuan.objects.get(huiyuan_id=order.huiyuan_id)
huiyuan = Huiyuan.query.get(huiyuan_id=order.huiyuan_id)
except Huiyuan.DoesNotExist:
logger.error(f"会员信息不存在: {order.huiyuan_id}")
return self.wechat_response('FAIL', '会员信息不存在')
@@ -1774,7 +1775,7 @@ class HuiyuanHuitiao(View):
update_daily_income(jine_decimal)
szjilu, _ = Szjilu.objects.get_or_create(
szjilu, _ = Szjilu.query.get_or_create(
id=1,
defaults={'zongsy': Decimal('0.00'), 'zongls': Decimal('0.00'), 'zongzc': Decimal('0.00'),
'jrzc': Decimal('0.00'), 'jrls': Decimal('0.00')}
@@ -1823,7 +1824,7 @@ class HuiyuanHuitiao(View):
def process_huiyuan_goumai(self, yonghuid, huiyuan_id, huiyuan):
"""处理会员购买记录(与原代码一致)"""
try:
existing_record = Huiyuangoumai.objects.filter(
existing_record = Huiyuangoumai.query.filter(
yonghu_id=yonghuid,
huiyuan_id=huiyuan_id
).first()
@@ -1837,14 +1838,14 @@ class HuiyuanHuitiao(View):
logger.info(f"会员续费: 用户{yonghuid}, 会员{huiyuan_id}")
return existing_record, False, False
else:
other_huiyuan_count = Huiyuangoumai.objects.filter(
other_huiyuan_count = Huiyuangoumai.query.filter(
yonghu_id=yonghuid
).exclude(huiyuan_id=huiyuan_id).count()
if other_huiyuan_count == 0:
is_first_buy_any = True
logger.info(f"用户{yonghuid}首次购买任何会员将获得10积分")
goumai_record = Huiyuangoumai.objects.create(
goumai_record = Huiyuangoumai.query.create(
yonghu_id=yonghuid,
huiyuan_id=huiyuan_id,
jieshao=huiyuan.jieshao,
@@ -1863,7 +1864,7 @@ class HuiyuanHuitiao(View):
def add_first_buy_jifen(self, yonghuid):
"""首次购买积分奖励(与原代码一致)"""
try:
dashou = UserDashou.objects.get(user__yonghuid=yonghuid)
dashou = UserDashou.query.get(user__yonghuid=yonghuid)
dashou.jifen += 10
dashou.save(update_fields=['jifen'])
logger.info(f"用户{yonghuid}首次购买会员,积分+10当前积分: {dashou.jifen}")
@@ -1879,7 +1880,7 @@ class HuiyuanHuitiao(View):
"""
try:
# 获取打手信息
dashou = UserDashou.objects.get(user__yonghuid=order.yonghuid)
dashou = UserDashou.query.get(user__yonghuid=order.yonghuid)
guanshi_id = dashou.yaoqingren
if not guanshi_id:
logger.info(f"打手{order.yonghuid}没有邀请人,无分红")
@@ -1887,7 +1888,7 @@ class HuiyuanHuitiao(View):
# 获取管事信息
try:
guanshi = UserGuanshi.objects.get(user__yonghuid=guanshi_id)
guanshi = UserGuanshi.query.get(user__yonghuid=guanshi_id)
except UserGuanshi.DoesNotExist:
logger.warning(f"管事信息不存在: {guanshi_id}")
return
@@ -1901,7 +1902,7 @@ class HuiyuanHuitiao(View):
nicheng = dashou.nicheng or "未知打手"
# 查询该打手针对该管事的已分红次数
existing_count = Gsfenhong.objects.filter(
existing_count = Gsfenhong.query.filter(
dashouid=order.yonghuid,
guanshi=guanshi_id
).count()
@@ -1921,7 +1922,7 @@ class HuiyuanHuitiao(View):
if zuzhang_id:
# 获取组长信息
try:
zuzhang = UserZuzhang.objects.get(user__yonghuid=zuzhang_id)
zuzhang = UserZuzhang.query.get(user__yonghuid=zuzhang_id)
except UserZuzhang.DoesNotExist:
logger.warning(f"组长信息不存在: {zuzhang_id}")
zuzhang = None
@@ -1965,7 +1966,7 @@ class HuiyuanHuitiao(View):
logger.info(f"组长分红成功: 组长{zuzhang_id}, 金额{zuzhang_fenhong}")
# 创建分红记录
Gsfenhong.objects.create(
Gsfenhong.query.create(
dingdan_id=order.dingdan_id,
guanshi=guanshi_id,
dashouid=order.yonghuid,
@@ -2030,7 +2031,7 @@ class HuiyuanHuitiao(View):
"""计算管事分红金额"""
# 先查多次分红配置表
try:
config = DuociFenhong.objects.get(
config = DuociFenhong.query.get(
huiyuan=huiyuan,
yonghuid=guanshi_id,
cishu=cishu
@@ -2055,7 +2056,7 @@ class HuiyuanHuitiao(View):
return None
# 查多次分红配置表
try:
config = DuociFenhong.objects.get(
config = DuociFenhong.query.get(
huiyuan=huiyuan,
yonghuid=zuzhang_id,
cishu=cishu
@@ -2141,7 +2142,7 @@ class HuiyuanShibai(APIView):
# 2. 查询订单(确保是当前用户的订单)
try:
order = Czjilu.objects.get(
order = Czjilu.query.get(
dingdan_id=dingdanid,
yonghuid=request.user.yonghuid
)
@@ -2206,7 +2207,7 @@ class HuiyuanLunxun(APIView):
# 2. 查询订单(确保是当前用户的订单)
try:
order = Czjilu.objects.get(
order = Czjilu.query.get(
dingdan_id=dingdanid,
yonghuid=request.user.yonghuid
)
@@ -2233,10 +2234,10 @@ class HuiyuanLunxun(APIView):
# 5. 查询会员信息
try:
huiyuan = Huiyuan.objects.get(huiyuan_id=order.huiyuan_id)
huiyuan = Huiyuan.query.get(huiyuan_id=order.huiyuan_id)
# 6. 查询会员购买记录
goumai_record = Huiyuangoumai.objects.filter(
goumai_record = Huiyuangoumai.query.filter(
yonghu_id=request.user.yonghuid,
huiyuan_id=order.huiyuan_id
).first()
@@ -2350,7 +2351,7 @@ class ShangjiaChongzhi(APIView):
# 4. 创建充值记录订单
try:
chongzhi_jilu = Czjilu.objects.create(
chongzhi_jilu = Czjilu.query.create(
dingdan_id=dingdanid,
zhuangtai=9, # 未支付状态
yonghuid=request.user.yonghuid,
@@ -2577,7 +2578,7 @@ class ShangjiaHuitiao(View):
# 4. 查询订单
try:
order = Czjilu.objects.get(dingdan_id=out_trade_no)
order = Czjilu.query.get(dingdan_id=out_trade_no)
logger.info(f"找到商家订单: {order.dingdan_id}, 状态: {order.zhuangtai}, 金额: {order.jine}")
except Czjilu.DoesNotExist:
logger.error(f"商家订单不存在: {out_trade_no}")
@@ -2607,7 +2608,7 @@ class ShangjiaHuitiao(View):
update_daily_income(jine_decimal)
# 查询或创建ID=1的收支记录
szjilu, created = Szjilu.objects.get_or_create(
szjilu, created = Szjilu.query.get_or_create(
id=1,
defaults={
'zongsy': Decimal('0.00'),
@@ -2644,7 +2645,7 @@ class ShangjiaHuitiao(View):
# 更新商家余额
try:
# 通过用户ID查找商家高效查询
shangjia = UserShangjia.objects.get(user__yonghuid=order.yonghuid)
shangjia = UserShangjia.query.get(user__yonghuid=order.yonghuid)
# 增加余额
shangjia.yue += order_amount_yuan
@@ -2746,7 +2747,7 @@ class ShangjiaShibai(APIView):
# 2. 查询订单(确保是当前用户的订单)
try:
order = Czjilu.objects.get(
order = Czjilu.query.get(
dingdan_id=dingdanid,
yonghuid=request.user.yonghuid,
leixing=4 # 确保是商家充值订单
@@ -2812,7 +2813,7 @@ class ShangjiaChenggong(APIView):
# 2. 查询订单(确保是当前用户的商家订单)
try:
order = Czjilu.objects.get(
order = Czjilu.query.get(
dingdan_id=dingdanid,
yonghuid=request.user.yonghuid,
leixing=4 # 商家充值类型
@@ -2895,13 +2896,13 @@ class GuanshiFenhongListAPI(APIView):
# 先查询总数(使用分页查询优化)
# 查询总记录数
zong_tiaoshu = Gsfenhong.objects.filter(query).count()
zong_tiaoshu = Gsfenhong.query.filter(query).count()
# 查询去重后的打手数量
chongzhi_dashou_shuliang = Gsfenhong.objects.filter(query).values('dashouid').distinct().count()
chongzhi_dashou_shuliang = Gsfenhong.query.filter(query).values('dashouid').distinct().count()
# 查询当前页数据,按创建时间倒序排列
fenhong_list = Gsfenhong.objects.filter(query) \
fenhong_list = Gsfenhong.query.filter(query) \
.order_by('-create_time') \
.values('dashouid', 'avatar', 'nicheng', 'fenhong', 'create_time')[offset:offset + page_size]
@@ -3007,7 +3008,7 @@ class AdGetAllDataView(APIView):
try:
# 使用select_related或prefetch_related优化查询如果需要关联查询
# 这里直接查询所有字段,然后提取需要的字段
shangpinleixing_queryset = ShangpinLeixing.objects.all()
shangpinleixing_queryset = ShangpinLeixing.query.all()
# 转换为前端需要的格式
shangpinleixing_list = []
@@ -3031,7 +3032,7 @@ class AdGetAllDataView(APIView):
# 7. 查询商品专区数据
try:
# 查询所有商品专区
zhuanqu_queryset = ShangpinZhuanqu.objects.all()
zhuanqu_queryset = ShangpinZhuanqu.query.all()
# 转换为前端需要的格式
zhuanqu_list = []
@@ -3052,7 +3053,7 @@ class AdGetAllDataView(APIView):
# 8. 查询会员数据
try:
# 查询所有会员
huiyuan_queryset = Huiyuan.objects.all()
huiyuan_queryset = Huiyuan.query.all()
# 转换为前端需要的格式
huiyuan_list = []
@@ -3137,7 +3138,7 @@ class ShangpinLeixingFabuView(APIView):
# 1.3 验证管理员扩展表使用AdminProfile模型
try:
admin_profile = AdminProfile.objects.get(user=user_main)
admin_profile = AdminProfile.query.get(user=user_main)
except AdminProfile.DoesNotExist:
return Response(
{'code': 401, 'msg': '管理员信息不存在', 'data': None},
@@ -3195,7 +3196,7 @@ class ShangpinLeixingFabuView(APIView):
)
# 验证会员ID是否存在
try:
huiyuan_obj = Huiyuan.objects.get(huiyuan_id=huiyuan_id)
huiyuan_obj = Huiyuan.query.get(huiyuan_id=huiyuan_id)
except Huiyuan.DoesNotExist:
return Response(
{'code': 400, 'msg': '会员ID不存在', 'data': None},
@@ -3337,7 +3338,7 @@ class ShangpinZhuanquFabuView(APIView):
# 1.3 验证管理员扩展表使用AdminProfile模型
try:
admin_profile = AdminProfile.objects.get(user=user_main)
admin_profile = AdminProfile.query.get(user=user_main)
except AdminProfile.DoesNotExist:
return Response(
{'code': 401, 'msg': '管理员信息不存在', 'data': None},
@@ -3364,7 +3365,7 @@ class ShangpinZhuanquFabuView(APIView):
# 2.2 验证类型ID是否存在
try:
# 验证商品类型是否存在
leixing_obj = ShangpinLeixing.objects.get(id=leixing_id)
leixing_obj = ShangpinLeixing.query.get(id=leixing_id)
except ShangpinLeixing.DoesNotExist:
return Response(
{'code': 400, 'msg': '商品类型不存在', 'data': None},
@@ -3446,7 +3447,7 @@ class ShangpinFabuView(APIView):
# 1.3 验证管理员扩展表使用AdminProfile模型
try:
admin_profile = AdminProfile.objects.get(user=user_main)
admin_profile = AdminProfile.query.get(user=user_main)
except AdminProfile.DoesNotExist:
return Response(
{'code': 401, 'msg': '管理员信息不存在', 'data': None},
@@ -3535,7 +3536,7 @@ class ShangpinFabuView(APIView):
# === 3. 验证关联数据 ===
# 3.1 验证商品类型
try:
leixing_obj = ShangpinLeixing.objects.get(id=leixing_id)
leixing_obj = ShangpinLeixing.query.get(id=leixing_id)
except ShangpinLeixing.DoesNotExist:
return Response(
{'code': 400, 'msg': '商品类型不存在', 'data': None},
@@ -3563,7 +3564,7 @@ class ShangpinFabuView(APIView):
# 验证会员是否存在
try:
huiyuan_obj = Huiyuan.objects.get(huiyuan_id=huiyuan_id)
huiyuan_obj = Huiyuan.query.get(huiyuan_id=huiyuan_id)
except Huiyuan.DoesNotExist:
return Response(
{'code': 400, 'msg': '会员不存在', 'data': None},
@@ -3606,7 +3607,7 @@ class ShangpinFabuView(APIView):
# 3.3 验证商品专区
try:
zhuanqu_obj = ShangpinZhuanqu.objects.get(id=zhuanqu_id, leixing_id=leixing_id)
zhuanqu_obj = ShangpinZhuanqu.query.get(id=zhuanqu_id, leixing_id=leixing_id)
except ShangpinZhuanqu.DoesNotExist:
return Response(
{'code': 400, 'msg': '商品专区不存在或与商品类型不匹配', 'data': None},
@@ -3750,7 +3751,7 @@ class GuizeTupianShangchuanView(APIView):
# 1.3 验证管理员扩展表使用AdminProfile模型
try:
admin_profile = AdminProfile.objects.get(user=user_main)
admin_profile = AdminProfile.query.get(user=user_main)
except AdminProfile.DoesNotExist:
return Response(
{'code': 401, 'msg': '管理员信息不存在', 'data': None},
@@ -3784,7 +3785,7 @@ class GuizeTupianShangchuanView(APIView):
# === 3. 验证商品是否存在 ===
try:
shangpin_obj = Shangpin.objects.get(id=shangpin_id)
shangpin_obj = Shangpin.query.get(id=shangpin_id)
except Shangpin.DoesNotExist:
return Response(
{'code': 400, 'msg': '商品不存在', 'data': None},
@@ -3893,7 +3894,7 @@ class AdHuiyuanHqView(APIView):
# 1.3 验证管理员扩展表使用AdminProfile模型
try:
admin_profile = AdminProfile.objects.get(user=user_main)
admin_profile = AdminProfile.query.get(user=user_main)
except AdminProfile.DoesNotExist:
return Response(
{'code': 401, 'msg': '权限验证失败', 'data': None},
@@ -3902,7 +3903,7 @@ class AdHuiyuanHqView(APIView):
# === 2. 查询会员表数据 ===
# 查询所有会员数据,按创建时间倒序排列
huiyuan_queryset = Huiyuan.objects.all().order_by('-create_time')
huiyuan_queryset = Huiyuan.query.all().order_by('-create_time')
# 构建会员数据列表
huiyuan_list = []
@@ -3923,7 +3924,7 @@ class AdHuiyuanHqView(APIView):
# === 3. 查询商品类型表数据 ===
# 筛选抢单要求类型等于数字1的所有数据yaoqiuleixing=1
shangpinleixing_queryset = ShangpinLeixing.objects.filter(
shangpinleixing_queryset = ShangpinLeixing.query.filter(
yaoqiuleixing=1 # 抢单要求类型为1会员抢单
).order_by('id') # 按ID排序
@@ -4000,7 +4001,7 @@ class HuiyuanXiugaiView(APIView):
# 1.3 验证管理员扩展表
try:
admin_profile = AdminProfile.objects.get(user=user_main)
admin_profile = AdminProfile.query.get(user=user_main)
except AdminProfile.DoesNotExist:
return Response(
{'code': 401, 'msg': '权限验证失败', 'data': None},
@@ -4017,7 +4018,7 @@ class HuiyuanXiugaiView(APIView):
# === 3. 查询会员数据 ===
try:
huiyuan_obj = Huiyuan.objects.get(huiyuan_id=huiyuan_id)
huiyuan_obj = Huiyuan.query.get(huiyuan_id=huiyuan_id)
except Huiyuan.DoesNotExist:
return Response(
{'code': 400, 'msg': '会员不存在', 'data': None},
@@ -4173,7 +4174,7 @@ class AdHuiyuanFbView(APIView):
# 1.3 验证管理员扩展表
try:
admin_profile = AdminProfile.objects.get(user=user_main)
admin_profile = AdminProfile.query.get(user=user_main)
except AdminProfile.DoesNotExist:
return Response(
{'code': 401, 'msg': '权限验证失败', 'data': None},
@@ -4264,7 +4265,7 @@ class AdHuiyuanFbView(APIView):
random_part = ''.join(random.choices(chars, k=5))
huiyuan_id = f"V{random_part}"
# 检查是否已存在
if not Huiyuan.objects.filter(huiyuan_id=huiyuan_id).exists():
if not Huiyuan.query.filter(huiyuan_id=huiyuan_id).exists():
return huiyuan_id
huiyuan_id = generate_huiyuan_id()
@@ -4360,15 +4361,15 @@ class AdShangpinHuQu(APIView):
)
# 6. 查询公告数据(类型=1的公告
gonggao_obj = Gonggao.objects.filter(leixing=1).first()
gonggao_obj = Gonggao.query.filter(leixing=1).first()
shangpingonggao = gonggao_obj.jieshao if gonggao_obj else ''
# 7. 查询轮播图数据(类型=1的轮播图
lunbo_objs = Lunbo.objects.filter(leixing=1).values('tupian_url')
lunbo_objs = Lunbo.query.filter(leixing=1).values('tupian_url')
shangpinlunbo = [item['tupian_url'] for item in lunbo_objs]
# 8. 查询商品类型数据
shangpinleixing_data = ShangpinLeixing.objects.all().values(
shangpinleixing_data = ShangpinLeixing.query.all().values(
'id', # 类型ID
'jieshao', # 类型介绍(类型名称)
'tupian_url', # 类型图片URL
@@ -4378,21 +4379,21 @@ class AdShangpinHuQu(APIView):
)
# 9. 查询商品专区数据
shangpinzhuanqu_data = ShangpinZhuanqu.objects.all().values(
shangpinzhuanqu_data = ShangpinZhuanqu.query.all().values(
'id', # 专区ID
'mingzi', # 专区名称
'leixing_id' # 所属类型ID
)
# 10. 查询会员数据
huiyuan_data = Huiyuan.objects.all().values(
huiyuan_data = Huiyuan.query.all().values(
'huiyuan_id', # 会员ID
'jieshao', # 会员介绍(会员名称)
'jiage' # 会员价格
)
# 11. 查询商品数据
shangpin_data = Shangpin.objects.all().values(
shangpin_data = Shangpin.query.all().values(
'id', # 商品ID
'biaoqian', # 商品标题/标签
'jiage', # 商品价格
@@ -4493,7 +4494,7 @@ class AdGonggaoXiuGai(APIView):
)
# 8. 查询公告表类型为1的公告
gonggao_obj = Gonggao.objects.filter(leixing=1).first()
gonggao_obj = Gonggao.query.filter(leixing=1).first()
# 如果不存在,则创建
if not gonggao_obj:
@@ -4587,7 +4588,7 @@ class AdZhuanquXiuGai(APIView):
# 3. 查询专区
try:
zhuanqu_obj = ShangpinZhuanqu.objects.get(id=zhuanqu_id)
zhuanqu_obj = ShangpinZhuanqu.query.get(id=zhuanqu_id)
except ShangpinZhuanqu.DoesNotExist:
return Response(
{'code': 400, 'message': '专区不存在', 'data': None},
@@ -4683,7 +4684,7 @@ class AdLunboXiuGai(APIView):
)
# 查询轮播图记录
lunbo_obj = Lunbo.objects.filter(tupian_url=tupian_url, leixing=1).first()
lunbo_obj = Lunbo.query.filter(tupian_url=tupian_url, leixing=1).first()
if not lunbo_obj:
return Response(
@@ -4758,7 +4759,7 @@ class AdLunboXiuGai(APIView):
)
# 创建轮播图记录
lunbo_obj = Lunbo.objects.create(
lunbo_obj = Lunbo.query.create(
tupian_url=oss_file_path, # 存相对路径
leixing=1
)
@@ -4819,7 +4820,7 @@ class AdLeixingXiuGai(APIView):
# 3. 查询商品类型
try:
leixing_obj = ShangpinLeixing.objects.get(id=leixing_id)
leixing_obj = ShangpinLeixing.query.get(id=leixing_id)
except ShangpinLeixing.DoesNotExist:
return Response({'code': 400, 'message': '商品类型不存在', 'data': None},
status=status.HTTP_400_BAD_REQUEST)
@@ -4848,7 +4849,7 @@ class AdLeixingXiuGai(APIView):
leixing_obj.huiyuan_id = huiyuan_id
# 验证会员存在
try:
Huiyuan.objects.get(huiyuan_id=huiyuan_id)
Huiyuan.query.get(huiyuan_id=huiyuan_id)
except Huiyuan.DoesNotExist:
return Response({'code': 400, 'msg': '会员ID不存在', 'data': None},
status=status.HTTP_400_BAD_REQUEST)
@@ -4876,7 +4877,7 @@ class AdLeixingXiuGai(APIView):
if huiyuan_id and huiyuan_id != leixing_obj.huiyuan_id:
# 验证会员存在
try:
Huiyuan.objects.get(huiyuan_id=huiyuan_id)
Huiyuan.query.get(huiyuan_id=huiyuan_id)
except Huiyuan.DoesNotExist:
return Response({'code': 400, 'msg': '会员ID不存在', 'data': None},
status=status.HTTP_400_BAD_REQUEST)
@@ -4985,7 +4986,7 @@ class AdLeixingXiuGai(APIView):
# 2. 执行批量更新(确保只有实际有变化的字段才会执行)
if shangpin_update_fields:
# 查询所有属于该类型的商品使用filter而非all以提高效率
affected_count = Shangpin.objects.filter(
affected_count = Shangpin.query.filter(
leixing_id=leixing_obj.id
).update(**shangpin_update_fields)
@@ -5088,7 +5089,7 @@ class AdShangpinNeiRongHuoQu(APIView):
# 4. 查询商品数据
try:
shangpin_obj = Shangpin.objects.get(id=shangpin_id)
shangpin_obj = Shangpin.query.get(id=shangpin_id)
except Shangpin.DoesNotExist:
return Response(
{'code': 404, 'message': '商品不存在', 'data': None},
@@ -5203,7 +5204,7 @@ class AdShangpinXiuGai(APIView):
try:
# 查询商品
try:
shangpin_obj = Shangpin.objects.get(id=shangpin_id)
shangpin_obj = Shangpin.query.get(id=shangpin_id)
except Shangpin.DoesNotExist:
return Response(
{'code': 404, 'message': '商品不存在', 'data': None},
@@ -5251,7 +5252,7 @@ class AdShangpinXiuGai(APIView):
try:
# 查询商品
try:
shangpin_obj = Shangpin.objects.get(id=shangpin_id)
shangpin_obj = Shangpin.query.get(id=shangpin_id)
except Shangpin.DoesNotExist:
return Response(
{'code': 404, 'message': '商品不存在', 'data': None},
@@ -5444,7 +5445,7 @@ class AdShangpinGuizeXiuGai(APIView):
# 2. 查询商品
try:
shangpin_obj = Shangpin.objects.get(id=shangpin_id)
shangpin_obj = Shangpin.query.get(id=shangpin_id)
except Shangpin.DoesNotExist:
return Response(
{'code': 404, 'message': '商品不存在', 'data': None},
@@ -5587,7 +5588,7 @@ class HuiyuanTypeListView(APIView):
}, status=status.HTTP_401_UNAUTHORIZED)
# 🔥 2. 获取所有会员类型
huiyuan_list = Huiyuan.objects.all().order_by('create_time')
huiyuan_list = Huiyuan.query.all().order_by('create_time')
# 🔥 3. 构建返回数据
huiyuan_data = []
@@ -5667,7 +5668,7 @@ class HuiyuanRecordListView(APIView):
}, status=status.HTTP_400_BAD_REQUEST)
# 🔥 4. 检查会员类型是否存在
huiyuan_obj = Huiyuan.objects.filter(huiyuan_id=huiyuan_type).first()
huiyuan_obj = Huiyuan.query.filter(huiyuan_id=huiyuan_type).first()
if not huiyuan_obj:
return Response({
'code': 404,
@@ -5751,7 +5752,7 @@ class HuiyuanRecordListView(APIView):
has_more = (page * pagesize) < total_count
# 🔥 9. 获取会员类型统计信息(所有会员类型的当前状态总数)
huiyuan_types = Huiyuan.objects.all()
huiyuan_types = Huiyuan.query.all()
huiyuan_stats = []
for huiyuan in huiyuan_types:
@@ -5850,7 +5851,7 @@ class ZuzhangFenhongView(APIView):
# 1. 验证组长身份
try:
zuzhang = UserZuzhang.objects.get(user=current_user)
zuzhang = UserZuzhang.query.get(user=current_user)
except UserZuzhang.DoesNotExist:
return Response({
'code': 403,
@@ -5869,10 +5870,10 @@ class ZuzhangFenhongView(APIView):
fenhong_zonge = zuzhang.fenyong_zonge
# 3.2 邀请管事数统计邀请人等于当前用户ID的管事记录
yaoqing_guanshi = UserGuanshi.objects.filter(yaoqingren=current_user.yonghuid).count()
yaoqing_guanshi = UserGuanshi.query.filter(yaoqingren=current_user.yonghuid).count()
# 3.3 分红次数(总记录数)
base_queryset = Gsfenhong.objects.filter(zuzhang_id=current_user.yonghuid).order_by('-create_time')
base_queryset = Gsfenhong.query.filter(zuzhang_id=current_user.yonghuid).order_by('-create_time')
fenhong_cishu = base_queryset.count()
# 4. 分页查询
@@ -5944,7 +5945,7 @@ class ZuzhangFenhongView(APIView):
return {}
# 查询用户主表,并预加载 boss_profile
users = UserMain.objects.filter(yonghuid__in=guanshi_ids).select_related(
users = UserMain.query.filter(yonghuid__in=guanshi_ids).select_related(
'boss_profile'
).only(
'yonghuid', 'avatar',
@@ -6074,7 +6075,7 @@ class CzhqdyView(APIView):
if leixing == 1:
# 会员
try:
huiyuan = Huiyuan.objects.get(huiyuan_id=huiyuan_id)
huiyuan = Huiyuan.query.get(huiyuan_id=huiyuan_id)
target_price = huiyuan.jiage
except Huiyuan.DoesNotExist:
return Response({'code': 404, 'msg': '会员不存在'}, status=status.HTTP_404_NOT_FOUND)
@@ -6087,7 +6088,7 @@ class CzhqdyView(APIView):
elif leixing == 4:
# 罚款缴纳
try:
fadan = Fadan.objects.get(id=fadan_id, beichufa_id=user.yonghuid)
fadan = Fadan.query.get(id=fadan_id, beichufa_id=user.yonghuid)
target_price = fadan.fakuanjine
except Fadan.DoesNotExist:
return Response({'code': 404, 'msg': '罚单不存在或不属于当前用户'}, status=status.HTTP_404_NOT_FOUND)
@@ -6096,7 +6097,7 @@ class CzhqdyView(APIView):
rates = {}
for key in ['5', '6', '8', '11']:
try:
rate_obj = Lilubiao.objects.get(fadanpingtai=key)
rate_obj = Lilubiao.query.get(fadanpingtai=key)
rates[key] = rate_obj.lilu
except Lilubiao.DoesNotExist:
rates[key] = None # 未配置则跳过
@@ -6214,7 +6215,7 @@ class DsqrgmdhView(APIView):
target_price = None
if leixing == 1:
try:
huiyuan = Huiyuan.objects.get(huiyuan_id=huiyuan_id)
huiyuan = Huiyuan.query.get(huiyuan_id=huiyuan_id)
target_price = huiyuan.jiage
except Huiyuan.DoesNotExist:
return Response({'code': 404, 'msg': '会员不存在'}, status=status.HTTP_404_NOT_FOUND)
@@ -6226,14 +6227,14 @@ class DsqrgmdhView(APIView):
if not fadan_id:
return Response({'code': 400, 'msg': '缺少罚单ID'}, status=status.HTTP_400_BAD_REQUEST)
try:
fadan_obj = Fadan.objects.get(id=fadan_id, beichufa_id=request.user.yonghuid)
fadan_obj = Fadan.query.get(id=fadan_id, beichufa_id=request.user.yonghuid)
target_price = fadan_obj.fakuanjine
except Fadan.DoesNotExist:
return Response({'code': 404, 'msg': '罚单不存在或不属于当前用户'}, status=status.HTTP_404_NOT_FOUND)
identity = IDENTITY_CONFIG.get(shenfen_id)
try:
rate_obj = Lilubiao.objects.get(fadanpingtai=identity['rate_key'])
rate_obj = Lilubiao.query.get(fadanpingtai=identity['rate_key'])
rate = rate_obj.lilu
if rate >= 1:
return Response({'code': 400, 'msg': f"{identity['name']}费率异常"}, status=status.HTTP_400_BAD_REQUEST)
@@ -6254,7 +6255,7 @@ class DsqrgmdhView(APIView):
yonghuid = user.yonghuid
try:
profile = identity['model'].objects.get(user=user)
profile = identity['model'].query.get(user=user)
except identity['model'].DoesNotExist:
return Response({'code': 403, 'msg': f'您不是{identity["name"]}身份'})
@@ -6292,7 +6293,7 @@ class DsqrgmdhView(APIView):
shuoming = f"{identity['name']}抵扣 {action_desc},抵扣金额{required}"
czjilu = Czjilu.objects.create(
czjilu = Czjilu.query.create(
dingdan_id=dingdan_id,
huiyuan_id=huiyuan_id if leixing == 1 else None,
zhuangtai=1,
@@ -6313,7 +6314,7 @@ class DsqrgmdhView(APIView):
}
if is_first_buy:
try:
dashou = UserDashou.objects.get(user=user)
dashou = UserDashou.query.get(user=user)
dashou.jifen += 10
dashou.save(update_fields=['jifen'])
response_data['jifen'] = dashou.jifen
@@ -6358,7 +6359,7 @@ class DsqrgmdhView(APIView):
logger.error(f"事务处理异常: {str(e)}", exc_info=True)
return Response({'code': 500, 'msg': f'支付处理失败: {str(e)}'}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
final_profile = identity['model'].objects.get(user=user)
final_profile = identity['model'].query.get(user=user)
response_data['balance'] = str(getattr(final_profile, identity['balance_field']))
return Response({
@@ -6374,7 +6375,7 @@ class DsqrgmdhView(APIView):
def _process_member_purchase(self, yonghuid, huiyuan_id, huiyuan_obj):
is_first_buy_any = False
try:
record = Huiyuangoumai.objects.filter(
record = Huiyuangoumai.query.filter(
yonghu_id=yonghuid,
huiyuan_id=huiyuan_id
).first()
@@ -6384,10 +6385,10 @@ class DsqrgmdhView(APIView):
record.huiyuan_zhuangtai = 1
record.save(update_fields=['daoqi_time', 'huiyuan_zhuangtai'])
else:
other_count = Huiyuangoumai.objects.filter(yonghu_id=yonghuid).exclude(huiyuan_id=huiyuan_id).count()
other_count = Huiyuangoumai.query.filter(yonghu_id=yonghuid).exclude(huiyuan_id=huiyuan_id).count()
if other_count == 0:
is_first_buy_any = True
record = Huiyuangoumai.objects.create(
record = Huiyuangoumai.query.create(
yonghu_id=yonghuid,
huiyuan_id=huiyuan_id,
jieshao=huiyuan_obj.jieshao,
@@ -6397,6 +6398,6 @@ class DsqrgmdhView(APIView):
return record, is_first_buy_any
except Exception as e:
if 'unique' in str(e).lower() or 'duplicate' in str(e).lower():
record = Huiyuangoumai.objects.get(yonghu_id=yonghuid, huiyuan_id=huiyuan_id)
record = Huiyuangoumai.query.get(yonghu_id=yonghuid, huiyuan_id=huiyuan_id)
return record, False
raise