彻底解决了 create_time 的问题,将所有字段都改为了 CreateTime
This commit is contained in:
@@ -22,8 +22,8 @@ class Migration(migrations.Migration):
|
||||
('jine', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='订单金额')),
|
||||
('leixing', models.IntegerField(blank=True, null=True, verbose_name='充值类型,1:会员,2:押金,3:积分,4:商家')),
|
||||
('shuoming', models.CharField(blank=True, max_length=100, null=True, verbose_name='订单说明')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('CreateTime', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('UpdateTime', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '充值记录订单',
|
||||
@@ -40,8 +40,8 @@ class Migration(migrations.Migration):
|
||||
('cishu', models.PositiveIntegerField(verbose_name='分红次数')),
|
||||
('guanshi_fenhong', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='管事分红金额')),
|
||||
('zuzhang_fenhong', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='组长分红金额')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('CreateTime', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('UpdateTime', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '多次分红配置',
|
||||
@@ -64,8 +64,8 @@ class Migration(migrations.Migration):
|
||||
('zuzhang_fenhong', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='组长分红金额')),
|
||||
('fenhong_leixing', models.PositiveSmallIntegerField(choices=[(1, '会员分红'), (2, '押金分红'), (3, '商家订单分红')], default=1, verbose_name='分红类型')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('CreateTime', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('UpdateTime', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管事分红记录',
|
||||
@@ -84,8 +84,8 @@ class Migration(migrations.Migration):
|
||||
('guanshifc', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='管事分成')),
|
||||
('zuzhangfc', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='组长分成')),
|
||||
('goumai_cishu', models.PositiveIntegerField(default=0, verbose_name='购买次数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('CreateTime', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('UpdateTime', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '会员',
|
||||
@@ -102,8 +102,8 @@ class Migration(migrations.Migration):
|
||||
('huiyuan_zhuangtai', models.PositiveIntegerField(default=1, verbose_name='会员状态')),
|
||||
('jieshao', models.CharField(max_length=30, null=True, verbose_name='会员介绍')),
|
||||
('daoqi_time', models.DateTimeField(verbose_name='会员到期时间')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('CreateTime', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('UpdateTime', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户购买会员',
|
||||
@@ -131,8 +131,8 @@ class Migration(migrations.Migration):
|
||||
('kaioi_ewai_dashou_fencheng', models.BooleanField(default=False, verbose_name='是否开启打手额外分成')),
|
||||
('ewai_dashou_fencheng', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='打手额外分成金额')),
|
||||
('tupian_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='商品图片URL')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
('CreateTime', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('UpdateTime', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
('paixu', models.IntegerField(default=0, verbose_name='排序权重')),
|
||||
('shenhezhuangtai', models.IntegerField(default=1, help_text='1=正常, 2=审核专用', verbose_name='审核状态')),
|
||||
('shangjia_zhuangtai', models.BooleanField(default=True, verbose_name='是否上架')),
|
||||
@@ -179,8 +179,8 @@ class Migration(migrations.Migration):
|
||||
('tuikuan_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='退款总额')),
|
||||
('pingtai_shouyi', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='平台收益')),
|
||||
('dianpu_zongshouyi', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='店铺总收益')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('CreateTime', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('UpdateTime', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商品每日统计',
|
||||
|
||||
@@ -1,364 +1,364 @@
|
||||
from django.db import models
|
||||
from gvsdsdk.model_base import QModel
|
||||
from django.utils import timezone
|
||||
|
||||
|
||||
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汉字
|
||||
jiage = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='商品价格')
|
||||
kucun = models.PositiveIntegerField(default=0, verbose_name='商品库存')
|
||||
leixing_id = models.PositiveIntegerField(null=True, blank=True,verbose_name='商品类型ID') # 直接存数字
|
||||
zhuanqu_id = models.PositiveIntegerField(null=True, blank=True,verbose_name='商品专区ID') # 直接存数字
|
||||
zhenshi_xiaoliang = models.PositiveIntegerField(default=0, verbose_name='商品真实销量')
|
||||
duiwai_xiaoliang = models.PositiveIntegerField(default=0, verbose_name='商品对外销量')
|
||||
jieshao = models.TextField(null=True, blank=True, verbose_name='商品介绍')
|
||||
|
||||
# 新增字段
|
||||
xiadan_xuzhi = models.TextField(null=True, blank=True, verbose_name='下单须知') # 支持500字,可换行
|
||||
guize_tupian = models.CharField(max_length=500, null=True, blank=True, verbose_name='规则图片URL')
|
||||
|
||||
yaoqiuleixing = models.PositiveIntegerField(null=True, blank=True, verbose_name='抢单要求类型')
|
||||
huiyuan_id = models.CharField(max_length=6, null=True, blank=True, verbose_name='会员ID')
|
||||
yongjin = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True,verbose_name='佣金要求')
|
||||
|
||||
# 🔥 新增:是否开启打手额外分成
|
||||
kaioi_ewai_dashou_fencheng = models.BooleanField(default=False, verbose_name='是否开启打手额外分成')
|
||||
# 🔥 新增:打手额外分成金额(开启时使用此值,否则按利率计算)
|
||||
ewai_dashou_fencheng = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True,verbose_name='打手额外分成金额')
|
||||
|
||||
# 原有图片URL
|
||||
tupian_url = models.CharField(max_length=500, null=True, blank=True, verbose_name='商品图片URL')
|
||||
|
||||
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
update_time = models.DateTimeField(auto_now=True, verbose_name='更改时间')
|
||||
paixu = models.IntegerField(default=0, verbose_name='排序权重')
|
||||
shenhezhuangtai = models.IntegerField(default=1, verbose_name='审核状态', help_text='1=正常, 2=审核专用')
|
||||
|
||||
dianpu = models.ForeignKey(
|
||||
'shop.Dianpu', # 🔥 跨应用完整路径
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
blank=True,
|
||||
db_index=True,
|
||||
verbose_name='所属店铺'
|
||||
)
|
||||
dianpu_leixing = models.ForeignKey(
|
||||
'shop.ShangpinLeixingDianpu',
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
db_index=True,
|
||||
verbose_name='店铺商品类型'
|
||||
)
|
||||
shangjia_zhuangtai = models.BooleanField(default=True, verbose_name='是否上架')
|
||||
fengjin_zhuangtai = models.BooleanField(default=True, verbose_name='是否封禁')
|
||||
shenhe_zhuangtai = models.BooleanField(default=False, verbose_name='平台审核状态',help_text='True=审核通过,False=未审核')
|
||||
|
||||
class Meta:
|
||||
db_table = 'shangpin'
|
||||
verbose_name = '商品'
|
||||
verbose_name_plural = '商品'
|
||||
# 不要索引!数据量太小
|
||||
|
||||
def __str__(self):
|
||||
return f"商品{self.id}:{self.biaoqian}"
|
||||
|
||||
|
||||
|
||||
|
||||
class ShangpinLeixing(QModel):
|
||||
"""商品类型表 - <10条数据"""
|
||||
id = models.AutoField(primary_key=True, verbose_name='类型ID')
|
||||
yaoqiuleixing = models.PositiveIntegerField(null=True, blank=True, verbose_name='抢单要求类型')
|
||||
huiyuan_id = models.CharField(max_length=6, null=True, blank=True, verbose_name='会员ID')
|
||||
yongjin = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True, verbose_name='佣金要求')
|
||||
jieshao = models.CharField(max_length=45, null=True, blank=True, verbose_name='类型介绍') # 15汉字
|
||||
tupian_url = models.CharField(max_length=500, null=True, blank=True, verbose_name='类型图片URL') # 用CharField
|
||||
paixu = models.IntegerField(default=0, verbose_name='排序权重')
|
||||
shenhezhuangtai = models.IntegerField(default=1, verbose_name='审核状态', help_text='1=正常, 2=审核专用')
|
||||
bankuai = models.ForeignKey(
|
||||
'rank.Bankuai',
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name='所属板块'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
db_table = 'shangpin_leixing'
|
||||
verbose_name = '商品类型'
|
||||
verbose_name_plural = '商品类型'
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.jieshao}"
|
||||
|
||||
|
||||
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汉字
|
||||
leixing_id = models.PositiveIntegerField(verbose_name='类型ID') # 直接存数字,不关联
|
||||
paixu = models.IntegerField(default=0, verbose_name='排序权重')
|
||||
shenhezhuangtai = models.IntegerField(default=1, verbose_name='审核状态', help_text='1=正常, 2=审核专用')
|
||||
|
||||
dianpu = models.ForeignKey(
|
||||
'shop.Dianpu', # 🔥 跨应用完整路径
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
blank=True,
|
||||
db_index=True,
|
||||
verbose_name='所属店铺'
|
||||
)
|
||||
dianpu_leixing = models.ForeignKey(
|
||||
'shop.ShangpinLeixingDianpu',
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
db_index=True,
|
||||
verbose_name='店铺商品类型'
|
||||
)
|
||||
shangjia_zhuangtai = models.BooleanField(default=True, verbose_name='是否上架')
|
||||
fengjin_zhuangtai = models.BooleanField(default=True, verbose_name='是否封禁')
|
||||
|
||||
|
||||
class Meta:
|
||||
db_table = 'shangpin_zhuanqu'
|
||||
verbose_name = '商品专区'
|
||||
verbose_name_plural = '商品专区'
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.mingzi}"
|
||||
|
||||
|
||||
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='会员规则介绍')
|
||||
jiage = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='会员价格')
|
||||
guanshifc = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='管事分成')
|
||||
|
||||
zuzhangfc = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='组长分成')
|
||||
goumai_cishu = models.PositiveIntegerField(default=0, verbose_name='购买次数')
|
||||
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
bankuai = models.ForeignKey(
|
||||
'rank.Bankuai',
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name='所属板块'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
db_table = 'huiyuan'
|
||||
verbose_name = '会员'
|
||||
verbose_name_plural = '会员'
|
||||
|
||||
def __str__(self):
|
||||
return f"会员{self.huiyuan_id}:{self.jieshao}"
|
||||
|
||||
|
||||
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')
|
||||
huiyuan_zhuangtai = models.PositiveIntegerField(default=1, verbose_name='会员状态')
|
||||
jieshao = models.CharField(max_length=30,null=True,verbose_name='会员介绍')
|
||||
daoqi_time = models.DateTimeField(verbose_name='会员到期时间')
|
||||
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
|
||||
class Meta:
|
||||
db_table = 'huiyuangoumai'
|
||||
verbose_name = '用户购买会员'
|
||||
verbose_name_plural = '用户购买会员'
|
||||
# 添加这个联合唯一约束
|
||||
unique_together = [['yonghu_id', 'huiyuan_id']]
|
||||
|
||||
# 顺便优化索引(可选的,建议加)
|
||||
indexes = [
|
||||
models.Index(fields=['yonghu_id']),
|
||||
models.Index(fields=['huiyuan_id']),
|
||||
models.Index(fields=['yonghu_id', 'huiyuan_id']), # 复合索引加速查询
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return f"用户{self.yonghu_id}-会员{self.huiyuan_id}"
|
||||
|
||||
def jiance_shifou_daoqi(self):
|
||||
# 使用Django的timezone,它会自动处理时区
|
||||
now = timezone.now()
|
||||
if now > self.daoqi_time:
|
||||
# 过期了
|
||||
if self.huiyuan_zhuangtai != 0:
|
||||
self.huiyuan_zhuangtai = 0
|
||||
self.save()
|
||||
return True
|
||||
else:
|
||||
# 没过期
|
||||
if self.huiyuan_zhuangtai != 1:
|
||||
self.huiyuan_zhuangtai = 1
|
||||
self.save()
|
||||
return False
|
||||
|
||||
|
||||
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='订单状态')
|
||||
yonghuid = models.CharField(max_length=7, db_index=True, verbose_name='用户ID')
|
||||
jine = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='订单金额')
|
||||
leixing = models.IntegerField(null=True, blank=True, verbose_name='充值类型,1:会员,2:押金,3:积分,4:商家')
|
||||
shuoming = models.CharField(max_length=100, 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='更新时间')
|
||||
class Meta:
|
||||
db_table = 'czjilu'
|
||||
verbose_name = '充值记录订单'
|
||||
verbose_name_plural = '充值记录订单'
|
||||
# 为高频查询字段添加索引
|
||||
indexes = [
|
||||
models.Index(fields=['dingdan_id']),
|
||||
models.Index(fields=['yonghuid']),
|
||||
|
||||
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
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')
|
||||
shuoming = models.CharField(max_length=100, null=True, blank=True, verbose_name='订单说明')
|
||||
fenhong = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='订单分红金额')
|
||||
avatar = models.CharField(max_length=500, null=True, blank=True, verbose_name='打手头像')
|
||||
nicheng = models.CharField(max_length=50, null=True, verbose_name='打手昵称')
|
||||
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
|
||||
zuzhang_id = models.CharField(max_length=7, null=True, blank=True, db_index=True, verbose_name='组长ID')
|
||||
zuzhang_fenhong = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True,verbose_name='组长分红金额')
|
||||
fenhong_leixing = models.PositiveSmallIntegerField(
|
||||
default=1,
|
||||
choices=[(1, '会员分红'), (2, '押金分红'), (3, '商家订单分红')],
|
||||
verbose_name='分红类型'
|
||||
)
|
||||
|
||||
huiyuan_id = models.CharField(max_length=6, null=True, blank=True, verbose_name='会员ID')
|
||||
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
|
||||
class Meta:
|
||||
db_table = 'gsfenhong'
|
||||
verbose_name = '管事分红记录'
|
||||
verbose_name_plural = '管事分红记录'
|
||||
# 为高频查询字段添加索引
|
||||
indexes = [
|
||||
models.Index(fields=['guanshi']),
|
||||
models.Index(fields=['dashouid']),
|
||||
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class DuociFenhong(QModel):
|
||||
"""
|
||||
多次分红配置表
|
||||
用于配置不同次数下管事和组长的分红金额
|
||||
"""
|
||||
huiyuan = models.CharField(max_length=10, verbose_name='会员ID')
|
||||
yonghuid = models.CharField(max_length=7, db_index=True, verbose_name='管事ID')
|
||||
|
||||
cishu = models.PositiveIntegerField(verbose_name='分红次数')
|
||||
guanshi_fenhong = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='管事分红金额')
|
||||
zuzhang_fenhong = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='组长分红金额')
|
||||
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
|
||||
class Meta:
|
||||
db_table = 'duoci_fenhong'
|
||||
verbose_name = '多次分红配置'
|
||||
verbose_name_plural = '多次分红配置'
|
||||
unique_together = ('huiyuan', 'yonghuid', 'cishu') # 同一管事、同一会员、同一次数唯一
|
||||
indexes = [
|
||||
models.Index(fields=['yonghuid']),
|
||||
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return f"会员{self.huiyuan_id} 用户{self.yonghuid} 次数{self.cishu}"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class ShangpinMeiriTongji(QModel):
|
||||
"""
|
||||
商品每日统计表
|
||||
按商品 + 日期维度记录点单、成交、退款及收益数据
|
||||
日期精确到天,冗余年月日字段便于分组查询
|
||||
"""
|
||||
shangpin = models.ForeignKey(
|
||||
'products.Shangpin',
|
||||
on_delete=models.CASCADE,
|
||||
db_index=True,
|
||||
verbose_name='商品ID'
|
||||
)
|
||||
riqi = models.DateField(db_index=True, verbose_name='统计日期')
|
||||
nian = models.PositiveSmallIntegerField(verbose_name='年份')
|
||||
yue = models.PositiveSmallIntegerField(verbose_name='月份')
|
||||
ri = models.PositiveSmallIntegerField(verbose_name='日')
|
||||
|
||||
# 点单统计(下单即累加)
|
||||
diandan_zongliang = models.PositiveIntegerField(default=0, verbose_name='点单总量')
|
||||
diandan_zonge = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='点单总额')
|
||||
|
||||
# 成交统计(订单完成时累加)
|
||||
chengjiao_zongliang = models.PositiveIntegerField(default=0, verbose_name='成交总量')
|
||||
chengjiao_zonge = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='成交总额')
|
||||
|
||||
# 退款统计
|
||||
tuikuan_zongliang = models.PositiveIntegerField(default=0, verbose_name='退款总量')
|
||||
tuikuan_zonge = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='退款总额')
|
||||
|
||||
# 收益统计(新增)
|
||||
pingtai_shouyi = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='平台收益')
|
||||
dianpu_zongshouyi = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='店铺总收益')
|
||||
|
||||
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
|
||||
class Meta:
|
||||
db_table = 'shangpin_meiri_tongji'
|
||||
verbose_name = '商品每日统计'
|
||||
verbose_name_plural = verbose_name
|
||||
# 每天每个商品唯一记录
|
||||
unique_together = [['shangpin', 'riqi']]
|
||||
indexes = [
|
||||
models.Index(fields=['shangpin', 'riqi']),
|
||||
models.Index(fields=['nian', 'yue', 'ri']),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.shangpin.biaoqian} - {self.riqi}"
|
||||
|
||||
def clean(self):
|
||||
"""保存前自动填充年月日冗余字段"""
|
||||
if self.riqi:
|
||||
self.nian = self.riqi.year
|
||||
self.yue = self.riqi.month
|
||||
self.ri = self.riqi.day
|
||||
super().clean()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.clean()
|
||||
from django.db import models
|
||||
from gvsdsdk.model_base import QModel
|
||||
from django.utils import timezone
|
||||
|
||||
|
||||
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汉字
|
||||
jiage = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='商品价格')
|
||||
kucun = models.PositiveIntegerField(default=0, verbose_name='商品库存')
|
||||
leixing_id = models.PositiveIntegerField(null=True, blank=True,verbose_name='商品类型ID') # 直接存数字
|
||||
zhuanqu_id = models.PositiveIntegerField(null=True, blank=True,verbose_name='商品专区ID') # 直接存数字
|
||||
zhenshi_xiaoliang = models.PositiveIntegerField(default=0, verbose_name='商品真实销量')
|
||||
duiwai_xiaoliang = models.PositiveIntegerField(default=0, verbose_name='商品对外销量')
|
||||
jieshao = models.TextField(null=True, blank=True, verbose_name='商品介绍')
|
||||
|
||||
# 新增字段
|
||||
xiadan_xuzhi = models.TextField(null=True, blank=True, verbose_name='下单须知') # 支持500字,可换行
|
||||
guize_tupian = models.CharField(max_length=500, null=True, blank=True, verbose_name='规则图片URL')
|
||||
|
||||
yaoqiuleixing = models.PositiveIntegerField(null=True, blank=True, verbose_name='抢单要求类型')
|
||||
huiyuan_id = models.CharField(max_length=6, null=True, blank=True, verbose_name='会员ID')
|
||||
yongjin = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True,verbose_name='佣金要求')
|
||||
|
||||
# 🔥 新增:是否开启打手额外分成
|
||||
kaioi_ewai_dashou_fencheng = models.BooleanField(default=False, verbose_name='是否开启打手额外分成')
|
||||
# 🔥 新增:打手额外分成金额(开启时使用此值,否则按利率计算)
|
||||
ewai_dashou_fencheng = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True,verbose_name='打手额外分成金额')
|
||||
|
||||
# 原有图片URL
|
||||
tupian_url = models.CharField(max_length=500, null=True, blank=True, verbose_name='商品图片URL')
|
||||
|
||||
CreateTime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
UpdateTime = models.DateTimeField(auto_now=True, verbose_name='更改时间')
|
||||
paixu = models.IntegerField(default=0, verbose_name='排序权重')
|
||||
shenhezhuangtai = models.IntegerField(default=1, verbose_name='审核状态', help_text='1=正常, 2=审核专用')
|
||||
|
||||
dianpu = models.ForeignKey(
|
||||
'shop.Dianpu', # 🔥 跨应用完整路径
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
blank=True,
|
||||
db_index=True,
|
||||
verbose_name='所属店铺'
|
||||
)
|
||||
dianpu_leixing = models.ForeignKey(
|
||||
'shop.ShangpinLeixingDianpu',
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
db_index=True,
|
||||
verbose_name='店铺商品类型'
|
||||
)
|
||||
shangjia_zhuangtai = models.BooleanField(default=True, verbose_name='是否上架')
|
||||
fengjin_zhuangtai = models.BooleanField(default=True, verbose_name='是否封禁')
|
||||
shenhe_zhuangtai = models.BooleanField(default=False, verbose_name='平台审核状态',help_text='True=审核通过,False=未审核')
|
||||
|
||||
class Meta:
|
||||
db_table = 'shangpin'
|
||||
verbose_name = '商品'
|
||||
verbose_name_plural = '商品'
|
||||
# 不要索引!数据量太小
|
||||
|
||||
def __str__(self):
|
||||
return f"商品{self.id}:{self.biaoqian}"
|
||||
|
||||
|
||||
|
||||
|
||||
class ShangpinLeixing(QModel):
|
||||
"""商品类型表 - <10条数据"""
|
||||
id = models.AutoField(primary_key=True, verbose_name='类型ID')
|
||||
yaoqiuleixing = models.PositiveIntegerField(null=True, blank=True, verbose_name='抢单要求类型')
|
||||
huiyuan_id = models.CharField(max_length=6, null=True, blank=True, verbose_name='会员ID')
|
||||
yongjin = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True, verbose_name='佣金要求')
|
||||
jieshao = models.CharField(max_length=45, null=True, blank=True, verbose_name='类型介绍') # 15汉字
|
||||
tupian_url = models.CharField(max_length=500, null=True, blank=True, verbose_name='类型图片URL') # 用CharField
|
||||
paixu = models.IntegerField(default=0, verbose_name='排序权重')
|
||||
shenhezhuangtai = models.IntegerField(default=1, verbose_name='审核状态', help_text='1=正常, 2=审核专用')
|
||||
bankuai = models.ForeignKey(
|
||||
'rank.Bankuai',
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name='所属板块'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
db_table = 'shangpin_leixing'
|
||||
verbose_name = '商品类型'
|
||||
verbose_name_plural = '商品类型'
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.jieshao}"
|
||||
|
||||
|
||||
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汉字
|
||||
leixing_id = models.PositiveIntegerField(verbose_name='类型ID') # 直接存数字,不关联
|
||||
paixu = models.IntegerField(default=0, verbose_name='排序权重')
|
||||
shenhezhuangtai = models.IntegerField(default=1, verbose_name='审核状态', help_text='1=正常, 2=审核专用')
|
||||
|
||||
dianpu = models.ForeignKey(
|
||||
'shop.Dianpu', # 🔥 跨应用完整路径
|
||||
on_delete=models.CASCADE,
|
||||
null=True,
|
||||
blank=True,
|
||||
db_index=True,
|
||||
verbose_name='所属店铺'
|
||||
)
|
||||
dianpu_leixing = models.ForeignKey(
|
||||
'shop.ShangpinLeixingDianpu',
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
db_index=True,
|
||||
verbose_name='店铺商品类型'
|
||||
)
|
||||
shangjia_zhuangtai = models.BooleanField(default=True, verbose_name='是否上架')
|
||||
fengjin_zhuangtai = models.BooleanField(default=True, verbose_name='是否封禁')
|
||||
|
||||
|
||||
class Meta:
|
||||
db_table = 'shangpin_zhuanqu'
|
||||
verbose_name = '商品专区'
|
||||
verbose_name_plural = '商品专区'
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.mingzi}"
|
||||
|
||||
|
||||
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='会员规则介绍')
|
||||
jiage = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='会员价格')
|
||||
guanshifc = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='管事分成')
|
||||
|
||||
zuzhangfc = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='组长分成')
|
||||
goumai_cishu = models.PositiveIntegerField(default=0, verbose_name='购买次数')
|
||||
CreateTime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
UpdateTime = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
bankuai = models.ForeignKey(
|
||||
'rank.Bankuai',
|
||||
on_delete=models.SET_NULL,
|
||||
null=True,
|
||||
blank=True,
|
||||
verbose_name='所属板块'
|
||||
)
|
||||
|
||||
class Meta:
|
||||
db_table = 'huiyuan'
|
||||
verbose_name = '会员'
|
||||
verbose_name_plural = '会员'
|
||||
|
||||
def __str__(self):
|
||||
return f"会员{self.huiyuan_id}:{self.jieshao}"
|
||||
|
||||
|
||||
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')
|
||||
huiyuan_zhuangtai = models.PositiveIntegerField(default=1, verbose_name='会员状态')
|
||||
jieshao = models.CharField(max_length=30,null=True,verbose_name='会员介绍')
|
||||
daoqi_time = models.DateTimeField(verbose_name='会员到期时间')
|
||||
CreateTime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
UpdateTime = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
|
||||
class Meta:
|
||||
db_table = 'huiyuangoumai'
|
||||
verbose_name = '用户购买会员'
|
||||
verbose_name_plural = '用户购买会员'
|
||||
# 添加这个联合唯一约束
|
||||
unique_together = [['yonghu_id', 'huiyuan_id']]
|
||||
|
||||
# 顺便优化索引(可选的,建议加)
|
||||
indexes = [
|
||||
models.Index(fields=['yonghu_id']),
|
||||
models.Index(fields=['huiyuan_id']),
|
||||
models.Index(fields=['yonghu_id', 'huiyuan_id']), # 复合索引加速查询
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return f"用户{self.yonghu_id}-会员{self.huiyuan_id}"
|
||||
|
||||
def jiance_shifou_daoqi(self):
|
||||
# 使用Django的timezone,它会自动处理时区
|
||||
now = timezone.now()
|
||||
if now > self.daoqi_time:
|
||||
# 过期了
|
||||
if self.huiyuan_zhuangtai != 0:
|
||||
self.huiyuan_zhuangtai = 0
|
||||
self.save()
|
||||
return True
|
||||
else:
|
||||
# 没过期
|
||||
if self.huiyuan_zhuangtai != 1:
|
||||
self.huiyuan_zhuangtai = 1
|
||||
self.save()
|
||||
return False
|
||||
|
||||
|
||||
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='订单状态')
|
||||
yonghuid = models.CharField(max_length=7, db_index=True, verbose_name='用户ID')
|
||||
jine = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='订单金额')
|
||||
leixing = models.IntegerField(null=True, blank=True, verbose_name='充值类型,1:会员,2:押金,3:积分,4:商家')
|
||||
shuoming = models.CharField(max_length=100, null=True, blank=True, verbose_name='订单说明')
|
||||
CreateTime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
UpdateTime = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
class Meta:
|
||||
db_table = 'czjilu'
|
||||
verbose_name = '充值记录订单'
|
||||
verbose_name_plural = '充值记录订单'
|
||||
# 为高频查询字段添加索引
|
||||
indexes = [
|
||||
models.Index(fields=['dingdan_id']),
|
||||
models.Index(fields=['yonghuid']),
|
||||
|
||||
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
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')
|
||||
shuoming = models.CharField(max_length=100, null=True, blank=True, verbose_name='订单说明')
|
||||
fenhong = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='订单分红金额')
|
||||
avatar = models.CharField(max_length=500, null=True, blank=True, verbose_name='打手头像')
|
||||
nicheng = models.CharField(max_length=50, null=True, verbose_name='打手昵称')
|
||||
CreateTime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
UpdateTime = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
|
||||
zuzhang_id = models.CharField(max_length=7, null=True, blank=True, db_index=True, verbose_name='组长ID')
|
||||
zuzhang_fenhong = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True,verbose_name='组长分红金额')
|
||||
fenhong_leixing = models.PositiveSmallIntegerField(
|
||||
default=1,
|
||||
choices=[(1, '会员分红'), (2, '押金分红'), (3, '商家订单分红')],
|
||||
verbose_name='分红类型'
|
||||
)
|
||||
|
||||
huiyuan_id = models.CharField(max_length=6, null=True, blank=True, verbose_name='会员ID')
|
||||
CreateTime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
UpdateTime = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
|
||||
class Meta:
|
||||
db_table = 'gsfenhong'
|
||||
verbose_name = '管事分红记录'
|
||||
verbose_name_plural = '管事分红记录'
|
||||
# 为高频查询字段添加索引
|
||||
indexes = [
|
||||
models.Index(fields=['guanshi']),
|
||||
models.Index(fields=['dashouid']),
|
||||
|
||||
]
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class DuociFenhong(QModel):
|
||||
"""
|
||||
多次分红配置表
|
||||
用于配置不同次数下管事和组长的分红金额
|
||||
"""
|
||||
huiyuan = models.CharField(max_length=10, verbose_name='会员ID')
|
||||
yonghuid = models.CharField(max_length=7, db_index=True, verbose_name='管事ID')
|
||||
|
||||
cishu = models.PositiveIntegerField(verbose_name='分红次数')
|
||||
guanshi_fenhong = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='管事分红金额')
|
||||
zuzhang_fenhong = models.DecimalField(max_digits=10, decimal_places=2, default=0.00, verbose_name='组长分红金额')
|
||||
CreateTime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
UpdateTime = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
|
||||
class Meta:
|
||||
db_table = 'duoci_fenhong'
|
||||
verbose_name = '多次分红配置'
|
||||
verbose_name_plural = '多次分红配置'
|
||||
unique_together = ('huiyuan', 'yonghuid', 'cishu') # 同一管事、同一会员、同一次数唯一
|
||||
indexes = [
|
||||
models.Index(fields=['yonghuid']),
|
||||
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return f"会员{self.huiyuan_id} 用户{self.yonghuid} 次数{self.cishu}"
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class ShangpinMeiriTongji(QModel):
|
||||
"""
|
||||
商品每日统计表
|
||||
按商品 + 日期维度记录点单、成交、退款及收益数据
|
||||
日期精确到天,冗余年月日字段便于分组查询
|
||||
"""
|
||||
shangpin = models.ForeignKey(
|
||||
'products.Shangpin',
|
||||
on_delete=models.CASCADE,
|
||||
db_index=True,
|
||||
verbose_name='商品ID'
|
||||
)
|
||||
riqi = models.DateField(db_index=True, verbose_name='统计日期')
|
||||
nian = models.PositiveSmallIntegerField(verbose_name='年份')
|
||||
yue = models.PositiveSmallIntegerField(verbose_name='月份')
|
||||
ri = models.PositiveSmallIntegerField(verbose_name='日')
|
||||
|
||||
# 点单统计(下单即累加)
|
||||
diandan_zongliang = models.PositiveIntegerField(default=0, verbose_name='点单总量')
|
||||
diandan_zonge = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='点单总额')
|
||||
|
||||
# 成交统计(订单完成时累加)
|
||||
chengjiao_zongliang = models.PositiveIntegerField(default=0, verbose_name='成交总量')
|
||||
chengjiao_zonge = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='成交总额')
|
||||
|
||||
# 退款统计
|
||||
tuikuan_zongliang = models.PositiveIntegerField(default=0, verbose_name='退款总量')
|
||||
tuikuan_zonge = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='退款总额')
|
||||
|
||||
# 收益统计(新增)
|
||||
pingtai_shouyi = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='平台收益')
|
||||
dianpu_zongshouyi = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='店铺总收益')
|
||||
|
||||
CreateTime = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
UpdateTime = models.DateTimeField(auto_now=True, verbose_name='更新时间')
|
||||
|
||||
class Meta:
|
||||
db_table = 'shangpin_meiri_tongji'
|
||||
verbose_name = '商品每日统计'
|
||||
verbose_name_plural = verbose_name
|
||||
# 每天每个商品唯一记录
|
||||
unique_together = [['shangpin', 'riqi']]
|
||||
indexes = [
|
||||
models.Index(fields=['shangpin', 'riqi']),
|
||||
models.Index(fields=['nian', 'yue', 'ri']),
|
||||
]
|
||||
|
||||
def __str__(self):
|
||||
return f"{self.shangpin.biaoqian} - {self.riqi}"
|
||||
|
||||
def clean(self):
|
||||
"""保存前自动填充年月日冗余字段"""
|
||||
if self.riqi:
|
||||
self.nian = self.riqi.year
|
||||
self.yue = self.riqi.month
|
||||
self.ri = self.riqi.day
|
||||
super().clean()
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
self.clean()
|
||||
super().save(*args, **kwargs)
|
||||
@@ -2904,8 +2904,8 @@ class GuanshiFenhongListAPI(APIView):
|
||||
|
||||
# 查询当前页数据,按创建时间倒序排列
|
||||
fenhong_list = Gsfenhong.query.filter(query) \
|
||||
.order_by('-create_time') \
|
||||
.values('dashouid', 'avatar', 'nicheng', 'fenhong', 'create_time')[offset:offset + page_size]
|
||||
.order_by('-CreateTime') \
|
||||
.values('dashouid', 'avatar', 'nicheng', 'fenhong', 'CreateTime')[offset:offset + page_size]
|
||||
|
||||
# 格式化数据
|
||||
formatted_list = []
|
||||
@@ -2915,7 +2915,7 @@ class GuanshiFenhongListAPI(APIView):
|
||||
'avatar': item['avatar'] or '', # 打手头像
|
||||
'nicheng': item['nicheng'] or '未知用户', # 打手昵称
|
||||
'fenhong': str(item['fenhong']), # 分红金额
|
||||
'create_time': item['create_time'].strftime('%Y-%m-%d %H:%M:%S') if item['create_time'] else ''
|
||||
'CreateTime': item['CreateTime'].strftime('%Y-%m-%d %H:%M:%S') if item['CreateTime'] else ''
|
||||
})
|
||||
|
||||
# 返回数据
|
||||
@@ -3904,7 +3904,7 @@ class AdHuiyuanHqView(APIView):
|
||||
|
||||
# === 2. 查询会员表数据 ===
|
||||
# 查询所有会员数据,按创建时间倒序排列
|
||||
huiyuan_queryset = Huiyuan.query.all().order_by('-create_time')
|
||||
huiyuan_queryset = Huiyuan.query.all().order_by('-CreateTime')
|
||||
|
||||
# 构建会员数据列表
|
||||
huiyuan_list = []
|
||||
@@ -3916,9 +3916,9 @@ class AdHuiyuanHqView(APIView):
|
||||
'jiage': str(huiyuan.jiage), # 会员价格(转换为字符串,避免Decimal序列化问题)
|
||||
'guanshifc': str(huiyuan.guanshifc), # 管事分成(转换为字符串)
|
||||
'goumai_cishu': huiyuan.goumai_cishu, # 购买次数(销量)
|
||||
'create_time': huiyuan.create_time.strftime('%Y-%m-%d %H:%M:%S') if huiyuan.create_time else None,
|
||||
'CreateTime': huiyuan.CreateTime.strftime('%Y-%m-%d %H:%M:%S') if huiyuan.CreateTime else None,
|
||||
# 创建时间
|
||||
'update_time': huiyuan.update_time.strftime('%Y-%m-%d %H:%M:%S') if huiyuan.update_time else None
|
||||
'UpdateTime': huiyuan.UpdateTime.strftime('%Y-%m-%d %H:%M:%S') if huiyuan.UpdateTime else None
|
||||
# 更新时间
|
||||
}
|
||||
huiyuan_list.append(huiyuan_data)
|
||||
@@ -4112,10 +4112,10 @@ class HuiyuanXiugaiView(APIView):
|
||||
'jiage': str(huiyuan_obj.jiage),
|
||||
'guanshifc': str(huiyuan_obj.guanshifc),
|
||||
'goumai_cishu': huiyuan_obj.goumai_cishu,
|
||||
'create_time': huiyuan_obj.create_time.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if huiyuan_obj.create_time else None,
|
||||
'update_time': huiyuan_obj.update_time.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if huiyuan_obj.update_time else None
|
||||
'CreateTime': huiyuan_obj.CreateTime.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if huiyuan_obj.CreateTime else None,
|
||||
'UpdateTime': huiyuan_obj.UpdateTime.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if huiyuan_obj.UpdateTime else None
|
||||
}
|
||||
|
||||
# 返回成功响应
|
||||
@@ -4292,10 +4292,10 @@ class AdHuiyuanFbView(APIView):
|
||||
'jiage': str(huiyuan_obj.jiage),
|
||||
'guanshifc': str(huiyuan_obj.guanshifc),
|
||||
'goumai_cishu': huiyuan_obj.goumai_cishu,
|
||||
'create_time': huiyuan_obj.create_time.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if huiyuan_obj.create_time else None,
|
||||
'update_time': huiyuan_obj.update_time.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if huiyuan_obj.update_time else None
|
||||
'CreateTime': huiyuan_obj.CreateTime.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if huiyuan_obj.CreateTime else None,
|
||||
'UpdateTime': huiyuan_obj.UpdateTime.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if huiyuan_obj.UpdateTime else None
|
||||
}
|
||||
|
||||
# 返回成功响应
|
||||
@@ -5110,10 +5110,10 @@ class AdShangpinNeiRongHuoQu(APIView):
|
||||
'guizetupian_url': shangpin_obj.guize_tupian or '', # 规则图片相对URL
|
||||
'yajin': str(shangpin_obj.yajin) if hasattr(shangpin_obj, 'yajin') and shangpin_obj.yajin else None,
|
||||
# 押金(可能不存在)
|
||||
'chuangjianshijian': shangpin_obj.create_time.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if shangpin_obj.create_time else '',
|
||||
'genggaishijian': shangpin_obj.update_time.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if shangpin_obj.update_time else '',
|
||||
'chuangjianshijian': shangpin_obj.CreateTime.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if shangpin_obj.CreateTime else '',
|
||||
'genggaishijian': shangpin_obj.UpdateTime.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if shangpin_obj.UpdateTime else '',
|
||||
# 额外字段,前端可能不需要但可以保留
|
||||
'leixing_id': shangpin_obj.leixing_id,
|
||||
'zhuanqu_id': shangpin_obj.zhuanqu_id,
|
||||
@@ -5381,8 +5381,8 @@ class AdShangpinXiuGai(APIView):
|
||||
'duiwaixiaoliang': shangpin_obj.duiwai_xiaoliang,
|
||||
'xiadanxuzhi': shangpin_obj.xiadan_xuzhi or '',
|
||||
'yajin': str(shangpin_obj.yongjin) if shangpin_obj.yongjin else None,
|
||||
'genggaishijian': shangpin_obj.update_time.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if shangpin_obj.update_time else '',
|
||||
'genggaishijian': shangpin_obj.UpdateTime.strftime(
|
||||
'%Y-%m-%d %H:%M:%S') if shangpin_obj.UpdateTime else '',
|
||||
}
|
||||
|
||||
return Response({
|
||||
@@ -5589,7 +5589,7 @@ class HuiyuanTypeListView(APIView):
|
||||
}, status=status.HTTP_401_UNAUTHORIZED)
|
||||
|
||||
# 🔥 2. 获取所有会员类型
|
||||
huiyuan_list = Huiyuan.query.all().order_by('create_time')
|
||||
huiyuan_list = Huiyuan.query.all().order_by('CreateTime')
|
||||
|
||||
# 🔥 3. 构建返回数据
|
||||
huiyuan_data = []
|
||||
@@ -5599,7 +5599,7 @@ class HuiyuanTypeListView(APIView):
|
||||
'jieshao': huiyuan.jieshao, # 会员介绍
|
||||
'jiage': str(huiyuan.jiage), # 价格
|
||||
'goumai_cishu': huiyuan.goumai_cishu, # 购买次数
|
||||
'create_time': huiyuan.create_time.strftime('%Y-%m-%d %H:%M:%S') if huiyuan.create_time else None
|
||||
'CreateTime': huiyuan.CreateTime.strftime('%Y-%m-%d %H:%M:%S') if huiyuan.CreateTime else None
|
||||
})
|
||||
|
||||
return Response({
|
||||
@@ -5710,7 +5710,7 @@ class HuiyuanRecordListView(APIView):
|
||||
hg.huiyuan_id,
|
||||
hg.jieshao,
|
||||
hg.daoqi_time,
|
||||
hg.create_time,
|
||||
hg.CreateTime,
|
||||
um.avatar,
|
||||
ud.nicheng
|
||||
FROM huiyuangoumai hg
|
||||
@@ -5728,7 +5728,7 @@ class HuiyuanRecordListView(APIView):
|
||||
record_sql += " AND hg.daoqi_time <= %s"
|
||||
record_params.append(now)
|
||||
|
||||
record_sql += " ORDER BY hg.create_time DESC LIMIT %s OFFSET %s"
|
||||
record_sql += " ORDER BY hg.CreateTime DESC LIMIT %s OFFSET %s"
|
||||
record_params.extend([pagesize, offset])
|
||||
|
||||
cursor.execute(record_sql, record_params)
|
||||
@@ -5743,7 +5743,7 @@ class HuiyuanRecordListView(APIView):
|
||||
'huiyuan_id': record[2],
|
||||
'jieshao': record[3],
|
||||
'daoqi_time': record[4].strftime('%Y-%m-%d %H:%M:%S') if record[4] else None,
|
||||
'create_time': record[5].strftime('%Y-%m-%d %H:%M:%S') if record[5] else None,
|
||||
'CreateTime': record[5].strftime('%Y-%m-%d %H:%M:%S') if record[5] else None,
|
||||
'touxiang': record[6], # 头像相对URL
|
||||
'nicheng': record[7] or record[1], # 昵称或用户ID
|
||||
'yonghu_type': 2 # 🔥 默认打手类型(实际应该根据user_type判断)
|
||||
@@ -5874,7 +5874,7 @@ class ZuzhangFenhongView(APIView):
|
||||
yaoqing_guanshi = UserGuanshi.query.filter(yaoqingren=current_user.UserUID).count()
|
||||
|
||||
# 3.3 分红次数(总记录数)
|
||||
base_queryset = Gsfenhong.query.filter(zuzhang_id=current_user.UserUID).order_by('-create_time')
|
||||
base_queryset = Gsfenhong.query.filter(zuzhang_id=current_user.UserUID).order_by('-CreateTime')
|
||||
fenhong_cishu = base_queryset.count()
|
||||
|
||||
# 4. 分页查询
|
||||
@@ -5907,7 +5907,7 @@ class ZuzhangFenhongView(APIView):
|
||||
fenhong_str = str(fenhong.quantize(decimal.Decimal('0.00')))
|
||||
|
||||
# 时间格式化
|
||||
create_time = rec.create_time.strftime('%Y-%m-%d %H:%M:%S') if rec.create_time else ''
|
||||
CreateTime = rec.CreateTime.strftime('%Y-%m-%d %H:%M:%S') if rec.CreateTime else ''
|
||||
|
||||
list_data.append({
|
||||
'dashou_avatar': dashou_avatar,
|
||||
@@ -5917,7 +5917,7 @@ class ZuzhangFenhongView(APIView):
|
||||
'guanshi_nicheng': guanshi_nicheng,
|
||||
'guanshi_yonghuid': guanshi_id,
|
||||
'fenhong': fenhong_str,
|
||||
'create_time': create_time,
|
||||
'CreateTime': CreateTime,
|
||||
})
|
||||
|
||||
# 7. 是否有更多数据
|
||||
|
||||
Reference in New Issue
Block a user