加入了 GVSDSDK 模块,进行了 QModel 兼容层的尝试,生产环境可用

This commit is contained in:
2026-06-16 00:13:10 +08:00
parent 9d9cfa53a4
commit 63e0f4edfc
68 changed files with 10256 additions and 1143 deletions

View File

@@ -1,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')

View File

@@ -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 '',

View File

@@ -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})

File diff suppressed because it is too large Load Diff