进行了 GVSDSDK 迁移,可能存在诸多问题
This commit is contained in:
@@ -1,213 +1,417 @@
|
||||
# Generated by Django 5.2.10 on 2026-01-14 19:59
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Xiugaijilu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='记录ID')),
|
||||
('yonghuid', models.CharField(max_length=7, verbose_name='被修改用户ID')),
|
||||
('xiugaiid', models.CharField(max_length=30, verbose_name='修改人账号ID')),
|
||||
('leixing', models.IntegerField(verbose_name='被修改用户类型')),
|
||||
('xiugaitijiao', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的打手提现金额')),
|
||||
('xiugaitijiaoq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的打手提现金额')),
|
||||
('jifen', models.IntegerField(default=0, verbose_name='修改后的打手积分')),
|
||||
('yjifen', models.IntegerField(default=0, verbose_name='修改前的打手积分')),
|
||||
('yajin', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的打手押金')),
|
||||
('yyajin', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的打手押金')),
|
||||
('shangjiayue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的商家余额')),
|
||||
('shangjiayueq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的商家余额')),
|
||||
('guanshiyue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的管事余额')),
|
||||
('guanshiyueq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的管事余额')),
|
||||
('huiyuants', models.IntegerField(default=0, verbose_name='添加会员天数')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('qitashuoming', models.TextField(blank=True, null=True, verbose_name='其他说明')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '修改记录表',
|
||||
'verbose_name_plural': '修改记录表',
|
||||
'db_table': 'xiugaijilu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserMain',
|
||||
fields=[
|
||||
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, unique=True, verbose_name='用户ID')),
|
||||
('openid', models.CharField(db_index=True, max_length=64, unique=True, verbose_name='微信OpenID')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='头像')),
|
||||
('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
|
||||
('password', models.CharField(blank=True, max_length=200, null=True, verbose_name='密码')),
|
||||
('zhifu', models.CharField(blank=True, max_length=500, null=True, verbose_name='收款码图片')),
|
||||
('skzhanghao', models.CharField(blank=True, max_length=11, null=True, verbose_name='收款账号')),
|
||||
('ip', models.CharField(blank=True, max_length=50, null=True, verbose_name='来访用户ip')),
|
||||
('last_login_time', models.DateTimeField(blank=True, null=True, verbose_name='最后登录时间')),
|
||||
('user_type', models.CharField(choices=[('normal', '普通用户'), ('dashou', '打手'), ('shop', '商家'), ('guanshi', '管事'), ('admin', '管理员')], default='normal', max_length=10, verbose_name='用户类型')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户主表',
|
||||
'verbose_name_plural': '用户主表',
|
||||
'db_table': 'user_main',
|
||||
'indexes': [models.Index(fields=['yonghuid'], name='user_main_yonghui_b8b2fe_idx'), models.Index(fields=['openid'], name='user_main_openid_c9edbe_idx'), models.Index(fields=['user_type'], name='user_main_user_ty_8515fd_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Tixianjilu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='提现记录ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='提现用户ID')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='头像')),
|
||||
('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='打手昵称')),
|
||||
('leixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='提现类型1:打手佣金2:管事分红')),
|
||||
('zhifu', models.CharField(blank=True, max_length=500, null=True, verbose_name='收款码图片')),
|
||||
('skzhanghao', models.CharField(blank=True, max_length=11, null=True, verbose_name='收款账号')),
|
||||
('jine', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='提现金额')),
|
||||
('zhuangtai', models.IntegerField(blank=True, db_index=True, default=1, null=True, verbose_name='提现状态1:审核2:成功3:失败')),
|
||||
('fangshi', models.IntegerField(blank=True, db_index=True, null=True, verbose_name='收款方式1:微信2:支付宝')),
|
||||
('shenheid', models.CharField(db_index=True, max_length=7, null=True, verbose_name='审核用户ID')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回理由')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '提现记录表',
|
||||
'verbose_name_plural': '提现记录表',
|
||||
'db_table': 'tixianjilu',
|
||||
'indexes': [models.Index(fields=['yonghuid'], name='tixianjilu_yonghui_8083bb_idx'), models.Index(fields=['zhuangtai'], name='tixianjilu_zhuangt_839d8e_idx'), models.Index(fields=['shenheid'], name='tixianjilu_shenhei_470e0c_idx'), models.Index(fields=['fangshi'], name='tixianjilu_fangshi_a1e0bc_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdminProfile',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('password', models.CharField(max_length=255, verbose_name='密码')),
|
||||
('wechat', models.CharField(blank=True, max_length=50, verbose_name='管理员微信')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='admin_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管理员扩展表',
|
||||
'verbose_name_plural': '管理员扩展表',
|
||||
'db_table': 'admin_profile',
|
||||
'indexes': [models.Index(fields=['user'], name='admin_profi_user_id_7d067d_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserBoss',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nickname', models.CharField(max_length=50, verbose_name='老板昵称')),
|
||||
('zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='消费总额')),
|
||||
('alldingdan', models.IntegerField(default=0, verbose_name='订单总数')),
|
||||
('alltui', models.IntegerField(default=0, verbose_name='退款总数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='boss_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '老板扩展表',
|
||||
'verbose_name_plural': '老板扩展表',
|
||||
'db_table': 'user_boss',
|
||||
'indexes': [models.Index(fields=['user'], name='user_boss_user_id_4e81a4_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserDashou',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='打手昵称')),
|
||||
('chenghao', models.CharField(max_length=50, null=True, verbose_name='打手称号')),
|
||||
('zhuangtai', models.IntegerField(default=1, verbose_name='打手状态')),
|
||||
('zaixianzhuangtai', models.IntegerField(default=1, verbose_name='打手在线状态')),
|
||||
('zhanghaozhuangtai', models.IntegerField(default=1, verbose_name='打手账号状态')),
|
||||
('jieshao', models.TextField(null=True, verbose_name='打手介绍')),
|
||||
('jiedanzongliang', models.IntegerField(default=0, verbose_name='接单总量')),
|
||||
('chengjiaozongliang', models.IntegerField(default=0, verbose_name='成交单总量')),
|
||||
('tuikuanliang', models.IntegerField(default=0, verbose_name='退款订单总量')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现余额')),
|
||||
('zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='打单赚取总额')),
|
||||
('dianhua', models.CharField(max_length=20, null=True, verbose_name='打手电话')),
|
||||
('wechat', models.CharField(max_length=50, null=True, verbose_name='打手微信号')),
|
||||
('yaoqingren', models.CharField(db_index=True, max_length=7, null=True, verbose_name='邀请人ID')),
|
||||
('jinrijiedan', models.IntegerField(default=0, verbose_name='今日接单数量')),
|
||||
('jinrishouyi', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日收益金额')),
|
||||
('jinyuejiedan', models.IntegerField(default=0, verbose_name='今月接单数量')),
|
||||
('jinyueshouyi', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今月收益金额')),
|
||||
('jifen', models.IntegerField(default=0, verbose_name='打手积分')),
|
||||
('yajin', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='打手押金')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='dashou_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '打手扩展表',
|
||||
'verbose_name_plural': '打手扩展表',
|
||||
'db_table': 'user_dashou',
|
||||
'indexes': [models.Index(fields=['user'], name='user_dashou_user_id_cf0410_idx'), models.Index(fields=['yaoqingren'], name='user_dashou_yaoqing_894658_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserGuanshi',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yaoqingma', models.CharField(db_index=True, max_length=20, null=True, verbose_name='邀请码')),
|
||||
('dianhua', models.CharField(max_length=20, null=True, verbose_name='管事电话')),
|
||||
('wechat', models.CharField(max_length=50, null=True, verbose_name='管事微信号')),
|
||||
('yaogingshuliang', models.IntegerField(default=0, verbose_name='邀请打手总数')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='管事状态')),
|
||||
('jinrichongzhi', models.IntegerField(default=0, verbose_name='今日充值打手数量')),
|
||||
('jinyuechongzhi', models.IntegerField(default=0, verbose_name='今月充值打手数量')),
|
||||
('chongzhifenrun', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='充值分佣总额')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现余额')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='guanshi_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管事扩展表',
|
||||
'verbose_name_plural': '管事扩展表',
|
||||
'db_table': 'user_guanshi',
|
||||
'indexes': [models.Index(fields=['user'], name='user_guansh_user_id_cbadac_idx'), models.Index(fields=['yaoqingma'], name='user_guansh_yaoqing_21d1d4_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserShangjia',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nicheng', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='商家昵称')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '待审核'), (1, '正常'), (2, '禁用')], default=1, verbose_name='商家状态')),
|
||||
('dianhua', models.CharField(max_length=20, null=True, verbose_name='商家电话')),
|
||||
('wechat', models.CharField(max_length=50, null=True, verbose_name='商家微信号')),
|
||||
('fabu', models.IntegerField(default=0, verbose_name='发布订单总数量')),
|
||||
('tuikuan', models.IntegerField(default=0, verbose_name='退款订单总量')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家余额')),
|
||||
('chengjiao', models.IntegerField(default=0, verbose_name='商家成交订单总量')),
|
||||
('jinridingdan', models.IntegerField(default=0, verbose_name='商家今日订单总量')),
|
||||
('jinriliushui', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家今日流水')),
|
||||
('jinyuedingdan', models.IntegerField(default=0, verbose_name='商家今月订单总量')),
|
||||
('jinyueliushui', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家今月流水')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='shop_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商家扩展表',
|
||||
'verbose_name_plural': '商家扩展表',
|
||||
'db_table': 'user_shangjia',
|
||||
'indexes': [models.Index(fields=['user'], name='user_shangj_user_id_823c5c_idx'), models.Index(fields=['nicheng'], name='user_shangj_nicheng_6967bc_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
# Generated by Django 4.2.27 on 2026-06-17 16:31
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='UserMain',
|
||||
fields=[
|
||||
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, unique=True, verbose_name='用户ID')),
|
||||
('openid', models.CharField(db_index=True, max_length=64, unique=True, verbose_name='微信OpenID')),
|
||||
('unionid', models.CharField(blank=True, db_index=True, max_length=64, null=True, verbose_name='微信UnionID')),
|
||||
('avatar', models.CharField(blank=True, default='a_long/morentouxiang.jpg', max_length=500, null=True, verbose_name='头像')),
|
||||
('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
|
||||
('shoujihao_renzheng', models.BooleanField(default=False, verbose_name='手机号是否已认证')),
|
||||
('password', models.CharField(blank=True, max_length=200, null=True, verbose_name='密码')),
|
||||
('zhifu', models.CharField(blank=True, max_length=500, null=True, verbose_name='收款码图片')),
|
||||
('skzhanghao', models.CharField(blank=True, max_length=11, null=True, verbose_name='收款账号')),
|
||||
('ip', models.CharField(blank=True, max_length=50, null=True, verbose_name='来访用户ip')),
|
||||
('last_login_time', models.DateTimeField(blank=True, null=True, verbose_name='最后登录时间')),
|
||||
('user_type', models.CharField(choices=[('normal', '普通用户'), ('dashou', '打手'), ('shop', '商家'), ('guanshi', '管事'), ('admin', '管理员')], default='normal', max_length=10, verbose_name='用户类型')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户主表',
|
||||
'verbose_name_plural': '用户主表',
|
||||
'db_table': 'user_main',
|
||||
'managed': False,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OfficialAccountUser',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('unionid', models.CharField(db_index=True, max_length=64, null=True, verbose_name='UnionID')),
|
||||
('official_openid', models.CharField(db_index=True, max_length=64, unique=True, verbose_name='服务号OpenID')),
|
||||
('subscribe_time', models.DateTimeField(auto_now_add=True, verbose_name='关注时间')),
|
||||
('is_subscribed', models.BooleanField(default=True, verbose_name='是否关注')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '服务号用户',
|
||||
'verbose_name_plural': '服务号用户',
|
||||
'db_table': 'official_account_user',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Xiugaijilu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='记录ID')),
|
||||
('yonghuid', models.CharField(max_length=7, verbose_name='被修改用户ID')),
|
||||
('xiugaiid', models.CharField(max_length=30, verbose_name='修改人账号ID')),
|
||||
('leixing', models.IntegerField(verbose_name='被修改用户类型')),
|
||||
('xiugaitijiao', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的打手提现金额')),
|
||||
('xiugaitijiaoq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的打手提现金额')),
|
||||
('jifen', models.IntegerField(default=0, verbose_name='修改后的打手积分')),
|
||||
('yjifen', models.IntegerField(default=0, verbose_name='修改前的打手积分')),
|
||||
('yajin', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的打手押金')),
|
||||
('yyajin', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的打手押金')),
|
||||
('shangjiayue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的商家余额')),
|
||||
('shangjiayueq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的商家余额')),
|
||||
('guanshiyue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的管事余额')),
|
||||
('guanshiyueq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的管事余额')),
|
||||
('huiyuants', models.IntegerField(default=0, verbose_name='添加会员天数')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('qitashuoming', models.TextField(blank=True, null=True, verbose_name='其他说明')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '修改记录表',
|
||||
'verbose_name_plural': '修改记录表',
|
||||
'db_table': 'xiugaijilu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TixianShenheJilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('shenhe_danhao', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='审核单号')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('leixing', models.PositiveSmallIntegerField(db_index=True, verbose_name='提现类型')),
|
||||
('zhuangtai', models.IntegerField(db_index=True, default=1, verbose_name='审核状态(1审核中2提现成功3提现失败4审核成功5审核失败6待收款)')),
|
||||
('shenqing_jine', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='申请提现金额(扣款额)')),
|
||||
('shouxufei', models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='手续费')),
|
||||
('shijidaozhang', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='实际到账金额')),
|
||||
('feilv', models.DecimalField(decimal_places=4, default=0, max_digits=5, verbose_name='手续费率')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回/失败原因')),
|
||||
('bo_hui_ren_id', models.CharField(blank=True, db_index=True, max_length=11, null=True, verbose_name='驳回人用户ID')),
|
||||
('shenhe_ren_id', models.CharField(blank=True, db_index=True, max_length=11, null=True, verbose_name='审核通过操作人ID')),
|
||||
('tixianjilu_id', models.IntegerField(blank=True, db_index=True, null=True, verbose_name='关联Tixianjilu.id')),
|
||||
('tixian_auto_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='最近一次打款单号(非唯一,重试收款会更新)')),
|
||||
('fail_reason', models.TextField(blank=True, null=True, verbose_name='微信打款失败原因')),
|
||||
('dakuan_mode', models.PositiveSmallIntegerField(db_index=True, default=1, verbose_name='打款方式(1手动2自动)')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '提现审核记录',
|
||||
'verbose_name_plural': '提现审核记录',
|
||||
'db_table': 'tixian_shenhe_jilu',
|
||||
'indexes': [models.Index(fields=['yonghuid', 'zhuangtai'], name='tixian_shen_yonghui_a782e9_idx'), models.Index(fields=['yonghuid', 'leixing'], name='tixian_shen_yonghui_bb44eb_idx'), models.Index(fields=['shenhe_danhao'], name='tixian_shen_shenhe__4a1ca7_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Tixianjilu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='提现记录ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='提现用户ID')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='头像')),
|
||||
('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='打手昵称')),
|
||||
('leixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='提现类型1:打手佣金2:管事分红')),
|
||||
('zhifu', models.CharField(blank=True, max_length=500, null=True, verbose_name='收款码图片')),
|
||||
('skzhanghao', models.CharField(blank=True, max_length=11, null=True, verbose_name='收款账号')),
|
||||
('jine', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='提现金额')),
|
||||
('zhuangtai', models.IntegerField(blank=True, db_index=True, default=1, null=True, verbose_name='提现状态1:审核2:成功3:失败')),
|
||||
('fangshi', models.IntegerField(blank=True, db_index=True, null=True, verbose_name='收款方式1:微信2:支付宝')),
|
||||
('shenheid', models.CharField(db_index=True, max_length=11, null=True, verbose_name='审核用户ID')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回理由')),
|
||||
('shenhe_jilu_id', models.IntegerField(blank=True, db_index=True, null=True, verbose_name='关联提现审核记录ID(TixianShenheJilu.id)')),
|
||||
('shenhe_danhao', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='关联提现审核单号')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '提现记录表',
|
||||
'verbose_name_plural': '提现记录表',
|
||||
'db_table': 'tixianjilu',
|
||||
'indexes': [models.Index(fields=['yonghuid'], name='tixianjilu_yonghui_8083bb_idx'), models.Index(fields=['zhuangtai'], name='tixianjilu_zhuangt_839d8e_idx'), models.Index(fields=['shenheid'], name='tixianjilu_shenhei_470e0c_idx'), models.Index(fields=['fangshi'], name='tixianjilu_fangshi_a1e0bc_idx'), models.Index(fields=['shenhe_danhao'], name='tixianjilu_shenhe__7b3e7f_idx'), models.Index(fields=['shenhe_jilu_id'], name='tixianjilu_shenhe__d9355e_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TixianAutoRecord',
|
||||
fields=[
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('tixian_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='提现订单号(自定义)')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('leixing', models.IntegerField(verbose_name='提现类型 1打手 2管事')),
|
||||
('jine', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='申请提现金额')),
|
||||
('shouxufei', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='手续费')),
|
||||
('shijidaozhang', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='实际到账金额')),
|
||||
('feilv', models.DecimalField(decimal_places=4, max_digits=5, verbose_name='费率')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '处理中'), (1, '成功'), (2, '失败')], default=0, verbose_name='状态')),
|
||||
('wechat_transfer_no', models.CharField(blank=True, max_length=64, null=True, verbose_name='微信转账单号')),
|
||||
('wechat_package', models.TextField(blank=True, null=True, verbose_name='微信返回的package_info(JSON)')),
|
||||
('fail_reason', models.TextField(blank=True, null=True, verbose_name='失败原因')),
|
||||
('shenhe_danhao', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='关联审核单号')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '自动提现记录',
|
||||
'verbose_name_plural': '自动提现记录',
|
||||
'db_table': 'tixian_auto_record',
|
||||
'indexes': [models.Index(fields=['tixian_id'], name='tixian_auto_tixian__273dac_idx'), models.Index(fields=['yonghuid'], name='tixian_auto_yonghui_61c5b6_idx'), models.Index(fields=['zhuangtai'], name='tixian_auto_zhuangt_24d9fa_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RankingRecord',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('zhouqi', models.IntegerField(choices=[(1, '日榜'), (2, '月榜')], verbose_name='周期类型')),
|
||||
('tongji_date', models.DateField(db_index=True, verbose_name='统计日期')),
|
||||
('shenfen', models.IntegerField(choices=[(2, '打手'), (3, '管事'), (4, '商家')], verbose_name='用户身份')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('paiming', models.IntegerField(verbose_name='排名')),
|
||||
('zhizhi', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='指标值')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='用户昵称')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='头像')),
|
||||
('chuangjian_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '排行榜记录',
|
||||
'verbose_name_plural': '排行榜记录',
|
||||
'db_table': 'ranking_record',
|
||||
'indexes': [models.Index(fields=['zhouqi', 'tongji_date', 'shenfen', 'paiming'], name='ranking_rec_zhouqi_fc9f4d_idx'), models.Index(fields=['yonghuid', 'zhouqi'], name='ranking_rec_yonghui_e5be77_idx'), models.Index(fields=['tongji_date'], name='ranking_rec_tongji__820158_idx')],
|
||||
'unique_together': {('zhouqi', 'tongji_date', 'shenfen', 'paiming')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserZuzhang',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yaoqingma', models.CharField(db_index=True, max_length=20, null=True, verbose_name='组长邀请码')),
|
||||
('fenyong_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='分佣总额(元)')),
|
||||
('ketixian_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现金额(元)')),
|
||||
('yaoqing_zongshu', models.IntegerField(default=0, verbose_name='邀请总数')),
|
||||
('jinri_fenyong', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日分佣(元)')),
|
||||
('jinyue_fenyong', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今月分佣(元)')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='账号状态')),
|
||||
('haibao_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='推广海报相对URL')),
|
||||
('jinri_tixian', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日提现金额(元)')),
|
||||
('last_tixian_time', models.DateTimeField(blank=True, null=True, verbose_name='最后提现时间')),
|
||||
('ewai_tixian_xiane', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='额外提现限额(元)')),
|
||||
('kaioi_ewai_tixian', models.BooleanField(default=False, verbose_name='开启额外提现')),
|
||||
('kaioi_ewai_fenhong', models.BooleanField(default=False, verbose_name='开启额外分红')),
|
||||
('ewai_fenhong_jine', 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='更新时间')),
|
||||
('user', models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='zuzhang_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '组长扩展表',
|
||||
'verbose_name_plural': '组长扩展表',
|
||||
'db_table': 'user_zuzhang',
|
||||
'indexes': [models.Index(fields=['user'], name='user_zuzhan_UserUUI_125e05_idx'), models.Index(fields=['yaoqingma'], name='user_zuzhan_yaoqing_cba91d_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserShenheguan',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='账号状态')),
|
||||
('shenhe_zhuangtai', models.IntegerField(choices=[(0, '空闲'), (1, '审核中')], default=0, verbose_name='审核官状态')),
|
||||
('is_renzheng', models.BooleanField(default=False, verbose_name='是否认证')),
|
||||
('shenhe_zongshu', models.IntegerField(default=0, verbose_name='审核总数')),
|
||||
('tongguo_zongshu', models.IntegerField(default=0, verbose_name='通过总数')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现余额')),
|
||||
('zonge', 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='更新时间')),
|
||||
('user', models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='shenheguan_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '审核官扩展表',
|
||||
'verbose_name_plural': '审核官扩展表',
|
||||
'db_table': 'user_shenheguan',
|
||||
'indexes': [models.Index(fields=['user'], name='user_shenhe_UserUUI_bdc981_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserShangjia',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nicheng', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='商家昵称')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '待审核'), (1, '正常'), (2, '禁用')], default=1, verbose_name='商家状态')),
|
||||
('dianhua', models.CharField(max_length=20, null=True, verbose_name='商家电话')),
|
||||
('wechat', models.CharField(max_length=50, null=True, verbose_name='商家微信号')),
|
||||
('fabu', models.IntegerField(default=0, verbose_name='发布订单总数量')),
|
||||
('tuikuan', models.IntegerField(default=0, verbose_name='退款订单总量')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家余额')),
|
||||
('chengjiao', models.IntegerField(default=0, verbose_name='商家成交订单总量')),
|
||||
('jinridingdan', models.IntegerField(default=0, verbose_name='商家今日订单总量')),
|
||||
('jinriliushui', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家今日流水')),
|
||||
('jinyuedingdan', models.IntegerField(default=0, verbose_name='商家今月订单总量')),
|
||||
('jinyueliushui', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家今月流水')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='shop_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商家扩展表',
|
||||
'verbose_name_plural': '商家扩展表',
|
||||
'db_table': 'user_shangjia',
|
||||
'indexes': [models.Index(fields=['user'], name='user_shangj_UserUUI_9d7fad_idx'), models.Index(fields=['nicheng'], name='user_shangj_nicheng_6967bc_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserSensitiveData',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('password', models.CharField(blank=True, max_length=200, null=True, verbose_name='密码')),
|
||||
('zhifu', models.CharField(blank=True, max_length=500, null=True, verbose_name='收款码图片')),
|
||||
('skzhanghao', models.CharField(blank=True, max_length=11, null=True, verbose_name='收款账号')),
|
||||
('shoujihao_renzheng', models.BooleanField(default=False, verbose_name='手机号是否已认证')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('user_uuid', models.OneToOneField(db_column='user_uuid_id', on_delete=django.db.models.deletion.CASCADE, related_name='sensitive_data', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户敏感数据',
|
||||
'verbose_name_plural': '用户敏感数据',
|
||||
'db_table': 'user_sensitive_data',
|
||||
'indexes': [models.Index(fields=['user_uuid'], name='user_sensit_user_uu_1d562f_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserKefu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nicheng', models.CharField(max_length=50, verbose_name='客服昵称')),
|
||||
('erjimima', models.CharField(max_length=128, verbose_name='二级密码')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='客服状态')),
|
||||
('jinrichuli', models.IntegerField(default=0, verbose_name='今日处理订单数')),
|
||||
('jinyuechuli', models.IntegerField(default=0, verbose_name='本月处理订单数')),
|
||||
('zongchuli', models.IntegerField(default=0, verbose_name='累计处理订单数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('user', models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='kefu_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '客服扩展表',
|
||||
'verbose_name_plural': '客服扩展表',
|
||||
'db_table': 'user_kefu',
|
||||
'indexes': [models.Index(fields=['user'], name='user_kefu_UserUUI_ccf71c_idx'), models.Index(fields=['zhuangtai'], name='user_kefu_zhuangt_317491_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserGuanshi',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yaoqingren', models.CharField(db_index=True, max_length=7, null=True, verbose_name='邀请人ID')),
|
||||
('yaoqingma', models.CharField(db_index=True, max_length=20, null=True, verbose_name='邀请码')),
|
||||
('invite_qrcode_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='邀请码二维码图片URL')),
|
||||
('dianhua', models.CharField(max_length=20, null=True, verbose_name='管事电话')),
|
||||
('wechat', models.CharField(max_length=50, null=True, verbose_name='管事微信号')),
|
||||
('yaogingshuliang', models.IntegerField(default=0, verbose_name='邀请打手总数')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='管事状态')),
|
||||
('jinrichongzhi', models.IntegerField(default=0, verbose_name='今日充值打手数量')),
|
||||
('jinyuechongzhi', models.IntegerField(default=0, verbose_name='今月充值打手数量')),
|
||||
('chongzhifenrun', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='充值分佣总额')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现余额')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('fenhong_yici', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='首次分红金额')),
|
||||
('fenghong_erci_enabled', models.BooleanField(default=False, verbose_name='开启二次分红')),
|
||||
('fenghong_erci', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='二次分红金额')),
|
||||
('last_tixian_date', models.DateField(blank=True, null=True, verbose_name='最近提现日期')),
|
||||
('jinritixian_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日已提现金额')),
|
||||
('kaioi_ewai_xiane', models.BooleanField(default=False, verbose_name='是否开启额外提现限额')),
|
||||
('ewai_xiane', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='额外提现限额(元)')),
|
||||
('user', models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='guanshi_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管事扩展表',
|
||||
'verbose_name_plural': '管事扩展表',
|
||||
'db_table': 'user_guanshi',
|
||||
'indexes': [models.Index(fields=['user'], name='user_guansh_UserUUI_1d9453_idx'), models.Index(fields=['yaoqingma'], name='user_guansh_yaoqing_21d1d4_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserDashou',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='打手昵称')),
|
||||
('chenghao', models.CharField(max_length=50, null=True, verbose_name='打手称号')),
|
||||
('zhuangtai', models.IntegerField(default=1, verbose_name='打手状态')),
|
||||
('zaixianzhuangtai', models.IntegerField(default=1, verbose_name='打手在线状态')),
|
||||
('zhanghaozhuangtai', models.IntegerField(default=1, verbose_name='打手账号状态')),
|
||||
('jieshao', models.TextField(null=True, verbose_name='打手介绍')),
|
||||
('jiedanzongliang', models.IntegerField(default=0, verbose_name='接单总量')),
|
||||
('chengjiaozongliang', models.IntegerField(default=0, verbose_name='成交单总量')),
|
||||
('tuikuanliang', models.IntegerField(default=0, verbose_name='退款订单总量')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现余额')),
|
||||
('zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='打单赚取总额')),
|
||||
('dianhua', models.CharField(max_length=20, null=True, verbose_name='打手电话')),
|
||||
('wechat', models.CharField(max_length=50, null=True, verbose_name='打手微信号')),
|
||||
('yaoqingren', models.CharField(db_index=True, max_length=7, null=True, verbose_name='邀请人ID')),
|
||||
('jinrijiedan', models.IntegerField(default=0, verbose_name='今日接单数量')),
|
||||
('jinrishouyi', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日收益金额')),
|
||||
('jinyuejiedan', models.IntegerField(default=0, verbose_name='今月接单数量')),
|
||||
('jinyueshouyi', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今月收益金额')),
|
||||
('jifen', models.IntegerField(default=0, verbose_name='打手积分')),
|
||||
('yajin', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='打手押金')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('last_tixian_date', models.DateField(blank=True, null=True, verbose_name='最近提现日期')),
|
||||
('jinritixian_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日已提现金额')),
|
||||
('kaioi_ewai_xiane', models.BooleanField(default=False, verbose_name='是否开启额外提现限额')),
|
||||
('ewai_xiane', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='额外提现限额(元)')),
|
||||
('user', models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='dashou_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '打手扩展表',
|
||||
'verbose_name_plural': '打手扩展表',
|
||||
'db_table': 'user_dashou',
|
||||
'indexes': [models.Index(fields=['user'], name='user_dashou_UserUUI_92ac5a_idx'), models.Index(fields=['yaoqingren'], name='user_dashou_yaoqing_894658_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserBoss',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nickname', models.CharField(max_length=50, verbose_name='老板昵称')),
|
||||
('zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='消费总额')),
|
||||
('alldingdan', models.IntegerField(default=0, verbose_name='订单总数')),
|
||||
('alltui', models.IntegerField(default=0, verbose_name='退款总数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='boss_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '老板扩展表',
|
||||
'verbose_name_plural': '老板扩展表',
|
||||
'db_table': 'user_boss',
|
||||
'indexes': [models.Index(fields=['user'], name='user_boss_UserUUI_4579c2_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdminProfile',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('password', models.CharField(max_length=255, verbose_name='密码')),
|
||||
('wechat', models.CharField(blank=True, max_length=50, verbose_name='管理员微信')),
|
||||
('yaoqingma', models.CharField(db_index=True, max_length=20, null=True, verbose_name='管理员邀请码')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='admin_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管理员扩展表',
|
||||
'verbose_name_plural': '管理员扩展表',
|
||||
'db_table': 'admin_profile',
|
||||
'indexes': [models.Index(fields=['user'], name='admin_profi_UserUUI_0699ce_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-21 12:46
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='adminprofile',
|
||||
name='yaoqingma',
|
||||
field=models.CharField(db_index=True, max_length=20, null=True, verbose_name='管理员邀请码'),
|
||||
),
|
||||
]
|
||||
@@ -1,35 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-24 23:30
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0002_adminprofile_yaoqingma'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='RankingRecord',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('zhouqi', models.IntegerField(choices=[(1, '日榜'), (2, '月榜')], verbose_name='周期类型')),
|
||||
('tongji_date', models.DateField(db_index=True, verbose_name='统计日期')),
|
||||
('shenfen', models.IntegerField(choices=[(2, '打手'), (3, '管事'), (4, '商家')], verbose_name='用户身份')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('paiming', models.IntegerField(verbose_name='排名')),
|
||||
('zhizhi', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='指标值')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='用户昵称')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='头像')),
|
||||
('chuangjian_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '排行榜记录',
|
||||
'verbose_name_plural': '排行榜记录',
|
||||
'db_table': 'ranking_record',
|
||||
'indexes': [models.Index(fields=['zhouqi', 'tongji_date', 'shenfen', 'paiming'], name='ranking_rec_zhouqi_fc9f4d_idx'), models.Index(fields=['yonghuid', 'zhouqi'], name='ranking_rec_yonghui_e5be77_idx'), models.Index(fields=['tongji_date'], name='ranking_rec_tongji__820158_idx')],
|
||||
'unique_together': {('zhouqi', 'tongji_date', 'shenfen', 'paiming')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-24 23:55
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0003_rankingrecord'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='usermain',
|
||||
name='avatar',
|
||||
field=models.CharField(blank=True, default='a_long/morentouxiang.jpg', max_length=500, null=True, verbose_name='头像'),
|
||||
),
|
||||
]
|
||||
@@ -1,35 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-07 19:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0004_alter_usermain_avatar'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='OfficialAccountUser',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('unionid', models.CharField(db_index=True, max_length=64, verbose_name='UnionID')),
|
||||
('official_openid', models.CharField(db_index=True, max_length=64, unique=True, verbose_name='服务号OpenID')),
|
||||
('subscribe_time', models.DateTimeField(auto_now_add=True, verbose_name='关注时间')),
|
||||
('is_subscribed', models.BooleanField(default=True, verbose_name='是否关注')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '服务号用户',
|
||||
'verbose_name_plural': '服务号用户',
|
||||
'db_table': 'official_account_user',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='usermain',
|
||||
name='unionid',
|
||||
field=models.CharField(blank=True, db_index=True, max_length=64, null=True, verbose_name='微信UnionID'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-07 22:45
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0005_officialaccountuser_usermain_unionid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='officialaccountuser',
|
||||
name='unionid',
|
||||
field=models.CharField(db_index=True, max_length=64, null=True, verbose_name='UnionID'),
|
||||
),
|
||||
]
|
||||
@@ -1,36 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-21 14:37
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0006_alter_officialaccountuser_unionid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='UserKefu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nicheng', models.CharField(max_length=50, verbose_name='客服昵称')),
|
||||
('erjimima', models.CharField(max_length=128, verbose_name='二级密码')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='客服状态')),
|
||||
('jinrichuli', models.IntegerField(default=0, verbose_name='今日处理订单数')),
|
||||
('jinyuechuli', models.IntegerField(default=0, verbose_name='本月处理订单数')),
|
||||
('zongchuli', models.IntegerField(default=0, verbose_name='累计处理订单数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='kefu_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '客服扩展表',
|
||||
'verbose_name_plural': '客服扩展表',
|
||||
'db_table': 'user_kefu',
|
||||
'indexes': [models.Index(fields=['user'], name='user_kefu_user_id_5fe3a1_idx'), models.Index(fields=['zhuangtai'], name='user_kefu_zhuangt_317491_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,28 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-27 15:22
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0007_userkefu'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='fenghong_erci',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='二次分红金额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='fenghong_erci_enabled',
|
||||
field=models.BooleanField(default=False, verbose_name='开启二次分红'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='fenhong_yici',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='首次分红金额'),
|
||||
),
|
||||
]
|
||||
@@ -1,89 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-03-16 17:04
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0008_userguanshi_fenghong_erci_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='userdashou',
|
||||
name='ewai_xiane',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='额外提现限额(元)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userdashou',
|
||||
name='jinritixian_jine',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日已提现金额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userdashou',
|
||||
name='kaioi_ewai_xiane',
|
||||
field=models.BooleanField(default=False, verbose_name='是否开启额外提现限额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userdashou',
|
||||
name='last_tixian_date',
|
||||
field=models.DateField(blank=True, null=True, verbose_name='最近提现日期'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='ewai_xiane',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='额外提现限额(元)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='jinritixian_jine',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日已提现金额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='kaioi_ewai_xiane',
|
||||
field=models.BooleanField(default=False, verbose_name='是否开启额外提现限额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='last_tixian_date',
|
||||
field=models.DateField(blank=True, null=True, verbose_name='最近提现日期'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='yaoqingren',
|
||||
field=models.CharField(db_index=True, max_length=7, null=True, verbose_name='邀请人ID'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserZuzhang',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yaoqingma', models.CharField(db_index=True, max_length=20, null=True, verbose_name='组长邀请码')),
|
||||
('fenyong_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='分佣总额(元)')),
|
||||
('ketixian_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现金额(元)')),
|
||||
('yaoqing_zongshu', models.IntegerField(default=0, verbose_name='邀请总数')),
|
||||
('jinri_fenyong', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日分佣(元)')),
|
||||
('jinyue_fenyong', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今月分佣(元)')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='账号状态')),
|
||||
('haibao_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='推广海报相对URL')),
|
||||
('jinri_tixian', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日提现金额(元)')),
|
||||
('last_tixian_time', models.DateTimeField(blank=True, null=True, verbose_name='最后提现时间')),
|
||||
('ewai_tixian_xiane', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='额外提现限额(元)')),
|
||||
('kaioi_ewai_tixian', models.BooleanField(default=False, verbose_name='开启额外提现')),
|
||||
('kaioi_ewai_fenhong', models.BooleanField(default=False, verbose_name='开启额外分红')),
|
||||
('ewai_fenhong_jine', 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='更新时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='zuzhang_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '组长扩展表',
|
||||
'verbose_name_plural': '组长扩展表',
|
||||
'db_table': 'user_zuzhang',
|
||||
'indexes': [models.Index(fields=['user'], name='user_zuzhan_user_id_8064f2_idx'), models.Index(fields=['yaoqingma'], name='user_zuzhan_yaoqing_cba91d_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-03-19 12:37
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0009_userdashou_ewai_xiane_userdashou_jinritixian_jine_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='invite_qrcode_url',
|
||||
field=models.CharField(blank=True, max_length=500, null=True, verbose_name='邀请码二维码图片URL'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-10 02:10
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0010_userguanshi_invite_qrcode_url'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='usermain',
|
||||
name='shoujihao_renzheng',
|
||||
field=models.BooleanField(default=False, verbose_name='手机号是否已认证'),
|
||||
),
|
||||
]
|
||||
@@ -1,36 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-14 18:42
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0011_usermain_shoujihao_renzheng'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='UserShenheguan',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='账号状态')),
|
||||
('shenhe_zhuangtai', models.IntegerField(choices=[(0, '空闲'), (1, '审核中')], default=0, verbose_name='审核官状态')),
|
||||
('shenhe_zongshu', models.IntegerField(default=0, verbose_name='审核总数')),
|
||||
('tongguo_zongshu', models.IntegerField(default=0, verbose_name='通过总数')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现余额')),
|
||||
('zonge', 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='更新时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='shenheguan_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '审核官扩展表',
|
||||
'verbose_name_plural': '审核官扩展表',
|
||||
'db_table': 'user_shenheguan',
|
||||
'indexes': [models.Index(fields=['user'], name='user_shenhe_user_id_624f19_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-18 02:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0012_usershenheguan'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='usershenheguan',
|
||||
name='is_renzheng',
|
||||
field=models.BooleanField(default=False, verbose_name='是否认证'),
|
||||
),
|
||||
]
|
||||
@@ -1,113 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-06-08 23:38
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0013_usershenheguan_is_renzheng'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='TixianAutoRecord',
|
||||
fields=[
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('tixian_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='提现订单号(自定义)')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('leixing', models.IntegerField(verbose_name='提现类型 1打手 2管事')),
|
||||
('jine', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='申请提现金额')),
|
||||
('shouxufei', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='手续费')),
|
||||
('shijidaozhang', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='实际到账金额')),
|
||||
('feilv', models.DecimalField(decimal_places=4, max_digits=5, verbose_name='费率')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '处理中'), (1, '成功'), (2, '失败')], default=0, verbose_name='状态')),
|
||||
('wechat_transfer_no', models.CharField(blank=True, max_length=64, null=True, verbose_name='微信转账单号')),
|
||||
('wechat_package', models.TextField(blank=True, null=True, verbose_name='微信返回的package_info(JSON)')),
|
||||
('fail_reason', models.TextField(blank=True, null=True, verbose_name='失败原因')),
|
||||
('shenhe_danhao', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='关联审核单号')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '自动提现记录',
|
||||
'verbose_name_plural': '自动提现记录',
|
||||
'db_table': 'tixian_auto_record',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TixianShenheJilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('shenhe_danhao', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='审核单号')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('leixing', models.PositiveSmallIntegerField(db_index=True, verbose_name='提现类型')),
|
||||
('zhuangtai', models.IntegerField(db_index=True, default=1, verbose_name='审核状态(1审核中2提现成功3提现失败4审核成功5审核失败6待收款)')),
|
||||
('shenqing_jine', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='申请提现金额(扣款额)')),
|
||||
('shouxufei', models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='手续费')),
|
||||
('shijidaozhang', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='实际到账金额')),
|
||||
('feilv', models.DecimalField(decimal_places=4, default=0, max_digits=5, verbose_name='手续费率')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回/失败原因')),
|
||||
('bo_hui_ren_id', models.CharField(blank=True, db_index=True, max_length=11, null=True, verbose_name='驳回人用户ID')),
|
||||
('shenhe_ren_id', models.CharField(blank=True, db_index=True, max_length=11, null=True, verbose_name='审核通过操作人ID')),
|
||||
('tixianjilu_id', models.IntegerField(blank=True, db_index=True, null=True, verbose_name='关联Tixianjilu.id')),
|
||||
('tixian_auto_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='最近一次打款单号(非唯一,重试收款会更新)')),
|
||||
('fail_reason', models.TextField(blank=True, null=True, verbose_name='微信打款失败原因')),
|
||||
('dakuan_mode', models.PositiveSmallIntegerField(db_index=True, default=1, verbose_name='打款方式(1手动2自动)')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '提现审核记录',
|
||||
'verbose_name_plural': '提现审核记录',
|
||||
'db_table': 'tixian_shenhe_jilu',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tixianjilu',
|
||||
name='shenhe_danhao',
|
||||
field=models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='关联提现审核单号'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='tixianjilu',
|
||||
name='shenhe_jilu_id',
|
||||
field=models.IntegerField(blank=True, db_index=True, null=True, verbose_name='关联提现审核记录ID(TixianShenheJilu.id)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tixianjilu',
|
||||
name='shenheid',
|
||||
field=models.CharField(db_index=True, max_length=11, null=True, verbose_name='审核用户ID'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='tixianjilu',
|
||||
index=models.Index(fields=['shenhe_danhao'], name='tixianjilu_shenhe__7b3e7f_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='tixianjilu',
|
||||
index=models.Index(fields=['shenhe_jilu_id'], name='tixianjilu_shenhe__d9355e_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='tixianshenhejilu',
|
||||
index=models.Index(fields=['yonghuid', 'zhuangtai'], name='tixian_shen_yonghui_a782e9_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='tixianshenhejilu',
|
||||
index=models.Index(fields=['yonghuid', 'leixing'], name='tixian_shen_yonghui_bb44eb_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='tixianshenhejilu',
|
||||
index=models.Index(fields=['shenhe_danhao'], name='tixian_shen_shenhe__4a1ca7_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='tixianautorecord',
|
||||
index=models.Index(fields=['tixian_id'], name='tixian_auto_tixian__273dac_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='tixianautorecord',
|
||||
index=models.Index(fields=['yonghuid'], name='tixian_auto_yonghui_61c5b6_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='tixianautorecord',
|
||||
index=models.Index(fields=['zhuangtai'], name='tixian_auto_zhuangt_24d9fa_idx'),
|
||||
),
|
||||
]
|
||||
@@ -4,7 +4,7 @@ from django.contrib.auth.models import AbstractBaseUser
|
||||
from gvsdsdk.model_base import QModel
|
||||
|
||||
|
||||
# ==================== 用户主表 ====================
|
||||
# ==================== 用户主表(已废弃,迁移至 gvsdsdk.User) ====================
|
||||
class UserMain(AbstractBaseUser, QModel):
|
||||
# ID字段
|
||||
id = models.AutoField(primary_key=True, verbose_name='主键ID')
|
||||
@@ -54,6 +54,7 @@ class UserMain(AbstractBaseUser, QModel):
|
||||
REQUIRED_FIELDS = ['yonghuid'] # 必填字段
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
db_table = 'user_main'
|
||||
verbose_name = '用户主表'
|
||||
verbose_name_plural = verbose_name
|
||||
@@ -90,8 +91,8 @@ class OfficialAccountUser(QModel):
|
||||
|
||||
# ==================== 老板扩展表 ====================
|
||||
class UserBoss(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='boss_profile',
|
||||
verbose_name='关联用户')
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='boss_profile',
|
||||
verbose_name='关联用户', db_column='UserUUID')
|
||||
nickname = models.CharField(max_length=50, verbose_name='老板昵称')
|
||||
zonge = models.DecimalField(max_digits=12, decimal_places=2, default=0.00, verbose_name='消费总额')
|
||||
alldingdan = models.IntegerField(default=0, verbose_name='订单总数')
|
||||
@@ -107,8 +108,8 @@ class UserBoss(QModel):
|
||||
|
||||
# ==================== 打手扩展表 ====================
|
||||
class UserDashou(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='dashou_profile',
|
||||
verbose_name='关联用户')
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='dashou_profile',
|
||||
verbose_name='关联用户', db_column='UserUUID')
|
||||
nicheng = models.CharField(max_length=50, null=True, verbose_name='打手昵称')
|
||||
chenghao = models.CharField(max_length=50, null=True,verbose_name='打手称号')
|
||||
zhuangtai = models.IntegerField(default=1, verbose_name='打手状态')
|
||||
@@ -151,8 +152,8 @@ class UserDashou(QModel):
|
||||
|
||||
# ==================== 商家扩展表 ====================
|
||||
class UserShangjia(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='shop_profile',
|
||||
verbose_name='关联用户')
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='shop_profile',
|
||||
verbose_name='关联用户', db_column='UserUUID')
|
||||
nicheng = models.CharField(max_length=50, unique=True, db_index=True, verbose_name='商家昵称')
|
||||
zhuangtai = models.IntegerField(choices=[(0, '待审核'), (1, '正常'), (2, '禁用')], default=1,
|
||||
verbose_name='商家状态')
|
||||
@@ -180,8 +181,8 @@ class UserShangjia(QModel):
|
||||
|
||||
# ==================== 管事扩展表 ====================
|
||||
class UserGuanshi(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='guanshi_profile',
|
||||
verbose_name='关联用户')
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='guanshi_profile',
|
||||
verbose_name='关联用户', db_column='UserUUID')
|
||||
yaoqingren = models.CharField(max_length=7,null=True, db_index=True, verbose_name='邀请人ID')
|
||||
yaoqingma = models.CharField(max_length=20,null=True,db_index=True, verbose_name='邀请码')
|
||||
invite_qrcode_url = models.CharField(max_length=500, null=True, blank=True, verbose_name='邀请码二维码图片URL')
|
||||
@@ -223,11 +224,12 @@ class UserGuanshi(QModel):
|
||||
class UserZuzhang(QModel):
|
||||
"""组长扩展表(与UserMain一对一关联)"""
|
||||
user = models.OneToOneField(
|
||||
UserMain,
|
||||
'gvsdsdk.User',
|
||||
on_delete=models.CASCADE,
|
||||
related_name='zuzhang_profile',
|
||||
verbose_name='关联用户',
|
||||
db_index=True
|
||||
db_index=True,
|
||||
db_column='UserUUID'
|
||||
)
|
||||
# 组长邀请码
|
||||
yaoqingma = models.CharField(max_length=20, null=True, db_index=True, verbose_name='组长邀请码')
|
||||
@@ -276,7 +278,7 @@ class UserZuzhang(QModel):
|
||||
|
||||
class UserShenheguan(QModel):
|
||||
"""审核官扩展表(与UserMain一对一关联)"""
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='shenheguan_profile', verbose_name='关联用户', db_index=True)
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='shenheguan_profile', verbose_name='关联用户', db_index=True, db_column='UserUUID')
|
||||
zhuangtai = models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='账号状态')
|
||||
shenhe_zhuangtai = models.IntegerField(choices=[(0, '空闲'), (1, '审核中')], default=0, verbose_name='审核官状态')
|
||||
is_renzheng = models.BooleanField(default=False, verbose_name='是否认证')
|
||||
@@ -296,8 +298,8 @@ class UserShenheguan(QModel):
|
||||
|
||||
# ==================== 管理员扩展表 ====================
|
||||
class AdminProfile(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='admin_profile',
|
||||
verbose_name='关联用户')
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='admin_profile',
|
||||
verbose_name='关联用户', db_column='UserUUID')
|
||||
password = models.CharField(max_length=255, verbose_name='密码')
|
||||
wechat = models.CharField(max_length=50, blank=True, verbose_name='管理员微信')
|
||||
yaoqingma = models.CharField(max_length=20, null=True, db_index=True,verbose_name='管理员邀请码') # 🟢 新增字段
|
||||
@@ -311,7 +313,7 @@ class AdminProfile(QModel):
|
||||
|
||||
|
||||
class UserKefu(QModel):
|
||||
user = models.OneToOneField(UserMain, on_delete=models.CASCADE, related_name='kefu_profile', verbose_name='关联用户')
|
||||
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='kefu_profile', verbose_name='关联用户', db_column='UserUUID')
|
||||
nicheng = models.CharField(max_length=50, verbose_name='客服昵称')
|
||||
erjimima = models.CharField(max_length=128, verbose_name='二级密码')
|
||||
zhuangtai = models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='客服状态')
|
||||
@@ -598,3 +600,30 @@ class RankingRecord(QModel):
|
||||
return f"{self.tongji_date} {zhouqi_str}榜 {shenfen_map.get(self.shenfen)} 第{self.paiming}名"
|
||||
|
||||
|
||||
# ==================== 用户敏感数据表 ====================
|
||||
class UserSensitiveData(QModel):
|
||||
"""用户敏感数据表——独立存储敏感信息,不继承 gvsdsdk"""
|
||||
user_uuid = models.OneToOneField(
|
||||
'gvsdsdk.User',
|
||||
on_delete=models.CASCADE,
|
||||
related_name='sensitive_data',
|
||||
verbose_name='关联用户',
|
||||
db_column='user_uuid_id',
|
||||
)
|
||||
password = models.CharField(max_length=200, null=True, blank=True, verbose_name='密码')
|
||||
zhifu = models.CharField(max_length=500, null=True, blank=True, verbose_name='收款码图片')
|
||||
skzhanghao = models.CharField(max_length=11, blank=True, null=True, verbose_name='收款账号')
|
||||
shoujihao_renzheng = models.BooleanField(default=False, 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 = 'user_sensitive_data'
|
||||
verbose_name = '用户敏感数据'
|
||||
verbose_name_plural = verbose_name
|
||||
indexes = [models.Index(fields=['user_uuid'])]
|
||||
|
||||
def __str__(self):
|
||||
return f'敏感数据-{self.user_uuid_id}'
|
||||
|
||||
|
||||
|
||||
@@ -17,7 +17,8 @@ from backend.models import (
|
||||
ZuzhangRiTongji,
|
||||
ShangjiaRiTongji,
|
||||
)
|
||||
from users.models import UserMain, UserDashou, UserShangjia, UserBoss
|
||||
from users.models import UserDashou, UserShangjia, UserBoss
|
||||
from gvsdsdk.models import User
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@@ -200,7 +201,7 @@ class PhbHqsjView(APIView):
|
||||
if not yonghuids:
|
||||
return {}, {}
|
||||
|
||||
users = UserMain.objects.filter(yonghuid__in=yonghuids)
|
||||
users = User.objects.filter(yonghuid__in=yonghuids)
|
||||
avatar_map = {u.yonghuid: u.avatar or '' for u in users}
|
||||
|
||||
nick_map = {}
|
||||
|
||||
@@ -12,9 +12,10 @@ import logging
|
||||
from decimal import Decimal
|
||||
|
||||
from users.models import (
|
||||
UserMain, UserDashou, UserShangjia, UserGuanshi, UserBoss,
|
||||
UserDashou, UserShangjia, UserGuanshi, UserBoss,
|
||||
RankingRecord
|
||||
)
|
||||
from gvsdsdk.models import User
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -41,11 +41,11 @@ from .models import (
|
||||
Tixianjilu,
|
||||
UserDashou,
|
||||
UserGuanshi,
|
||||
UserMain,
|
||||
UserShenheguan,
|
||||
UserShangjia,
|
||||
UserZuzhang,
|
||||
)
|
||||
from gvsdsdk.models import User
|
||||
|
||||
from orders.utils import update_daily_payout
|
||||
|
||||
@@ -708,8 +708,8 @@ def release_collect_quota_for_record(auto_record):
|
||||
if not _quota_already_reserved_for_record(auto_record):
|
||||
return
|
||||
try:
|
||||
user_main = UserMain.query.get(yonghuid=auto_record.yonghuid)
|
||||
except UserMain.DoesNotExist:
|
||||
user_main = User.query.get(yonghuid=auto_record.yonghuid)
|
||||
except User.DoesNotExist:
|
||||
logger.error('回滚限额预占失败:用户不存在 %s', auto_record.yonghuid)
|
||||
return
|
||||
release_collect_quota_reservation(
|
||||
@@ -753,8 +753,8 @@ def apply_transfer_success_quota(auto_record):
|
||||
shijidaozhang = auto_record.shijidaozhang or decimal.Decimal('0.00')
|
||||
|
||||
try:
|
||||
user_main = UserMain.query.get(yonghuid=auto_record.yonghuid)
|
||||
except UserMain.DoesNotExist:
|
||||
user_main = User.query.get(yonghuid=auto_record.yonghuid)
|
||||
except User.DoesNotExist:
|
||||
logger.error('打款成功累加限额失败:用户不存在 %s', auto_record.yonghuid)
|
||||
return
|
||||
|
||||
@@ -966,7 +966,7 @@ def close_audit_over_limit_refund(audit, auto_record=None, fail_reason='单笔
|
||||
if audit.zhuangtai in (2, 3, 5):
|
||||
return False
|
||||
|
||||
user_main = UserMain.objects.select_for_update().get(yonghuid=audit.yonghuid)
|
||||
user_main = User.objects.select_for_update().get(yonghuid=audit.yonghuid)
|
||||
refund_balance(user_main, audit.leixing, audit.shijidaozhang)
|
||||
sync_audit_and_jilu_status(
|
||||
audit, 3,
|
||||
|
||||
139
users/views.py
139
users/views.py
@@ -60,11 +60,12 @@ from backend.utils import (
|
||||
from rank.utils import get_tag_fee, create_shenhe_jilu, validate_shenheguan
|
||||
|
||||
from .models import (
|
||||
UserMain, UserBoss, UserDashou, UserShangjia, UserGuanshi,
|
||||
UserBoss, UserDashou, UserShangjia, UserGuanshi,
|
||||
UserZuzhang, UserKefu, AdminProfile, OfficialAccountUser,
|
||||
TixianAutoRecord, TixianShenheJilu, Tixianjilu, Xiugaijilu,
|
||||
RankingRecord
|
||||
)
|
||||
from gvsdsdk.models import User
|
||||
from .tixian_shenhe_services import (
|
||||
load_audit_meta_map, refund_balance, sync_audit_and_jilu_status,
|
||||
mark_transfer_success, release_collect_quota_for_record,
|
||||
@@ -202,7 +203,7 @@ class WechatMiniProgramLoginView(APIView):
|
||||
|
||||
with transaction.atomic():
|
||||
# 创建或获取用户
|
||||
user_main, created = UserMain.objects.select_for_update().get_or_create(
|
||||
user_main, created = User.objects.select_for_update().get_or_create(
|
||||
openid=openid,
|
||||
defaults={'yonghuid': self.shengchengYonghuID(), 'user_type': 'normal'}
|
||||
)
|
||||
@@ -342,7 +343,7 @@ class WechatMiniProgramLoginView(APIView):
|
||||
user_id = timestamp_part + random_part
|
||||
|
||||
if len(user_id) == 7 and user_id.isdigit():
|
||||
if not UserMain.query.filter(yonghuid=user_id).exists():
|
||||
if not User.query.filter(yonghuid=user_id).exists():
|
||||
return user_id
|
||||
|
||||
raise Exception('生成用户ID失败')
|
||||
@@ -826,9 +827,9 @@ class HuoQuYaoQingRenView(APIView):
|
||||
|
||||
# 3. 查询邀请人主表(头像)
|
||||
try:
|
||||
inviter_main = UserMain.query.get(yonghuid=yaoqingren_id)
|
||||
inviter_main = User.query.get(yonghuid=yaoqingren_id)
|
||||
touxiang = inviter_main.avatar or ''
|
||||
except UserMain.DoesNotExist:
|
||||
except User.DoesNotExist:
|
||||
return Response({
|
||||
'code': 404,
|
||||
'message': '邀请人信息不存在',
|
||||
@@ -1291,7 +1292,7 @@ class DashouZhuceView(APIView):
|
||||
}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
current_user = request.user
|
||||
# 注意:这里request.user是UserMain实例
|
||||
# 注意:这里request.user是User实例
|
||||
|
||||
# 2. 检查用户是否已是打手 (使用反向查询,性能最优)
|
||||
try:
|
||||
@@ -2303,7 +2304,7 @@ class AdminLoginView(APIView):
|
||||
with transaction.atomic():
|
||||
# 【优化点1】使用select_related一次性获取管理员扩展表
|
||||
# 只查询管理员类型的用户
|
||||
user = UserMain.query.filter(
|
||||
user = User.query.filter(
|
||||
phone=zhanghao, # 手机号作为账号
|
||||
password=mima, # 密码
|
||||
user_type='admin' # 必须是管理员类型
|
||||
@@ -2422,7 +2423,7 @@ class AdminFinancialDataView(APIView):
|
||||
status=status.HTTP_401_UNAUTHORIZED
|
||||
)
|
||||
|
||||
# 2. 获取当前登录用户(JWT认证后,request.user就是UserMain实例)
|
||||
# 2. 获取当前登录用户(JWT认证后,request.user就是User实例)
|
||||
dangqianyonghu = request.user
|
||||
|
||||
# 3. 验证用户类型是否为admin
|
||||
@@ -2444,7 +2445,7 @@ class AdminFinancialDataView(APIView):
|
||||
try:
|
||||
# 使用select_related一次性获取管理员扩展表
|
||||
# 注意:这里假设user_type='admin'的用户都有admin_profile
|
||||
yonghu_xiangxi = UserMain.query.select_related('admin_profile').get(
|
||||
yonghu_xiangxi = User.query.select_related('admin_profile').get(
|
||||
pk=dangqianyonghu.pk,
|
||||
user_type='admin'
|
||||
)
|
||||
@@ -2456,7 +2457,7 @@ class AdminFinancialDataView(APIView):
|
||||
status=status.HTTP_401_UNAUTHORIZED
|
||||
)
|
||||
|
||||
except UserMain.DoesNotExist:
|
||||
except User.DoesNotExist:
|
||||
return Response(
|
||||
{'code': 401, 'msg': '身份验证失败', 'data': None},
|
||||
status=status.HTTP_401_UNAUTHORIZED
|
||||
@@ -3826,7 +3827,7 @@ class AdckyhxqView(APIView):
|
||||
}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# 查询用户主表 - 使用select_related优化查询
|
||||
user_main = UserMain.query.filter(yonghuid=uid).first()
|
||||
user_main = User.query.filter(yonghuid=uid).first()
|
||||
if not user_main:
|
||||
return Response({
|
||||
'code': 404,
|
||||
@@ -3855,7 +3856,7 @@ class AdckyhxqView(APIView):
|
||||
# 根据用户类型查询扩展信息
|
||||
if user_type == 1: # 老板
|
||||
# 使用select_related预取boss_profile
|
||||
user_main = UserMain.query.filter(yonghuid=uid).select_related('boss_profile').first()
|
||||
user_main = User.query.filter(yonghuid=uid).select_related('boss_profile').first()
|
||||
if user_main.boss_profile:
|
||||
boss_profile = user_main.boss_profile
|
||||
user_info.update({
|
||||
@@ -3868,7 +3869,7 @@ class AdckyhxqView(APIView):
|
||||
|
||||
elif user_type == 2: # 打手
|
||||
# 使用select_related预取dashou_profile
|
||||
user_main = UserMain.query.filter(yonghuid=uid).select_related('dashou_profile').first()
|
||||
user_main = User.query.filter(yonghuid=uid).select_related('dashou_profile').first()
|
||||
if user_main.dashou_profile:
|
||||
dashou_profile = user_main.dashou_profile
|
||||
|
||||
@@ -3927,7 +3928,7 @@ class AdckyhxqView(APIView):
|
||||
|
||||
elif user_type == 3: # 管事
|
||||
# 使用select_related预取guanshi_profile
|
||||
user_main = UserMain.query.filter(yonghuid=uid).select_related('guanshi_profile').first()
|
||||
user_main = User.query.filter(yonghuid=uid).select_related('guanshi_profile').first()
|
||||
if user_main.guanshi_profile:
|
||||
guanshi_profile = user_main.guanshi_profile
|
||||
user_info.update({
|
||||
@@ -3946,7 +3947,7 @@ class AdckyhxqView(APIView):
|
||||
|
||||
elif user_type == 4: # 商家
|
||||
# 使用select_related预取shop_profile
|
||||
user_main = UserMain.query.filter(yonghuid=uid).select_related('shop_profile').first()
|
||||
user_main = User.query.filter(yonghuid=uid).select_related('shop_profile').first()
|
||||
if user_main.shop_profile:
|
||||
shop_profile = user_main.shop_profile
|
||||
user_info.update({
|
||||
@@ -4060,7 +4061,7 @@ class AdcjxgView(APIView):
|
||||
}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
# 查询用户主表
|
||||
user_main = UserMain.query.filter(yonghuid=uid).first()
|
||||
user_main = User.query.filter(yonghuid=uid).first()
|
||||
if not user_main:
|
||||
return Response({
|
||||
'code': 404,
|
||||
@@ -5315,7 +5316,7 @@ class WechatLoginAndDashouRegisterView(APIView):
|
||||
# 4. 开始数据库事务(确保登录和注册的原子性)
|
||||
with transaction.atomic():
|
||||
# 4.1 创建或获取用户(登录逻辑)
|
||||
user_main, created = UserMain.objects.select_for_update().get_or_create(
|
||||
user_main, created = User.objects.select_for_update().get_or_create(
|
||||
openid=openid,
|
||||
defaults={
|
||||
'yonghuid': self.shengchengYonghuID(),
|
||||
@@ -5456,7 +5457,7 @@ class WechatLoginAndDashouRegisterView(APIView):
|
||||
user_id = timestamp_part + random_part
|
||||
|
||||
if len(user_id) == 7 and user_id.isdigit():
|
||||
if not UserMain.query.filter(yonghuid=user_id).exists():
|
||||
if not User.query.filter(yonghuid=user_id).exists():
|
||||
return user_id
|
||||
|
||||
raise Exception('生成用户ID失败')
|
||||
@@ -6718,8 +6719,8 @@ class KefuLoginView(APIView):
|
||||
client_ip = self.get_client_ip(request)
|
||||
|
||||
# 3. 查询所有手机号匹配且类型为客服的用户
|
||||
# 注意:UserMain 中需要有 user_type 字段,且值为 'kefu' 代表客服
|
||||
user_mains = UserMain.query.filter(
|
||||
# 注意:User 中需要有 user_type 字段,且值为 'kefu' 代表客服
|
||||
user_mains = User.query.filter(
|
||||
phone=phone,
|
||||
user_type='kefu' # 只查找客服账号
|
||||
).select_related('kefu_profile') # 预加载客服扩展表
|
||||
@@ -7063,7 +7064,7 @@ class KefuGetOrderListView(APIView):
|
||||
laoban_ids = [o.pingtai_kuozhan.laoban_id for o in orders_qs if hasattr(o, 'pingtai_kuozhan') and o.pingtai_kuozhan.laoban_id]
|
||||
nickname_map = {}
|
||||
if laoban_ids:
|
||||
users = UserMain.query.filter(yonghuid__in=laoban_ids).select_related('boss_profile').only(
|
||||
users = User.query.filter(yonghuid__in=laoban_ids).select_related('boss_profile').only(
|
||||
'yonghuid', 'boss_profile__nickname'
|
||||
)
|
||||
for user in users:
|
||||
@@ -7193,7 +7194,7 @@ class KefuGetShangjiaOrderListView(APIView):
|
||||
q_conditions &= Q(clkf__icontains=clkf)
|
||||
if shangjia_nicheng:
|
||||
# 通过商家扩展表关联 UserShangjia 的昵称
|
||||
q_conditions &= Q(shangjia_kuozhan__shangjia_id__in=UserMain.query.filter(
|
||||
q_conditions &= Q(shangjia_kuozhan__shangjia_id__in=User.query.filter(
|
||||
shop_profile__nicheng__icontains=shangjia_nicheng
|
||||
).values_list('yonghuid', flat=True))
|
||||
|
||||
@@ -7232,7 +7233,7 @@ class KefuGetShangjiaOrderListView(APIView):
|
||||
shangjia_ids = [o.shangjia_kuozhan.shangjia_id for o in orders_qs if hasattr(o, 'shangjia_kuozhan') and o.shangjia_kuozhan.shangjia_id]
|
||||
nickname_map = {}
|
||||
if shangjia_ids:
|
||||
users = UserMain.query.filter(yonghuid__in=shangjia_ids).select_related('shop_profile').only(
|
||||
users = User.query.filter(yonghuid__in=shangjia_ids).select_related('shop_profile').only(
|
||||
'yonghuid', 'shop_profile__nicheng'
|
||||
)
|
||||
for user in users:
|
||||
@@ -7338,8 +7339,8 @@ class KefuChangeDashouView(APIView):
|
||||
|
||||
# 5. 查询新打手
|
||||
try:
|
||||
new_dashou_user = UserMain.query.get(yonghuid=new_dashou_id)
|
||||
except UserMain.DoesNotExist:
|
||||
new_dashou_user = User.query.get(yonghuid=new_dashou_id)
|
||||
except User.DoesNotExist:
|
||||
return Response({'code': 404, 'msg': '打手不存在'}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 6. 验证打手扩展表
|
||||
@@ -7400,13 +7401,13 @@ class KefuChangeDashouView(APIView):
|
||||
old_dashou_id = order.jiedan_dashou_id
|
||||
if old_dashou_id:
|
||||
try:
|
||||
old_dashou_user = UserMain.query.get(yonghuid=old_dashou_id)
|
||||
old_dashou_user = User.query.get(yonghuid=old_dashou_id)
|
||||
old_dashou_profile = old_dashou_user.dashou_profile
|
||||
old_dashou_profile.zhuangtai = 1 # 恢复空闲
|
||||
old_dashou_profile.tuikuanliang += 1 # 原打手退款总量+1(业务逻辑)
|
||||
old_dashou_profile.save()
|
||||
logger.info(f"原打手 {old_dashou_id} 状态已更新")
|
||||
except (UserMain.DoesNotExist, ObjectDoesNotExist):
|
||||
except (User.DoesNotExist, ObjectDoesNotExist):
|
||||
logger.warning(f"原打手 {old_dashou_id} 不存在或信息不完整,跳过更新")
|
||||
except Exception as e:
|
||||
logger.error(f"更新原打手时异常: {str(e)}", exc_info=True)
|
||||
@@ -7576,13 +7577,13 @@ class KefuPlatformRefundView(APIView):
|
||||
jiedan_dashou_id = order.jiedan_dashou_id
|
||||
if jiedan_dashou_id:
|
||||
try:
|
||||
dashou_user = UserMain.query.get(yonghuid=jiedan_dashou_id)
|
||||
dashou_user = User.query.get(yonghuid=jiedan_dashou_id)
|
||||
dashou_profile = dashou_user.dashou_profile
|
||||
dashou_profile.tuikuanliang += 1
|
||||
dashou_profile.zhuangtai = 1 # 打手状态设为空闲
|
||||
dashou_profile.save()
|
||||
logger.info(f"平台退款:打手 {jiedan_dashou_id} 退款订单+1")
|
||||
except (UserMain.DoesNotExist, ObjectDoesNotExist):
|
||||
except (User.DoesNotExist, ObjectDoesNotExist):
|
||||
logger.warning(f"平台退款:打手 {jiedan_dashou_id} 不存在或扩展表缺失,跳过更新")
|
||||
|
||||
# ========== 新增:商品和店铺每日统计 ==========
|
||||
@@ -7841,7 +7842,7 @@ class KefuRejectRefundView(APIView):
|
||||
# 7. 给打手结算(返还分成)
|
||||
if jiedan_dashou_id:
|
||||
try:
|
||||
dashou_user = UserMain.query.get(yonghuid=jiedan_dashou_id)
|
||||
dashou_user = User.query.get(yonghuid=jiedan_dashou_id)
|
||||
dashou_profile = dashou_user.dashou_profile
|
||||
# 增加打手相关统计数据
|
||||
dashou_profile.chengjiaozongliang += 1
|
||||
@@ -7851,7 +7852,7 @@ class KefuRejectRefundView(APIView):
|
||||
dashou_profile.jinyueshouyi += dashou_fencheng
|
||||
dashou_profile.save()
|
||||
logger.info(f"拒绝退款:打手 {jiedan_dashou_id} 获得分成 {dashou_fencheng}")
|
||||
except (UserMain.DoesNotExist, AttributeError):
|
||||
except (User.DoesNotExist, AttributeError):
|
||||
logger.warning(f"拒绝退款:打手 {jiedan_dashou_id} 不存在或扩展表缺失,跳过结算")
|
||||
|
||||
# 8. 如果是商家发单,更新商家成交订单数量
|
||||
@@ -7861,7 +7862,7 @@ class KefuRejectRefundView(APIView):
|
||||
shangjia_kuozhan = order.shangjia_kuozhan
|
||||
shangjia_id = shangjia_kuozhan.shangjia_id
|
||||
if shangjia_id:
|
||||
shangjia_user = UserMain.query.get(yonghuid=shangjia_id)
|
||||
shangjia_user = User.query.get(yonghuid=shangjia_id)
|
||||
shangjia_profile = shangjia_user.shop_profile
|
||||
shangjia_profile.chengjiao += 1
|
||||
shangjia_profile.save()
|
||||
@@ -7873,7 +7874,7 @@ class KefuRejectRefundView(APIView):
|
||||
amount=Decimal(str(order.jine)),
|
||||
action=2 # 2 = 结算
|
||||
)
|
||||
except (ObjectDoesNotExist, UserMain.DoesNotExist, AttributeError):
|
||||
except (ObjectDoesNotExist, User.DoesNotExist, AttributeError):
|
||||
logger.warning(f"拒绝退款:商家信息不存在,跳过商家更新")
|
||||
|
||||
# 9. 更新退款记录表
|
||||
@@ -8018,22 +8019,22 @@ class KefuMerchantRefundView(APIView):
|
||||
# 更新打手
|
||||
if jiedan_dashou_id:
|
||||
try:
|
||||
dashou_user = UserMain.query.get(yonghuid=jiedan_dashou_id)
|
||||
dashou_user = User.query.get(yonghuid=jiedan_dashou_id)
|
||||
dashou_profile = dashou_user.dashou_profile
|
||||
dashou_profile.tuikuanliang += 1
|
||||
dashou_profile.zhuangtai = 1
|
||||
dashou_profile.save()
|
||||
except (UserMain.DoesNotExist, ObjectDoesNotExist):
|
||||
except (User.DoesNotExist, ObjectDoesNotExist):
|
||||
logger.warning(f"商家退款:打手 {jiedan_dashou_id} 不存在,跳过更新")
|
||||
|
||||
# 更新商家
|
||||
try:
|
||||
shangjia_user = UserMain.query.get(yonghuid=shangjia_id)
|
||||
shangjia_user = User.query.get(yonghuid=shangjia_id)
|
||||
shangjia_profile = shangjia_user.shop_profile
|
||||
shangjia_profile.tuikuan += 1
|
||||
shangjia_profile.yue += jine
|
||||
shangjia_profile.save()
|
||||
except (UserMain.DoesNotExist, ObjectDoesNotExist):
|
||||
except (User.DoesNotExist, ObjectDoesNotExist):
|
||||
logger.warning(f"商家退款:商家 {shangjia_id} 不存在,跳过更新")
|
||||
|
||||
# 更新退款记录表
|
||||
@@ -8155,13 +8156,13 @@ class KefuRejectSettlementView(APIView):
|
||||
|
||||
# 5.3 更新打手扩展表
|
||||
try:
|
||||
dashou_user = UserMain.query.get(yonghuid=jiedan_dashou_id)
|
||||
dashou_user = User.query.get(yonghuid=jiedan_dashou_id)
|
||||
dashou_profile = dashou_user.dashou_profile
|
||||
dashou_profile.zhuangtai = 1 # 打手状态设为空闲
|
||||
dashou_profile.tuikuanliang += 1 # 退款订单总量+1
|
||||
dashou_profile.save()
|
||||
logger.info(f"拒绝结算:打手 {jiedan_dashou_id} 退款订单+1,状态空闲")
|
||||
except (UserMain.DoesNotExist, ObjectDoesNotExist):
|
||||
except (User.DoesNotExist, ObjectDoesNotExist):
|
||||
logger.warning(f"拒绝结算:打手 {jiedan_dashou_id} 不存在或扩展表缺失,跳过更新")
|
||||
except Exception as e:
|
||||
logger.error(f"拒绝结算更新打手异常: {str(e)}", exc_info=True)
|
||||
@@ -8380,7 +8381,7 @@ class KefuGetDashouListView(APIView):
|
||||
return Response({'code': 401, 'msg': '认证失败'}, status=status.HTTP_401_UNAUTHORIZED)
|
||||
|
||||
# 3. 构建查询条件(只查询打手)
|
||||
# 通过 UserDashou 扩展表关联 UserMain
|
||||
# 通过 UserDashou 扩展表关联 User
|
||||
queryset = UserDashou.query.select_related('user').all()
|
||||
|
||||
if keyword:
|
||||
@@ -8470,10 +8471,10 @@ class KefuGetDashouDetailView(APIView):
|
||||
# 3. 查询打手主表和扩展表
|
||||
try:
|
||||
# 使用 select_related 预加载 dashou_profile,减少数据库查询
|
||||
user_main = UserMain.query.select_related('dashou_profile').get(
|
||||
user_main = User.query.select_related('dashou_profile').get(
|
||||
yonghuid=uid
|
||||
)
|
||||
except UserMain.DoesNotExist:
|
||||
except User.DoesNotExist:
|
||||
return Response({'code': 404, 'msg': '打手不存在'}, status=status.HTTP_404_NOT_FOUND)
|
||||
|
||||
# 验证用户类型是否为打手(可选,但建议验证)
|
||||
@@ -8616,9 +8617,9 @@ class KefuUpdateDashouView(APIView):
|
||||
|
||||
# 3. 查询打手是否存在
|
||||
try:
|
||||
dashou_user = UserMain.query.get(yonghuid=dashou_id, user_type='dashou')
|
||||
dashou_user = User.query.get(yonghuid=dashou_id, user_type='dashou')
|
||||
dashou_profile = dashou_user.dashou_profile
|
||||
except UserMain.DoesNotExist:
|
||||
except User.DoesNotExist:
|
||||
return Response({'code': 404, 'msg': '打手不存在'})
|
||||
except UserDashou.DoesNotExist:
|
||||
return Response({'code': 404, 'msg': '打手扩展信息缺失'})
|
||||
@@ -9409,7 +9410,7 @@ class KefuForceCompleteView(APIView):
|
||||
|
||||
# 5. 给打手结算
|
||||
try:
|
||||
dashou_user = UserMain.query.get(yonghuid=dashou_id)
|
||||
dashou_user = User.query.get(yonghuid=dashou_id)
|
||||
dashou_profile = dashou_user.dashou_profile
|
||||
# 原子更新(避免并发重复加)
|
||||
dashou_profile.chengjiaozongliang = F('chengjiaozongliang') + 1
|
||||
@@ -9421,7 +9422,7 @@ class KefuForceCompleteView(APIView):
|
||||
'chengjiaozongliang', 'yue', 'zonge',
|
||||
'jinrishouyi', 'jinyueshouyi'
|
||||
])
|
||||
except (UserMain.DoesNotExist, AttributeError):
|
||||
except (User.DoesNotExist, AttributeError):
|
||||
return Response({'code': 400, 'msg': '打手不存在或扩展表缺失'})
|
||||
|
||||
# 6. 如果是商家发单,更新商家成交订单数量
|
||||
@@ -9430,7 +9431,7 @@ class KefuForceCompleteView(APIView):
|
||||
# 通过 DingdanShangjia 获取商家ID
|
||||
shangjia_ext = order.shangjia_kuozhan # 假设 related_name='shangjia_kuozhan'
|
||||
if shangjia_ext and shangjia_ext.shangjia_id:
|
||||
shangjia_user = UserMain.query.get(yonghuid=shangjia_ext.shangjia_id)
|
||||
shangjia_user = User.query.get(yonghuid=shangjia_ext.shangjia_id)
|
||||
shangjia_profile = shangjia_user.shop_profile
|
||||
shangjia_profile.chengjiao = F('chengjiao') + 1
|
||||
shangjia_profile.save(update_fields=['chengjiao'])
|
||||
@@ -9873,8 +9874,8 @@ class KefuWithdrawDetailView(APIView):
|
||||
|
||||
# 查询用户主表
|
||||
try:
|
||||
user = UserMain.query.get(yonghuid=record.yonghuid)
|
||||
except UserMain.DoesNotExist:
|
||||
user = User.query.get(yonghuid=record.yonghuid)
|
||||
except User.DoesNotExist:
|
||||
user = None
|
||||
|
||||
# 构建基础返回数据(字段必须与前端一致)
|
||||
@@ -10046,8 +10047,8 @@ class KefuWithdrawActionView(APIView):
|
||||
raise ValueError(f'提现记录{tixian_id}:审核记录非审核中状态')
|
||||
|
||||
try:
|
||||
user = UserMain.objects.select_for_update().get(yonghuid=req_yonghuid)
|
||||
except UserMain.DoesNotExist:
|
||||
user = User.objects.select_for_update().get(yonghuid=req_yonghuid)
|
||||
except User.DoesNotExist:
|
||||
raise ValueError(f'用户{req_yonghuid}不存在')
|
||||
|
||||
if action == 1:
|
||||
@@ -10099,8 +10100,8 @@ class KefuWithdrawActionView(APIView):
|
||||
raise ValueError(f'提现记录{tixian_id}:自动打款请走自动流程')
|
||||
|
||||
try:
|
||||
user = UserMain.query.get(yonghuid=tixian.yonghuid)
|
||||
except UserMain.DoesNotExist:
|
||||
user = User.query.get(yonghuid=tixian.yonghuid)
|
||||
except User.DoesNotExist:
|
||||
raise ValueError(f'用户{tixian.yonghuid}不存在')
|
||||
|
||||
if action == 1:
|
||||
@@ -10246,9 +10247,9 @@ class KefuPunishView(APIView):
|
||||
|
||||
# 5. 查询打手
|
||||
try:
|
||||
dashou_user = UserMain.query.get(yonghuid=dashou_id)
|
||||
dashou_user = User.query.get(yonghuid=dashou_id)
|
||||
dashou = dashou_user.dashou_profile
|
||||
except UserMain.DoesNotExist:
|
||||
except User.DoesNotExist:
|
||||
return Response({'code': 404, 'msg': '打手用户不存在'}, status=status.HTTP_404_NOT_FOUND)
|
||||
except ObjectDoesNotExist:
|
||||
return Response({'code': 400, 'msg': '该用户不是打手'}, status=status.HTTP_400_BAD_REQUEST)
|
||||
@@ -10319,7 +10320,7 @@ class AdKftjView(APIView):
|
||||
return Response({'code': 401, 'message': '身份验证失败'}, status=status.HTTP_401_UNAUTHORIZED)
|
||||
|
||||
# 3. 检查手机号是否已被使用
|
||||
if UserMain.query.filter(phone=phone).exists():
|
||||
if User.query.filter(phone=phone).exists():
|
||||
return Response({'code': 400, 'message': '该手机号已被注册'})
|
||||
|
||||
# 4. 生成唯一 yonghuid
|
||||
@@ -10328,13 +10329,13 @@ class AdKftjView(APIView):
|
||||
timestamp = str(int(time.time()))[-5:]
|
||||
rand = str(random.randint(0, 99)).zfill(2)
|
||||
uid = timestamp + rand
|
||||
if len(uid) == 7 and not UserMain.query.filter(yonghuid=uid).exists():
|
||||
if len(uid) == 7 and not User.query.filter(yonghuid=uid).exists():
|
||||
return uid
|
||||
raise Exception('无法生成唯一用户ID')
|
||||
|
||||
with transaction.atomic():
|
||||
# 创建主表用户
|
||||
user = UserMain.query.create(
|
||||
user = User.query.create(
|
||||
yonghuid=generate_yonghuid(),
|
||||
phone=phone,
|
||||
password=password,
|
||||
@@ -10466,9 +10467,9 @@ class AdKfxgView(APIView):
|
||||
|
||||
# 查询客服
|
||||
try:
|
||||
user = UserMain.query.get(phone=uid)
|
||||
user = User.query.get(phone=uid)
|
||||
kefu = user.kefu_profile
|
||||
except (UserMain.DoesNotExist, UserKefu.DoesNotExist):
|
||||
except (User.DoesNotExist, UserKefu.DoesNotExist):
|
||||
return Response({'code': 404, 'message': '客服不存在'})
|
||||
|
||||
# 更新数据
|
||||
@@ -10476,7 +10477,7 @@ class AdKfxgView(APIView):
|
||||
# 更新主表字段
|
||||
if 'phone' in request.data:
|
||||
new_phone = request.data.get('phone').strip()
|
||||
if new_phone and UserMain.query.filter(phone=new_phone).exclude(phone=uid).exists():
|
||||
if new_phone and User.query.filter(phone=new_phone).exclude(phone=uid).exists():
|
||||
return Response({'code': 400, 'message': '手机号已被使用'})
|
||||
user.phone = new_phone
|
||||
if 'password' in request.data:
|
||||
@@ -10538,7 +10539,7 @@ class WechatLoginAndGuanshiRegisterView(APIView):
|
||||
kehuduan_ip = self._huoqu_kehuduan_ip(request)
|
||||
|
||||
with transaction.atomic():
|
||||
user_main, created = UserMain.objects.select_for_update().get_or_create(
|
||||
user_main, created = User.objects.select_for_update().get_or_create(
|
||||
openid=openid,
|
||||
defaults={
|
||||
'yonghuid': self._shengcheng_yonghu_id(),
|
||||
@@ -10644,7 +10645,7 @@ class WechatLoginAndGuanshiRegisterView(APIView):
|
||||
random_part = str(random.randint(0, 99)).zfill(2)
|
||||
user_id = timestamp_part + random_part
|
||||
if len(user_id) == 7 and user_id.isdigit():
|
||||
if not UserMain.query.filter(yonghuid=user_id).exists():
|
||||
if not User.query.filter(yonghuid=user_id).exists():
|
||||
return user_id
|
||||
raise Exception('生成用户ID失败')
|
||||
|
||||
@@ -11207,7 +11208,7 @@ class DashouJianquanView(APIView):
|
||||
|
||||
def post(self, request):
|
||||
# ========== 1. 通过 JWT 获取当前登录用户 ==========
|
||||
user = request.user # UserMain 实例
|
||||
user = request.user # User 实例
|
||||
|
||||
# ========== 2. 检查是否为已注册打手 ==========
|
||||
try:
|
||||
@@ -11286,7 +11287,7 @@ class LaobanJianquanView(APIView):
|
||||
|
||||
def post(self, request):
|
||||
# ========== 1. 通过 JWT 获取当前登录用户 ==========
|
||||
user = request.user # UserMain 实例
|
||||
user = request.user # User 实例
|
||||
|
||||
# ========== 2. 高效查询平台订单扩展表 ==========
|
||||
# 利用 DingdanPingtai.laoban_id 索引 + Dingdan.zhuangtai 索引
|
||||
@@ -12368,7 +12369,7 @@ class KaohePayCallbackView(View):
|
||||
temp = KaohePayTemp.query.get(dingdan_id=out_trade_no, yonghuid=order.yonghuid)
|
||||
logger.info(f"找到临时表记录: {out_trade_no}, 用户ID: {order.yonghuid}")
|
||||
|
||||
user = UserMain.query.get(yonghuid=order.yonghuid)
|
||||
user = User.query.get(yonghuid=order.yonghuid)
|
||||
logger.info(f"获取用户信息成功: {user.yonghuid}")
|
||||
|
||||
success, msg, record = create_shenhe_jilu_from_temp(user, temp)
|
||||
@@ -12652,7 +12653,7 @@ class GuanshiContactView(APIView):
|
||||
|
||||
def post(self, request):
|
||||
# 1. 获取当前登录用户(必须已通过JWT认证)
|
||||
current_user = request.user # 类型: UserMain
|
||||
current_user = request.user # 类型: User
|
||||
|
||||
# 2. 校验是否为管事身份(存在管事扩展表记录)
|
||||
try:
|
||||
@@ -12675,8 +12676,8 @@ class GuanshiContactView(APIView):
|
||||
|
||||
# 4. 根据邀请人用户ID查询用户主表
|
||||
try:
|
||||
inviter_user = UserMain.query.get(yonghuid=inviter_yonghuid)
|
||||
except UserMain.DoesNotExist:
|
||||
inviter_user = User.query.get(yonghuid=inviter_yonghuid)
|
||||
except User.DoesNotExist:
|
||||
logger.error(f"邀请人用户不存在: yonghuid={inviter_yonghuid}")
|
||||
return Response({
|
||||
'code': 404,
|
||||
|
||||
Reference in New Issue
Block a user