修正了 SDK,修复了 aggregate 不能传入 args 的问题
This commit is contained in:
171
users/business_models.py
Normal file
171
users/business_models.py
Normal file
@@ -0,0 +1,171 @@
|
||||
"""业务用户模型——继承 SDK 抽象基类,添加本服务业务字段和方法
|
||||
|
||||
本文件位于 users app(业务层),不属于 gvsdsdk SDK 包。
|
||||
User 类继承自 gvsdsdk.models.User(抽象基类),添加业务字段和方法。
|
||||
|
||||
业务字段:
|
||||
- UserUID:用户业务ID(7位)
|
||||
- OpenID / UnionID:微信认证字段
|
||||
- Avatar:头像路径
|
||||
- Phone / PhoneVerified:手机号及认证状态
|
||||
- IP:来访用户IP
|
||||
- IsStaff / IsSuperuser:Django 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
|
||||
@@ -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'),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -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='关联用户'),
|
||||
),
|
||||
]
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
@@ -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__)
|
||||
|
||||
|
||||
@@ -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__)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user