加入了 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,7 +1,8 @@
from django.db import models
from gvsdsdk.model_base import QModel
class Lunbo(models.Model):
class Lunbo(QModel):
tupian_url = models.CharField(max_length=500, null=True, blank=True, verbose_name='轮播图片URL')
leixing = models.IntegerField(null=True, blank=True, verbose_name='图片类型:1轮播2个人中心背景')
@@ -14,7 +15,7 @@ class Lunbo(models.Model):
# 不要索引!数据量太小
class Gonggao(models.Model):
class Gonggao(QModel):
leixing = models.IntegerField(null=True, blank=True, verbose_name='公告类型')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更改时间')
@@ -25,7 +26,7 @@ class Gonggao(models.Model):
verbose_name_plural = '公告'
# 不要索引!数据量太小
class Qunpeizhi(models.Model):
class Qunpeizhi(QModel):
peizhiid = models.IntegerField(null=True, blank=True, verbose_name='群类型:1.打手 2.管事')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
update_time = models.DateTimeField(auto_now=True, verbose_name='更改时间')
@@ -35,7 +36,7 @@ class Qunpeizhi(models.Model):
class Meta:
db_table = 'qunpeizhi'
class Tupianpeizhi(models.Model):
class Tupianpeizhi(QModel):
tupian = models.CharField(max_length=500, null=True, blank=True, verbose_name='配置图片URL')
leixing = models.PositiveIntegerField(null=True, blank=True, verbose_name='提现类型1:打手规则图片2默认头像图片')
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
@@ -47,7 +48,7 @@ class Tupianpeizhi(models.Model):
verbose_name_plural = '配置图片'
class Szjilu(models.Model):
class Szjilu(QModel):
id = models.AutoField(primary_key=True, verbose_name='记录ID')
zongsy = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='总收益')
zongls = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='总流水')
@@ -68,7 +69,7 @@ class Szjilu(models.Model):
class ShangjiaMoban(models.Model):
class ShangjiaMoban(QModel):
"""商家订单模板表 - 存储商家创建的订单模板"""
# 主键ID自动递增
@@ -119,7 +120,7 @@ class ShangjiaMoban(models.Model):
class ShangjiaLianjie(models.Model):
class ShangjiaLianjie(QModel):
"""商家链接存储表 - 存储生成的派单链接"""
# 主键ID自动递增
@@ -208,7 +209,7 @@ class ShangjiaLianjie(models.Model):
class TixianQuotaDefault(models.Model):
class TixianQuotaDefault(QModel):
"""
默认每日提现限额表
"""
@@ -239,7 +240,7 @@ class TixianQuotaDefault(models.Model):
class WithdrawConfig(models.Model):
class WithdrawConfig(QModel):
"""
提现模式配置表
- mode = 1: 自动提现(前端展示收款码模式)
@@ -270,7 +271,7 @@ class WithdrawConfig(models.Model):
class AccountPermission(models.Model):
class AccountPermission(QModel):
"""账号权限表:记录每个账号拥有的权限及开关状态"""
account_id = models.CharField(max_length=11, db_index=True, verbose_name='账号ID')
permission_code = models.IntegerField(verbose_name='权限代码')
@@ -292,7 +293,7 @@ class AccountPermission(models.Model):
# apps/dingdan/models.py (新增模型)
class DailyIncomeStat(models.Model):
class DailyIncomeStat(QModel):
"""
每日收入统计表
记录平台每天通过微信支付获得的总收入和总笔数
@@ -326,7 +327,7 @@ class DailyIncomeStat(models.Model):
# apps/dingdan/models.py
class DailyPayoutStat(models.Model):
class DailyPayoutStat(QModel):
"""
每日出款统计表
记录平台每天通过提现/结算等方式的出款总额和总笔数
@@ -359,7 +360,7 @@ class DailyPayoutStat(models.Model):
class PopupPage(models.Model):
class PopupPage(QModel):
page_key = models.CharField(max_length=50, unique=True, db_index=True, verbose_name='页面标识')
name = models.CharField(max_length=100, verbose_name='页面名称')
description = models.TextField(blank=True, verbose_name='描述')
@@ -377,7 +378,7 @@ class PopupPage(models.Model):
return f'{self.name} ({self.page_key})'
class PopupConfig(models.Model):
class PopupConfig(QModel):
STRATEGY_CHOICES = (
('once', '仅一次'),
('daily', '每日'),
@@ -416,7 +417,7 @@ class PopupConfig(models.Model):
return f'{self.page.name} - {self.popup_id}'
class PopupImage(models.Model):
class PopupImage(QModel):
popup_config = models.ForeignKey(PopupConfig, on_delete=models.CASCADE, related_name='images')
image_url = models.CharField(max_length=500, verbose_name='图片相对路径')
text = models.TextField(blank=True, verbose_name='图片上方文字')

View File

@@ -11,7 +11,8 @@ from decimal import Decimal, InvalidOperation
from django.conf import settings
from django.db import transaction, connection
from django.db.models import Q, F, Max, Prefetch
from django.db.models import Q, F, Max, Prefetch
from gvsdsdk.fluent import db, func, FQ
from django.core.cache import cache
from django.core.paginator import Paginator
from django.utils import timezone
@@ -130,11 +131,11 @@ class ShangpinGonggaoView(APIView):
try:
logger.info("收到商品公告和轮播图请求")
# 1. 查询公告类型为1
gonggao_obj = Gonggao.objects.filter(leixing=1).first()
gonggao_obj = Gonggao.query.filter(leixing=1).first()
# 获取公告内容,如果没有则返回空字符串
gonggao_content = gonggao_obj.jieshao if gonggao_obj else ""
# 2. 查询轮播图类型为1按显示顺序排序
lunbo_queryset = Lunbo.objects.filter(leixing=1)
lunbo_queryset = Lunbo.query.filter(leixing=1)
# 提取轮播图URL列表
lunbo_urls = [lunbo.tupian_url for lunbo in lunbo_queryset]
# 3. 构建返回数据
@@ -209,11 +210,11 @@ class AdminConfigQueryView(APIView):
}, status=status.HTTP_401_UNAUTHORIZED)
# 查询图片配置
rule_image = Tupianpeizhi.objects.filter(leixing=1).first()
default_avatar = Tupianpeizhi.objects.filter(leixing=2).first()
rule_image = Tupianpeizhi.query.filter(leixing=1).first()
default_avatar = Tupianpeizhi.query.filter(leixing=2).first()
# 查询群配置
qun_configs = Qunpeizhi.objects.all()
qun_configs = Qunpeizhi.query.all()
qq_groups = []
for config in qun_configs:
qq_groups.append({
@@ -224,12 +225,12 @@ class AdminConfigQueryView(APIView):
})
# 查询利率配置
platform_rate_obj = Lilubiao.objects.filter(fadanpingtai='1').first()
shop_rate_obj = Lilubiao.objects.filter(fadanpingtai='3').first()
platform_rate_obj = Lilubiao.query.filter(fadanpingtai='1').first()
shop_rate_obj = Lilubiao.query.filter(fadanpingtai='3').first()
# 🔴【新增】打手提现抽成利率字符5
dashou_withdraw_obj = Lilubiao.objects.filter(fadanpingtai='5').first()
dashou_withdraw_obj = Lilubiao.query.filter(fadanpingtai='5').first()
# 🔴【新增】管事提现抽成利率字符6
guanshi_withdraw_obj = Lilubiao.objects.filter(fadanpingtai='6').first()
guanshi_withdraw_obj = Lilubiao.query.filter(fadanpingtai='6').first()
# 构建返回数据
data = {
@@ -372,7 +373,7 @@ class AdminUploadImageView(APIView):
# 更新数据库
with transaction.atomic():
# 获取或创建图片配置记录
tupian_peizhi, created = Tupianpeizhi.objects.get_or_create(leixing=int(leixing))
tupian_peizhi, created = Tupianpeizhi.query.get_or_create(leixing=int(leixing))
tupian_peizhi.tupian = fixed_relative_url
tupian_peizhi.save()
@@ -452,7 +453,7 @@ class AdminUpdateConfigView(APIView):
continue
# 🔴 修复使用filter()确保查询到正确的记录
qun_configs = Qunpeizhi.objects.filter(peizhiid=peizhiid)
qun_configs = Qunpeizhi.query.filter(peizhiid=peizhiid)
if qun_configs.exists():
# 如果存在多个相同peizhiid的记录取第一个应该只有一个
@@ -473,7 +474,7 @@ class AdminUpdateConfigView(APIView):
qun_config.save()
else:
# 如果不存在创建新的使用提供的peizhiid
qun_config = Qunpeizhi.objects.create(
qun_config = Qunpeizhi.query.create(
peizhiid=peizhiid,
neirong=group_data.get('neirong', '') or '',
qunid=group_data.get('qunid', '') or '',
@@ -502,7 +503,7 @@ class AdminUpdateConfigView(APIView):
platform_rate_float = float(platform_rate)
if 0 <= platform_rate_float <= 1:
# 🔴 修复:查询现有记录,如果不存在则创建
platform_rate_obj = Lilubiao.objects.filter(fadanpingtai='1').first()
platform_rate_obj = Lilubiao.query.filter(fadanpingtai='1').first()
if platform_rate_obj:
# 更新现有记录
@@ -510,7 +511,7 @@ class AdminUpdateConfigView(APIView):
platform_rate_obj.save()
else:
# 创建新记录
platform_rate_obj = Lilubiao.objects.create(
platform_rate_obj = Lilubiao.query.create(
lilu=platform_rate_float,
fadanpingtai='1'
)
@@ -536,7 +537,7 @@ class AdminUpdateConfigView(APIView):
shop_rate_float = float(shop_rate)
if 0 <= shop_rate_float <= 1:
# 🔴 修复:查询现有记录,如果不存在则创建
shop_rate_obj = Lilubiao.objects.filter(fadanpingtai='3').first()
shop_rate_obj = Lilubiao.query.filter(fadanpingtai='3').first()
if shop_rate_obj:
# 更新现有记录
@@ -544,7 +545,7 @@ class AdminUpdateConfigView(APIView):
shop_rate_obj.save()
else:
# 创建新记录
shop_rate_obj = Lilubiao.objects.create(
shop_rate_obj = Lilubiao.query.create(
lilu=shop_rate_float,
fadanpingtai='3'
)
@@ -573,7 +574,7 @@ class AdminUpdateConfigView(APIView):
dashou_withdraw_rate_float = float(dashou_withdraw_rate)
if 0 <= dashou_withdraw_rate_float <= 1:
# 查询现有记录,如果不存在则创建
dashou_withdraw_obj = Lilubiao.objects.filter(fadanpingtai='5').first()
dashou_withdraw_obj = Lilubiao.query.filter(fadanpingtai='5').first()
if dashou_withdraw_obj:
# 更新现有记录
@@ -581,7 +582,7 @@ class AdminUpdateConfigView(APIView):
dashou_withdraw_obj.save()
else:
# 创建新记录
dashou_withdraw_obj = Lilubiao.objects.create(
dashou_withdraw_obj = Lilubiao.query.create(
lilu=dashou_withdraw_rate_float,
fadanpingtai='5'
)
@@ -607,7 +608,7 @@ class AdminUpdateConfigView(APIView):
guanshi_withdraw_rate_float = float(guanshi_withdraw_rate)
if 0 <= guanshi_withdraw_rate_float <= 1:
# 查询现有记录,如果不存在则创建
guanshi_withdraw_obj = Lilubiao.objects.filter(fadanpingtai='6').first()
guanshi_withdraw_obj = Lilubiao.query.filter(fadanpingtai='6').first()
if guanshi_withdraw_obj:
# 更新现有记录
@@ -615,7 +616,7 @@ class AdminUpdateConfigView(APIView):
guanshi_withdraw_obj.save()
else:
# 创建新记录
guanshi_withdraw_obj = Lilubiao.objects.create(
guanshi_withdraw_obj = Lilubiao.query.create(
lilu=guanshi_withdraw_rate_float,
fadanpingtai='6'
)
@@ -786,7 +787,7 @@ class DashouPaihangView(APIView):
chaxun_tiaojian = Q(**{f'{shouyi_ziduan}__gt': 0}) & Q(zhanghaozhuangtai=1)
# 查询打手扩展表,并关联用户主表
dashou_list = UserDashou.objects.select_related('user').filter(
dashou_list = UserDashou.query.select_related('user').filter(
chaxun_tiaojian
).order_by(f'-{shouyi_ziduan}')[:self.ZUI_DAO_CHA_XUN_SHU_LIANG]
@@ -852,7 +853,7 @@ class DashouPaihangView(APIView):
chaxun_tiaojian = Q(**{f'{chaxun_ziduan}__gt': 0}) & Q(zhuangtai=1)
# 查询管事扩展表,并关联用户主表
guanshi_list = UserGuanshi.objects.select_related('user').filter(
guanshi_list = UserGuanshi.query.select_related('user').filter(
chaxun_tiaojian
).order_by(f'-{chaxun_ziduan}')[:self.ZUI_DAO_CHA_XUN_SHU_LIANG]
@@ -878,7 +879,7 @@ class DashouPaihangView(APIView):
user_main = guanshi.user
# 管事的昵称需要查询老板扩展表
boss_profile = UserBoss.objects.filter(user=user_main).first()
boss_profile = UserBoss.query.filter(user=user_main).first()
guanshi_nicheng = boss_profile.nickname if boss_profile else '未设置昵称'
# 获取头像相对URL
@@ -919,7 +920,7 @@ class DashouPaihangView(APIView):
chaxun_tiaojian = Q(**{f'{liushui_ziduan}__gt': 0}) & Q(zhuangtai=1)
# 查询商家扩展表,并关联用户主表
shangjia_list = UserShangjia.objects.select_related('user').filter(
shangjia_list = UserShangjia.query.select_related('user').filter(
chaxun_tiaojian
).order_by(f'-{liushui_ziduan}')[:self.ZUI_DAO_CHA_XUN_SHU_LIANG]
@@ -945,7 +946,7 @@ class DashouPaihangView(APIView):
user_main = shangjia.user
# 商家的昵称需要查询老板扩展表
boss_profile = UserBoss.objects.filter(user=user_main).first()
boss_profile = UserBoss.query.filter(user=user_main).first()
shangjia_nicheng = boss_profile.nickname if boss_profile else '未设置昵称'
# 获取头像相对URL
@@ -1365,14 +1366,14 @@ class ShangjiaMobanListView(APIView):
if label_id:
query &= Q(chenghao_id=label_id)
mobans = ShangjiaMoban.objects.filter(query).order_by('-id')
mobans = ShangjiaMoban.query.filter(query).order_by('-id')
formatted = []
for moban in mobans:
texiao_json = ''
label_name = ''
if moban.chenghao_id:
try:
ch = Chenghao.objects.get(id=moban.chenghao_id)
ch = Chenghao.query.get(id=moban.chenghao_id)
label_name = ch.mingcheng
texiao_json = ch.texiao_miaoshu or ''
except Chenghao.DoesNotExist:
@@ -1393,7 +1394,7 @@ class ShangjiaMobanListView(APIView):
return Response({'code': 200, 'msg': '搜索成功', 'data': {'list': formatted, 'total': len(formatted), 'hasMore': False}})
# 分页模式
queryset = ShangjiaMoban.objects.filter(query).order_by('-id')
queryset = ShangjiaMoban.query.filter(query).order_by('-id')
paginator = Paginator(queryset, page_size)
if page < 1 or page > paginator.num_pages:
return Response({'code': 400, 'msg': '页码超出范围', 'data': {}}, status=400)
@@ -1405,7 +1406,7 @@ class ShangjiaMobanListView(APIView):
label_name = ''
if moban.chenghao_id:
try:
ch = Chenghao.objects.get(id=moban.chenghao_id)
ch = Chenghao.query.get(id=moban.chenghao_id)
label_name = ch.mingcheng
texiao_json = ch.texiao_miaoshu or ''
except Chenghao.DoesNotExist:
@@ -1521,7 +1522,7 @@ class ShangjiaTianjiaMobanView(APIView):
# 8. 验证商品类型是否存在且可用
try:
shangpin_obj = ShangpinLeixing.objects.get(
shangpin_obj = ShangpinLeixing.query.get(
id=leixing_id,
shenhezhuangtai=1 # 审核通过
)
@@ -1529,7 +1530,7 @@ class ShangjiaTianjiaMobanView(APIView):
return Response({'code': 404, 'msg': '商品类型不存在或已禁用', 'data': {}}, status=404)
# 9. 检查同一用户、同一类型下是否已存在相同介绍的模板
if ShangjiaMoban.objects.filter(
if ShangjiaMoban.query.filter(
yonghu_id=yonghu_id,
leixing_id=leixing_id,
moban_jieshao=jieshao
@@ -1538,7 +1539,7 @@ class ShangjiaTianjiaMobanView(APIView):
# 10. 执行数据库创建(事务)
with transaction.atomic():
moban = ShangjiaMoban.objects.create(
moban = ShangjiaMoban.query.create(
yonghu_id=yonghu_id,
leixing_id=leixing_id,
moban_jieshao=jieshao,
@@ -1597,7 +1598,7 @@ class ShangjiaShanchuMobanView(APIView):
return Response({'code': 400, 'msg': '参数缺失', 'data': {}}, status=400)
try:
moban = ShangjiaMoban.objects.get(id=moban_id, yonghu_id=yonghu_id, leixing_id=leixing_id)
moban = ShangjiaMoban.query.get(id=moban_id, yonghu_id=yonghu_id, leixing_id=leixing_id)
except ShangjiaMoban.DoesNotExist:
return Response({'code': 404, 'msg': '模板不存在', 'data': {}}, status=404)
@@ -1641,7 +1642,7 @@ class ShangjiaGengxinMobanView(APIView):
# 查询模板
try:
moban = ShangjiaMoban.objects.get(
moban = ShangjiaMoban.query.get(
id=moban_id,
yonghu_id=yonghu_id,
leixing_id=leixing_id
@@ -1705,7 +1706,7 @@ class ShangjiaGengxinMobanView(APIView):
# 检查介绍唯一性
if 'moban_jieshao' in update_fields:
if ShangjiaMoban.objects.filter(
if ShangjiaMoban.query.filter(
yonghu_id=yonghu_id,
leixing_id=leixing_id,
moban_jieshao=moban.moban_jieshao
@@ -1770,13 +1771,13 @@ class ShangjiaGenerateLinkView(APIView):
# 商品类型
try:
shangpin_leixing = ShangpinLeixing.objects.get(id=shangpin_type_id, shenhezhuangtai=1)
shangpin_leixing = ShangpinLeixing.query.get(id=shangpin_type_id, shenhezhuangtai=1)
except ShangpinLeixing.DoesNotExist:
return Response({'code': 400, 'msg': '商品类型不存在或已禁用', 'data': {}}, status=400)
# 查询模板
try:
moban = ShangjiaMoban.objects.get(id=moban_id, yonghu_id=user.yonghuid, leixing_id=shangpin_type_id)
moban = ShangjiaMoban.query.get(id=moban_id, yonghu_id=user.yonghuid, leixing_id=shangpin_type_id)
except ShangjiaMoban.DoesNotExist:
return Response({'code': 400, 'msg': '模板不存在', 'data': {}}, status=400)
@@ -1786,7 +1787,7 @@ class ShangjiaGenerateLinkView(APIView):
# 利率
try:
lilu = float(Lilubiao.objects.get(fadanpingtai='3').lilu) or 1.0
lilu = float(Lilubiao.query.get(fadanpingtai='3').lilu) or 1.0
except Lilubiao.DoesNotExist:
lilu = 1.0
dashou_fencheng = Decimal(str(round(float(jiage) * lilu, 2)))
@@ -1806,7 +1807,7 @@ class ShangjiaGenerateLinkView(APIView):
label_name = ''
if chenghao_id:
try:
label_name = Chenghao.objects.get(id=chenghao_id).mingcheng
label_name = Chenghao.query.get(id=chenghao_id).mingcheng
except Chenghao.DoesNotExist:
pass
@@ -1823,7 +1824,7 @@ class ShangjiaGenerateLinkView(APIView):
raw = f"{timestamp}:{dd_id}:{uid}:{salt}"
token = hashlib.sha256(raw.encode()).hexdigest()[:24]
# 确保唯一性(极小概率重复再试一次)
if ShangjiaLianjie.objects.filter(lianjie_token=token).exists():
if ShangjiaLianjie.query.filter(lianjie_token=token).exists():
return generate_secure_token(dd_id, uid)
return token
@@ -1836,7 +1837,7 @@ class ShangjiaGenerateLinkView(APIView):
secure_token = generate_secure_token(dingdan_id, user.yonghuid)
# 创建订单主表
dingdan = Dingdan.objects.create(
dingdan = Dingdan.query.create(
dingdan_id=dingdan_id,
zhuangtai=13,
fadan_pingtai=2,
@@ -1852,7 +1853,7 @@ class ShangjiaGenerateLinkView(APIView):
)
# 商家扩展表
DingdanShangjia.objects.create(
DingdanShangjia.query.create(
dingdan=dingdan,
shangjia_id=user.yonghuid,
sjnicheng=shangjia.nicheng or f"商家{user.yonghuid}",
@@ -1861,13 +1862,13 @@ class ShangjiaGenerateLinkView(APIView):
# 关联标签
if chenghao_id:
try:
ch = Chenghao.objects.get(id=chenghao_id)
DingdanBiaoqian.objects.create(dingdan=dingdan, chenghao=ch)
ch = Chenghao.query.get(id=chenghao_id)
DingdanBiaoqian.query.create(dingdan=dingdan, chenghao=ch)
except Chenghao.DoesNotExist:
logger.warning(f"称号{chenghao_id}不存在,跳过关联")
# 更新商家余额和统计
UserShangjia.objects.filter(id=shangjia.id).update(
UserShangjia.query.filter(id=shangjia.id).update(
fabu=F('fabu') + 1,
yue=F('yue') - jiage,
jinridingdan=F('jinridingdan') + 1,
@@ -1878,7 +1879,7 @@ class ShangjiaGenerateLinkView(APIView):
# 生成链接并保存
link_url = generate_link_url(secure_token)
lianjie_obj = ShangjiaLianjie.objects.create(
lianjie_obj = ShangjiaLianjie.query.create(
yonghu_id=user.yonghuid,
leixing_id=shangpin_type_id,
moban_id=moban_id,
@@ -1890,7 +1891,7 @@ class ShangjiaGenerateLinkView(APIView):
)
# 更新模板发布数量
ShangjiaMoban.objects.filter(id=moban_id).update(fabu_shuliang=F('fabu_shuliang') + 1)
ShangjiaMoban.query.filter(id=moban_id).update(fabu_shuliang=F('fabu_shuliang') + 1)
shangjia.refresh_from_db()
logger.info(f"链接生成成功 - 订单ID: {dingdan_id}, 标签: {label_name}")
@@ -1937,11 +1938,11 @@ class ShangjiaLianjieListView(APIView):
# 校验模板归属
try:
moban = ShangjiaMoban.objects.get(id=moban_id, yonghu_id=yonghu_id)
moban = ShangjiaMoban.query.get(id=moban_id, yonghu_id=yonghu_id)
except ShangjiaMoban.DoesNotExist:
return Response({'code': 404, 'msg': '模板不存在或无权查看', 'data': {}}, status=404)
links = ShangjiaLianjie.objects.filter(
links = ShangjiaLianjie.query.filter(
yonghu_id=yonghu_id,
moban_id=moban_id,
is_used=(used == 1)
@@ -2136,7 +2137,7 @@ class KehuGetDingdanLianjieView(APIView):
# 5. 查询链接记录
try:
lianjie_obj = ShangjiaLianjie.objects.select_related().get(lianjie_token=token)
lianjie_obj = ShangjiaLianjie.query.select_related().get(lianjie_token=token)
logger.info(f"找到链接记录 - 链接ID: {lianjie_obj.id}, 商家ID: {lianjie_obj.yonghu_id}")
except ShangjiaLianjie.DoesNotExist:
logger.warning(f"链接不存在 - Token: {token[:8]}..., IP: {client_ip}")
@@ -2184,12 +2185,12 @@ class KehuGetDingdanLianjieView(APIView):
if lianjie_obj.dingdan_id:
try:
# 查询订单主表
dingdan_obj = Dingdan.objects.get(dingdan_id=lianjie_obj.dingdan_id)
dingdan_obj = Dingdan.query.get(dingdan_id=lianjie_obj.dingdan_id)
# 获取商家昵称
shangjia_nicheng = ''
try:
user_main = UserMain.objects.get(yonghuid=lianjie_obj.yonghu_id)
user_main = UserMain.query.get(yonghuid=lianjie_obj.yonghu_id)
shangjia_obj = user_main.shop_profile
shangjia_nicheng = shangjia_obj.nicheng
except (UserMain.DoesNotExist, UserShangjia.DoesNotExist):
@@ -2234,7 +2235,7 @@ class KehuGetDingdanLianjieView(APIView):
# 9.2 获取商家标识
shangjia_biaoshi = ''
try:
shangjia_kuozhan = DingdanShangjia.objects.select_related('dingdan').filter(
shangjia_kuozhan = DingdanShangjia.query.select_related('dingdan').filter(
dingdan__dingdan_id=lianjie_obj.dingdan_id
).first()
@@ -2435,7 +2436,7 @@ class KehuTianxieDingdanView(APIView):
# 9. 查询链接记录
try:
lianjie_obj = ShangjiaLianjie.objects.get(lianjie_token=token)
lianjie_obj = ShangjiaLianjie.query.get(lianjie_token=token)
logger.info(
f"找到链接记录 - 链接ID: {lianjie_obj.id}, 商家ID: {lianjie_obj.yonghu_id}, 是否已使用: {lianjie_obj.is_used}")
except ShangjiaLianjie.DoesNotExist:
@@ -2471,7 +2472,7 @@ class KehuTianxieDingdanView(APIView):
# 验证打手是否存在且有效
try:
# 先查询用户主表
dashou_user = UserMain.objects.get(yonghuid=zhiding_dashou)
dashou_user = UserMain.query.get(yonghuid=zhiding_dashou)
logger.info(f"找到打手用户 - 用户ID: {zhiding_dashou}")
# 通过反向关系获取打手扩展信息
@@ -2531,7 +2532,7 @@ class KehuTianxieDingdanView(APIView):
logger.error(f"链接记录中订单ID为空 - 链接ID: {lianjie_obj.id}")
raise ValueError("订单ID为空")
dingdan_obj = Dingdan.objects.get(dingdan_id=lianjie_obj.dingdan_id)
dingdan_obj = Dingdan.query.get(dingdan_id=lianjie_obj.dingdan_id)
# 检查订单状态是否为13灰色状态
if dingdan_obj.zhuangtai != 13:
@@ -2569,7 +2570,7 @@ class KehuTianxieDingdanView(APIView):
# 获取商家信息用于返回
try:
user_main = UserMain.objects.get(yonghuid=lianjie_obj.yonghu_id)
user_main = UserMain.query.get(yonghuid=lianjie_obj.yonghu_id)
shangjia_obj = user_main.shop_profile
shangjia_mingcheng = shangjia_obj.nicheng
except:
@@ -2621,7 +2622,7 @@ class KehuTianxieDingdanView(APIView):
def _get_game_type_name(self, leixing_id):
try:
gt = ShangpinLeixing.objects.filter(id=leixing_id).first()
gt = ShangpinLeixing.query.filter(id=leixing_id).first()
return gt.jieshao if gt else '游戏订单'
except Exception as e:
logger.error(f"获取游戏类型名称异常: {e}")
@@ -2635,7 +2636,7 @@ class KehuTianxieDingdanView(APIView):
try:
# 获取游戏类型名称
try:
leixing_obj = ShangpinLeixing.objects.get(id=dingdan.leixing_id)
leixing_obj = ShangpinLeixing.query.get(id=dingdan.leixing_id)
game_type = leixing_obj.jieshao
except:
game_type = '未知游戏'
@@ -2697,7 +2698,7 @@ class GuanZhuAListView(APIView):
def post(self, request):
try:
# 查询类型为3的所有记录
qs = Tupianpeizhi.objects.filter(leixing=3)
qs = Tupianpeizhi.query.filter(leixing=3)
if not qs.exists():
return Response({
'code': 0,
@@ -3168,7 +3169,7 @@ class PopupConfigView(APIView):
# 3. 查询页面配置
try:
popup_page = PopupPage.objects.get(page_key=page_key, is_active=True)
popup_page = PopupPage.query.get(page_key=page_key, is_active=True)
except PopupPage.DoesNotExist:
# 该页面没有配置弹窗,返回空
return Response({
@@ -3181,7 +3182,7 @@ class PopupConfigView(APIView):
# 4. 查询该页面下所有启用的弹窗(且在有效时间范围内)
now = timezone.now()
popups = PopupConfig.objects.filter(
popups = PopupConfig.query.filter(
page=popup_page,
is_active=True,
start_time__lte=now,
@@ -3215,7 +3216,7 @@ class GetWithdrawModeView(APIView):
def post(self, request, *args, **kwargs):
# 尝试获取 ID=1 的记录
config = WithdrawConfig.objects.filter(id=1).first()
config = WithdrawConfig.query.filter(id=1).first()
# 如果存在则取实际值,否则默认 2手动提现
mode = config.mode if config else 2
@@ -3278,16 +3279,16 @@ class CheckPhoneAuthView(APIView):
"""
try:
# 先确认用户是打手
UserDashou.objects.get(user=user)
UserDashou.query.get(user=user)
except UserDashou.DoesNotExist:
return False
# 检查是否有任意会员购买记录
return Huiyuangoumai.objects.filter(yonghu_id=user.yonghuid).exists()
return Huiyuangoumai.query.filter(yonghu_id=user.yonghuid).exists()
def _shangjia_meets_threshold(self, user):
"""商家条件:发布订单总数 fabu >= 5"""
try:
shop = UserShangjia.objects.get(user=user)
shop = UserShangjia.query.get(user=user)
except UserShangjia.DoesNotExist:
return False
return shop.fabu >= 5
@@ -3295,7 +3296,7 @@ class CheckPhoneAuthView(APIView):
def _guanshi_meets_threshold(self, user):
"""管事条件:充值分佣总额 chongzhifenrun >= 15"""
try:
guanshi = UserGuanshi.objects.get(user=user)
guanshi = UserGuanshi.query.get(user=user)
except UserGuanshi.DoesNotExist:
return False
return guanshi.chongzhifenrun >= 15
@@ -3303,7 +3304,7 @@ class CheckPhoneAuthView(APIView):
def _zuzhang_meets_threshold(self, user):
"""组长条件:分佣总额 fenyong_zonge >= 2"""
try:
zuzhang = UserZuzhang.objects.get(user=user)
zuzhang = UserZuzhang.query.get(user=user)
except UserZuzhang.DoesNotExist:
return False
return zuzhang.fenyong_zonge >= 2
@@ -3311,7 +3312,7 @@ class CheckPhoneAuthView(APIView):
def _boss_meets_threshold(self, user):
"""老板条件:消费总额 zonge >= 20"""
try:
boss = UserBoss.objects.get(user=user)
boss = UserBoss.query.get(user=user)
except UserBoss.DoesNotExist:
return False
return boss.zonge >= 20