加入了 GVSDSDK 模块,进行了 QModel 兼容层的尝试,生产环境可用
This commit is contained in:
@@ -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='图片上方文字')
|
||||
|
||||
141
config/views.py
141
config/views.py
@@ -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
|
||||
Reference in New Issue
Block a user