修正了 SDK,修复了 aggregate 不能传入 args 的问题

This commit is contained in:
2026-06-19 18:57:50 +08:00
parent fcd2a5e8a9
commit ee42d80d93
27 changed files with 622 additions and 469 deletions

171
users/business_models.py Normal file
View File

@@ -0,0 +1,171 @@
"""业务用户模型——继承 SDK 抽象基类,添加本服务业务字段和方法
本文件位于 users app业务层不属于 gvsdsdk SDK 包。
User 类继承自 gvsdsdk.models.User抽象基类添加业务字段和方法。
业务字段:
- UserUID用户业务ID7位
- OpenID / UnionID微信认证字段
- Avatar头像路径
- Phone / PhoneVerified手机号及认证状态
- IP来访用户IP
- IsStaff / IsSuperuserDjango auth 框架必需
业务方法:
- UserType通过 UserRole 推断用户类型admin/kefu/guanshi/...
- PaymentQRCode / PaymentAccount收款信息存于 UserSensitiveData
- HasRole检查用户是否拥有指定角色
"""
import datetime as _datetime
from django.db import models
from gvsdsdk.models import User as _UserBase, UserManager
from gvsdsdk.models import UserRole, Role
class User(_UserBase):
"""业务用户表——继承 SDK 抽象 User添加本服务业务字段和方法
映射与 SDK 相同的 User 表db_table='User'),但额外包含:
- 微信认证字段OpenID, UnionID
- 业务标识字段UserUID, Avatar, Phone, IP
- Django auth 扩展字段IsStaff, IsSuperuser
- 业务方法UserType, PaymentQRCode, PaymentAccount, HasRole
"""
# === 本地业务字段 ===
UserUID = models.CharField(max_length=7, unique=True, db_column='UserUID', verbose_name='用户业务ID', null=True, blank=True)
OpenID = models.CharField(max_length=64, unique=True, db_column='OpenID', verbose_name='微信OpenID', null=True, blank=True)
UnionID = models.CharField(max_length=64, db_column='UnionID', verbose_name='微信UnionID', null=True, blank=True)
Avatar = models.CharField(max_length=500, default='a_long/morentouxiang.jpg', db_column='Avatar', verbose_name='头像')
Phone = models.CharField(max_length=11, db_column='Phone', verbose_name='手机号', null=True, blank=True)
PhoneVerified = models.BooleanField(default=False, db_column='PhoneVerified', verbose_name='手机号是否已认证')
IP = models.CharField(max_length=50, db_column='IP', verbose_name='来访用户IP', null=True, blank=True)
IsStaff = models.BooleanField(default=False, db_column='IsStaff', verbose_name='是否员工')
IsSuperuser = models.BooleanField(default=False, db_column='IsSuperuser', verbose_name='是否超级用户')
objects = UserManager()
# Django auth 框架必需
USERNAME_FIELD = 'UserName'
REQUIRED_FIELDS = ['UserUID']
class Meta:
managed = True
app_label = 'users'
db_table = 'User'
verbose_name = '用户'
verbose_name_plural = '用户'
indexes = [
models.Index(fields=['UserUID']),
models.Index(fields=['OpenID']),
]
# ── 用户类型推断(通过 UserRole → Role 推断,带实例缓存)──
@property
def UserType(self):
"""用户类型 — 通过 UserRole 推断(带实例缓存)"""
if hasattr(self, '_cached_user_type'):
return self._cached_user_type
try:
role_uuids = UserRole.objects.filter(
UserUUID=self.UserUUID
).values_list('RoleUUID', flat=True)
role_names = set(
Role.objects.filter(RoleUUID__in=role_uuids)
.values_list('RoleName', flat=True)
)
# 优先级:管理员 > 客服 > 负责人 > 组长 > 审核官 > 商家 > 打手
for rn in role_names:
if '管理员' in rn or 'admin' in rn.lower():
self._cached_user_type = 'admin'
return 'admin'
for rn in role_names:
if '客服' in rn or 'kefu' in rn.lower():
self._cached_user_type = 'kefu'
return 'kefu'
for rn in role_names:
if '负责人' in rn or '管事' in rn or 'guanshi' in rn.lower():
self._cached_user_type = 'guanshi'
return 'guanshi'
for rn in role_names:
if '组长' in rn or 'zuzhang' in rn.lower():
self._cached_user_type = 'zuzhang'
return 'zuzhang'
for rn in role_names:
if '审核' in rn or 'shenheguan' in rn.lower():
self._cached_user_type = 'shenheguan'
return 'shenheguan'
for rn in role_names:
if '商家' in rn or 'shangjia' in rn.lower():
self._cached_user_type = 'shop'
return 'shop'
for rn in role_names:
if '打手' in rn or 'dashou' in rn.lower():
self._cached_user_type = 'dashou'
return 'dashou'
self._cached_user_type = 'normal'
return 'normal'
except Exception:
self._cached_user_type = 'normal'
return 'normal'
# ── 收款信息(存于 UserSensitiveData──
@property
def PaymentQRCode(self):
"""收款码图片(存于 UserSensitiveData.zhifu"""
try:
return self.sensitive_data.zhifu
except Exception:
return ''
@PaymentQRCode.setter
def PaymentQRCode(self, value):
try:
sd = self.sensitive_data
sd.zhifu = value
sd.save(update_fields=['zhifu'])
except Exception:
pass
@property
def PaymentAccount(self):
"""收款账号(存于 UserSensitiveData.skzhanghao"""
try:
return self.sensitive_data.skzhanghao
except Exception:
return ''
@PaymentAccount.setter
def PaymentAccount(self, value):
try:
sd = self.sensitive_data
sd.skzhanghao = value
sd.save(update_fields=['skzhanghao'])
except Exception:
pass
# ── 关联扩展表快捷访问 ──
# DashouProfile / ShopProfile / GuanshiProfile / BossProfile /
# AdminProfile / KefuProfile / ZuzhangProfile / ShenheguanProfile
# 均由 OneToOneField related_name 直接提供反向关联访问
def HasRole(self, role_code):
"""检查用户是否拥有指定角色(支持角色名或 UserType 值)"""
ROLE_CODE_MAP = {
'admin': '管理员', 'kefu': '客服', 'guanshi': '负责人',
'zuzhang': '组长', 'shenheguan': '审核官', 'shop': '商家',
'dashou': '打手', 'normal': '消费者',
}
target = ROLE_CODE_MAP.get(role_code, role_code)
try:
role_uuids = UserRole.objects.filter(
UserUUID=self.UserUUID
).values_list('RoleUUID', flat=True)
return Role.objects.filter(
RoleUUID__in=role_uuids, RoleName=target
).exists()
except Exception:
return False

View File

@@ -1,8 +1,11 @@
# Generated by Django 4.2.27 on 2026-06-17 16:31
# Generated by Django 4.2.27 on 2026-06-19 18:42
import datetime
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
import gvsdsdk.models
import uuid
class Migration(migrations.Migration):
@@ -10,7 +13,6 @@ class Migration(migrations.Migration):
initial = True
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
]
operations = [
@@ -41,6 +43,38 @@ class Migration(migrations.Migration):
'managed': False,
},
),
migrations.CreateModel(
name='User',
fields=[
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', default=uuid.uuid4, primary_key=True, serialize=False, verbose_name='用户UUID')),
('UserName', models.CharField(db_column='UserName', max_length=256, unique=True, verbose_name='用户名')),
('UserPassword', models.CharField(db_column='UserPassword', default='', max_length=60, verbose_name='密码')),
('UserPositionStatus', models.SmallIntegerField(db_column='UserPositionStatus', default=0, verbose_name='职位状态')),
('UserPersonalSignature', models.CharField(db_column='UserPersonalSignature', default='', max_length=1024, verbose_name='个人签名')),
('UserEmail', models.CharField(db_column='UserEmail', default='', max_length=256, verbose_name='邮箱')),
('UserEmailVerify', models.SmallIntegerField(db_column='UserEmailVerify', default=0, verbose_name='邮箱验证')),
('UserAccountLicense', models.SmallIntegerField(db_column='UserAccountLicense', default=1, verbose_name='账户许可')),
('UserGender', models.SmallIntegerField(db_column='UserGender', default=-1, verbose_name='性别')),
('UserTele', models.CharField(blank=True, db_column='UserTele', max_length=16, null=True, verbose_name='电话')),
('UserCreateTime', models.DateTimeField(db_column='UserCreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
('UserLastLoginDate', models.DateTimeField(db_column='UserLastLoginDate', default=datetime.datetime.utcnow, verbose_name='最后登录')),
('UserUID', models.CharField(blank=True, db_column='UserUID', max_length=7, null=True, unique=True, verbose_name='用户业务ID')),
('OpenID', models.CharField(blank=True, db_column='OpenID', max_length=64, null=True, unique=True, verbose_name='微信OpenID')),
('UnionID', models.CharField(blank=True, db_column='UnionID', max_length=64, null=True, verbose_name='微信UnionID')),
('Avatar', models.CharField(db_column='Avatar', default='a_long/morentouxiang.jpg', max_length=500, verbose_name='头像')),
('Phone', models.CharField(blank=True, db_column='Phone', max_length=11, null=True, verbose_name='手机号')),
('PhoneVerified', models.BooleanField(db_column='PhoneVerified', default=False, verbose_name='手机号是否已认证')),
('IP', models.CharField(blank=True, db_column='IP', max_length=50, null=True, verbose_name='来访用户IP')),
('IsStaff', models.BooleanField(db_column='IsStaff', default=False, verbose_name='是否员工')),
('IsSuperuser', models.BooleanField(db_column='IsSuperuser', default=False, verbose_name='是否超级用户')),
],
options={
'verbose_name': '用户',
'verbose_name_plural': '用户',
'db_table': 'User',
'managed': True,
},
),
migrations.CreateModel(
name='OfficialAccountUser',
fields=[
@@ -87,6 +121,203 @@ class Migration(migrations.Migration):
'db_table': 'xiugaijilu',
},
),
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='ZuzhangProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
],
options={
'verbose_name': '组长扩展表',
'verbose_name_plural': '组长扩展表',
'db_table': 'user_zuzhang',
},
),
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='ShenheguanProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
],
options={
'verbose_name': '审核官扩展表',
'verbose_name_plural': '审核官扩展表',
'db_table': 'user_shenheguan',
},
),
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='ShopProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
],
options={
'verbose_name': '商家扩展表',
'verbose_name_plural': '商家扩展表',
'db_table': 'user_shangjia',
},
),
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',
},
),
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='KefuProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
],
options={
'verbose_name': '客服扩展表',
'verbose_name_plural': '客服扩展表',
'db_table': 'user_kefu',
},
),
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='GuanshiProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
],
options={
'verbose_name': '管事扩展表',
'verbose_name_plural': '管事扩展表',
'db_table': 'user_guanshi',
},
),
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='DashouProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
],
options={
'verbose_name': '打手扩展表',
'verbose_name_plural': '打手扩展表',
'db_table': 'user_dashou',
},
),
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='BossProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
],
options={
'verbose_name': '老板扩展表',
'verbose_name_plural': '老板扩展表',
'db_table': 'user_boss',
},
),
migrations.CreateModel(
name='TixianShenheJilu',
fields=[
@@ -192,211 +423,6 @@ class Migration(migrations.Migration):
'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=[
@@ -405,13 +431,76 @@ class Migration(migrations.Migration):
('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='关联用户')),
('user', models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='AdminProfile', 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')],
},
),
migrations.AddIndex(
model_name='user',
index=models.Index(fields=['UserUID'], name='User_UserUID_a656ea_idx'),
),
migrations.AddIndex(
model_name='user',
index=models.Index(fields=['OpenID'], name='User_OpenID_2a920d_idx'),
),
migrations.AddIndex(
model_name='userzuzhang',
index=models.Index(fields=['user'], name='user_zuzhan_UserUUI_125e05_idx'),
),
migrations.AddIndex(
model_name='userzuzhang',
index=models.Index(fields=['yaoqingma'], name='user_zuzhan_yaoqing_cba91d_idx'),
),
migrations.AddIndex(
model_name='usershenheguan',
index=models.Index(fields=['user'], name='user_shenhe_UserUUI_bdc981_idx'),
),
migrations.AddIndex(
model_name='usershangjia',
index=models.Index(fields=['user'], name='user_shangj_UserUUI_9d7fad_idx'),
),
migrations.AddIndex(
model_name='usershangjia',
index=models.Index(fields=['nicheng'], name='user_shangj_nicheng_6967bc_idx'),
),
migrations.AddIndex(
model_name='usersensitivedata',
index=models.Index(fields=['user_uuid'], name='user_sensit_user_uu_1d562f_idx'),
),
migrations.AddIndex(
model_name='userkefu',
index=models.Index(fields=['user'], name='user_kefu_UserUUI_ccf71c_idx'),
),
migrations.AddIndex(
model_name='userkefu',
index=models.Index(fields=['zhuangtai'], name='user_kefu_zhuangt_317491_idx'),
),
migrations.AddIndex(
model_name='userguanshi',
index=models.Index(fields=['user'], name='user_guansh_UserUUI_1d9453_idx'),
),
migrations.AddIndex(
model_name='userguanshi',
index=models.Index(fields=['yaoqingma'], name='user_guansh_yaoqing_21d1d4_idx'),
),
migrations.AddIndex(
model_name='userdashou',
index=models.Index(fields=['user'], name='user_dashou_UserUUI_92ac5a_idx'),
),
migrations.AddIndex(
model_name='userdashou',
index=models.Index(fields=['yaoqingren'], name='user_dashou_yaoqing_894658_idx'),
),
migrations.AddIndex(
model_name='userboss',
index=models.Index(fields=['user'], name='user_boss_UserUUI_4579c2_idx'),
),
migrations.AddIndex(
model_name='adminprofile',
index=models.Index(fields=['user'], name='admin_profi_UserUUI_0699ce_idx'),
),
]

View File

@@ -1,56 +0,0 @@
# Generated by Django 4.2.27 on 2026-06-19 01:08
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('users', '0001_initial'),
]
operations = [
migrations.AlterField(
model_name='adminprofile',
name='user',
field=models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='AdminProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户'),
),
migrations.AlterField(
model_name='userboss',
name='user',
field=models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='BossProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户'),
),
migrations.AlterField(
model_name='userdashou',
name='user',
field=models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='DashouProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户'),
),
migrations.AlterField(
model_name='userguanshi',
name='user',
field=models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='GuanshiProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户'),
),
migrations.AlterField(
model_name='userkefu',
name='user',
field=models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='KefuProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户'),
),
migrations.AlterField(
model_name='usershangjia',
name='user',
field=models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='ShopProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户'),
),
migrations.AlterField(
model_name='usershenheguan',
name='user',
field=models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='ShenheguanProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户'),
),
migrations.AlterField(
model_name='userzuzhang',
name='user',
field=models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='ZuzhangProfile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户'),
),
]

View File

@@ -91,7 +91,7 @@ class OfficialAccountUser(QModel):
# ==================== 老板扩展表 ====================
class UserBoss(QModel):
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='BossProfile',
user = models.OneToOneField('users.User', on_delete=models.CASCADE, related_name='BossProfile',
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='消费总额')
@@ -108,7 +108,7 @@ class UserBoss(QModel):
# ==================== 打手扩展表 ====================
class UserDashou(QModel):
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='DashouProfile',
user = models.OneToOneField('users.User', on_delete=models.CASCADE, related_name='DashouProfile',
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='打手称号')
@@ -152,7 +152,7 @@ class UserDashou(QModel):
# ==================== 商家扩展表 ====================
class UserShangjia(QModel):
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='ShopProfile',
user = models.OneToOneField('users.User', on_delete=models.CASCADE, related_name='ShopProfile',
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,
@@ -181,7 +181,7 @@ class UserShangjia(QModel):
# ==================== 管事扩展表 ====================
class UserGuanshi(QModel):
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='GuanshiProfile',
user = models.OneToOneField('users.User', on_delete=models.CASCADE, related_name='GuanshiProfile',
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='邀请码')
@@ -224,7 +224,7 @@ class UserGuanshi(QModel):
class UserZuzhang(QModel):
"""组长扩展表与UserMain一对一关联"""
user = models.OneToOneField(
'gvsdsdk.User',
'users.User',
on_delete=models.CASCADE,
related_name='ZuzhangProfile',
verbose_name='关联用户',
@@ -278,7 +278,7 @@ class UserZuzhang(QModel):
class UserShenheguan(QModel):
"""审核官扩展表与UserMain一对一关联"""
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='ShenheguanProfile', verbose_name='关联用户', db_index=True, db_column='UserUUID')
user = models.OneToOneField('users.User', on_delete=models.CASCADE, related_name='ShenheguanProfile', 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='是否认证')
@@ -298,7 +298,7 @@ class UserShenheguan(QModel):
# ==================== 管理员扩展表 ====================
class AdminProfile(QModel):
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='AdminProfile',
user = models.OneToOneField('users.User', on_delete=models.CASCADE, related_name='AdminProfile',
verbose_name='关联用户', db_column='UserUUID')
password = models.CharField(max_length=255, verbose_name='密码')
wechat = models.CharField(max_length=50, blank=True, verbose_name='管理员微信')
@@ -313,7 +313,7 @@ class AdminProfile(QModel):
class UserKefu(QModel):
user = models.OneToOneField('gvsdsdk.User', on_delete=models.CASCADE, related_name='KefuProfile', verbose_name='关联用户', db_column='UserUUID')
user = models.OneToOneField('users.User', on_delete=models.CASCADE, related_name='KefuProfile', 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='客服状态')
@@ -604,7 +604,7 @@ class RankingRecord(QModel):
class UserSensitiveData(QModel):
"""用户敏感数据表——独立存储敏感信息,不继承 gvsdsdk"""
user_uuid = models.OneToOneField(
'gvsdsdk.User',
'users.User',
on_delete=models.CASCADE,
related_name='sensitive_data',
verbose_name='关联用户',
@@ -627,3 +627,9 @@ class UserSensitiveData(QModel):
return f'敏感数据-{self.user_uuid_id}'
# === 业务用户模型注册 ===
# 导入业务子类,使 Django app registry 注册具体 User 模型users.User
# 放在文件末尾以避免循环导入:此时本模块所有类已定义完毕。
from users.business_models import User as _BusinessUser # noqa: E402,F401

View File

@@ -18,7 +18,7 @@ from backend.models import (
MerchantDailyStats,
)
from users.models import UserDashou, UserShangjia, UserBoss, UserGuanshi
from gvsdsdk.models import User
from users.business_models import User
logger = logging.getLogger(__name__)

View File

@@ -15,7 +15,7 @@ from users.models import (
UserDashou, UserShangjia, UserGuanshi, UserBoss,
RankingRecord
)
from gvsdsdk.models import User
from users.business_models import User
logger = logging.getLogger(__name__)

View File

@@ -45,7 +45,7 @@ from .models import (
UserShangjia,
UserZuzhang,
)
from gvsdsdk.models import User
from users.business_models import User
from orders.utils import update_daily_payout

View File

@@ -65,7 +65,7 @@ from .models import (
TixianAutoRecord, TixianShenheJilu, Tixianjilu, Xiugaijilu,
RankingRecord
)
from gvsdsdk.models import User
from users.business_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,
@@ -219,7 +219,7 @@ class WechatMiniProgramLoginView(APIView):
if created:
UserBoss.query.create(user=user_main, nickname='板板大人')
# 新用户默认分配消费者角色
from gvsdsdk.models import UserRole, Role
from users.business_models import UserRole, Role
normal_role = Role.objects.filter(RoleName='消费者').first()
if normal_role:
UserRole.objects.create(