加入了 GVSDSDK 模块,进行了 QModel 兼容层的尝试,生产环境可用
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
# models.py
|
||||
from django.db import models
|
||||
from django.contrib.auth.models import AbstractBaseUser
|
||||
from gvsdsdk.model_base import QModel
|
||||
|
||||
|
||||
# ==================== 用户主表 ====================
|
||||
class UserMain(AbstractBaseUser):
|
||||
class UserMain(AbstractBaseUser, QModel):
|
||||
# ID字段
|
||||
id = models.AutoField(primary_key=True, verbose_name='主键ID')
|
||||
yonghuid = models.CharField(max_length=7, unique=True, db_index=True, verbose_name='用户ID')
|
||||
@@ -70,7 +71,7 @@ class UserMain(AbstractBaseUser):
|
||||
|
||||
|
||||
# 新增服务号用户表
|
||||
class OfficialAccountUser(models.Model):
|
||||
class OfficialAccountUser(QModel):
|
||||
unionid = models.CharField(max_length=64, null =True,db_index=True, verbose_name='UnionID')
|
||||
official_openid = models.CharField(max_length=64, db_index=True, unique=True, verbose_name='服务号OpenID')
|
||||
subscribe_time = models.DateTimeField(auto_now_add=True, verbose_name='关注时间')
|
||||
@@ -88,7 +89,7 @@ class OfficialAccountUser(models.Model):
|
||||
|
||||
|
||||
# ==================== 老板扩展表 ====================
|
||||
class UserBoss(models.Model):
|
||||
class UserBoss(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='boss_profile',
|
||||
verbose_name='关联用户')
|
||||
nickname = models.CharField(max_length=50, verbose_name='老板昵称')
|
||||
@@ -105,7 +106,7 @@ class UserBoss(models.Model):
|
||||
|
||||
|
||||
# ==================== 打手扩展表 ====================
|
||||
class UserDashou(models.Model):
|
||||
class UserDashou(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='dashou_profile',
|
||||
verbose_name='关联用户')
|
||||
nicheng = models.CharField(max_length=50, null=True, verbose_name='打手昵称')
|
||||
@@ -149,7 +150,7 @@ class UserDashou(models.Model):
|
||||
|
||||
|
||||
# ==================== 商家扩展表 ====================
|
||||
class UserShangjia(models.Model):
|
||||
class UserShangjia(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='shop_profile',
|
||||
verbose_name='关联用户')
|
||||
nicheng = models.CharField(max_length=50, unique=True, db_index=True, verbose_name='商家昵称')
|
||||
@@ -178,7 +179,7 @@ class UserShangjia(models.Model):
|
||||
|
||||
|
||||
# ==================== 管事扩展表 ====================
|
||||
class UserGuanshi(models.Model):
|
||||
class UserGuanshi(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='guanshi_profile',
|
||||
verbose_name='关联用户')
|
||||
yaoqingren = models.CharField(max_length=7,null=True, db_index=True, verbose_name='邀请人ID')
|
||||
@@ -219,7 +220,7 @@ class UserGuanshi(models.Model):
|
||||
|
||||
|
||||
|
||||
class UserZuzhang(models.Model):
|
||||
class UserZuzhang(QModel):
|
||||
"""组长扩展表(与UserMain一对一关联)"""
|
||||
user = models.OneToOneField(
|
||||
UserMain,
|
||||
@@ -273,7 +274,7 @@ class UserZuzhang(models.Model):
|
||||
def __str__(self):
|
||||
return f"组长 {self.user.yonghuid}"
|
||||
|
||||
class UserShenheguan(models.Model):
|
||||
class UserShenheguan(QModel):
|
||||
"""审核官扩展表(与UserMain一对一关联)"""
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='shenheguan_profile', verbose_name='关联用户', db_index=True)
|
||||
zhuangtai = models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='账号状态')
|
||||
@@ -294,7 +295,7 @@ class UserShenheguan(models.Model):
|
||||
|
||||
|
||||
# ==================== 管理员扩展表 ====================
|
||||
class AdminProfile(models.Model):
|
||||
class AdminProfile(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='admin_profile',
|
||||
verbose_name='关联用户')
|
||||
password = models.CharField(max_length=255, verbose_name='密码')
|
||||
@@ -309,7 +310,7 @@ class AdminProfile(models.Model):
|
||||
indexes = [models.Index(fields=['user']), ]
|
||||
|
||||
|
||||
class UserKefu(models.Model):
|
||||
class UserKefu(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='kefu_profile', verbose_name='关联用户')
|
||||
nicheng = models.CharField(max_length=50, verbose_name='客服昵称')
|
||||
erjimima = models.CharField(max_length=128, verbose_name='二级密码')
|
||||
@@ -335,7 +336,7 @@ class UserKefu(models.Model):
|
||||
|
||||
|
||||
|
||||
class Tixianjilu(models.Model):
|
||||
class Tixianjilu(QModel):
|
||||
id = models.AutoField(primary_key=True, verbose_name='提现记录ID')
|
||||
yonghuid = models.CharField(max_length=7, db_index=True, verbose_name='提现用户ID')
|
||||
avatar = models.CharField(max_length=500, null=True, blank=True, verbose_name='头像') # 用CharField
|
||||
@@ -380,7 +381,7 @@ class Tixianjilu(models.Model):
|
||||
|
||||
|
||||
|
||||
class TixianShenheJilu(models.Model):
|
||||
class TixianShenheJilu(QModel):
|
||||
"""
|
||||
提现审核记录表(自动打款新流程)
|
||||
状态码与前端 TX_STATUS / Tixianjilu.zhuangtai 完全对标:
|
||||
@@ -440,7 +441,7 @@ class TixianShenheJilu(models.Model):
|
||||
|
||||
|
||||
|
||||
class TixianAutoRecord(models.Model):
|
||||
class TixianAutoRecord(QModel):
|
||||
"""
|
||||
自动提现记录表(微信自动打款)
|
||||
"""
|
||||
@@ -499,7 +500,7 @@ class TixianAutoRecord(models.Model):
|
||||
|
||||
|
||||
# yonghu/models.py
|
||||
class Xiugaijilu(models.Model):
|
||||
class Xiugaijilu(QModel):
|
||||
id = models.AutoField(primary_key=True, verbose_name='记录ID')
|
||||
yonghuid = models.CharField(max_length=7, verbose_name='被修改用户ID')
|
||||
xiugaiid = models.CharField(max_length=30, verbose_name='修改人账号ID')
|
||||
@@ -549,7 +550,7 @@ class Xiugaijilu(models.Model):
|
||||
|
||||
|
||||
# yonghu/models.py - 新增排行榜模型
|
||||
class RankingRecord(models.Model):
|
||||
class RankingRecord(QModel):
|
||||
# id: 主键ID
|
||||
id = models.AutoField(primary_key=True, verbose_name='ID')
|
||||
|
||||
|
||||
@@ -51,6 +51,8 @@ from orders.utils import update_daily_payout
|
||||
|
||||
from django.db.models import Sum
|
||||
|
||||
from gvsdsdk.fluent import db, func, FQ
|
||||
|
||||
logger = logging.getLogger('yonghu.tixian_shenhe')
|
||||
|
||||
ORDER_STATUS_COMPLETED = 3
|
||||
@@ -128,7 +130,7 @@ def load_audit_meta_map(audit_ids):
|
||||
if has_dakuan_mode_field():
|
||||
value_fields.append('dakuan_mode')
|
||||
result = {}
|
||||
for row in TixianShenheJilu.objects.filter(id__in=audit_ids).values(*value_fields):
|
||||
for row in TixianShenheJilu.query.filter(id__in=audit_ids).values(*value_fields):
|
||||
result[row['id']] = {
|
||||
'shenhe_danhao': row.get('shenhe_danhao') or '',
|
||||
'dakuan_mode': row.get('dakuan_mode', DAKUAN_MODE_AUTO),
|
||||
@@ -142,7 +144,7 @@ def generate_shenhe_danhao():
|
||||
timestamp = str(int(time.time() * 1000))[-10:]
|
||||
random_part = str(random.randint(1000, 9999))
|
||||
danhao = f'TXSH{timestamp}{random_part}'
|
||||
if not TixianShenheJilu.objects.filter(shenhe_danhao=danhao).exists():
|
||||
if not TixianShenheJilu.query.filter(shenhe_danhao=danhao).exists():
|
||||
return danhao
|
||||
raise RuntimeError('生成审核单号失败,请重试')
|
||||
|
||||
@@ -151,7 +153,7 @@ def get_tixian_feilv(leixing):
|
||||
rate_key = LEIXING_RATE_KEY.get(leixing)
|
||||
if not rate_key:
|
||||
raise ValueError('无效的提现类型')
|
||||
rate_obj = Lilubiao.objects.filter(fadanpingtai=rate_key).first()
|
||||
rate_obj = Lilubiao.query.filter(fadanpingtai=rate_key).first()
|
||||
if not rate_obj:
|
||||
raise ValueError(f'提现费率未配置(类型{leixing})')
|
||||
return decimal.Decimal(str(rate_obj.lilu))
|
||||
@@ -170,7 +172,7 @@ def check_dashou_has_valid_huiyuan(yonghuid):
|
||||
返回 (True, '') 或 (False, 原因)
|
||||
"""
|
||||
|
||||
records = Huiyuangoumai.objects.filter(yonghu_id=yonghuid)
|
||||
records = Huiyuangoumai.query.filter(yonghu_id=yonghuid)
|
||||
if not records.exists():
|
||||
return False, '您暂无会员记录,无法提现'
|
||||
|
||||
@@ -194,7 +196,7 @@ def validate_withdraw_eligibility(user_main, leixing, jine):
|
||||
|
||||
if leixing == 1:
|
||||
try:
|
||||
dashou = UserDashou.objects.get(user=user_main)
|
||||
dashou = UserDashou.query.get(user=user_main)
|
||||
except UserDashou.DoesNotExist:
|
||||
return False, '您不是打手身份,无法提现佣金', {}
|
||||
if dashou.zhanghaozhuangtai != 1:
|
||||
@@ -212,7 +214,7 @@ def validate_withdraw_eligibility(user_main, leixing, jine):
|
||||
|
||||
if leixing == 2:
|
||||
try:
|
||||
guanshi = UserGuanshi.objects.get(user=user_main)
|
||||
guanshi = UserGuanshi.query.get(user=user_main)
|
||||
except UserGuanshi.DoesNotExist:
|
||||
return False, '您不是管事身份,无法提现分红', {}
|
||||
if guanshi.zhuangtai != 1:
|
||||
@@ -223,7 +225,7 @@ def validate_withdraw_eligibility(user_main, leixing, jine):
|
||||
|
||||
if leixing == 3:
|
||||
try:
|
||||
zuzhang = UserZuzhang.objects.get(user=user_main)
|
||||
zuzhang = UserZuzhang.query.get(user=user_main)
|
||||
except UserZuzhang.DoesNotExist:
|
||||
return False, '您不是组长身份,无法提现组长分红', {}
|
||||
if zuzhang.zhuangtai != 1:
|
||||
@@ -234,7 +236,7 @@ def validate_withdraw_eligibility(user_main, leixing, jine):
|
||||
|
||||
if leixing == 4:
|
||||
try:
|
||||
kaoheguan = UserShenheguan.objects.get(user=user_main)
|
||||
kaoheguan = UserShenheguan.query.get(user=user_main)
|
||||
except UserShenheguan.DoesNotExist:
|
||||
return False, '您不是考核官身份,无法提现分佣', {}
|
||||
if kaoheguan.zhuangtai != 1:
|
||||
@@ -245,7 +247,7 @@ def validate_withdraw_eligibility(user_main, leixing, jine):
|
||||
|
||||
if leixing == 5:
|
||||
try:
|
||||
dashou = UserDashou.objects.get(user=user_main)
|
||||
dashou = UserDashou.query.get(user=user_main)
|
||||
except UserDashou.DoesNotExist:
|
||||
return False, '您不是打手身份,无法提取押金', {}
|
||||
if dashou.zhanghaozhuangtai != 1:
|
||||
@@ -259,34 +261,34 @@ def validate_withdraw_eligibility(user_main, leixing, jine):
|
||||
return False, huiyuan_msg, {}
|
||||
if dashou.yajin < jine:
|
||||
return False, f'押金余额不足,当前押金: {dashou.yajin}', {}
|
||||
unfinished = Dingdan.objects.filter(
|
||||
unfinished = Dingdan.query.filter(
|
||||
jiedan_dashou_id=yonghuid,
|
||||
).exclude(zhuangtai__in=[ORDER_STATUS_COMPLETED, ORDER_STATUS_REFUNDED]).exists()
|
||||
if unfinished:
|
||||
return False, '您还有未完成或未退款的订单,请先处理完毕再提取押金', {}
|
||||
self_fadan = Fadan.objects.filter(beichufa_id=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
self_fadan = Fadan.query.filter(beichufa_id=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
if self_fadan:
|
||||
return False, '您有未处理完毕的自身罚单(待缴纳/申诉中),请先处理', {}
|
||||
return True, '', {'nicheng': dashou.nicheng or ''}
|
||||
|
||||
if leixing == 6:
|
||||
try:
|
||||
shangjia = UserShangjia.objects.get(user=user_main)
|
||||
shangjia = UserShangjia.query.get(user=user_main)
|
||||
except UserShangjia.DoesNotExist:
|
||||
return False, '您不是商家身份,无法提现商家余额', {}
|
||||
if shangjia.zhuangtai != 1:
|
||||
return False, '商家账号已被禁用,无法提现', {}
|
||||
if shangjia.yue < jine:
|
||||
return False, f'商家余额不足,当前余额: {shangjia.yue}', {}
|
||||
unfinished_orders = DingdanShangjia.objects.filter(
|
||||
unfinished_orders = DingdanShangjia.query.filter(
|
||||
shangjia_id=yonghuid,
|
||||
).exclude(dingdan__zhuangtai__in=[ORDER_STATUS_COMPLETED, ORDER_STATUS_REFUNDED]).exists()
|
||||
if unfinished_orders:
|
||||
return False, '您还有未完成或未退款的订单,请先处理完毕再提现余额', {}
|
||||
self_fadan = Fadan.objects.filter(beichufa_id=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
self_fadan = Fadan.query.filter(beichufa_id=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
if self_fadan:
|
||||
return False, '您有未处理完毕的自身罚单(待缴纳/申诉中),请先处理', {}
|
||||
applied_fadan = Fadan.objects.filter(shenqing_chufa=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
applied_fadan = Fadan.query.filter(shenqing_chufa=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
if applied_fadan:
|
||||
return False, '您发起的对其他用户的处罚尚未处理完毕,请等待完结', {}
|
||||
return True, '', {'nicheng': shangjia.nicheng or ''}
|
||||
@@ -320,7 +322,7 @@ def validate_collect_eligibility(user_main, leixing):
|
||||
|
||||
if leixing == 1:
|
||||
try:
|
||||
dashou = UserDashou.objects.get(user=user_main)
|
||||
dashou = UserDashou.query.get(user=user_main)
|
||||
except UserDashou.DoesNotExist:
|
||||
return False, '您不是打手身份,无法收款'
|
||||
if dashou.zhanghaozhuangtai != 1:
|
||||
@@ -336,7 +338,7 @@ def validate_collect_eligibility(user_main, leixing):
|
||||
|
||||
if leixing == 5:
|
||||
try:
|
||||
dashou = UserDashou.objects.get(user=user_main)
|
||||
dashou = UserDashou.query.get(user=user_main)
|
||||
except UserDashou.DoesNotExist:
|
||||
return False, '您不是打手身份,无法收款'
|
||||
if dashou.zhanghaozhuangtai != 1:
|
||||
@@ -348,19 +350,19 @@ def validate_collect_eligibility(user_main, leixing):
|
||||
huiyuan_ok, huiyuan_msg = check_dashou_has_valid_huiyuan(yonghuid)
|
||||
if not huiyuan_ok:
|
||||
return False, huiyuan_msg
|
||||
unfinished = Dingdan.objects.filter(
|
||||
unfinished = Dingdan.query.filter(
|
||||
jiedan_dashou_id=yonghuid,
|
||||
).exclude(zhuangtai__in=[ORDER_STATUS_COMPLETED, ORDER_STATUS_REFUNDED]).exists()
|
||||
if unfinished:
|
||||
return False, '您还有未完成或未退款的订单,无法收款'
|
||||
self_fadan = Fadan.objects.filter(beichufa_id=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
self_fadan = Fadan.query.filter(beichufa_id=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
if self_fadan:
|
||||
return False, '您有未处理完毕的自身罚单,无法收款'
|
||||
return True, ''
|
||||
|
||||
if leixing == 2:
|
||||
try:
|
||||
guanshi = UserGuanshi.objects.get(user=user_main)
|
||||
guanshi = UserGuanshi.query.get(user=user_main)
|
||||
except UserGuanshi.DoesNotExist:
|
||||
return False, '您不是管事身份,无法收款'
|
||||
if guanshi.zhuangtai != 1:
|
||||
@@ -369,27 +371,27 @@ def validate_collect_eligibility(user_main, leixing):
|
||||
|
||||
if leixing == 6:
|
||||
try:
|
||||
shangjia = UserShangjia.objects.get(user=user_main)
|
||||
shangjia = UserShangjia.query.get(user=user_main)
|
||||
except UserShangjia.DoesNotExist:
|
||||
return False, '您不是商家身份,无法收款'
|
||||
if shangjia.zhuangtai != 1:
|
||||
return False, '商家账号已被禁用,无法收款'
|
||||
unfinished_orders = DingdanShangjia.objects.filter(
|
||||
unfinished_orders = DingdanShangjia.query.filter(
|
||||
shangjia_id=yonghuid,
|
||||
).exclude(dingdan__zhuangtai__in=[ORDER_STATUS_COMPLETED, ORDER_STATUS_REFUNDED]).exists()
|
||||
if unfinished_orders:
|
||||
return False, '您还有未完成或未退款的订单,无法收款'
|
||||
self_fadan = Fadan.objects.filter(beichufa_id=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
self_fadan = Fadan.query.filter(beichufa_id=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
if self_fadan:
|
||||
return False, '您有未处理完毕的自身罚单,无法收款'
|
||||
applied_fadan = Fadan.objects.filter(shenqing_chufa=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
applied_fadan = Fadan.query.filter(shenqing_chufa=yonghuid).exclude(zhuangtai__in=[2, 4]).exists()
|
||||
if applied_fadan:
|
||||
return False, '您发起的处罚尚未处理完毕,无法收款'
|
||||
return True, ''
|
||||
|
||||
if leixing == 3:
|
||||
try:
|
||||
zuzhang = UserZuzhang.objects.get(user=user_main)
|
||||
zuzhang = UserZuzhang.query.get(user=user_main)
|
||||
except UserZuzhang.DoesNotExist:
|
||||
return False, '您不是组长身份,无法收款'
|
||||
if zuzhang.zhuangtai != 1:
|
||||
@@ -398,7 +400,7 @@ def validate_collect_eligibility(user_main, leixing):
|
||||
|
||||
if leixing == 4:
|
||||
try:
|
||||
kaoheguan = UserShenheguan.objects.get(user=user_main)
|
||||
kaoheguan = UserShenheguan.query.get(user=user_main)
|
||||
except UserShenheguan.DoesNotExist:
|
||||
return False, '您不是考核官身份,无法收款'
|
||||
if kaoheguan.zhuangtai != 1:
|
||||
@@ -413,14 +415,14 @@ def _get_personal_daily_quota(leixing, profile):
|
||||
if leixing == 1:
|
||||
if profile.kaioi_ewai_xiane and profile.ewai_xiane > 0:
|
||||
return profile.ewai_xiane
|
||||
return TixianQuotaDefault.objects.get(leixing=1).default_quota
|
||||
return TixianQuotaDefault.query.get(leixing=1).default_quota
|
||||
if leixing == 2:
|
||||
if profile.kaioi_ewai_xiane and profile.ewai_xiane > 0:
|
||||
return profile.ewai_xiane
|
||||
return TixianQuotaDefault.objects.get(leixing=2).default_quota
|
||||
return TixianQuotaDefault.query.get(leixing=2).default_quota
|
||||
if leixing == 3:
|
||||
try:
|
||||
default_quota = TixianQuotaDefault.objects.get(leixing=3).default_quota
|
||||
default_quota = TixianQuotaDefault.query.get(leixing=3).default_quota
|
||||
except TixianQuotaDefault.DoesNotExist:
|
||||
default_quota = decimal.Decimal('0.00')
|
||||
if profile.kaioi_ewai_tixian and profile.ewai_tixian_xiane > 0:
|
||||
@@ -433,7 +435,7 @@ def _get_active_auto_record(shenhe_danhao):
|
||||
if not shenhe_danhao:
|
||||
return None
|
||||
return (
|
||||
TixianAutoRecord.objects.filter(
|
||||
TixianAutoRecord.query.filter(
|
||||
shenhe_danhao=shenhe_danhao,
|
||||
zhuangtai__in=[0, 1],
|
||||
)
|
||||
@@ -447,7 +449,7 @@ def _get_platform_daily_total(leixing, today=None):
|
||||
if today is None:
|
||||
today = date.today()
|
||||
try:
|
||||
return TixianRiTongji.objects.get(riqi=today, leixing=leixing).total_amount
|
||||
return TixianRiTongji.query.get(riqi=today, leixing=leixing).total_amount
|
||||
except TixianRiTongji.DoesNotExist:
|
||||
return decimal.Decimal('0.00')
|
||||
|
||||
@@ -480,7 +482,7 @@ def _get_platform_daily_limit(leixing):
|
||||
"""
|
||||
quota_leixing = leixing + 3
|
||||
try:
|
||||
return TixianQuotaDefault.objects.get(leixing=quota_leixing).default_quota
|
||||
return TixianQuotaDefault.query.get(leixing=quota_leixing).default_quota
|
||||
except TixianQuotaDefault.DoesNotExist:
|
||||
logger.warning(
|
||||
'平台每日总限额未配置 leixing=%s(读取quota_leixing=%s),按0处理禁止新增收款',
|
||||
@@ -497,7 +499,7 @@ def _check_personal_quota_readonly(user_main, leixing, jine, shenhe_danhao=''):
|
||||
today = date.today()
|
||||
if leixing == 1:
|
||||
try:
|
||||
profile = UserDashou.objects.get(user=user_main)
|
||||
profile = UserDashou.query.get(user=user_main)
|
||||
except UserDashou.DoesNotExist:
|
||||
return False, '打手信息不存在', 'personal'
|
||||
if profile.last_tixian_date != today:
|
||||
@@ -506,7 +508,7 @@ def _check_personal_quota_readonly(user_main, leixing, jine, shenhe_danhao=''):
|
||||
personal_today = profile.jinritixian_jine
|
||||
elif leixing == 2:
|
||||
try:
|
||||
profile = UserGuanshi.objects.get(user=user_main)
|
||||
profile = UserGuanshi.query.get(user=user_main)
|
||||
except UserGuanshi.DoesNotExist:
|
||||
return False, '管事信息不存在', 'personal'
|
||||
if profile.last_tixian_date != today:
|
||||
@@ -515,7 +517,7 @@ def _check_personal_quota_readonly(user_main, leixing, jine, shenhe_danhao=''):
|
||||
personal_today = profile.jinritixian_jine
|
||||
else:
|
||||
try:
|
||||
profile = UserZuzhang.objects.get(user=user_main)
|
||||
profile = UserZuzhang.query.get(user=user_main)
|
||||
except UserZuzhang.DoesNotExist:
|
||||
return False, '组长信息不存在', 'personal'
|
||||
if profile.last_tixian_time and profile.last_tixian_time.date() == today:
|
||||
@@ -706,7 +708,7 @@ def release_collect_quota_for_record(auto_record):
|
||||
if not _quota_already_reserved_for_record(auto_record):
|
||||
return
|
||||
try:
|
||||
user_main = UserMain.objects.get(yonghuid=auto_record.yonghuid)
|
||||
user_main = UserMain.query.get(yonghuid=auto_record.yonghuid)
|
||||
except UserMain.DoesNotExist:
|
||||
logger.error('回滚限额预占失败:用户不存在 %s', auto_record.yonghuid)
|
||||
return
|
||||
@@ -726,7 +728,7 @@ def _quota_already_reserved_for_record(auto_record):
|
||||
today = date.today()
|
||||
shijidaozhang = auto_record.shijidaozhang or decimal.Decimal('0.00')
|
||||
stat_total = _get_platform_daily_total(auto_record.leixing, today)
|
||||
other_sum = TixianAutoRecord.objects.filter(
|
||||
other_sum = TixianAutoRecord.query.filter(
|
||||
leixing=auto_record.leixing,
|
||||
zhuangtai__in=[0, 1],
|
||||
create_time__date=today,
|
||||
@@ -751,7 +753,7 @@ def apply_transfer_success_quota(auto_record):
|
||||
shijidaozhang = auto_record.shijidaozhang or decimal.Decimal('0.00')
|
||||
|
||||
try:
|
||||
user_main = UserMain.objects.get(yonghuid=auto_record.yonghuid)
|
||||
user_main = UserMain.query.get(yonghuid=auto_record.yonghuid)
|
||||
except UserMain.DoesNotExist:
|
||||
logger.error('打款成功累加限额失败:用户不存在 %s', auto_record.yonghuid)
|
||||
return
|
||||
@@ -879,25 +881,25 @@ def get_balance_response_data(user_main, leixing):
|
||||
data = {}
|
||||
if leixing == 1:
|
||||
try:
|
||||
dashou = UserDashou.objects.get(user=user_main)
|
||||
dashou = UserDashou.query.get(user=user_main)
|
||||
data['new_yongjin'] = str(dashou.yue.quantize(decimal.Decimal('0.01')))
|
||||
except UserDashou.DoesNotExist:
|
||||
pass
|
||||
elif leixing == 2:
|
||||
try:
|
||||
guanshi = UserGuanshi.objects.get(user=user_main)
|
||||
guanshi = UserGuanshi.query.get(user=user_main)
|
||||
data['new_fenyong'] = str(guanshi.yue.quantize(decimal.Decimal('0.01')))
|
||||
except UserGuanshi.DoesNotExist:
|
||||
pass
|
||||
elif leixing == 3:
|
||||
try:
|
||||
zuzhang = UserZuzhang.objects.get(user=user_main)
|
||||
zuzhang = UserZuzhang.query.get(user=user_main)
|
||||
data['new_zuzhang_ketixian'] = str(zuzhang.ketixian_jine.quantize(decimal.Decimal('0.01')))
|
||||
except UserZuzhang.DoesNotExist:
|
||||
pass
|
||||
elif leixing == 4:
|
||||
try:
|
||||
kg = UserShenheguan.objects.get(user=user_main)
|
||||
kg = UserShenheguan.query.get(user=user_main)
|
||||
data['new_kaoheguan_yue'] = str(kg.yue.quantize(decimal.Decimal('0.01')))
|
||||
except UserShenheguan.DoesNotExist:
|
||||
pass
|
||||
@@ -913,7 +915,7 @@ def sync_audit_and_jilu_status(audit, new_status, **extra_fields):
|
||||
update_fields = {'zhuangtai': new_status, 'update_time': timezone.now()}
|
||||
if 'bhliyou' in extra_fields:
|
||||
update_fields['bhliyou'] = extra_fields['bhliyou']
|
||||
Tixianjilu.objects.filter(id=audit.tixianjilu_id).update(**update_fields)
|
||||
Tixianjilu.query.filter(id=audit.tixianjilu_id).update(**update_fields)
|
||||
|
||||
|
||||
def _close_auto_record_failed(auto_record, fail_reason):
|
||||
@@ -1037,7 +1039,7 @@ def _apply_platform_accounting(auto_record):
|
||||
szjilu.jrzc += auto_record.shijidaozhang
|
||||
szjilu.save()
|
||||
except Szjilu.DoesNotExist:
|
||||
Szjilu.objects.create(
|
||||
Szjilu.query.create(
|
||||
id=1,
|
||||
zongsy=-auto_record.shijidaozhang,
|
||||
zongzc=auto_record.shijidaozhang,
|
||||
@@ -1145,7 +1147,7 @@ def _sync_record_from_wx_query(auto_record, wx_data):
|
||||
release_collect_quota_for_record(auto_record)
|
||||
if auto_record.shenhe_danhao:
|
||||
try:
|
||||
audit = TixianShenheJilu.objects.get(shenhe_danhao=auto_record.shenhe_danhao)
|
||||
audit = TixianShenheJilu.query.get(shenhe_danhao=auto_record.shenhe_danhao)
|
||||
with transaction.atomic():
|
||||
close_audit_wechat_failed(audit, None, fail_reason)
|
||||
except TixianShenheJilu.DoesNotExist:
|
||||
@@ -1168,14 +1170,14 @@ def get_auto_record_for_collect(shenhe_danhao):
|
||||
优先 zhuangtai=0(进行中),否则取最新一条(可能本地误标失败但微信未终态)
|
||||
"""
|
||||
pending = (
|
||||
TixianAutoRecord.objects.filter(shenhe_danhao=shenhe_danhao, zhuangtai=0)
|
||||
TixianAutoRecord.query.filter(shenhe_danhao=shenhe_danhao, zhuangtai=0)
|
||||
.order_by('-create_time')
|
||||
.first()
|
||||
)
|
||||
if pending:
|
||||
return pending
|
||||
return (
|
||||
TixianAutoRecord.objects.filter(shenhe_danhao=shenhe_danhao)
|
||||
TixianAutoRecord.query.filter(shenhe_danhao=shenhe_danhao)
|
||||
.order_by('-create_time')
|
||||
.first()
|
||||
)
|
||||
@@ -1188,12 +1190,12 @@ def reconcile_shenhe_wechat_bills(shenhe_danhao):
|
||||
返回 (action, payload)
|
||||
"""
|
||||
records = list(
|
||||
TixianAutoRecord.objects.filter(shenhe_danhao=shenhe_danhao).order_by('-create_time')
|
||||
TixianAutoRecord.query.filter(shenhe_danhao=shenhe_danhao).order_by('-create_time')
|
||||
)
|
||||
|
||||
if any(r.zhuangtai == 1 for r in records):
|
||||
try:
|
||||
audit = TixianShenheJilu.objects.get(shenhe_danhao=shenhe_danhao)
|
||||
audit = TixianShenheJilu.query.get(shenhe_danhao=shenhe_danhao)
|
||||
if audit.zhuangtai != 2:
|
||||
sync_audit_and_jilu_status(audit, 2)
|
||||
except TixianShenheJilu.DoesNotExist:
|
||||
@@ -1248,7 +1250,7 @@ def resolve_collect_context(yonghuid, tixianjilu_id=None, shenhe_danhao='', shen
|
||||
jilu = None
|
||||
if tixianjilu_id is not None:
|
||||
try:
|
||||
jilu = Tixianjilu.objects.get(id=int(tixianjilu_id), yonghuid=yonghuid)
|
||||
jilu = Tixianjilu.query.get(id=int(tixianjilu_id), yonghuid=yonghuid)
|
||||
except (Tixianjilu.DoesNotExist, TypeError, ValueError):
|
||||
return None, '提现记录不存在或不属于当前用户'
|
||||
|
||||
@@ -1272,13 +1274,13 @@ def resolve_collect_context(yonghuid, tixianjilu_id=None, shenhe_danhao='', shen
|
||||
|
||||
try:
|
||||
if shenhe_jilu_id:
|
||||
audit = TixianShenheJilu.objects.get(
|
||||
audit = TixianShenheJilu.query.get(
|
||||
id=int(shenhe_jilu_id),
|
||||
shenhe_danhao=shenhe_danhao,
|
||||
yonghuid=yonghuid,
|
||||
)
|
||||
else:
|
||||
audit = TixianShenheJilu.objects.get(
|
||||
audit = TixianShenheJilu.query.get(
|
||||
shenhe_danhao=shenhe_danhao,
|
||||
yonghuid=yonghuid,
|
||||
)
|
||||
@@ -1294,7 +1296,7 @@ def resolve_collect_context(yonghuid, tixianjilu_id=None, shenhe_danhao='', shen
|
||||
|
||||
if jilu is None:
|
||||
try:
|
||||
jilu = Tixianjilu.objects.get(
|
||||
jilu = Tixianjilu.query.get(
|
||||
id=audit.tixianjilu_id,
|
||||
yonghuid=yonghuid,
|
||||
) if audit.tixianjilu_id else None
|
||||
@@ -1310,7 +1312,7 @@ def handle_post_transfer_failure(tixian_id, shenhe_danhao, err_code='', err_msg=
|
||||
返回 (action, payload_or_user_msg)
|
||||
"""
|
||||
try:
|
||||
ar = TixianAutoRecord.objects.get(tixian_id=tixian_id)
|
||||
ar = TixianAutoRecord.query.get(tixian_id=tixian_id)
|
||||
except TixianAutoRecord.DoesNotExist:
|
||||
return RECONCILE_PENDING, '收款处理中,请稍后再试'
|
||||
|
||||
@@ -1402,9 +1404,9 @@ def create_audit_application(user_main, leixing, jine):
|
||||
}
|
||||
if has_dakuan_mode_field():
|
||||
audit_kwargs['dakuan_mode'] = DAKUAN_MODE_AUTO
|
||||
audit = TixianShenheJilu.objects.create(**audit_kwargs)
|
||||
audit = TixianShenheJilu.query.create(**audit_kwargs)
|
||||
|
||||
tixian_record = Tixianjilu.objects.create(
|
||||
tixian_record = Tixianjilu.query.create(
|
||||
yonghuid=yonghuid,
|
||||
avatar=user_main.avatar or '',
|
||||
phone=user_main.phone or '',
|
||||
|
||||
@@ -21,6 +21,7 @@ from rest_framework.views import APIView
|
||||
|
||||
from utils.redis_lock import acquire_lock, release_lock
|
||||
from utils.wechat_v3 import build_authorization
|
||||
from gvsdsdk.fluent import db, func, FQ
|
||||
|
||||
from .models import TixianAutoRecord
|
||||
from .tixian_shenhe_services import (
|
||||
@@ -87,7 +88,7 @@ def _verify_collect_quota_or_response(user_main, audit, shenhe_danhao):
|
||||
|
||||
def _mark_auto_record_failed(tixian_id, fail_reason):
|
||||
"""微信明确失败时标记打款记录终态,避免后续一直被当成「处理中」"""
|
||||
TixianAutoRecord.objects.filter(tixian_id=tixian_id, zhuangtai=0).update(
|
||||
TixianAutoRecord.query.filter(tixian_id=tixian_id, zhuangtai=0).update(
|
||||
zhuangtai=2,
|
||||
fail_reason=(fail_reason or '打款失败')[:500],
|
||||
update_time=timezone.now(),
|
||||
@@ -294,7 +295,7 @@ def process_audit_collect(request):
|
||||
quota_reserved = True
|
||||
|
||||
tixian_id = generate_tixian_id()
|
||||
TixianAutoRecord.objects.create(
|
||||
TixianAutoRecord.query.create(
|
||||
tixian_id=tixian_id,
|
||||
yonghuid=yonghuid,
|
||||
leixing=leixing,
|
||||
@@ -317,7 +318,7 @@ def process_audit_collect(request):
|
||||
|
||||
if resp.status_code == 200 and wx_result.get('state') == 'WAIT_USER_CONFIRM':
|
||||
package_info = wx_result.get('package_info')
|
||||
auto_record = TixianAutoRecord.objects.get(tixian_id=tixian_id)
|
||||
auto_record = TixianAutoRecord.query.get(tixian_id=tixian_id)
|
||||
auto_record.wechat_package = json.dumps(package_info, ensure_ascii=False)
|
||||
auto_record.save(update_fields=['wechat_package'])
|
||||
|
||||
@@ -344,7 +345,7 @@ def process_audit_collect(request):
|
||||
_mark_auto_record_failed(tixian_id, err_msg)
|
||||
if quota_reserved:
|
||||
release_collect_quota_for_record(
|
||||
TixianAutoRecord.objects.get(tixian_id=tixian_id),
|
||||
TixianAutoRecord.query.get(tixian_id=tixian_id),
|
||||
)
|
||||
quota_reserved = False
|
||||
return Response({
|
||||
@@ -378,7 +379,7 @@ def process_audit_collect(request):
|
||||
_mark_auto_record_failed(tixian_id, user_msg)
|
||||
if quota_reserved:
|
||||
release_collect_quota_for_record(
|
||||
TixianAutoRecord.objects.get(tixian_id=tixian_id),
|
||||
TixianAutoRecord.query.get(tixian_id=tixian_id),
|
||||
)
|
||||
quota_reserved = False
|
||||
return Response({'code': 99, 'msg': user_msg})
|
||||
|
||||
602
users/views.py
602
users/views.py
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user