加入了 GVSDSDK 模块,进行了 QModel 兼容层的尝试,生产环境可用
This commit is contained in:
@@ -1,7 +1,8 @@
|
||||
from django.db import models
|
||||
from gvsdsdk.model_base import QModel
|
||||
|
||||
|
||||
class Dingdan(models.Model):
|
||||
class Dingdan(QModel):
|
||||
"""订单主表"""
|
||||
# 核心编号:唯一且不可为空[citation:3][citation:9]
|
||||
dingdan_id = models.CharField(max_length=32, unique=True,db_index=True, verbose_name='订单ID')
|
||||
@@ -65,7 +66,7 @@ class Dingdan(models.Model):
|
||||
def __str__(self):
|
||||
return self.dingdan_id
|
||||
|
||||
class DingdanPingtai(models.Model):
|
||||
class DingdanPingtai(QModel):
|
||||
"""平台订单扩展表 (当 fadan_pingtai=1 时使用)"""
|
||||
dingdan = models.OneToOneField(Dingdan, on_delete=models.CASCADE, related_name='pingtai_kuozhan', verbose_name='订单')
|
||||
laoban_id = models.CharField(max_length=32, null=True, blank=True, db_index=True,verbose_name='老板ID')
|
||||
@@ -98,7 +99,7 @@ class DingdanPingtai(models.Model):
|
||||
return f"平台扩展-{self.dingdan.dingdan_id}"
|
||||
|
||||
|
||||
class DingdanShangjia(models.Model):
|
||||
class DingdanShangjia(QModel):
|
||||
"""商家发单扩展表 (当 fadan_pingtai=2 时使用)"""
|
||||
dingdan = models.OneToOneField(Dingdan, on_delete=models.CASCADE, related_name='shangjia_kuozhan', verbose_name='订单')
|
||||
shangjia_id = models.CharField(max_length=32, null=True, blank=True,db_index=True, verbose_name='商家ID')
|
||||
@@ -135,7 +136,7 @@ class DingdanShangjia(models.Model):
|
||||
|
||||
|
||||
|
||||
class DingdanPeihu(models.Model):
|
||||
class DingdanPeihu(QModel):
|
||||
"""陪护订单表(一个订单最多2个陪护)"""
|
||||
# 关联订单(一对一,陪护订单依附于原订单)
|
||||
dingdan_id = models.CharField(max_length=32, unique=True, db_index=True, verbose_name='订单ID')
|
||||
@@ -180,7 +181,7 @@ class DingdanPeihu(models.Model):
|
||||
|
||||
|
||||
|
||||
class Fadan(models.Model):
|
||||
class Fadan(QModel):
|
||||
"""罚单表——平台各类处罚信息"""
|
||||
id = models.AutoField(primary_key=True, verbose_name='自增主键')
|
||||
beichufa_id = models.CharField(max_length=20, db_index=True, verbose_name='被处罚用户ID') # 直接用yonghuid,后续可改为外键
|
||||
@@ -228,7 +229,7 @@ class Fadan(models.Model):
|
||||
|
||||
|
||||
# ==================== 罚款申诉图片表 ====================
|
||||
class FadanShensuTupian(models.Model):
|
||||
class FadanShensuTupian(QModel):
|
||||
"""罚款申诉图片,关联罚单"""
|
||||
fadan = models.ForeignKey(Fadan, on_delete=models.CASCADE, related_name='shensu_tupians', verbose_name='关联罚单')
|
||||
beichufa_id = models.CharField(max_length=7, db_index=True, verbose_name='被处罚用户ID') # 冗余,便于直接按用户查
|
||||
@@ -253,7 +254,7 @@ class FadanShensuTupian(models.Model):
|
||||
|
||||
|
||||
# 与 Fadan 放在同一个文件或独立的 fadan/models.py
|
||||
class FadanFenhong(models.Model):
|
||||
class FadanFenhong(QModel):
|
||||
"""罚款分红表——记录罚款产生的分红信息"""
|
||||
id = models.AutoField(primary_key=True, verbose_name='自增主键')
|
||||
fenhongzhe_id = models.CharField(max_length=20, db_index=True, verbose_name='分红者ID')
|
||||
@@ -282,7 +283,7 @@ class FadanFenhong(models.Model):
|
||||
|
||||
|
||||
|
||||
class FadanFenhongLilv(models.Model):
|
||||
class FadanFenhongLilv(QModel):
|
||||
shenfen = models.IntegerField(primary_key=True, choices=[(1, '客服'), (2, '售后'), (3, '管理员'), (4, '店铺'), (5, '商家')], verbose_name='申请处罚人身份')
|
||||
lilv = models.DecimalField(max_digits=5, decimal_places=4, default=0.0000, verbose_name='分红费率')
|
||||
create_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间')
|
||||
@@ -299,7 +300,7 @@ class FadanFenhongLilv(models.Model):
|
||||
|
||||
|
||||
|
||||
class OrderDashouHistory(models.Model):
|
||||
class OrderDashouHistory(QModel):
|
||||
"""
|
||||
订单打手变更历史表
|
||||
记录订单每次更换打手的操作
|
||||
@@ -327,7 +328,7 @@ class OrderDashouHistory(models.Model):
|
||||
|
||||
|
||||
|
||||
class Dashoutupian(models.Model):
|
||||
class Dashoutupian(QModel):
|
||||
dingdan_id = models.CharField(max_length=32,db_index=True, null=True, verbose_name='订单ID')
|
||||
dashou = models.CharField(max_length=32, null=True, blank=True,db_index=True, verbose_name='接单打手ID')
|
||||
tupian = models.CharField(max_length=500, null=True, blank=True, verbose_name='打手提交图片URL')
|
||||
@@ -344,7 +345,7 @@ class Dashoutupian(models.Model):
|
||||
|
||||
|
||||
|
||||
class Pingfen(models.Model):
|
||||
class Pingfen(QModel):
|
||||
dashou = models.CharField(max_length=32, null=True, blank=True, db_index=True,verbose_name='接单打手ID')
|
||||
zongfen = models.PositiveIntegerField(default=0, verbose_name='总分')
|
||||
cishu = models.PositiveIntegerField(default=0, verbose_name='评分次数')
|
||||
@@ -368,7 +369,7 @@ class Pingfen(models.Model):
|
||||
|
||||
|
||||
|
||||
class Lilubiao(models.Model):
|
||||
class Lilubiao(QModel):
|
||||
lilu = models.DecimalField(max_digits=5, decimal_places=4,null=True, verbose_name='平台分成利率,1是平台,2是商家')
|
||||
#sahngjialilu = models.DecimalField(max_digits=5, decimal_places=4,null=True, verbose_name='商家利率')
|
||||
fadanpingtai = models.CharField(max_length=10,null=True,verbose_name='订单所属平台,(商家或平台)')
|
||||
@@ -380,7 +381,7 @@ class Lilubiao(models.Model):
|
||||
|
||||
|
||||
|
||||
class Chufajilu(models.Model):
|
||||
class Chufajilu(QModel):
|
||||
dashouid = models.CharField(max_length=7, null=True, db_index=True, verbose_name='被罚打手ID')
|
||||
qingqiuid = models.CharField(max_length=11, null=True, db_index=True, verbose_name='请求处罚ID')
|
||||
chuliid = models.CharField(max_length=11, null=True, db_index=True, verbose_name='处理处罚ID')
|
||||
@@ -402,7 +403,7 @@ class Chufajilu(models.Model):
|
||||
]
|
||||
|
||||
|
||||
class Chufatupian(models.Model):
|
||||
class Chufatupian(QModel):
|
||||
dingdan_id = models.CharField(max_length=32,db_index=True, null=True, verbose_name='订单ID')
|
||||
yonghuid = models.CharField(max_length=32, null=True, blank=True,db_index=True, verbose_name='用户ID')
|
||||
tupian = models.CharField(max_length=500, null=True, blank=True, verbose_name='证据图片URL')
|
||||
@@ -418,7 +419,7 @@ class Chufatupian(models.Model):
|
||||
]
|
||||
|
||||
|
||||
class Tuikuanjilu(models.Model):
|
||||
class Tuikuanjilu(QModel):
|
||||
dingdan_id = models.CharField(max_length=32, unique=True, verbose_name='订单ID')
|
||||
dashouid = models.CharField(max_length=7, null=True, verbose_name='接单打手ID')
|
||||
qingqiuid = models.CharField(max_length=7, null=True, verbose_name='请求用户ID')
|
||||
@@ -442,7 +443,7 @@ class Tuikuanjilu(models.Model):
|
||||
]
|
||||
|
||||
|
||||
class Ptliushui(models.Model):
|
||||
class Ptliushui(QModel):
|
||||
zonge = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True, verbose_name='收取总金额')
|
||||
zhichuzonge = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True, verbose_name='支出总金额')
|
||||
zongshouyi = models.DecimalField(max_digits=10, decimal_places=2, null=True, blank=True, verbose_name='总收益')
|
||||
@@ -457,7 +458,7 @@ class Ptliushui(models.Model):
|
||||
db_table = 'ptliushui'
|
||||
|
||||
|
||||
class Liaotian(models.Model):
|
||||
class Liaotian(QModel):
|
||||
"""聊天关系表 - 极简设计,不设置唯一约束"""
|
||||
# 主键
|
||||
id = models.BigAutoField(primary_key=True, verbose_name='主键ID')
|
||||
|
||||
@@ -10,6 +10,7 @@ from django.db.models.signals import pre_save
|
||||
from django.dispatch import receiver
|
||||
from django.conf import settings
|
||||
from django.utils import timezone
|
||||
from gvsdsdk.fluent import db, func, FQ
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -52,7 +53,7 @@ def handle_order_status_8(sender, instance, **kwargs):
|
||||
from orders.models import Dingdan
|
||||
|
||||
# 获取旧状态
|
||||
old = Dingdan.objects.filter(pk=instance.pk).values_list('zhuangtai', flat=True).first()
|
||||
old = Dingdan.query.filter(pk=instance.pk).values_list('zhuangtai', flat=True).first()
|
||||
|
||||
# 状态从 非8 变为 8
|
||||
if old != 8 and instance.zhuangtai == 8:
|
||||
|
||||
@@ -17,6 +17,7 @@ import logging
|
||||
from orders.models import Dingdan
|
||||
from users.models import UserMain, UserDashou, UserShangjia
|
||||
from utils.celery_utils import safe_decimal_operation, log_task_execution, rollback_on_failure
|
||||
from gvsdsdk.fluent import db, func, FQ
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -62,13 +63,13 @@ def process_expired_order(self, dingdan_id):
|
||||
if dashou_id:
|
||||
try:
|
||||
# 查询打手用户主表
|
||||
dashou_user = UserMain.objects.filter(yonghuid=dashou_id).first()
|
||||
dashou_user = UserMain.query.filter(yonghuid=dashou_id).first()
|
||||
if dashou_user:
|
||||
# 获取打手扩展表
|
||||
dashou_profile = getattr(dashou_user, 'dashou_profile', None)
|
||||
if dashou_profile:
|
||||
# 使用F表达式原子更新
|
||||
UserDashou.objects.filter(pk=dashou_profile.pk).update(
|
||||
UserDashou.query.filter(pk=dashou_profile.pk).update(
|
||||
chengjiaozongliang=F('chengjiaozongliang') + 1,
|
||||
yue=F('yue') + dashou_fencheng,
|
||||
zonge=F('zonge') + dashou_fencheng,
|
||||
@@ -91,12 +92,12 @@ def process_expired_order(self, dingdan_id):
|
||||
shangjia_id = shangjia_kuozhan.shangjia_id
|
||||
if shangjia_id:
|
||||
# 查询商家用户
|
||||
shangjia_user = UserMain.objects.filter(yonghuid=shangjia_id).first()
|
||||
shangjia_user = UserMain.query.filter(yonghuid=shangjia_id).first()
|
||||
if shangjia_user:
|
||||
shangjia_profile = getattr(shangjia_user, 'shop_profile', None)
|
||||
if shangjia_profile:
|
||||
# 更新商家成交订单数量
|
||||
UserShangjia.objects.filter(pk=shangjia_profile.pk).update(
|
||||
UserShangjia.query.filter(pk=shangjia_profile.pk).update(
|
||||
chengjiao=F('chengjiao') + 1
|
||||
)
|
||||
updated_shangjia = True
|
||||
@@ -151,7 +152,7 @@ def check_order_expire_task():
|
||||
check_time = timezone.now() - timedelta(seconds=settings.ORDER_EXPIRE_SECONDS + 86400) # 48+24=72小时
|
||||
|
||||
# 查询状态为8且创建时间早于检查时间的订单
|
||||
expired_orders = Dingdan.objects.filter(
|
||||
expired_orders = Dingdan.query.filter(
|
||||
zhuangtai=8,
|
||||
create_time__lt=check_time
|
||||
).values_list('dingdan_id', flat=True)
|
||||
|
||||
298
orders/views.py
298
orders/views.py
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user