做了疯狂的架构迁移,正在进行测试,不稳定
This commit is contained in:
@@ -119,8 +119,8 @@ SIMPLE_JWT = {
|
||||
'LEEWAY': 0,
|
||||
'AUTH_HEADER_TYPES': ('Bearer',),
|
||||
'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
|
||||
'USER_ID_FIELD': 'yonghuid',
|
||||
'USER_ID_CLAIM': 'yonghuid',
|
||||
'USER_ID_FIELD': 'YonghuID',
|
||||
'USER_ID_CLAIM': 'YonghuID',
|
||||
'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',
|
||||
'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
|
||||
'TOKEN_TYPE_CLAIM': 'token_type',
|
||||
@@ -132,7 +132,10 @@ AUTHENTICATION_BACKENDS = [
|
||||
'django.contrib.auth.backends.ModelBackend',
|
||||
]
|
||||
|
||||
AUTH_USER_MODEL = 'users.UserMain'
|
||||
AUTH_USER_MODEL = 'gvsdsdk.User'
|
||||
|
||||
# gvsdsdk 去远程化:所有 gvsdsdk 表存储在本地数据库
|
||||
GVSDSDK_MANAGE_TABLES = True
|
||||
|
||||
# ==================== DRF 配置 ====================
|
||||
REST_FRAMEWORK = {
|
||||
|
||||
@@ -1,296 +1,275 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-06 23:31
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = []
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="AbnormalUserLog",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"account_id",
|
||||
models.CharField(
|
||||
db_index=True, max_length=20, verbose_name="账号ID(phone)"
|
||||
),
|
||||
),
|
||||
(
|
||||
"ip_address",
|
||||
models.GenericIPAddressField(
|
||||
blank=True, null=True, verbose_name="IP地址"
|
||||
),
|
||||
),
|
||||
(
|
||||
"real_ip",
|
||||
models.GenericIPAddressField(
|
||||
blank=True, null=True, verbose_name="真实IP(穿透代理后)"
|
||||
),
|
||||
),
|
||||
(
|
||||
"x_forwarded_for",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
default="",
|
||||
max_length=255,
|
||||
verbose_name="X-Forwarded-For",
|
||||
),
|
||||
),
|
||||
(
|
||||
"user_agent",
|
||||
models.CharField(
|
||||
blank=True,
|
||||
default="",
|
||||
max_length=500,
|
||||
verbose_name="User-Agent",
|
||||
),
|
||||
),
|
||||
(
|
||||
"request_method",
|
||||
models.CharField(
|
||||
blank=True, default="", max_length=10, verbose_name="请求方法"
|
||||
),
|
||||
),
|
||||
(
|
||||
"request_path",
|
||||
models.CharField(
|
||||
blank=True, default="", max_length=500, verbose_name="请求路径"
|
||||
),
|
||||
),
|
||||
(
|
||||
"request_params",
|
||||
models.TextField(
|
||||
blank=True, default="", verbose_name="请求参数(GET/POST)"
|
||||
),
|
||||
),
|
||||
(
|
||||
"request_body",
|
||||
models.TextField(
|
||||
blank=True, default="", verbose_name="请求体(原始)"
|
||||
),
|
||||
),
|
||||
(
|
||||
"request_headers",
|
||||
models.TextField(
|
||||
blank=True, default="", verbose_name="请求头(JSON格式)"
|
||||
),
|
||||
),
|
||||
(
|
||||
"attempt_type",
|
||||
models.CharField(
|
||||
blank=True, default="", max_length=50, verbose_name="攻击类型"
|
||||
),
|
||||
),
|
||||
(
|
||||
"detail",
|
||||
models.TextField(blank=True, default="", verbose_name="详细描述"),
|
||||
),
|
||||
(
|
||||
"create_time",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "异常用户日志",
|
||||
"verbose_name_plural": "异常用户日志",
|
||||
"db_table": "abnormal_user_log",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Permission",
|
||||
fields=[
|
||||
(
|
||||
"perm_id",
|
||||
models.AutoField(
|
||||
primary_key=True, serialize=False, verbose_name="权限ID"
|
||||
),
|
||||
),
|
||||
(
|
||||
"perm_code",
|
||||
models.CharField(
|
||||
db_index=True,
|
||||
max_length=100,
|
||||
unique=True,
|
||||
verbose_name="权限编码",
|
||||
),
|
||||
),
|
||||
(
|
||||
"perm_name",
|
||||
models.CharField(max_length=100, verbose_name="权限名称"),
|
||||
),
|
||||
(
|
||||
"description",
|
||||
models.CharField(
|
||||
blank=True, default="", max_length=200, verbose_name="权限描述"
|
||||
),
|
||||
),
|
||||
(
|
||||
"create_time",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"update_time",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "权限",
|
||||
"verbose_name_plural": "权限",
|
||||
"db_table": "permission",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="Role",
|
||||
fields=[
|
||||
(
|
||||
"role_id",
|
||||
models.AutoField(
|
||||
primary_key=True, serialize=False, verbose_name="角色ID"
|
||||
),
|
||||
),
|
||||
(
|
||||
"role_code",
|
||||
models.CharField(
|
||||
db_index=True,
|
||||
max_length=50,
|
||||
unique=True,
|
||||
verbose_name="角色编码",
|
||||
),
|
||||
),
|
||||
("role_name", models.CharField(max_length=50, verbose_name="角色名称")),
|
||||
(
|
||||
"description",
|
||||
models.CharField(
|
||||
blank=True, default="", max_length=200, verbose_name="角色描述"
|
||||
),
|
||||
),
|
||||
(
|
||||
"create_time",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"update_time",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "角色",
|
||||
"verbose_name_plural": "角色",
|
||||
"db_table": "role",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="UserRole",
|
||||
fields=[
|
||||
("id", models.AutoField(primary_key=True, serialize=False)),
|
||||
(
|
||||
"account_id",
|
||||
models.CharField(
|
||||
db_index=True, max_length=11, verbose_name="账号ID"
|
||||
),
|
||||
),
|
||||
(
|
||||
"create_time",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"update_time",
|
||||
models.DateTimeField(auto_now=True, verbose_name="更新时间"),
|
||||
),
|
||||
(
|
||||
"role",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="backend.role",
|
||||
verbose_name="角色",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "用户角色关联",
|
||||
"verbose_name_plural": "用户角色关联",
|
||||
"db_table": "user_role",
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="RolePermission",
|
||||
fields=[
|
||||
("id", models.AutoField(primary_key=True, serialize=False)),
|
||||
(
|
||||
"create_time",
|
||||
models.DateTimeField(auto_now_add=True, verbose_name="创建时间"),
|
||||
),
|
||||
(
|
||||
"permission",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="backend.permission",
|
||||
verbose_name="权限",
|
||||
),
|
||||
),
|
||||
(
|
||||
"role",
|
||||
models.ForeignKey(
|
||||
on_delete=django.db.models.deletion.CASCADE,
|
||||
to="backend.role",
|
||||
verbose_name="角色",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "角色权限关联",
|
||||
"verbose_name_plural": "角色权限关联",
|
||||
"db_table": "role_permission",
|
||||
},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="role",
|
||||
index=models.Index(fields=["role_code"], name="role_role_co_b9f497_idx"),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="permission",
|
||||
index=models.Index(
|
||||
fields=["perm_code"], name="permission_perm_co_56cbe3_idx"
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="abnormaluserlog",
|
||||
index=models.Index(
|
||||
fields=["account_id"], name="abnormal_us_account_425899_idx"
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="abnormaluserlog",
|
||||
index=models.Index(
|
||||
fields=["ip_address"], name="abnormal_us_ip_addr_3d612b_idx"
|
||||
),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name="abnormaluserlog",
|
||||
index=models.Index(
|
||||
fields=["create_time"], name="abnormal_us_create__ee16da_idx"
|
||||
),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name="userrole",
|
||||
unique_together={("account_id", "role")},
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name="rolepermission",
|
||||
unique_together={("role", "permission")},
|
||||
),
|
||||
]
|
||||
# Generated by Django 4.2.27 on 2026-06-17 01:34
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='AbnormalUserLog',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('account_id', models.CharField(db_index=True, max_length=20, verbose_name='账号ID(phone)')),
|
||||
('ip_address', models.GenericIPAddressField(blank=True, null=True, verbose_name='IP地址')),
|
||||
('real_ip', models.GenericIPAddressField(blank=True, null=True, verbose_name='真实IP(穿透代理后)')),
|
||||
('x_forwarded_for', models.CharField(blank=True, default='', max_length=255, verbose_name='X-Forwarded-For')),
|
||||
('user_agent', models.CharField(blank=True, default='', max_length=500, verbose_name='User-Agent')),
|
||||
('request_method', models.CharField(blank=True, default='', max_length=10, verbose_name='请求方法')),
|
||||
('request_path', models.CharField(blank=True, default='', max_length=500, verbose_name='请求路径')),
|
||||
('request_params', models.TextField(blank=True, default='', verbose_name='请求参数(GET/POST)')),
|
||||
('request_body', models.TextField(blank=True, default='', verbose_name='请求体(原始)')),
|
||||
('request_headers', models.TextField(blank=True, default='', verbose_name='请求头(JSON格式)')),
|
||||
('attempt_type', models.CharField(blank=True, default='', max_length=50, verbose_name='攻击类型')),
|
||||
('detail', models.TextField(blank=True, default='', verbose_name='详细描述')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '异常用户日志',
|
||||
'verbose_name_plural': '异常用户日志',
|
||||
'db_table': 'abnormal_user_log',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DashouRiTongji',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='打手用户ID')),
|
||||
('riqi', models.DateField(db_index=True, verbose_name='日期')),
|
||||
('jiedan_zongliang', models.IntegerField(default=0, verbose_name='接单总量')),
|
||||
('chengjiao_zongliang', models.IntegerField(default=0, verbose_name='成交单总量')),
|
||||
('jiedan_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='接单总金额')),
|
||||
('chengjiao_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='成交总金额')),
|
||||
('tuikuan_liang', models.IntegerField(default=0, verbose_name='退款订单量')),
|
||||
('tuikuan_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='退款总金额')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '打手每日统计',
|
||||
'db_table': 'dashou_ri_tongji',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='GuanshiRiTongji',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='管事用户ID')),
|
||||
('riqi', models.DateField(db_index=True, verbose_name='日期')),
|
||||
('yaoqing_dashou_shu', models.IntegerField(default=0, verbose_name='邀请打手总数')),
|
||||
('chongzhi_dashou_shu', models.IntegerField(default=0, verbose_name='充值打手数量')),
|
||||
('shouru_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='收入总额')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管事每日统计',
|
||||
'db_table': 'guanshi_ri_tongji',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='GuanshiXufeiRiTongji',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='管事用户ID')),
|
||||
('riqi', models.DateField(db_index=True, verbose_name='日期')),
|
||||
('xufei_zongshu', models.IntegerField(default=0, verbose_name='今日续费总数')),
|
||||
('xufei_shouyi', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='续费收益金额')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管事续费每日统计',
|
||||
'db_table': 'guanshi_xufei_ri_tongji',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Permission',
|
||||
fields=[
|
||||
('perm_id', models.AutoField(primary_key=True, serialize=False, verbose_name='权限ID')),
|
||||
('perm_code', models.CharField(db_index=True, max_length=100, unique=True, verbose_name='权限编码')),
|
||||
('perm_name', models.CharField(max_length=100, verbose_name='权限名称')),
|
||||
('description', models.CharField(blank=True, default='', max_length=200, verbose_name='权限描述')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '权限',
|
||||
'verbose_name_plural': '权限',
|
||||
'db_table': 'permission',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Role',
|
||||
fields=[
|
||||
('role_id', models.AutoField(primary_key=True, serialize=False, verbose_name='角色ID')),
|
||||
('role_code', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='角色编码')),
|
||||
('role_name', models.CharField(max_length=50, verbose_name='角色名称')),
|
||||
('description', models.CharField(blank=True, default='', max_length=200, verbose_name='角色描述')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '角色',
|
||||
'verbose_name_plural': '角色',
|
||||
'db_table': 'role',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ZuzhangRiTongji',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='组长用户ID')),
|
||||
('riqi', models.DateField(db_index=True, verbose_name='日期')),
|
||||
('yaoqing_guanshi_shu', models.IntegerField(default=0, verbose_name='邀请管事总数')),
|
||||
('shouru_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='收入总额(分佣)')),
|
||||
('fenyong_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='分佣金额')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '组长每日统计',
|
||||
'db_table': 'zuzhang_ri_tongji',
|
||||
'indexes': [models.Index(fields=['riqi', '-yaoqing_guanshi_shu'], name='zuzhang_ri__riqi_87169e_idx'), models.Index(fields=['riqi', '-shouru_zonge'], name='zuzhang_ri__riqi_1d7e51_idx')],
|
||||
'unique_together': {('yonghuid', 'riqi')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserRole',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('account_id', models.CharField(db_index=True, max_length=11, verbose_name='账号ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.role', verbose_name='角色')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户角色关联',
|
||||
'verbose_name_plural': '用户角色关联',
|
||||
'db_table': 'user_role',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TixianRiTongji',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('riqi', models.DateField(db_index=True, verbose_name='日期')),
|
||||
('leixing', models.IntegerField(choices=[(1, '打手'), (2, '管事'), (3, '组长'), (4, '考核官'), (5, '打手押金'), (6, '商家余额')], verbose_name='用户类型')),
|
||||
('total_amount', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='当天提现总额(元)')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '每日提现统计',
|
||||
'db_table': 'tixian_ri_tongji',
|
||||
'indexes': [models.Index(fields=['riqi', 'leixing'], name='tixian_ri_t_riqi_c18bb2_idx')],
|
||||
'unique_together': {('riqi', 'leixing')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShangjiaRiTongji',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='商家用户ID')),
|
||||
('riqi', models.DateField(db_index=True, verbose_name='日期')),
|
||||
('paifa_dingdan_shu', models.IntegerField(default=0, verbose_name='派发订单总数')),
|
||||
('paifa_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='派发订单总金额')),
|
||||
('jiesuan_dingdan_shu', models.IntegerField(default=0, verbose_name='结算订单总数')),
|
||||
('jiesuan_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='结算总金额')),
|
||||
('tuikuan_dingdan_shu', models.IntegerField(default=0, verbose_name='退款订单总数')),
|
||||
('tuikuan_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='退款总金额')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商家每日统计',
|
||||
'db_table': 'shangjia_ri_tongji',
|
||||
'indexes': [models.Index(fields=['riqi', '-paifa_jine'], name='shangjia_ri_riqi_d00f7f_idx'), models.Index(fields=['riqi', '-jiesuan_jine'], name='shangjia_ri_riqi_25772a_idx'), models.Index(fields=['riqi', '-paifa_dingdan_shu'], name='shangjia_ri_riqi_e05c54_idx')],
|
||||
'unique_together': {('yonghuid', 'riqi')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RolePermission',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('permission', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.permission', verbose_name='权限')),
|
||||
('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.role', verbose_name='角色')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '角色权限关联',
|
||||
'verbose_name_plural': '角色权限关联',
|
||||
'db_table': 'role_permission',
|
||||
},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='role',
|
||||
index=models.Index(fields=['role_code'], name='role_role_co_b9f497_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='permission',
|
||||
index=models.Index(fields=['perm_code'], name='permission_perm_co_56cbe3_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='guanshixufeiritongji',
|
||||
index=models.Index(fields=['riqi', '-xufei_zongshu'], name='guanshi_xuf_riqi_7c128f_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='guanshixufeiritongji',
|
||||
index=models.Index(fields=['riqi', '-xufei_shouyi'], name='guanshi_xuf_riqi_8f09b5_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='guanshixufeiritongji',
|
||||
unique_together={('yonghuid', 'riqi')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='guanshiritongji',
|
||||
index=models.Index(fields=['riqi', '-yaoqing_dashou_shu'], name='guanshi_ri__riqi_075e1a_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='guanshiritongji',
|
||||
index=models.Index(fields=['riqi', '-chongzhi_dashou_shu'], name='guanshi_ri__riqi_78a79d_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='guanshiritongji',
|
||||
index=models.Index(fields=['riqi', '-shouru_zonge'], name='guanshi_ri__riqi_334f52_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='guanshiritongji',
|
||||
unique_together={('yonghuid', 'riqi')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dashouritongji',
|
||||
index=models.Index(fields=['riqi', '-jiedan_zongliang'], name='dashou_ri_t_riqi_95a785_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dashouritongji',
|
||||
index=models.Index(fields=['riqi', '-chengjiao_zongliang'], name='dashou_ri_t_riqi_ad9c1a_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dashouritongji',
|
||||
index=models.Index(fields=['riqi', '-jiedan_zonge'], name='dashou_ri_t_riqi_5da703_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dashouritongji',
|
||||
index=models.Index(fields=['riqi', '-chengjiao_zonge'], name='dashou_ri_t_riqi_0a3156_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='dashouritongji',
|
||||
unique_together={('yonghuid', 'riqi')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='abnormaluserlog',
|
||||
index=models.Index(fields=['account_id'], name='abnormal_us_account_425899_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='abnormaluserlog',
|
||||
index=models.Index(fields=['ip_address'], name='abnormal_us_ip_addr_3d612b_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='abnormaluserlog',
|
||||
index=models.Index(fields=['create_time'], name='abnormal_us_create__ee16da_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='userrole',
|
||||
unique_together={('account_id', 'role')},
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='rolepermission',
|
||||
unique_together={('role', 'permission')},
|
||||
),
|
||||
]
|
||||
|
||||
@@ -1,339 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-09 14:53
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("backend", "0001_initial"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="ZuzhangRiTongji",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"yonghuid",
|
||||
models.CharField(
|
||||
db_index=True, max_length=7, verbose_name="组长用户ID"
|
||||
),
|
||||
),
|
||||
("riqi", models.DateField(db_index=True, verbose_name="日期")),
|
||||
(
|
||||
"yaoqing_guanshi_shu",
|
||||
models.IntegerField(default=0, verbose_name="邀请管事总数"),
|
||||
),
|
||||
(
|
||||
"shouru_zonge",
|
||||
models.DecimalField(
|
||||
decimal_places=2,
|
||||
default=0.0,
|
||||
max_digits=12,
|
||||
verbose_name="收入总额(分佣)",
|
||||
),
|
||||
),
|
||||
(
|
||||
"fenyong_jine",
|
||||
models.DecimalField(
|
||||
decimal_places=2,
|
||||
default=0.0,
|
||||
max_digits=12,
|
||||
verbose_name="分佣金额",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "组长每日统计",
|
||||
"db_table": "zuzhang_ri_tongji",
|
||||
"indexes": [
|
||||
models.Index(
|
||||
fields=["riqi", "-yaoqing_guanshi_shu"],
|
||||
name="zuzhang_ri__riqi_87169e_idx",
|
||||
),
|
||||
models.Index(
|
||||
fields=["riqi", "-shouru_zonge"],
|
||||
name="zuzhang_ri__riqi_1d7e51_idx",
|
||||
),
|
||||
],
|
||||
"unique_together": {("yonghuid", "riqi")},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="ShangjiaRiTongji",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"yonghuid",
|
||||
models.CharField(
|
||||
db_index=True, max_length=7, verbose_name="商家用户ID"
|
||||
),
|
||||
),
|
||||
("riqi", models.DateField(db_index=True, verbose_name="日期")),
|
||||
(
|
||||
"paifa_dingdan_shu",
|
||||
models.IntegerField(default=0, verbose_name="派发订单总数"),
|
||||
),
|
||||
(
|
||||
"paifa_jine",
|
||||
models.DecimalField(
|
||||
decimal_places=2,
|
||||
default=0.0,
|
||||
max_digits=12,
|
||||
verbose_name="派发订单总金额",
|
||||
),
|
||||
),
|
||||
(
|
||||
"jiesuan_dingdan_shu",
|
||||
models.IntegerField(default=0, verbose_name="结算订单总数"),
|
||||
),
|
||||
(
|
||||
"jiesuan_jine",
|
||||
models.DecimalField(
|
||||
decimal_places=2,
|
||||
default=0.0,
|
||||
max_digits=12,
|
||||
verbose_name="结算总金额",
|
||||
),
|
||||
),
|
||||
(
|
||||
"tuikuan_dingdan_shu",
|
||||
models.IntegerField(default=0, verbose_name="退款订单总数"),
|
||||
),
|
||||
(
|
||||
"tuikuan_jine",
|
||||
models.DecimalField(
|
||||
decimal_places=2,
|
||||
default=0.0,
|
||||
max_digits=12,
|
||||
verbose_name="退款总金额",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "商家每日统计",
|
||||
"db_table": "shangjia_ri_tongji",
|
||||
"indexes": [
|
||||
models.Index(
|
||||
fields=["riqi", "-paifa_jine"],
|
||||
name="shangjia_ri_riqi_d00f7f_idx",
|
||||
),
|
||||
models.Index(
|
||||
fields=["riqi", "-jiesuan_jine"],
|
||||
name="shangjia_ri_riqi_25772a_idx",
|
||||
),
|
||||
models.Index(
|
||||
fields=["riqi", "-paifa_dingdan_shu"],
|
||||
name="shangjia_ri_riqi_e05c54_idx",
|
||||
),
|
||||
],
|
||||
"unique_together": {("yonghuid", "riqi")},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="GuanshiXufeiRiTongji",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"yonghuid",
|
||||
models.CharField(
|
||||
db_index=True, max_length=7, verbose_name="管事用户ID"
|
||||
),
|
||||
),
|
||||
("riqi", models.DateField(db_index=True, verbose_name="日期")),
|
||||
(
|
||||
"xufei_zongshu",
|
||||
models.IntegerField(default=0, verbose_name="今日续费总数"),
|
||||
),
|
||||
(
|
||||
"xufei_shouyi",
|
||||
models.DecimalField(
|
||||
decimal_places=2,
|
||||
default=0.0,
|
||||
max_digits=12,
|
||||
verbose_name="续费收益金额",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "管事续费每日统计",
|
||||
"db_table": "guanshi_xufei_ri_tongji",
|
||||
"indexes": [
|
||||
models.Index(
|
||||
fields=["riqi", "-xufei_zongshu"],
|
||||
name="guanshi_xuf_riqi_7c128f_idx",
|
||||
),
|
||||
models.Index(
|
||||
fields=["riqi", "-xufei_shouyi"],
|
||||
name="guanshi_xuf_riqi_8f09b5_idx",
|
||||
),
|
||||
],
|
||||
"unique_together": {("yonghuid", "riqi")},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="GuanshiRiTongji",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"yonghuid",
|
||||
models.CharField(
|
||||
db_index=True, max_length=7, verbose_name="管事用户ID"
|
||||
),
|
||||
),
|
||||
("riqi", models.DateField(db_index=True, verbose_name="日期")),
|
||||
(
|
||||
"yaoqing_dashou_shu",
|
||||
models.IntegerField(default=0, verbose_name="邀请打手总数"),
|
||||
),
|
||||
(
|
||||
"chongzhi_dashou_shu",
|
||||
models.IntegerField(default=0, verbose_name="充值打手数量"),
|
||||
),
|
||||
(
|
||||
"shouru_zonge",
|
||||
models.DecimalField(
|
||||
decimal_places=2,
|
||||
default=0.0,
|
||||
max_digits=12,
|
||||
verbose_name="收入总额",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "管事每日统计",
|
||||
"db_table": "guanshi_ri_tongji",
|
||||
"indexes": [
|
||||
models.Index(
|
||||
fields=["riqi", "-yaoqing_dashou_shu"],
|
||||
name="guanshi_ri__riqi_075e1a_idx",
|
||||
),
|
||||
models.Index(
|
||||
fields=["riqi", "-chongzhi_dashou_shu"],
|
||||
name="guanshi_ri__riqi_78a79d_idx",
|
||||
),
|
||||
models.Index(
|
||||
fields=["riqi", "-shouru_zonge"],
|
||||
name="guanshi_ri__riqi_334f52_idx",
|
||||
),
|
||||
],
|
||||
"unique_together": {("yonghuid", "riqi")},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name="DashouRiTongji",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
(
|
||||
"yonghuid",
|
||||
models.CharField(
|
||||
db_index=True, max_length=7, verbose_name="打手用户ID"
|
||||
),
|
||||
),
|
||||
("riqi", models.DateField(db_index=True, verbose_name="日期")),
|
||||
(
|
||||
"jiedan_zongliang",
|
||||
models.IntegerField(default=0, verbose_name="接单总量"),
|
||||
),
|
||||
(
|
||||
"chengjiao_zongliang",
|
||||
models.IntegerField(default=0, verbose_name="成交单总量"),
|
||||
),
|
||||
(
|
||||
"jiedan_zonge",
|
||||
models.DecimalField(
|
||||
decimal_places=2,
|
||||
default=0.0,
|
||||
max_digits=12,
|
||||
verbose_name="接单总金额",
|
||||
),
|
||||
),
|
||||
(
|
||||
"chengjiao_zonge",
|
||||
models.DecimalField(
|
||||
decimal_places=2,
|
||||
default=0.0,
|
||||
max_digits=12,
|
||||
verbose_name="成交总金额",
|
||||
),
|
||||
),
|
||||
(
|
||||
"tuikuan_liang",
|
||||
models.IntegerField(default=0, verbose_name="退款订单量"),
|
||||
),
|
||||
(
|
||||
"tuikuan_jine",
|
||||
models.DecimalField(
|
||||
decimal_places=2,
|
||||
default=0.0,
|
||||
max_digits=12,
|
||||
verbose_name="退款总金额",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "打手每日统计",
|
||||
"db_table": "dashou_ri_tongji",
|
||||
"indexes": [
|
||||
models.Index(
|
||||
fields=["riqi", "-jiedan_zongliang"],
|
||||
name="dashou_ri_t_riqi_95a785_idx",
|
||||
),
|
||||
models.Index(
|
||||
fields=["riqi", "-chengjiao_zongliang"],
|
||||
name="dashou_ri_t_riqi_ad9c1a_idx",
|
||||
),
|
||||
models.Index(
|
||||
fields=["riqi", "-jiedan_zonge"],
|
||||
name="dashou_ri_t_riqi_5da703_idx",
|
||||
),
|
||||
models.Index(
|
||||
fields=["riqi", "-chengjiao_zonge"],
|
||||
name="dashou_ri_t_riqi_0a3156_idx",
|
||||
),
|
||||
],
|
||||
"unique_together": {("yonghuid", "riqi")},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,54 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-10 18:05
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
("backend", "0002_zuzhangritongji_shangjiaritongji_and_more"),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name="TixianRiTongji",
|
||||
fields=[
|
||||
(
|
||||
"id",
|
||||
models.BigAutoField(
|
||||
auto_created=True,
|
||||
primary_key=True,
|
||||
serialize=False,
|
||||
verbose_name="ID",
|
||||
),
|
||||
),
|
||||
("riqi", models.DateField(db_index=True, verbose_name="日期")),
|
||||
(
|
||||
"leixing",
|
||||
models.IntegerField(
|
||||
choices=[(1, "打手"), (2, "管事"), (3, "组长")],
|
||||
verbose_name="用户类型",
|
||||
),
|
||||
),
|
||||
(
|
||||
"total_amount",
|
||||
models.DecimalField(
|
||||
decimal_places=2,
|
||||
default=0.0,
|
||||
max_digits=12,
|
||||
verbose_name="当天提现总额(元)",
|
||||
),
|
||||
),
|
||||
],
|
||||
options={
|
||||
"verbose_name": "每日提现统计",
|
||||
"db_table": "tixian_ri_tongji",
|
||||
"indexes": [
|
||||
models.Index(
|
||||
fields=["riqi", "leixing"], name="tixian_ri_t_riqi_c18bb2_idx"
|
||||
)
|
||||
],
|
||||
"unique_together": {("riqi", "leixing")},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,34 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-06-15 01:42
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('backend', '0003_tixianritongji'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='rolepermission',
|
||||
name='permission',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.permission', verbose_name='权限'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='rolepermission',
|
||||
name='role',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.role', verbose_name='角色'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tixianritongji',
|
||||
name='leixing',
|
||||
field=models.IntegerField(choices=[(1, '打手'), (2, '管事'), (3, '组长'), (4, '考核官'), (5, '打手押金'), (6, '商家余额')], verbose_name='用户类型'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='userrole',
|
||||
name='role',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='backend.role', verbose_name='角色'),
|
||||
),
|
||||
]
|
||||
@@ -1,92 +1,296 @@
|
||||
# Generated by Django 5.2.10 on 2026-01-14 19:59
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Gonggao',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('leixing', models.IntegerField(blank=True, null=True, verbose_name='公告类型')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
('jieshao', models.TextField(blank=True, null=True, verbose_name='公告介绍')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '公告',
|
||||
'verbose_name_plural': '公告',
|
||||
'db_table': 'gonggao',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Lunbo',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('tupian_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='轮播图片URL')),
|
||||
('leixing', models.IntegerField(blank=True, null=True, verbose_name='图片类型:1:轮播2:个人中心背景')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '轮播',
|
||||
'verbose_name_plural': '轮播',
|
||||
'db_table': 'lunbo',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Qunpeizhi',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('peizhiid', models.IntegerField(blank=True, null=True, verbose_name='群类型:1.打手 2.管事')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
('neirong', models.CharField(blank=True, max_length=200, null=True, verbose_name='群介绍')),
|
||||
('qunid', models.CharField(blank=True, max_length=100, null=True, verbose_name='群id')),
|
||||
('jieshao', models.CharField(blank=True, max_length=200, null=True, verbose_name='介绍')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'qunpeizhi',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Szjilu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='记录ID')),
|
||||
('zongsy', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='总收益')),
|
||||
('zongls', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='总流水')),
|
||||
('zongzc', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='总支出')),
|
||||
('jrzc', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日支出')),
|
||||
('jrls', 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='更改时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '收支记录',
|
||||
'verbose_name_plural': '收支记录',
|
||||
'db_table': 'szjilu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Tupianpeizhi',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('tupian', models.CharField(blank=True, max_length=500, null=True, verbose_name='配置图片URL')),
|
||||
('leixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='提现类型1:打手规则图片2:默认头像图片')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '配置图片',
|
||||
'verbose_name_plural': '配置图片',
|
||||
'db_table': 'tupianpeizhi',
|
||||
},
|
||||
),
|
||||
]
|
||||
# Generated by Django 4.2.27 on 2026-06-17 01:32
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Gonggao',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('leixing', models.IntegerField(blank=True, null=True, verbose_name='公告类型')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
('jieshao', models.TextField(blank=True, null=True, verbose_name='公告介绍')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '公告',
|
||||
'verbose_name_plural': '公告',
|
||||
'db_table': 'gonggao',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Lunbo',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('tupian_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='轮播图片URL')),
|
||||
('leixing', models.IntegerField(blank=True, null=True, verbose_name='图片类型:1:轮播2:个人中心背景')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '轮播',
|
||||
'verbose_name_plural': '轮播',
|
||||
'db_table': 'lunbo',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PopupConfig',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('popup_id', models.CharField(max_length=50, verbose_name='弹窗唯一ID')),
|
||||
('title', models.CharField(blank=True, max_length=200, verbose_name='标题(后台用)')),
|
||||
('description', models.TextField(blank=True, verbose_name='描述(后台用)')),
|
||||
('strategy_type', models.CharField(choices=[('once', '仅一次'), ('daily', '每日'), ('weekly', '每周'), ('monthly', '每月'), ('yearly', '每年'), ('always', '始终'), ('count', '周期内次数限制')], default='once', max_length=20)),
|
||||
('max_count', models.PositiveIntegerField(default=1, verbose_name='周期内最大展示次数')),
|
||||
('reset_interval', models.CharField(blank=True, choices=[('day', '天'), ('week', '周'), ('month', '月'), ('year', '年')], max_length=20, verbose_name='重置周期(count类型时使用)')),
|
||||
('duration', models.PositiveIntegerField(default=0, verbose_name='强制阅读秒数(0=无强制)')),
|
||||
('force_even_muted', models.BooleanField(default=False, verbose_name='强制弹出(忽略用户今日屏蔽)')),
|
||||
('sort_order', models.PositiveIntegerField(default=0, verbose_name='展示顺序')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='是否启用')),
|
||||
('start_time', models.DateTimeField(blank=True, null=True, verbose_name='生效开始时间')),
|
||||
('end_time', models.DateTimeField(blank=True, null=True, verbose_name='生效结束时间')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '弹窗配置',
|
||||
'verbose_name_plural': '弹窗配置',
|
||||
'db_table': 'popup_config',
|
||||
'ordering': ['sort_order', 'id'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PopupPage',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('page_key', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='页面标识')),
|
||||
('name', models.CharField(max_length=100, verbose_name='页面名称')),
|
||||
('description', models.TextField(blank=True, verbose_name='描述')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='是否启用')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('ignore_user_mute', models.BooleanField(default=False, verbose_name='忽略用户今日屏蔽')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '弹窗页面',
|
||||
'verbose_name_plural': '弹窗页面',
|
||||
'db_table': 'popup_page',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Qunpeizhi',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('peizhiid', models.IntegerField(blank=True, null=True, verbose_name='群类型:1.打手 2.管事')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
('neirong', models.CharField(blank=True, max_length=200, null=True, verbose_name='群介绍')),
|
||||
('qunid', models.CharField(blank=True, max_length=100, null=True, verbose_name='群id')),
|
||||
('jieshao', models.CharField(blank=True, max_length=200, null=True, verbose_name='介绍')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'qunpeizhi',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Szjilu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='记录ID')),
|
||||
('zongsy', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='总收益')),
|
||||
('zongls', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='总流水')),
|
||||
('zongzc', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='总支出')),
|
||||
('jrzc', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日支出')),
|
||||
('jrls', 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='更改时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '收支记录',
|
||||
'verbose_name_plural': '收支记录',
|
||||
'db_table': 'szjilu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TixianQuotaDefault',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('leixing', models.IntegerField(choices=[(1, '打手'), (2, '管事'), (3, '组长'), (4, '考核官'), (5, '打手押金'), (6, '商家余额')], unique=True, verbose_name='用户类型')),
|
||||
('default_quota', models.DecimalField(decimal_places=2, default=20.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='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '默认提现限额',
|
||||
'verbose_name_plural': '默认提现限额',
|
||||
'db_table': 'tixian_quota_default',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Tupianpeizhi',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('tupian', models.CharField(blank=True, max_length=500, null=True, verbose_name='配置图片URL')),
|
||||
('leixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='提现类型1:打手规则图片2:默认头像图片')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
('fangwen_cishu', models.PositiveIntegerField(default=0, verbose_name='访问次数')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '配置图片',
|
||||
'verbose_name_plural': '配置图片',
|
||||
'db_table': 'tupianpeizhi',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='WithdrawConfig',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('mode', models.IntegerField(choices=[(1, '自动提现'), (2, '手动提现')], default=2, verbose_name='提现模式')),
|
||||
('created_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '提现模式配置',
|
||||
'verbose_name_plural': '提现模式配置',
|
||||
'db_table': 'withdraw_config',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShangjiaMoban',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='模板ID')),
|
||||
('yonghu_id', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('leixing_id', models.PositiveIntegerField(db_index=True, verbose_name='商品类型ID')),
|
||||
('moban_jieshao', models.CharField(max_length=500, verbose_name='模板介绍')),
|
||||
('jiage', models.DecimalField(decimal_places=2, help_text='单位:元', max_digits=10, verbose_name='模板价格')),
|
||||
('fabu_shuliang', models.PositiveIntegerField(default=0, verbose_name='发布数量')),
|
||||
('yongjin_qiangdan', models.BooleanField(default=False, verbose_name='是否开启佣金抢单')),
|
||||
('yongjin_jiage', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='佣金价格')),
|
||||
('chenghao_id', models.IntegerField(blank=True, null=True, verbose_name='关联称号ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商家订单模板',
|
||||
'verbose_name_plural': '商家订单模板',
|
||||
'db_table': 'shangjia_moban',
|
||||
'indexes': [models.Index(fields=['yonghu_id', 'leixing_id'], name='shangjia_mo_yonghu__bb287d_idx'), models.Index(fields=['yonghu_id', 'leixing_id', 'id'], name='shangjia_mo_yonghu__4240d0_idx')],
|
||||
'unique_together': {('yonghu_id', 'leixing_id', 'moban_jieshao')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShangjiaLianjie',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='链接ID')),
|
||||
('yonghu_id', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('leixing_id', models.PositiveIntegerField(db_index=True, verbose_name='商品类型ID')),
|
||||
('moban_id', models.PositiveIntegerField(db_index=True, verbose_name='模板ID')),
|
||||
('lianjie', models.CharField(max_length=500, unique=True, verbose_name='链接地址')),
|
||||
('dingdan_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='订单ID')),
|
||||
('is_used', models.BooleanField(db_index=True, default=False, verbose_name='是否已使用')),
|
||||
('shiyongzhe_ip', models.CharField(blank=True, max_length=50, null=True, verbose_name='使用者IP')),
|
||||
('youxiao_shijian', models.DateTimeField(blank=True, null=True, verbose_name='有效截止时间')),
|
||||
('lianjie_token', models.CharField(blank=True, db_index=True, max_length=32, null=True, unique=True, verbose_name='链接Token')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('previous_lianjie_id', models.PositiveIntegerField(blank=True, db_index=True, null=True, verbose_name='上一个链接ID')),
|
||||
('previous_dingdan_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='上一个订单ID')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商家链接',
|
||||
'verbose_name_plural': '商家链接',
|
||||
'db_table': 'shangjia_lianjie',
|
||||
'indexes': [models.Index(fields=['yonghu_id', 'moban_id', 'leixing_id'], name='shangjia_li_yonghu__9f2b25_idx'), models.Index(fields=['lianjie_token'], name='shangjia_li_lianjie_99014c_idx'), models.Index(fields=['dingdan_id'], name='shangjia_li_dingdan_95b682_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PopupImage',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('image_url', models.CharField(max_length=500, verbose_name='图片相对路径')),
|
||||
('text', models.TextField(blank=True, verbose_name='图片上方文字')),
|
||||
('sort_order', models.PositiveIntegerField(default=0, verbose_name='展示顺序')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('popup_config', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='config.popupconfig')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '弹窗图片',
|
||||
'verbose_name_plural': '弹窗图片',
|
||||
'db_table': 'popup_image',
|
||||
'ordering': ['sort_order', 'id'],
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='popupconfig',
|
||||
name='page',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='popups', to='config.popuppage'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DailyPayoutStat',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('date', models.DateField(db_index=True, unique=True, verbose_name='统计日期')),
|
||||
('year', models.PositiveSmallIntegerField(verbose_name='年份')),
|
||||
('month', models.PositiveSmallIntegerField(verbose_name='月份')),
|
||||
('day', models.PositiveSmallIntegerField(verbose_name='日期')),
|
||||
('total_amount', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='出款总额')),
|
||||
('total_count', models.PositiveIntegerField(default=0, verbose_name='出款总笔数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '每日出款统计',
|
||||
'verbose_name_plural': '每日出款统计',
|
||||
'db_table': 'daily_payout_stat',
|
||||
'indexes': [models.Index(fields=['date'], name='daily_payou_date_b534ec_idx'), models.Index(fields=['year', 'month', 'day'], name='daily_payou_year_6376ca_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DailyIncomeStat',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('date', models.DateField(db_index=True, unique=True, verbose_name='统计日期')),
|
||||
('year', models.PositiveSmallIntegerField(verbose_name='年份')),
|
||||
('month', models.PositiveSmallIntegerField(verbose_name='月份')),
|
||||
('day', models.PositiveSmallIntegerField(verbose_name='日期')),
|
||||
('total_amount', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='总收入金额')),
|
||||
('total_count', models.PositiveIntegerField(default=0, verbose_name='总收入笔数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '每日收入统计',
|
||||
'verbose_name_plural': '每日收入统计',
|
||||
'db_table': 'daily_income_stat',
|
||||
'indexes': [models.Index(fields=['date'], name='daily_incom_date_75e6df_idx'), models.Index(fields=['year', 'month', 'day'], name='daily_incom_year_d85d10_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AccountPermission',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('account_id', models.CharField(db_index=True, max_length=11, verbose_name='账号ID')),
|
||||
('permission_code', models.IntegerField(verbose_name='权限代码')),
|
||||
('is_enabled', models.BooleanField(default=False, verbose_name='是否开启')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '账号权限',
|
||||
'verbose_name_plural': '账号权限',
|
||||
'db_table': 'account_permission',
|
||||
'unique_together': {('account_id', 'permission_code')},
|
||||
},
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='popupconfig',
|
||||
unique_together={('page', 'popup_id')},
|
||||
),
|
||||
]
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-27 12:18
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ShangjiaMoban',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='模板ID')),
|
||||
('yonghu_id', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('leixing_id', models.PositiveIntegerField(db_index=True, verbose_name='商品类型ID')),
|
||||
('moban_jieshao', models.CharField(max_length=500, verbose_name='模板介绍')),
|
||||
('jiage', models.DecimalField(decimal_places=2, help_text='单位:元', max_digits=10, verbose_name='模板价格')),
|
||||
('fabu_shuliang', models.PositiveIntegerField(default=0, verbose_name='发布数量')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商家订单模板',
|
||||
'verbose_name_plural': '商家订单模板',
|
||||
'db_table': 'shangjia_moban',
|
||||
'indexes': [models.Index(fields=['yonghu_id', 'leixing_id'], name='shangjia_mo_yonghu__bb287d_idx'), models.Index(fields=['yonghu_id', 'leixing_id', 'id'], name='shangjia_mo_yonghu__4240d0_idx')],
|
||||
'unique_together': {('yonghu_id', 'leixing_id', 'moban_jieshao')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShangjiaLianjie',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='链接ID')),
|
||||
('yonghu_id', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('leixing_id', models.PositiveIntegerField(db_index=True, verbose_name='商品类型ID')),
|
||||
('moban_id', models.PositiveIntegerField(db_index=True, verbose_name='模板ID')),
|
||||
('lianjie', models.CharField(max_length=500, unique=True, verbose_name='链接地址')),
|
||||
('dingdan_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='订单ID')),
|
||||
('is_used', models.BooleanField(db_index=True, default=False, verbose_name='是否已使用')),
|
||||
('shiyongzhe_ip', models.CharField(blank=True, max_length=50, null=True, verbose_name='使用者IP')),
|
||||
('youxiao_shijian', models.DateTimeField(blank=True, null=True, verbose_name='有效截止时间')),
|
||||
('lianjie_token', models.CharField(blank=True, db_index=True, max_length=32, null=True, unique=True, verbose_name='链接Token')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商家链接',
|
||||
'verbose_name_plural': '商家链接',
|
||||
'db_table': 'shangjia_lianjie',
|
||||
'indexes': [models.Index(fields=['yonghu_id', 'moban_id', 'leixing_id'], name='shangjia_li_yonghu__9f2b25_idx'), models.Index(fields=['lianjie_token'], name='shangjia_li_lianjie_99014c_idx'), models.Index(fields=['dingdan_id'], name='shangjia_li_dingdan_95b682_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-03-16 17:04
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0002_shangjiamoban_shangjialianjie'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='tupianpeizhi',
|
||||
name='fangwen_cishu',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='访问次数'),
|
||||
),
|
||||
]
|
||||
@@ -1,28 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-03-20 15:50
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0003_tupianpeizhi_fangwen_cishu'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='TixianQuotaDefault',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False)),
|
||||
('leixing', models.IntegerField(choices=[(1, '打手'), (2, '管事')], unique=True, verbose_name='用户类型')),
|
||||
('default_quota', models.DecimalField(decimal_places=2, default=20.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='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '默认提现限额',
|
||||
'verbose_name_plural': '默认提现限额',
|
||||
'db_table': 'tixian_quota_default',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,76 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-03-24 17:34
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0004_tixianquotadefault'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='OrderTypeMapping',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('partner_club_id', models.CharField(db_index=True, max_length=6, verbose_name='对方俱乐部ID')),
|
||||
('partner_type_id', models.PositiveIntegerField(verbose_name='对方订单类型ID')),
|
||||
('partner_type_name', models.CharField(max_length=100, verbose_name='对方订单类型名称')),
|
||||
('our_type_id', models.PositiveIntegerField(verbose_name='我方订单类型ID')),
|
||||
('our_type_name', models.CharField(max_length=100, verbose_name='我方订单类型名称')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '订单类型映射',
|
||||
'verbose_name_plural': '订单类型映射',
|
||||
'db_table': 'order_type_mapping',
|
||||
'unique_together': {('partner_club_id', 'partner_type_id')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DailyDispatchStat',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('date', models.DateField(db_index=True, verbose_name='统计日期')),
|
||||
('year', models.PositiveSmallIntegerField(verbose_name='年份')),
|
||||
('month', models.PositiveSmallIntegerField(verbose_name='月份')),
|
||||
('day', models.PositiveSmallIntegerField(verbose_name='日期')),
|
||||
('direction', models.PositiveSmallIntegerField(choices=[(1, '我方派单'), (2, '对方派单')], verbose_name='派单方向')),
|
||||
('partner_club_id', models.CharField(db_index=True, max_length=6, verbose_name='对方俱乐部ID')),
|
||||
('dispatch_count', models.PositiveIntegerField(default=0, verbose_name='派单数')),
|
||||
('dispatch_amount', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='派单总额')),
|
||||
('success_count', models.PositiveIntegerField(default=0, verbose_name='成交订单数')),
|
||||
('success_amount', 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='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '每日派单统计',
|
||||
'verbose_name_plural': '每日派单统计',
|
||||
'db_table': 'daily_dispatch_stat',
|
||||
'indexes': [models.Index(fields=['year', 'month', 'day', 'direction', 'partner_club_id'], name='daily_dispa_year_f98f91_idx'), models.Index(fields=['date'], name='daily_dispa_date_9ac7fe_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Club',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('club_id', models.CharField(db_index=True, max_length=6, verbose_name='本俱乐部ID')),
|
||||
('partner_club_id', models.CharField(max_length=6, unique=True, verbose_name='对方俱乐部ID')),
|
||||
('is_interop_enabled', models.BooleanField(default=False, verbose_name='是否开启平台互通')),
|
||||
('is_receive_enabled', models.BooleanField(default=False, verbose_name='是否同意接收对方订单')),
|
||||
('dashou_rate', models.DecimalField(decimal_places=4, default=1.0, max_digits=5, verbose_name='打手分红费率')),
|
||||
('partner_domain', models.URLField(blank=True, verbose_name='对方服务器域名')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '俱乐部',
|
||||
'verbose_name_plural': '俱乐部',
|
||||
'db_table': 'club',
|
||||
'indexes': [models.Index(fields=['club_id'], name='club_club_id_e75636_idx'), models.Index(fields=['partner_club_id'], name='club_partner_b76039_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,52 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-01 09:22
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0005_ordertypemapping_dailydispatchstat_club'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ClubConfig',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('club_id', models.CharField(db_index=True, max_length=6, verbose_name='俱乐部ID')),
|
||||
('club_nickname', models.CharField(blank=True, default='', max_length=50, verbose_name='俱乐部昵称')),
|
||||
('club_avatar', models.CharField(blank=True, default='', max_length=500, verbose_name='俱乐部头像地址')),
|
||||
('backend_domain', models.CharField(blank=True, default='', max_length=200, verbose_name='后台域名')),
|
||||
('chat_api_key', models.CharField(blank=True, default='', max_length=200, verbose_name='聊天API密钥')),
|
||||
('chat_api_id', models.CharField(blank=True, default='', max_length=200, verbose_name='聊天API ID')),
|
||||
('customer_service_api_url', models.CharField(blank=True, default='', max_length=200, verbose_name='客服API URL')),
|
||||
('customer_service_corp_id', models.CharField(blank=True, default='', max_length=100, verbose_name='客服企业ID')),
|
||||
('storage_bucket_domain', models.CharField(blank=True, default='', max_length=500, verbose_name='存储桶域名')),
|
||||
('is_self', models.SmallIntegerField(choices=[(0, '对方'), (1, '我方')], db_index=True, default=0, verbose_name='是否我方俱乐部')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '俱乐部配置',
|
||||
'verbose_name_plural': '俱乐部配置',
|
||||
'db_table': 'club_config',
|
||||
'unique_together': {('club_id',)},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AccountPermission',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('account_id', models.CharField(db_index=True, max_length=11, verbose_name='账号ID')),
|
||||
('permission_code', models.IntegerField(verbose_name='权限代码')),
|
||||
('is_enabled', models.BooleanField(default=False, verbose_name='是否开启')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '账号权限',
|
||||
'verbose_name_plural': '账号权限',
|
||||
'db_table': 'account_permission',
|
||||
'unique_together': {('account_id', 'permission_code')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,28 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-02 13:31
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0006_clubconfig_accountpermission'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='club',
|
||||
name='receive_rate',
|
||||
field=models.DecimalField(decimal_places=4, default=1.0, max_digits=5, verbose_name='接收打手分红费率'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dailydispatchstat',
|
||||
name='claimed_amount',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='抢单总额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dailydispatchstat',
|
||||
name='claimed_count',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='抢单数'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-04 18:51
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0007_club_receive_rate_dailydispatchstat_claimed_amount_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='clubconfig',
|
||||
name='storage_bucket_name',
|
||||
field=models.CharField(blank=True, default='', max_length=100, verbose_name='存储桶名称'),
|
||||
),
|
||||
]
|
||||
@@ -1,53 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-05 13:34
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0008_clubconfig_storage_bucket_name'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='DailyPayoutStat',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('date', models.DateField(db_index=True, unique=True, verbose_name='统计日期')),
|
||||
('year', models.PositiveSmallIntegerField(verbose_name='年份')),
|
||||
('month', models.PositiveSmallIntegerField(verbose_name='月份')),
|
||||
('day', models.PositiveSmallIntegerField(verbose_name='日期')),
|
||||
('total_amount', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='出款总额')),
|
||||
('total_count', models.PositiveIntegerField(default=0, verbose_name='出款总笔数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '每日出款统计',
|
||||
'verbose_name_plural': '每日出款统计',
|
||||
'db_table': 'daily_payout_stat',
|
||||
'indexes': [models.Index(fields=['date'], name='daily_payou_date_b534ec_idx'), models.Index(fields=['year', 'month', 'day'], name='daily_payou_year_6376ca_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DailyIncomeStat',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('date', models.DateField(db_index=True, unique=True, verbose_name='统计日期')),
|
||||
('year', models.PositiveSmallIntegerField(verbose_name='年份')),
|
||||
('month', models.PositiveSmallIntegerField(verbose_name='月份')),
|
||||
('day', models.PositiveSmallIntegerField(verbose_name='日期')),
|
||||
('total_amount', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='总收入金额')),
|
||||
('total_count', models.PositiveIntegerField(default=0, verbose_name='总收入笔数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '每日收入统计',
|
||||
'verbose_name_plural': '每日收入统计',
|
||||
'db_table': 'daily_income_stat',
|
||||
'indexes': [models.Index(fields=['date'], name='daily_incom_date_75e6df_idx'), models.Index(fields=['year', 'month', 'day'], name='daily_incom_year_d85d10_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,84 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-22 11:24
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0009_dailypayoutstat_dailyincomestat'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='PopupConfig',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('popup_id', models.CharField(max_length=50, verbose_name='弹窗唯一ID')),
|
||||
('title', models.CharField(blank=True, max_length=200, verbose_name='标题(后台用)')),
|
||||
('description', models.TextField(blank=True, verbose_name='描述(后台用)')),
|
||||
('strategy_type', models.CharField(choices=[('once', '仅一次'), ('daily', '每日'), ('weekly', '每周'), ('monthly', '每月'), ('yearly', '每年'), ('always', '始终'), ('count', '周期内次数限制')], default='once', max_length=20)),
|
||||
('max_count', models.PositiveIntegerField(default=1, verbose_name='周期内最大展示次数')),
|
||||
('reset_interval', models.CharField(blank=True, choices=[('day', '天'), ('week', '周'), ('month', '月'), ('year', '年')], max_length=20, verbose_name='重置周期(count类型时使用)')),
|
||||
('duration', models.PositiveIntegerField(default=0, verbose_name='强制阅读秒数(0=无强制)')),
|
||||
('force_even_muted', models.BooleanField(default=False, verbose_name='强制弹出(忽略用户今日屏蔽)')),
|
||||
('sort_order', models.PositiveIntegerField(default=0, verbose_name='展示顺序')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='是否启用')),
|
||||
('start_time', models.DateTimeField(blank=True, null=True, verbose_name='生效开始时间')),
|
||||
('end_time', models.DateTimeField(blank=True, null=True, verbose_name='生效结束时间')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '弹窗配置',
|
||||
'verbose_name_plural': '弹窗配置',
|
||||
'db_table': 'popup_config',
|
||||
'ordering': ['sort_order', 'id'],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PopupPage',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('page_key', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='页面标识')),
|
||||
('name', models.CharField(max_length=100, verbose_name='页面名称')),
|
||||
('description', models.TextField(blank=True, verbose_name='描述')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='是否启用')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('updated_at', models.DateTimeField(auto_now=True)),
|
||||
('ignore_user_mute', models.BooleanField(default=False, verbose_name='忽略用户今日屏蔽')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '弹窗页面',
|
||||
'verbose_name_plural': '弹窗页面',
|
||||
'db_table': 'popup_page',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PopupImage',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('image_url', models.CharField(max_length=500, verbose_name='图片相对路径')),
|
||||
('text', models.TextField(blank=True, verbose_name='图片上方文字')),
|
||||
('sort_order', models.PositiveIntegerField(default=0, verbose_name='展示顺序')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True)),
|
||||
('popup_config', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='images', to='config.popupconfig')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '弹窗图片',
|
||||
'verbose_name_plural': '弹窗图片',
|
||||
'db_table': 'popup_image',
|
||||
'ordering': ['sort_order', 'id'],
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='popupconfig',
|
||||
name='page',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='popups', to='config.popuppage'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='popupconfig',
|
||||
unique_together={('page', 'popup_id')},
|
||||
),
|
||||
]
|
||||
@@ -1,27 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-25 12:05
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0010_popupconfig_popuppage_popupimage_popupconfig_page_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='WithdrawConfig',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('mode', models.IntegerField(choices=[(1, '自动提现'), (2, '手动提现')], default=2, verbose_name='提现模式')),
|
||||
('created_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '提现模式配置',
|
||||
'verbose_name_plural': '提现模式配置',
|
||||
'db_table': 'withdraw_config',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,28 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-17 18:57
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0011_withdrawconfig'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='shangjiamoban',
|
||||
name='chenghao_id',
|
||||
field=models.IntegerField(blank=True, null=True, verbose_name='关联称号ID'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangjiamoban',
|
||||
name='yongjin_jiage',
|
||||
field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='佣金价格'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangjiamoban',
|
||||
name='yongjin_qiangdan',
|
||||
field=models.BooleanField(default=False, verbose_name='是否开启佣金抢单'),
|
||||
),
|
||||
]
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-26 03:25
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0012_shangjiamoban_chenghao_id_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='shangjialianjie',
|
||||
name='previous_dingdan_id',
|
||||
field=models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='上一个订单ID'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangjialianjie',
|
||||
name='previous_lianjie_id',
|
||||
field=models.PositiveIntegerField(blank=True, db_index=True, null=True, verbose_name='上一个链接ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,30 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-06-15 01:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('config', '0013_shangjialianjie_previous_dingdan_id_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.DeleteModel(
|
||||
name='Club',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='ClubConfig',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='DailyDispatchStat',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='OrderTypeMapping',
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='tixianquotadefault',
|
||||
name='leixing',
|
||||
field=models.IntegerField(choices=[(1, '打手'), (2, '管事'), (3, '组长'), (4, '考核官'), (5, '打手押金'), (6, '商家余额')], unique=True, verbose_name='用户类型'),
|
||||
),
|
||||
]
|
||||
@@ -1,8 +1,8 @@
|
||||
# Generated by Django 6.0.5 on 2026-06-13 11:43
|
||||
# Generated by Django 4.2.27 on 2026-06-17 01:34
|
||||
|
||||
import datetime
|
||||
import gvsdsdk.models
|
||||
from django.db import migrations, models
|
||||
import gvsdsdk.models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
@@ -13,12 +13,40 @@ class Migration(migrations.Migration):
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='User',
|
||||
fields=[
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', 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=200, 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='最后登录')),
|
||||
('IsStaff', models.BooleanField(db_column='IsStaff', default=False, verbose_name='是否员工')),
|
||||
('IsSuperuser', models.BooleanField(db_column='IsSuperuser', default=False, verbose_name='是否超级用户')),
|
||||
('YonghuID', models.CharField(blank=True, db_column='YonghuID', db_index=True, max_length=7, null=True, unique=True, verbose_name='用户业务ID')),
|
||||
('UserAvatar', models.CharField(blank=True, db_column='UserAvatar', default='a_long/morentouxiang.jpg', max_length=500, null=True, verbose_name='头像')),
|
||||
('UserType', models.CharField(choices=[('normal', '普通用户'), ('dashou', '打手'), ('shop', '商家'), ('guanshi', '管事'), ('admin', '管理员'), ('kefu', '客服')], db_column='UserType', default='normal', max_length=10, verbose_name='用户类型')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户',
|
||||
'verbose_name_plural': '用户',
|
||||
'db_table': 'User',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AccountActivation',
|
||||
fields=[
|
||||
('AccountActivationCode', gvsdsdk.models.FixedBinaryField(binary_length=6, db_column='AccountActivationCode', max_length=6, primary_key=True, serialize=False)),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow)),
|
||||
('AccountActivationCode', gvsdsdk.models.FixedBinaryField(binary_length=6, db_column='AccountActivationCode', max_length=6, primary_key=True, serialize=False, verbose_name='激活码')),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', verbose_name='用户UUID')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '账户激活',
|
||||
@@ -30,13 +58,13 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='EphemeralToken',
|
||||
fields=[
|
||||
('ELTUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='ELTUUID', primary_key=True, serialize=False)),
|
||||
('ELTUserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='ELTUserUUID', db_index=True)),
|
||||
('ELTCreateTime', models.DateTimeField(db_column='ELTCreateTime', default=datetime.datetime.utcnow)),
|
||||
('ELTEndTime', models.DateTimeField(db_column='ELTEndTime', default=gvsdsdk.models._elt_end_time_default)),
|
||||
('ELTType', models.SmallIntegerField(db_column='ELTType', default=0)),
|
||||
('ELTAllowIP', models.JSONField(db_column='ELTAllowIP', default=list)),
|
||||
('ELTStatus', models.SmallIntegerField(db_column='ELTStatus', db_index=True, default=1)),
|
||||
('ELTUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='ELTUUID', primary_key=True, serialize=False, verbose_name='令牌UUID')),
|
||||
('ELTUserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='ELTUserUUID', db_index=True, verbose_name='用户UUID')),
|
||||
('ELTCreateTime', models.DateTimeField(db_column='ELTCreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
('ELTEndTime', models.DateTimeField(db_column='ELTEndTime', default=gvsdsdk.models._EltEndTimeDefault, verbose_name='过期时间')),
|
||||
('ELTType', models.SmallIntegerField(db_column='ELTType', default=0, verbose_name='令牌类型')),
|
||||
('ELTAllowIP', models.JSONField(db_column='ELTAllowIP', default=list, verbose_name='允许IP')),
|
||||
('ELTStatus', models.SmallIntegerField(db_column='ELTStatus', db_index=True, default=1, verbose_name='状态')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '临时令牌',
|
||||
@@ -48,8 +76,8 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='Password',
|
||||
fields=[
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', primary_key=True, serialize=False)),
|
||||
('Password', models.CharField(db_column='Password', max_length=1024)),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', primary_key=True, serialize=False, verbose_name='用户UUID')),
|
||||
('Password', models.CharField(db_column='Password', max_length=1024, verbose_name='密码哈希')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '密码',
|
||||
@@ -61,12 +89,14 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='Permission',
|
||||
fields=[
|
||||
('PermUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PermUUID', primary_key=True, serialize=False)),
|
||||
('PermName', models.CharField(db_column='PermName', max_length=128)),
|
||||
('PermCode', models.CharField(db_column='PermCode', max_length=128)),
|
||||
('RoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleUUID')),
|
||||
('PermStatus', models.SmallIntegerField(db_column='PermStatus', default=1)),
|
||||
('PermDesc', models.CharField(db_column='PermDesc', default='', max_length=512)),
|
||||
('PermUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PermUUID', primary_key=True, serialize=False, verbose_name='权限UUID')),
|
||||
('TenantUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='TenantUUID', verbose_name='租户UUID')),
|
||||
('PermName', models.CharField(db_column='PermName', max_length=128, verbose_name='权限名称')),
|
||||
('PermCode', models.CharField(db_column='PermCode', max_length=128, verbose_name='权限键')),
|
||||
('PermCategory', models.CharField(db_column='PermCategory', default='', max_length=64, verbose_name='权限分类')),
|
||||
('PermStatus', models.SmallIntegerField(db_column='PermStatus', default=1, verbose_name='是否启用')),
|
||||
('PermDesc', models.CharField(db_column='PermDesc', default='', max_length=512, verbose_name='描述')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '权限',
|
||||
@@ -75,16 +105,72 @@ class Migration(migrations.Migration):
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Position',
|
||||
fields=[
|
||||
('PositionUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PositionUUID', primary_key=True, serialize=False, verbose_name='职务UUID')),
|
||||
('TenantUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='TenantUUID', verbose_name='租户UUID')),
|
||||
('PositionName', models.CharField(db_column='PositionName', max_length=128, verbose_name='职务名称')),
|
||||
('PositionCode', models.CharField(db_column='PositionCode', default='', max_length=64, verbose_name='职务编码')),
|
||||
('PositionLevel', models.SmallIntegerField(db_column='PositionLevel', default=0, verbose_name='职务级别')),
|
||||
('PositionStatus', models.SmallIntegerField(db_column='PositionStatus', default=1, verbose_name='状态')),
|
||||
('PositionDesc', models.CharField(db_column='PositionDesc', default='', max_length=512, verbose_name='描述')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
('UpdateTime', models.DateTimeField(db_column='UpdateTime', default=datetime.datetime.utcnow, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '人事职务标签',
|
||||
'verbose_name_plural': '人事职务标签',
|
||||
'db_table': 'Position',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PositionTemplate',
|
||||
fields=[
|
||||
('PositionTemplateUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PositionTemplateUUID', primary_key=True, serialize=False, verbose_name='岗位模板UUID')),
|
||||
('TenantUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='TenantUUID', verbose_name='租户UUID')),
|
||||
('TemplateName', models.CharField(db_column='TemplateName', max_length=128, verbose_name='模板名称')),
|
||||
('TemplateCode', models.CharField(db_column='TemplateCode', default='', max_length=64, verbose_name='模板编码')),
|
||||
('TemplateStatus', models.SmallIntegerField(db_column='TemplateStatus', default=1, verbose_name='模板状态')),
|
||||
('TemplateDesc', models.CharField(db_column='TemplateDesc', default='', max_length=512, verbose_name='模板描述')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
('UpdateTime', models.DateTimeField(db_column='UpdateTime', default=datetime.datetime.utcnow, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '岗位模板',
|
||||
'verbose_name_plural': '岗位模板',
|
||||
'db_table': 'PositionTemplate',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='PositionTemplatePermission',
|
||||
fields=[
|
||||
('PTPermUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PTPermUUID', primary_key=True, serialize=False, verbose_name='关联UUID')),
|
||||
('PositionTemplateUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PositionTemplateUUID', verbose_name='岗位模板UUID')),
|
||||
('PermUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PermUUID', verbose_name='权限UUID')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '岗位模板权限关联',
|
||||
'verbose_name_plural': '岗位模板权限关联',
|
||||
'db_table': 'PositionTemplatePermission',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Role',
|
||||
fields=[
|
||||
('RoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleUUID', primary_key=True, serialize=False)),
|
||||
('CompanyUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='CompanyUUID')),
|
||||
('DeptUUID', gvsdsdk.models.UUIDField(binary_length=16, blank=True, db_column='DeptUUID', null=True)),
|
||||
('RoleName', models.CharField(db_column='RoleName', max_length=128)),
|
||||
('RoleType', models.SmallIntegerField(db_column='RoleType', default=2)),
|
||||
('RoleStatus', models.SmallIntegerField(db_column='RoleStatus', default=1)),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow)),
|
||||
('RoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleUUID', primary_key=True, serialize=False, verbose_name='角色UUID')),
|
||||
('TenantUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='TenantUUID', verbose_name='租户UUID')),
|
||||
('RoleName', models.CharField(db_column='RoleName', max_length=128, verbose_name='角色名称')),
|
||||
('RoleType', models.SmallIntegerField(db_column='RoleType', default=2, verbose_name='角色类型')),
|
||||
('RoleStatus', models.SmallIntegerField(db_column='RoleStatus', default=1, verbose_name='角色状态')),
|
||||
('AssignScope', models.SmallIntegerField(db_column='AssignScope', default=0, verbose_name='分配可见范围')),
|
||||
('AssignScopeUUID', gvsdsdk.models.UUIDField(binary_length=16, blank=True, db_column='AssignScopeUUID', null=True, verbose_name='分配范围UUID')),
|
||||
('RoleDesc', models.CharField(db_column='RoleDesc', default='', max_length=512, verbose_name='角色描述')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '角色',
|
||||
@@ -94,55 +180,69 @@ class Migration(migrations.Migration):
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RoleDept',
|
||||
name='RolePermission',
|
||||
fields=[
|
||||
('RoleDeptUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleDeptUUID', primary_key=True, serialize=False)),
|
||||
('RoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleUUID')),
|
||||
('DeptUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='DeptUUID')),
|
||||
('IsMainDept', models.SmallIntegerField(db_column='IsMainDept', default=1)),
|
||||
('RolePermUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RolePermUUID', primary_key=True, serialize=False, verbose_name='关联UUID')),
|
||||
('RoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleUUID', verbose_name='角色UUID')),
|
||||
('PermUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PermUUID', verbose_name='权限UUID')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '角色部门关联',
|
||||
'verbose_name_plural': '角色部门关联',
|
||||
'db_table': 'RoleDept',
|
||||
'verbose_name': '角色权限关联',
|
||||
'verbose_name_plural': '角色权限关联',
|
||||
'db_table': 'RolePermission',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='User',
|
||||
name='RoleShop',
|
||||
fields=[
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', primary_key=True, serialize=False)),
|
||||
('UserName', models.CharField(db_column='UserName', max_length=256, unique=True)),
|
||||
('UserPassword', models.CharField(db_column='UserPassword', default='', max_length=60)),
|
||||
('UserPositionStatus', models.SmallIntegerField(db_column='UserPositionStatus', default=0)),
|
||||
('UserPersonalSignature', models.CharField(db_column='UserPersonalSignature', default='', max_length=1024)),
|
||||
('UserEmail', models.CharField(db_column='UserEmail', default='', max_length=256)),
|
||||
('UserEmailVerify', models.SmallIntegerField(db_column='UserEmailVerify', default=0)),
|
||||
('UserAccountLicense', models.SmallIntegerField(db_column='UserAccountLicense', default=1)),
|
||||
('UserGender', models.SmallIntegerField(db_column='UserGender', default=-1)),
|
||||
('UserTele', models.CharField(blank=True, db_column='UserTele', max_length=16, null=True)),
|
||||
('UserCreateTime', models.DateTimeField(db_column='UserCreateTime', default=datetime.datetime.utcnow)),
|
||||
('UserLastLoginDate', models.DateTimeField(db_column='UserLastLoginDate', default=datetime.datetime.utcnow)),
|
||||
('IsStaff', models.BooleanField(db_column='IsStaff', default=False)),
|
||||
('IsSuperuser', models.BooleanField(db_column='IsSuperuser', default=False)),
|
||||
('RoleShopUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleShopUUID', primary_key=True, serialize=False, verbose_name='关联UUID')),
|
||||
('RoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleUUID', verbose_name='角色UUID')),
|
||||
('ShopUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='ShopUUID', verbose_name='商铺UUID')),
|
||||
('IsMainShop', models.SmallIntegerField(db_column='IsMainShop', default=0, verbose_name='主商铺')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户',
|
||||
'verbose_name_plural': '用户',
|
||||
'db_table': 'User',
|
||||
'verbose_name': '角色商铺关联',
|
||||
'verbose_name_plural': '角色商铺关联',
|
||||
'db_table': 'RoleShop',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Shop',
|
||||
fields=[
|
||||
('ShopUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='ShopUUID', primary_key=True, serialize=False, verbose_name='商铺UUID')),
|
||||
('CompanyUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='CompanyUUID', verbose_name='公司UUID')),
|
||||
('ShopName', models.CharField(db_column='ShopName', max_length=128, verbose_name='商铺名称')),
|
||||
('ShopCode', models.CharField(db_column='ShopCode', default='', max_length=64, verbose_name='商铺编码')),
|
||||
('ShopType', models.SmallIntegerField(db_column='ShopType', default=0, verbose_name='商铺类型')),
|
||||
('ShopStatus', models.SmallIntegerField(db_column='ShopStatus', default=1, verbose_name='商铺状态')),
|
||||
('ShopAddress', models.CharField(db_column='ShopAddress', default='', max_length=512, verbose_name='商铺地址')),
|
||||
('ShopContact', models.CharField(db_column='ShopContact', default='', max_length=128, verbose_name='联系人')),
|
||||
('ShopPhone', models.CharField(db_column='ShopPhone', default='', max_length=32, verbose_name='联系电话')),
|
||||
('ShopDesc', models.CharField(db_column='ShopDesc', default='', max_length=512, verbose_name='描述')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
('UpdateTime', models.DateTimeField(db_column='UpdateTime', default=datetime.datetime.utcnow, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商铺',
|
||||
'verbose_name_plural': '商铺',
|
||||
'db_table': 'Shop',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='User2FA',
|
||||
fields=[
|
||||
('User2FAUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='User2FAUUID', primary_key=True, serialize=False)),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', db_index=True)),
|
||||
('SecretKey', models.CharField(db_column='SecretKey', max_length=64)),
|
||||
('IsEnabled', models.SmallIntegerField(db_column='IsEnabled', default=0)),
|
||||
('Verified', models.SmallIntegerField(db_column='Verified', default=0)),
|
||||
('LastUsedAt', models.DateTimeField(blank=True, db_column='LastUsedAt', null=True)),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow)),
|
||||
('User2FAUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='User2FAUUID', primary_key=True, serialize=False, verbose_name='2FA UUID')),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', db_index=True, verbose_name='用户UUID')),
|
||||
('SecretKey', models.CharField(db_column='SecretKey', max_length=64, verbose_name='密钥')),
|
||||
('IsEnabled', models.SmallIntegerField(db_column='IsEnabled', default=0, verbose_name='是否启用')),
|
||||
('Verified', models.SmallIntegerField(db_column='Verified', default=0, verbose_name='已验证')),
|
||||
('LastUsedAt', models.DateTimeField(blank=True, db_column='LastUsedAt', null=True, verbose_name='最后使用')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '双因素认证',
|
||||
@@ -154,9 +254,9 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='UserABAC',
|
||||
fields=[
|
||||
('UserABACUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserABACUUID', primary_key=True, serialize=False)),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID')),
|
||||
('HierarchicalPermissionIdentifiers', models.CharField(db_column='HierarchicalPermissionIdentifiers', max_length=256)),
|
||||
('UserABACUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserABACUUID', primary_key=True, serialize=False, verbose_name='ABAC UUID')),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', verbose_name='用户UUID')),
|
||||
('HierarchicalPermissionIdentifiers', models.CharField(db_column='HierarchicalPermissionIdentifiers', max_length=256, verbose_name='层级权限标识')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户ABAC',
|
||||
@@ -168,10 +268,10 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='UserAvatar',
|
||||
fields=[
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', primary_key=True, serialize=False)),
|
||||
('UserAvatar', models.BinaryField(db_column='UserAvatar', editable=True)),
|
||||
('AvatarUploadTime', models.DateTimeField(db_column='AvatarUploadTime', default=datetime.datetime.utcnow)),
|
||||
('AvatarFileType', models.CharField(db_column='AvatarFileType', default='png', max_length=16)),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', primary_key=True, serialize=False, verbose_name='用户UUID')),
|
||||
('UserAvatar', models.BinaryField(db_column='UserAvatar', editable=True, verbose_name='头像数据')),
|
||||
('AvatarUploadTime', models.DateTimeField(db_column='AvatarUploadTime', default=datetime.datetime.utcnow, verbose_name='上传时间')),
|
||||
('AvatarFileType', models.CharField(db_column='AvatarFileType', default='png', max_length=16, verbose_name='文件类型')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户头像',
|
||||
@@ -180,16 +280,33 @@ class Migration(migrations.Migration):
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserDept',
|
||||
fields=[
|
||||
('UserDeptUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserDeptUUID', primary_key=True, serialize=False, verbose_name='关联UUID')),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', verbose_name='用户UUID')),
|
||||
('DeptUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='DeptUUID', verbose_name='部门UUID')),
|
||||
('PositionUUID', gvsdsdk.models.UUIDField(binary_length=16, blank=True, db_column='PositionUUID', null=True, verbose_name='职务标签UUID')),
|
||||
('IsMainDept', models.SmallIntegerField(db_column='IsMainDept', default=1, verbose_name='是否主部门')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '员工部门关联',
|
||||
'verbose_name_plural': '员工部门关联',
|
||||
'db_table': 'UserDept',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserLoginLog',
|
||||
fields=[
|
||||
('LogUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='LogUUID', primary_key=True, serialize=False)),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', db_index=True)),
|
||||
('LoginIP', models.CharField(db_column='LoginIP', max_length=39)),
|
||||
('LoginPlatform', models.CharField(db_column='LoginPlatform', max_length=32)),
|
||||
('LoginStatus', models.SmallIntegerField(db_column='LoginStatus')),
|
||||
('LoginTime', models.DateTimeField(db_column='LoginTime', default=datetime.datetime.utcnow)),
|
||||
('UserAgent', models.CharField(db_column='UserAgent', default='', max_length=512)),
|
||||
('LogUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='LogUUID', primary_key=True, serialize=False, verbose_name='日志UUID')),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', db_index=True, verbose_name='用户UUID')),
|
||||
('LoginIP', models.CharField(db_column='LoginIP', max_length=39, verbose_name='登录IP')),
|
||||
('LoginPlatform', models.CharField(db_column='LoginPlatform', max_length=32, verbose_name='登录平台')),
|
||||
('LoginStatus', models.SmallIntegerField(db_column='LoginStatus', verbose_name='登录状态')),
|
||||
('LoginTime', models.DateTimeField(db_column='LoginTime', default=datetime.datetime.utcnow, verbose_name='登录时间')),
|
||||
('UserAgent', models.CharField(db_column='UserAgent', default='', max_length=512, verbose_name='用户代理')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '登录日志',
|
||||
@@ -201,10 +318,10 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='UserPending2FA',
|
||||
fields=[
|
||||
('PendingUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PendingUUID', primary_key=True, serialize=False)),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', unique=True)),
|
||||
('SecretKey', models.CharField(db_column='SecretKey', max_length=64)),
|
||||
('ExpireAt', models.DateTimeField(db_column='ExpireAt')),
|
||||
('PendingUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PendingUUID', primary_key=True, serialize=False, verbose_name='待确认UUID')),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', unique=True, verbose_name='用户UUID')),
|
||||
('SecretKey', models.CharField(db_column='SecretKey', max_length=64, verbose_name='密钥')),
|
||||
('ExpireAt', models.DateTimeField(db_column='ExpireAt', verbose_name='过期时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '2FA待确认',
|
||||
@@ -216,10 +333,11 @@ class Migration(migrations.Migration):
|
||||
migrations.CreateModel(
|
||||
name='UserRole',
|
||||
fields=[
|
||||
('UserRoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserRoleUUID', primary_key=True, serialize=False)),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID')),
|
||||
('RoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleUUID')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow)),
|
||||
('UserRoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserRoleUUID', primary_key=True, serialize=False, verbose_name='关联UUID')),
|
||||
('UserUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='UserUUID', verbose_name='用户UUID')),
|
||||
('RoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleUUID', verbose_name='角色UUID')),
|
||||
('CompanyUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='CompanyUUID', verbose_name='公司UUID')),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户角色关联',
|
||||
|
||||
@@ -1,90 +0,0 @@
|
||||
# Generated by Django 6.0.5 on 2026-06-13 12:29
|
||||
|
||||
import datetime
|
||||
import gvsdsdk.models
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('gvsdsdk', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Position',
|
||||
fields=[
|
||||
('PositionUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PositionUUID', primary_key=True, serialize=False)),
|
||||
('CompanyUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='CompanyUUID')),
|
||||
('PositionName', models.CharField(db_column='PositionName', max_length=128)),
|
||||
('PositionCode', models.CharField(db_column='PositionCode', default='', max_length=64)),
|
||||
('PositionLevel', models.SmallIntegerField(db_column='PositionLevel', default=0)),
|
||||
('PositionStatus', models.SmallIntegerField(db_column='PositionStatus', default=1)),
|
||||
('PositionDesc', models.CharField(db_column='PositionDesc', default='', max_length=512)),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow)),
|
||||
('UpdateTime', models.DateTimeField(db_column='UpdateTime', default=datetime.datetime.utcnow)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '职务',
|
||||
'verbose_name_plural': '职务',
|
||||
'db_table': 'Position',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RolePosition',
|
||||
fields=[
|
||||
('RolePositionUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RolePositionUUID', primary_key=True, serialize=False)),
|
||||
('RoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleUUID')),
|
||||
('PositionUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='PositionUUID')),
|
||||
('IsMainPosition', models.SmallIntegerField(db_column='IsMainPosition', default=0)),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '角色职务关联',
|
||||
'verbose_name_plural': '角色职务关联',
|
||||
'db_table': 'RolePosition',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RoleShop',
|
||||
fields=[
|
||||
('RoleShopUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleShopUUID', primary_key=True, serialize=False)),
|
||||
('RoleUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='RoleUUID')),
|
||||
('ShopUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='ShopUUID')),
|
||||
('IsMainShop', models.SmallIntegerField(db_column='IsMainShop', default=0)),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '角色商铺关联',
|
||||
'verbose_name_plural': '角色商铺关联',
|
||||
'db_table': 'RoleShop',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Shop',
|
||||
fields=[
|
||||
('ShopUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='ShopUUID', primary_key=True, serialize=False)),
|
||||
('CompanyUUID', gvsdsdk.models.UUIDField(binary_length=16, db_column='CompanyUUID')),
|
||||
('ShopName', models.CharField(db_column='ShopName', max_length=128)),
|
||||
('ShopCode', models.CharField(db_column='ShopCode', default='', max_length=64)),
|
||||
('ShopType', models.SmallIntegerField(db_column='ShopType', default=0)),
|
||||
('ShopStatus', models.SmallIntegerField(db_column='ShopStatus', default=1)),
|
||||
('ShopAddress', models.CharField(db_column='ShopAddress', default='', max_length=512)),
|
||||
('ShopContact', models.CharField(db_column='ShopContact', default='', max_length=128)),
|
||||
('ShopPhone', models.CharField(db_column='ShopPhone', default='', max_length=32)),
|
||||
('ShopDesc', models.CharField(db_column='ShopDesc', default='', max_length=512)),
|
||||
('CreateTime', models.DateTimeField(db_column='CreateTime', default=datetime.datetime.utcnow)),
|
||||
('UpdateTime', models.DateTimeField(db_column='UpdateTime', default=datetime.datetime.utcnow)),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商铺',
|
||||
'verbose_name_plural': '商铺',
|
||||
'db_table': 'Shop',
|
||||
'managed': True,
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -294,62 +294,6 @@ class _CastJsonExpression:
|
||||
return f'CastJsonExpr({self.field_name}[{self.key!r}]->{type_name})'
|
||||
|
||||
|
||||
class ForeignKeyIdDescriptor:
|
||||
"""FK 字段描述符:类级别访问返回 FieldExpression,实例级别访问/设置委托给原始 Django 字段。"""
|
||||
def __init__(self, fk_name):
|
||||
self.fk_name = fk_name
|
||||
self.id_attr = fk_name + '_id'
|
||||
self._original_field = None # 延迟绑定原始 Django 字段
|
||||
|
||||
def _get_original_field(self, owner):
|
||||
if self._original_field is None:
|
||||
try:
|
||||
self._original_field = owner._meta.get_field(self.fk_name)
|
||||
except Exception:
|
||||
pass
|
||||
return self._original_field
|
||||
|
||||
def __get__(self, obj, objtype=None):
|
||||
if obj is None:
|
||||
return FieldExpression(objtype, self.id_attr)
|
||||
return getattr(obj, self.id_attr)
|
||||
|
||||
def __set__(self, obj, value):
|
||||
# 直接写入实例 __dict__,避免触发描述符递归
|
||||
obj.__dict__[self.id_attr] = value
|
||||
|
||||
|
||||
class FieldExpressionDescriptor:
|
||||
"""普通字段描述符:类级别访问返回 FieldExpression,实例级别访问/设置委托给原始 Django 字段。"""
|
||||
def __init__(self, field_name):
|
||||
self.field_name = field_name
|
||||
self._original_field = None # 延迟绑定原始 Django 字段
|
||||
|
||||
def _get_original_field(self, owner):
|
||||
if self._original_field is None:
|
||||
try:
|
||||
self._original_field = owner._meta.get_field(self.field_name)
|
||||
except Exception:
|
||||
pass
|
||||
return self._original_field
|
||||
|
||||
def __get__(self, obj, objtype=None):
|
||||
if obj is None:
|
||||
return FieldExpression(objtype, self.field_name)
|
||||
# 实例级别:从 __dict__ 获取,或让 Django 字段描述符处理
|
||||
if self.field_name in obj.__dict__:
|
||||
return obj.__dict__[self.field_name]
|
||||
# 委托给原始 Django 字段
|
||||
orig = self._get_original_field(objtype)
|
||||
if orig is not None:
|
||||
return orig.__get__(obj, objtype)
|
||||
return getattr(obj, self.field_name)
|
||||
|
||||
def __set__(self, obj, value):
|
||||
# 直接写入实例 __dict__,避免触发描述符递归
|
||||
obj.__dict__[self.field_name] = value
|
||||
|
||||
|
||||
class QModelBase(models.base.ModelBase):
|
||||
def __new__(mcs, name, bases, namespace, **kwargs):
|
||||
# 不再强制设置 db_column —— Django 会自动处理
|
||||
|
||||
@@ -172,11 +172,16 @@ class UserManager(BaseUserManager):
|
||||
|
||||
# === 用户表 ===
|
||||
class User(QModel):
|
||||
"""用户表——系统核心身份模型(映射 SAAS 主库 User 表)"""
|
||||
"""用户表——系统核心身份模型
|
||||
|
||||
去远程化后存储在本地数据库,作为 AUTH_USER_MODEL。
|
||||
在 SAAS 主库字段基础上增加本地业务字段(YonghuID/UserAvatar/UserType)。
|
||||
敏感数据(OpenID/支付信息)存放在 users.UserSensitiveData 表。
|
||||
"""
|
||||
|
||||
UserUUID = UUIDField(primary_key=True, db_column='UserUUID', verbose_name='用户UUID')
|
||||
UserName = models.CharField(max_length=256, unique=True, db_column='UserName', verbose_name='用户名')
|
||||
UserPassword = models.CharField(max_length=60, default='', db_column='UserPassword', verbose_name='密码')
|
||||
UserPassword = models.CharField(max_length=200, default='', db_column='UserPassword', verbose_name='密码')
|
||||
UserPositionStatus = models.SmallIntegerField(default=0, db_column='UserPositionStatus', verbose_name='职位状态')
|
||||
UserPersonalSignature = models.CharField(max_length=1024, default='', db_column='UserPersonalSignature', verbose_name='个人签名')
|
||||
UserEmail = models.CharField(max_length=256, default='', db_column='UserEmail', verbose_name='邮箱')
|
||||
@@ -189,17 +194,261 @@ class User(QModel):
|
||||
IsStaff = models.BooleanField(default=False, db_column='IsStaff', verbose_name='是否员工')
|
||||
IsSuperuser = models.BooleanField(default=False, db_column='IsSuperuser', verbose_name='是否超级用户')
|
||||
|
||||
# === 本地业务字段(去远程化新增) ===
|
||||
YonghuID = models.CharField(max_length=7, unique=True, null=True, blank=True, db_index=True, db_column='YonghuID', verbose_name='用户业务ID')
|
||||
UserAvatar = models.CharField(max_length=500, null=True, blank=True, default='a_long/morentouxiang.jpg', db_column='UserAvatar', verbose_name='头像')
|
||||
UserType = models.CharField(
|
||||
max_length=10,
|
||||
choices=[
|
||||
('normal', '普通用户'),
|
||||
('dashou', '打手'),
|
||||
('shop', '商家'),
|
||||
('guanshi', '管事'),
|
||||
('admin', '管理员'),
|
||||
('kefu', '客服'),
|
||||
],
|
||||
default='normal', db_column='UserType', verbose_name='用户类型'
|
||||
)
|
||||
|
||||
objects = UserManager()
|
||||
|
||||
# Django auth 框架要求
|
||||
USERNAME_FIELD = 'YonghuID'
|
||||
REQUIRED_FIELDS = ['UserName']
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
managed = True
|
||||
app_label = 'gvsdsdk'
|
||||
db_table = 'User'
|
||||
verbose_name = '用户'
|
||||
verbose_name_plural = '用户'
|
||||
|
||||
def __str__(self):
|
||||
return self.UserName
|
||||
return self.YonghuID or self.UserName
|
||||
|
||||
# === 兼容属性(snake_case → PascalCase 映射,保持现有代码兼容) ===
|
||||
|
||||
@property
|
||||
def yonghuid(self):
|
||||
"""兼容 UserMain.yonghuid"""
|
||||
return self.YonghuID
|
||||
|
||||
@yonghuid.setter
|
||||
def yonghuid(self, value):
|
||||
self.YonghuID = value
|
||||
|
||||
@property
|
||||
def avatar(self):
|
||||
"""兼容 UserMain.avatar"""
|
||||
return self.UserAvatar
|
||||
|
||||
@avatar.setter
|
||||
def avatar(self, value):
|
||||
self.UserAvatar = value
|
||||
|
||||
@property
|
||||
def user_type(self):
|
||||
"""兼容 UserMain.user_type"""
|
||||
return self.UserType
|
||||
|
||||
@user_type.setter
|
||||
def user_type(self, value):
|
||||
self.UserType = value
|
||||
|
||||
@property
|
||||
def phone(self):
|
||||
"""兼容 UserMain.phone"""
|
||||
return self.UserTele
|
||||
|
||||
@phone.setter
|
||||
def phone(self, value):
|
||||
self.UserTele = value
|
||||
|
||||
@property
|
||||
def openid(self):
|
||||
"""兼容 UserMain.openid —— 从 UserSensitiveData 延迟加载"""
|
||||
if hasattr(self, '_openid_cache'):
|
||||
return self._openid_cache
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
self._openid_cache = sd.OpenID if sd else None
|
||||
except Exception:
|
||||
self._openid_cache = None
|
||||
return self._openid_cache
|
||||
|
||||
@openid.setter
|
||||
def openid(self, value):
|
||||
"""设置 openid —— 写入 UserSensitiveData"""
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'OpenID': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.OpenID = value or ''
|
||||
sd.save(update_fields=['OpenID'])
|
||||
self._openid_cache = value
|
||||
|
||||
@property
|
||||
def unionid(self):
|
||||
"""兼容 UserMain.unionid"""
|
||||
if hasattr(self, '_unionid_cache'):
|
||||
return self._unionid_cache
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
self._unionid_cache = sd.UnionID if sd else None
|
||||
except Exception:
|
||||
self._unionid_cache = None
|
||||
return self._unionid_cache
|
||||
|
||||
@unionid.setter
|
||||
def unionid(self, value):
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'UnionID': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.UnionID = value or ''
|
||||
sd.save(update_fields=['UnionID'])
|
||||
|
||||
@property
|
||||
def password(self):
|
||||
"""兼容 UserMain.password —— 从 UserSensitiveData 加载"""
|
||||
if hasattr(self, '_password_cache'):
|
||||
return self._password_cache
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
self._password_cache = sd.Password if sd else ''
|
||||
except Exception:
|
||||
self._password_cache = ''
|
||||
return self._password_cache
|
||||
|
||||
@password.setter
|
||||
def password(self, value):
|
||||
"""设置 password —— 写入 UserSensitiveData"""
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'Password': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.Password = value or ''
|
||||
sd.save(update_fields=['Password'])
|
||||
self._password_cache = value
|
||||
|
||||
@property
|
||||
def zhifu(self):
|
||||
"""兼容 UserMain.zhifu"""
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
return sd.Zhifu if sd else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
@zhifu.setter
|
||||
def zhifu(self, value):
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'Zhifu': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.Zhifu = value or ''
|
||||
sd.save(update_fields=['Zhifu'])
|
||||
|
||||
@property
|
||||
def skzhanghao(self):
|
||||
"""兼容 UserMain.skzhanghao"""
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
return sd.SKZhanghao if sd else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
@skzhanghao.setter
|
||||
def skzhanghao(self, value):
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'SKZhanghao': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.SKZhanghao = value or ''
|
||||
sd.save(update_fields=['SKZhanghao'])
|
||||
|
||||
@property
|
||||
def ip(self):
|
||||
"""兼容 UserMain.ip"""
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
return sd.IP if sd else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
@ip.setter
|
||||
def ip(self, value):
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'IP': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.IP = value or ''
|
||||
sd.save(update_fields=['IP'])
|
||||
|
||||
@property
|
||||
def shoujihao_renzheng(self):
|
||||
"""兼容 UserMain.shoujihao_renzheng"""
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
return sd.PhoneVerified if sd else False
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
@shoujihao_renzheng.setter
|
||||
def shoujihao_renzheng(self, value):
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'PhoneVerified': value}
|
||||
)
|
||||
if not created:
|
||||
sd.PhoneVerified = value
|
||||
sd.save(update_fields=['PhoneVerified'])
|
||||
|
||||
@property
|
||||
def last_login_time(self):
|
||||
"""兼容 UserMain.last_login_time"""
|
||||
return self.UserLastLoginDate
|
||||
|
||||
@last_login_time.setter
|
||||
def last_login_time(self, value):
|
||||
self.UserLastLoginDate = value
|
||||
|
||||
@property
|
||||
def create_time(self):
|
||||
"""兼容 UserMain.create_time"""
|
||||
return self.UserCreateTime
|
||||
|
||||
@property
|
||||
def id(self):
|
||||
"""兼容 UserMain.id —— 返回 YonghuID(业务主键)"""
|
||||
return self.YonghuID
|
||||
|
||||
@property
|
||||
def pk(self):
|
||||
"""Django 内部使用 —— 返回 UserUUID"""
|
||||
return self.UserUUID
|
||||
|
||||
# === gvsdsdk 原生方法 ===
|
||||
|
||||
@property
|
||||
def UUIDStr(self):
|
||||
@@ -254,31 +503,15 @@ class User(QModel):
|
||||
"""获取电话,空则返回默认文本"""
|
||||
return self.UserTele or '未填写'
|
||||
|
||||
def GetCompanies(self):
|
||||
"""获取用户所属公司列表"""
|
||||
# Company 模型不在 gvsdsdk 中,此处返回空 QuerySet
|
||||
# 如需使用,请在子服务器中自行实现
|
||||
return []
|
||||
|
||||
def GetRoles(self):
|
||||
"""获取用户角色列表(需在同一 database 连接下使用)"""
|
||||
"""获取用户角色列表"""
|
||||
user_role_uuids = UserRole.objects.filter(
|
||||
UserUUID=self.UserUUID
|
||||
).values_list('RoleUUID', flat=True)
|
||||
return Role.objects.filter(RoleUUID__in=user_role_uuids)
|
||||
|
||||
def GetDepartments(self):
|
||||
"""获取用户部门列表"""
|
||||
# Department 模型不在 gvsdsdk 中,此处返回空列表
|
||||
# 如需使用,请在子服务器中自行实现
|
||||
return []
|
||||
|
||||
def HasPermission(self, PermCode):
|
||||
"""检查用户是否拥有指定权限(需在同一 database 连接下使用)
|
||||
|
||||
通过 UserRole → RolePermission → Permission 链路查询,
|
||||
汇总所有角色的操作权限后判断。
|
||||
"""
|
||||
"""检查用户是否拥有指定权限"""
|
||||
user_role_uuids = UserRole.objects.filter(
|
||||
UserUUID=self.UserUUID
|
||||
).values_list('RoleUUID', flat=True)
|
||||
@@ -291,7 +524,7 @@ class User(QModel):
|
||||
PermStatus=1,
|
||||
).exists()
|
||||
|
||||
# Django auth 框架兼容(内部使用蛇形命名)
|
||||
# Django auth 框架兼容(蛇形命名)
|
||||
@property
|
||||
def is_active(self):
|
||||
return self.IsActive
|
||||
@@ -304,14 +537,6 @@ class User(QModel):
|
||||
def is_authenticated(self):
|
||||
return self.IsAuthenticated
|
||||
|
||||
@property
|
||||
def pk(self):
|
||||
return self.PK
|
||||
|
||||
@property
|
||||
def id(self):
|
||||
return self.ID
|
||||
|
||||
def set_password(self, raw_password):
|
||||
self.SetPassword(raw_password)
|
||||
|
||||
|
||||
510
migrate_to_gvsdsdk.py
Normal file
510
migrate_to_gvsdsdk.py
Normal file
@@ -0,0 +1,510 @@
|
||||
"""
|
||||
gvsdsdk User 表迁移脚本
|
||||
将 user_main 数据迁移到 gvsdsdk.User + user_sensitive_data
|
||||
|
||||
执行前确保已全量备份数据库!
|
||||
分阶段执行,每阶段验证后才继续下一阶段。
|
||||
"""
|
||||
import uuid
|
||||
import sys
|
||||
import MySQLdb
|
||||
|
||||
# ==================== 配置 ====================
|
||||
DB_CONFIG = {
|
||||
'host': 'gvsds.com',
|
||||
'port': 50030,
|
||||
'user': 'root',
|
||||
'passwd': 'sajksh.sdfGH3YUge.wjkd+',
|
||||
'db': 'xaio_cheng_xu',
|
||||
'charset': 'utf8mb4',
|
||||
'connect_timeout': 10,
|
||||
}
|
||||
|
||||
# UUID 命名空间(固定值,确保可重现)
|
||||
UUID_NAMESPACE = uuid.UUID('6e6d6163-0000-0000-0000-000000000000')
|
||||
|
||||
# 旧 RBAC 表 → 重命名映射
|
||||
RBAC_RENAME_MAP = {
|
||||
'role': 'legacy_role',
|
||||
'user_role': 'legacy_user_role',
|
||||
'permission': 'legacy_permission',
|
||||
'role_permission': 'legacy_role_permission',
|
||||
'account_permission': 'legacy_account_permission',
|
||||
}
|
||||
|
||||
# 扩展表 + admin_profile(有 FK 约束指向 user_main.id)
|
||||
EXT_TABLES_WITH_FK = [
|
||||
'user_boss', 'user_dashou', 'user_guanshi', 'user_kefu',
|
||||
'user_shangjia', 'user_shenheguan', 'user_zuzhang', 'admin_profile',
|
||||
]
|
||||
|
||||
|
||||
def get_conn():
|
||||
return MySQLdb.connect(**DB_CONFIG)
|
||||
|
||||
|
||||
def table_exists(cur, table_name):
|
||||
cur.execute("""
|
||||
SELECT COUNT(*) FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s
|
||||
""", (DB_CONFIG['db'], table_name))
|
||||
return cur.fetchone()[0] > 0
|
||||
|
||||
|
||||
def fk_constraint_exists(cur, table_name, ref_table):
|
||||
cur.execute("""
|
||||
SELECT CONSTRAINT_NAME FROM information_schema.KEY_COLUMN_USAGE
|
||||
WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s AND REFERENCED_TABLE_NAME = %s
|
||||
""", (DB_CONFIG['db'], table_name, ref_table))
|
||||
return [r[0] for r in cur.fetchall()]
|
||||
|
||||
|
||||
def phase1_rename_rbac_tables():
|
||||
"""Phase 1: 重命名旧 RBAC 表,避免与 gvsdsdk PascalCase 表名冲突"""
|
||||
print('\n' + '='*60)
|
||||
print('Phase 1: 重命名旧 RBAC 表')
|
||||
print('='*60)
|
||||
|
||||
conn = get_conn()
|
||||
cur = conn.cursor()
|
||||
|
||||
for old_name, new_name in RBAC_RENAME_MAP.items():
|
||||
if table_exists(cur, old_name) and not table_exists(cur, new_name):
|
||||
sql = f'RENAME TABLE `{old_name}` TO `{new_name}`'
|
||||
print(f' {old_name} -> {new_name}')
|
||||
cur.execute(sql)
|
||||
elif table_exists(cur, new_name):
|
||||
print(f' {new_name} 已存在,跳过')
|
||||
else:
|
||||
print(f' {old_name} 不存在,跳过')
|
||||
|
||||
conn.commit()
|
||||
cur.close()
|
||||
conn.close()
|
||||
print('Phase 1 完成')
|
||||
|
||||
|
||||
def phase2_create_tables():
|
||||
"""Phase 2: 创建 User 表和 user_sensitive_data 表"""
|
||||
print('\n' + '='*60)
|
||||
print('Phase 2: 创建 User 表 + user_sensitive_data 表')
|
||||
print('='*60)
|
||||
|
||||
conn = get_conn()
|
||||
cur = conn.cursor()
|
||||
|
||||
# 2.1 创建 User 表
|
||||
if table_exists(cur, 'User'):
|
||||
print(' User 表已存在,跳过创建')
|
||||
else:
|
||||
print(' 创建 User 表...')
|
||||
cur.execute("""
|
||||
CREATE TABLE `User` (
|
||||
`UserUUID` BINARY(16) NOT NULL PRIMARY KEY,
|
||||
`UserName` varchar(256) NOT NULL UNIQUE,
|
||||
`UserPassword` varchar(200) NOT NULL DEFAULT '',
|
||||
`UserPositionStatus` smallint NOT NULL DEFAULT 0,
|
||||
`UserPersonalSignature` varchar(1024) NOT NULL DEFAULT '',
|
||||
`UserEmail` varchar(256) NOT NULL DEFAULT '',
|
||||
`UserEmailVerify` smallint NOT NULL DEFAULT 0,
|
||||
`UserAccountLicense` smallint NOT NULL DEFAULT 1,
|
||||
`UserGender` smallint NOT NULL DEFAULT -1,
|
||||
`UserTele` varchar(16) NULL,
|
||||
`UserCreateTime` datetime(6) NOT NULL,
|
||||
`UserLastLoginDate` datetime(6) NOT NULL,
|
||||
`IsStaff` tinyint(1) NOT NULL DEFAULT 0,
|
||||
`IsSuperuser` tinyint(1) NOT NULL DEFAULT 0,
|
||||
`YonghuID` varchar(7) NULL UNIQUE,
|
||||
`UserAvatar` varchar(500) NULL DEFAULT 'a_long/morentouxiang.jpg',
|
||||
`UserType` varchar(10) NOT NULL DEFAULT 'normal',
|
||||
INDEX `User_UserUUID_0a9d8a_idx` (`UserUUID`),
|
||||
INDEX `User_YonghuID_idx` (`YonghuID`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||||
""")
|
||||
print(' User 表创建完成')
|
||||
|
||||
# 2.2 创建 user_sensitive_data 表
|
||||
if table_exists(cur, 'user_sensitive_data'):
|
||||
print(' user_sensitive_data 表已存在,跳过创建')
|
||||
else:
|
||||
print(' 创建 user_sensitive_data 表...')
|
||||
cur.execute("""
|
||||
CREATE TABLE `user_sensitive_data` (
|
||||
`id` bigint NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
`UserUUID` BINARY(16) NOT NULL UNIQUE,
|
||||
`OpenID` varchar(64) NULL UNIQUE,
|
||||
`UnionID` varchar(64) NULL,
|
||||
`Password` varchar(200) NULL,
|
||||
`PhoneVerified` tinyint(1) NOT NULL DEFAULT 0,
|
||||
`Zhifu` varchar(500) NULL,
|
||||
`SKZhanghao` varchar(11) NULL,
|
||||
`IP` varchar(50) NULL,
|
||||
`create_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6),
|
||||
`update_time` datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
|
||||
INDEX `user_sensitive_data_OpenID_idx` (`OpenID`),
|
||||
INDEX `user_sensitive_data_UnionID_idx` (`UnionID`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci
|
||||
""")
|
||||
print(' user_sensitive_data 表创建完成')
|
||||
|
||||
conn.commit()
|
||||
cur.close()
|
||||
conn.close()
|
||||
print('Phase 2 完成')
|
||||
|
||||
|
||||
def phase3_migrate_user_data():
|
||||
"""Phase 3: 迁移 user_main 数据到 User + user_sensitive_data"""
|
||||
print('\n' + '='*60)
|
||||
print('Phase 3: 迁移 user_main 数据')
|
||||
print('='*60)
|
||||
|
||||
conn = get_conn()
|
||||
cur = conn.cursor()
|
||||
|
||||
# 检查 User 表是否已有数据
|
||||
cur.execute('SELECT COUNT(*) FROM `User`')
|
||||
existing = cur.fetchone()[0]
|
||||
if existing > 0:
|
||||
print(f' User 表已有 {existing} 行数据,跳过迁移')
|
||||
cur.close()
|
||||
conn.close()
|
||||
return
|
||||
|
||||
# 获取所有 user_main 数据
|
||||
cur.execute("""
|
||||
SELECT id, yonghuid, openid, avatar, phone, password, zhifu,
|
||||
skzhanghao, ip, last_login_time, user_type, create_time,
|
||||
update_time, unionid, shoujihao_renzheng, last_login
|
||||
FROM user_main
|
||||
""")
|
||||
rows = cur.fetchall()
|
||||
print(f' 从 user_main 读取 {len(rows)} 行')
|
||||
|
||||
# 生成 UUID 并批量插入
|
||||
user_data = []
|
||||
sensitive_data = []
|
||||
|
||||
for row in rows:
|
||||
(id_, yonghuid, openid, avatar, phone, password, zhifu,
|
||||
skzhanghao, ip, last_login_time, user_type, create_time,
|
||||
update_time, unionid, shoujihao_renzheng, last_login) = row
|
||||
|
||||
# 生成确定性 UUID
|
||||
user_uuid = uuid.uuid5(UUID_NAMESPACE, yonghuid).bytes
|
||||
|
||||
# User 表数据
|
||||
is_superuser = 1 if user_type == 'admin' else 0
|
||||
is_staff = 1 if user_type in ('admin', 'kefu') else 0
|
||||
user_name = yonghuid # 用 yonghuid 作为 UserName
|
||||
avatar_val = avatar if avatar else 'a_long/morentouxiang.jpg'
|
||||
last_login = last_login_time or last_login or create_time
|
||||
|
||||
user_data.append((
|
||||
user_uuid, user_name, '', # UserPassword 留空
|
||||
0, # UserPositionStatus
|
||||
'', # UserPersonalSignature
|
||||
'', # UserEmail
|
||||
0, # UserEmailVerify
|
||||
1, # UserAccountLicense
|
||||
-1, # UserGender
|
||||
phone, # UserTele
|
||||
create_time, # UserCreateTime
|
||||
last_login, # UserLastLoginDate
|
||||
is_staff, is_superuser,
|
||||
yonghuid, # YonghuID
|
||||
avatar_val, # UserAvatar
|
||||
user_type, # UserType
|
||||
))
|
||||
|
||||
# user_sensitive_data 表数据
|
||||
sensitive_data.append((
|
||||
user_uuid,
|
||||
openid if openid else None,
|
||||
unionid if unionid else None,
|
||||
password if password else None,
|
||||
1 if shoujihao_renzheng else 0,
|
||||
zhifu if zhifu else None,
|
||||
skzhanghao if skzhanghao else None,
|
||||
ip if ip else None,
|
||||
))
|
||||
|
||||
# 批量插入 User 表
|
||||
print(f' 插入 {len(user_data)} 行到 User 表...')
|
||||
cur.executemany("""
|
||||
INSERT INTO `User` (
|
||||
UserUUID, UserName, UserPassword, UserPositionStatus,
|
||||
UserPersonalSignature, UserEmail, UserEmailVerify,
|
||||
UserAccountLicense, UserGender, UserTele,
|
||||
UserCreateTime, UserLastLoginDate, IsStaff, IsSuperuser,
|
||||
YonghuID, UserAvatar, UserType
|
||||
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
|
||||
""", user_data)
|
||||
|
||||
# 批量插入 user_sensitive_data 表
|
||||
print(f' 插入 {len(sensitive_data)} 行到 user_sensitive_data 表...')
|
||||
cur.executemany("""
|
||||
INSERT INTO user_sensitive_data (
|
||||
UserUUID, OpenID, UnionID, Password, PhoneVerified,
|
||||
Zhifu, SKZhanghao, IP
|
||||
) VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
|
||||
""", sensitive_data)
|
||||
|
||||
conn.commit()
|
||||
|
||||
# 验证
|
||||
cur.execute('SELECT COUNT(*) FROM `User`')
|
||||
user_count = cur.fetchone()[0]
|
||||
cur.execute('SELECT COUNT(*) FROM user_sensitive_data')
|
||||
sd_count = cur.fetchone()[0]
|
||||
print(f' 验证: User={user_count}, UserSensitiveData={sd_count}')
|
||||
|
||||
if user_count != len(rows):
|
||||
print(f' 警告: User 表行数({user_count}) != user_main 行数({len(rows)})')
|
||||
|
||||
cur.close()
|
||||
conn.close()
|
||||
print('Phase 3 完成')
|
||||
|
||||
|
||||
def phase4_alter_extension_tables():
|
||||
"""Phase 4: 删除 FK 约束,修改扩展表 user_id 列类型 int → BINARY(16)"""
|
||||
print('\n' + '='*60)
|
||||
print('Phase 4: 修改扩展表 FK 列类型')
|
||||
print('='*60)
|
||||
|
||||
conn = get_conn()
|
||||
cur = conn.cursor()
|
||||
|
||||
for table in EXT_TABLES_WITH_FK:
|
||||
print(f'\n 处理 {table}...')
|
||||
|
||||
# 4.1 删除 FK 约束
|
||||
fk_names = fk_constraint_exists(cur, table, 'user_main')
|
||||
for fk_name in fk_names:
|
||||
print(f' 删除 FK: {fk_name}')
|
||||
cur.execute(f'ALTER TABLE `{table}` DROP FOREIGN KEY `{fk_name}`')
|
||||
|
||||
# 4.2 检查是否已有 new_user_id 列
|
||||
cur.execute("""
|
||||
SELECT COUNT(*) FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s AND COLUMN_NAME = 'new_user_id'
|
||||
""", (DB_CONFIG['db'], table))
|
||||
has_new = cur.fetchone()[0] > 0
|
||||
|
||||
if not has_new:
|
||||
# 4.3 添加新 BINARY(16) 列
|
||||
print(f' 添加 new_user_id BINARY(16) 列')
|
||||
cur.execute(f'ALTER TABLE `{table}` ADD COLUMN `new_user_id` BINARY(16) NULL')
|
||||
|
||||
# 4.4 填充新列:通过 user_main.id → user_main.yonghuid → User.UserUUID
|
||||
print(f' 填充 new_user_id...')
|
||||
cur.execute(f"""
|
||||
UPDATE `{table}` ext
|
||||
JOIN user_main um ON ext.user_id = um.id
|
||||
JOIN `User` u ON u.YonghuID = um.yonghuid COLLATE utf8mb4_general_ci
|
||||
SET ext.new_user_id = u.UserUUID
|
||||
""")
|
||||
affected = cur.rowcount
|
||||
print(f' 更新 {affected} 行')
|
||||
|
||||
# 4.5 删除旧 user_id 列
|
||||
print(f' 删除旧 user_id 列')
|
||||
cur.execute(f'ALTER TABLE `{table}` DROP COLUMN `user_id`')
|
||||
|
||||
# 4.6 重命名 new_user_id → user_id
|
||||
print(f' 重命名 new_user_id → user_id')
|
||||
cur.execute(f'ALTER TABLE `{table}` CHANGE `new_user_id` `user_id` BINARY(16) NULL')
|
||||
|
||||
# 4.7 添加索引
|
||||
print(f' 添加索引')
|
||||
cur.execute(f'ALTER TABLE `{table}` ADD INDEX `{table}_user_id_idx` (`user_id`)')
|
||||
|
||||
conn.commit()
|
||||
|
||||
# 4.8 处理 django_admin_log(空表,直接改列类型)
|
||||
print(f'\n 处理 django_admin_log...')
|
||||
fk_names = fk_constraint_exists(cur, 'django_admin_log', 'user_main')
|
||||
for fk_name in fk_names:
|
||||
print(f' 删除 FK: {fk_name}')
|
||||
cur.execute(f'ALTER TABLE `django_admin_log` DROP FOREIGN KEY `{fk_name}`')
|
||||
|
||||
# 检查并修改 user_id 列类型
|
||||
cur.execute("""
|
||||
SELECT DATA_TYPE FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = %s AND TABLE_NAME = 'django_admin_log' AND COLUMN_NAME = 'user_id'
|
||||
""", (DB_CONFIG['db'],))
|
||||
col_type = cur.fetchone()
|
||||
if col_type and col_type[0] != 'binary':
|
||||
print(f' 修改 user_id 列类型: {col_type[0]} → BINARY(16)')
|
||||
cur.execute('ALTER TABLE `django_admin_log` MODIFY COLUMN `user_id` BINARY(16) NULL')
|
||||
else:
|
||||
print(f' user_id 已是 BINARY 类型,跳过')
|
||||
|
||||
conn.commit()
|
||||
cur.close()
|
||||
conn.close()
|
||||
print('\nPhase 4 完成')
|
||||
|
||||
|
||||
def phase5_update_migrations():
|
||||
"""Phase 5: 更新 django_migrations 记录"""
|
||||
print('\n' + '='*60)
|
||||
print('Phase 5: 更新 django_migrations 记录')
|
||||
print('='*60)
|
||||
|
||||
conn = get_conn()
|
||||
cur = conn.cursor()
|
||||
|
||||
# 删除旧迁移记录
|
||||
apps = ['gvsdsdk', 'users', 'shop', 'backend', 'rank', 'orders', 'config', 'products']
|
||||
for app in apps:
|
||||
cur.execute('DELETE FROM django_migrations WHERE app = %s', (app,))
|
||||
if cur.rowcount > 0:
|
||||
print(f' 删除 {app} 旧迁移记录: {cur.rowcount} 条')
|
||||
|
||||
# 插入新迁移记录
|
||||
from datetime import datetime
|
||||
now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
new_migrations = [
|
||||
('gvsdsdk', '0001_initial'),
|
||||
('users', '0001_initial'),
|
||||
('shop', '0001_initial'),
|
||||
('backend', '0001_initial'),
|
||||
('rank', '0001_initial'),
|
||||
('orders', '0001_initial'),
|
||||
('config', '0001_initial'),
|
||||
('products', '0001_initial'),
|
||||
('products', '0002_initial'),
|
||||
]
|
||||
for app, name in new_migrations:
|
||||
cur.execute(
|
||||
'INSERT INTO django_migrations (app, name, applied) VALUES (%s, %s, %s)',
|
||||
(app, name, now)
|
||||
)
|
||||
print(f' 插入 {app}.{name}')
|
||||
|
||||
conn.commit()
|
||||
cur.close()
|
||||
conn.close()
|
||||
print('Phase 5 完成')
|
||||
|
||||
|
||||
def phase6_verify():
|
||||
"""Phase 6: 验证迁移结果"""
|
||||
print('\n' + '='*60)
|
||||
print('Phase 6: 验证迁移结果')
|
||||
print('='*60)
|
||||
|
||||
conn = get_conn()
|
||||
cur = conn.cursor()
|
||||
|
||||
# 1. User 表数据量
|
||||
cur.execute('SELECT COUNT(*) FROM `User`')
|
||||
user_count = cur.fetchone()[0]
|
||||
print(f' User 表: {user_count} 行')
|
||||
|
||||
# 2. user_sensitive_data 数据量
|
||||
cur.execute('SELECT COUNT(*) FROM user_sensitive_data')
|
||||
sd_count = cur.fetchone()[0]
|
||||
print(f' user_sensitive_data: {sd_count} 行')
|
||||
|
||||
# 3. user_main 对比
|
||||
cur.execute('SELECT COUNT(*) FROM user_main')
|
||||
um_count = cur.fetchone()[0]
|
||||
print(f' user_main: {um_count} 行 (原表保留)')
|
||||
|
||||
# 4. 验证 User 表字段
|
||||
cur.execute('DESCRIBE `User`')
|
||||
print(f'\n User 表结构:')
|
||||
for c in cur.fetchall():
|
||||
print(f' {c[0]} | {c[1]}')
|
||||
|
||||
# 5. 验证扩展表 user_id 列类型
|
||||
print(f'\n 扩展表 user_id 列类型:')
|
||||
for table in EXT_TABLES_WITH_FK:
|
||||
cur.execute("""
|
||||
SELECT DATA_TYPE FROM information_schema.COLUMNS
|
||||
WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s AND COLUMN_NAME = 'user_id'
|
||||
""", (DB_CONFIG['db'], table))
|
||||
result = cur.fetchone()
|
||||
print(f' {table}.user_id: {result[0] if result else "不存在"}')
|
||||
|
||||
# 6. 验证扩展表数据完整性
|
||||
print(f'\n 扩展表数据完整性:')
|
||||
for table in EXT_TABLES_WITH_FK:
|
||||
cur.execute(f'SELECT COUNT(*) FROM `{table}`')
|
||||
total = cur.fetchone()[0]
|
||||
cur.execute(f'SELECT COUNT(*) FROM `{table}` WHERE user_id IS NULL')
|
||||
null_count = cur.fetchone()[0]
|
||||
print(f' {table}: total={total}, null_user_id={null_count}')
|
||||
|
||||
# 7. 验证 RBAC 表重命名
|
||||
print(f'\n RBAC 表重命名验证:')
|
||||
for old, new in RBAC_RENAME_MAP.items():
|
||||
cur.execute("""
|
||||
SELECT COUNT(*) FROM information_schema.TABLES
|
||||
WHERE TABLE_SCHEMA = %s AND TABLE_NAME = %s
|
||||
""", (DB_CONFIG['db'], new))
|
||||
exists = cur.fetchone()[0] > 0
|
||||
print(f' {new}: {"存在" if exists else "不存在"}')
|
||||
|
||||
# 8. 验证 django_migrations
|
||||
print(f'\n django_migrations:')
|
||||
cur.execute("SELECT app, name FROM django_migrations WHERE app IN ('gvsdsdk','users','shop') ORDER BY app")
|
||||
for r in cur.fetchall():
|
||||
print(f' {r[0]}.{r[1]}')
|
||||
|
||||
# 9. 抽样验证数据一致性
|
||||
print(f'\n 抽样验证 (前5行):')
|
||||
cur.execute("""
|
||||
SELECT u.YonghuID, u.UserType, u.UserTele, u.UserAvatar,
|
||||
sd.OpenID, sd.Password, sd.PhoneVerified
|
||||
FROM `User` u
|
||||
LEFT JOIN user_sensitive_data sd ON u.UserUUID = sd.UserUUID
|
||||
LIMIT 5
|
||||
""")
|
||||
for r in cur.fetchall():
|
||||
print(f' YonghuID={r[0]}, Type={r[1]}, Tele={r[2]}, OpenID={r[4]}, Verified={r[6]}')
|
||||
|
||||
cur.close()
|
||||
conn.close()
|
||||
print('\nPhase 6 验证完成')
|
||||
|
||||
|
||||
def main():
|
||||
print('='*60)
|
||||
print('gvsdsdk User 表迁移脚本')
|
||||
print('='*60)
|
||||
print(f'目标数据库: {DB_CONFIG["db"]} @ {DB_CONFIG["host"]}:{DB_CONFIG["port"]}')
|
||||
|
||||
# 确认
|
||||
if '--yes' not in sys.argv:
|
||||
print('\n警告: 此脚本将修改生产数据库!')
|
||||
print('请确保已全量备份数据库。')
|
||||
print('使用 --yes 参数跳过确认。')
|
||||
response = input('输入 YES 确认执行: ')
|
||||
if response != 'YES':
|
||||
print('已取消')
|
||||
return
|
||||
|
||||
# 执行各阶段
|
||||
phase1_rename_rbac_tables()
|
||||
phase2_create_tables()
|
||||
phase3_migrate_user_data()
|
||||
phase4_alter_extension_tables()
|
||||
phase5_update_migrations()
|
||||
phase6_verify()
|
||||
|
||||
print('\n' + '='*60)
|
||||
print('迁移完成!')
|
||||
print('='*60)
|
||||
print('\n后续步骤:')
|
||||
print('1. 在服务器上部署新代码 (git pull)')
|
||||
print('2. 重启 Django 服务')
|
||||
print('3. 测试登录和核心功能')
|
||||
print('4. 确认无误后 DROP TABLE user_main')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
179
migrate_user_to_gvsdsdk.sql
Normal file
179
migrate_user_to_gvsdsdk.sql
Normal file
@@ -0,0 +1,179 @@
|
||||
-- ============================================================
|
||||
-- 用户表架构迁移脚本
|
||||
-- 从旧 user_main 表迁移数据到新 User + user_sensitive_data 表
|
||||
--
|
||||
-- 执行顺序:
|
||||
-- 1. 先执行 python manage.py migrate(创建新表)
|
||||
-- 2. 再执行本 SQL 脚本(迁移数据)
|
||||
-- 3. 最后删除旧表(确认无误后)
|
||||
-- ============================================================
|
||||
|
||||
-- ============================================================
|
||||
-- 第1步:从 user_main 迁移数据到 User 表
|
||||
-- ============================================================
|
||||
|
||||
-- User 表:核心身份字段
|
||||
INSERT INTO `User` (
|
||||
`UserUUID`,
|
||||
`UserName`,
|
||||
`UserPassword`,
|
||||
`UserPositionStatus`,
|
||||
`UserPersonalSignature`,
|
||||
`UserEmail`,
|
||||
`UserEmailVerify`,
|
||||
`UserAccountLicense`,
|
||||
`UserGender`,
|
||||
`UserTele`,
|
||||
`UserCreateTime`,
|
||||
`UserLastLoginDate`,
|
||||
`IsStaff`,
|
||||
`IsSuperuser`,
|
||||
`YonghuID`,
|
||||
`UserAvatar`,
|
||||
`UserType`
|
||||
)
|
||||
SELECT
|
||||
UNHEX(REPLACE(UUID(), '-', '')), -- 生成 16 字节 UUID
|
||||
COALESCE(yonghuid, openid), -- UserName = yonghuid 或 openid
|
||||
COALESCE(password, ''), -- UserPassword
|
||||
0, -- UserPositionStatus
|
||||
'', -- UserPersonalSignature
|
||||
'', -- UserEmail
|
||||
0, -- UserEmailVerify
|
||||
1, -- UserAccountLicense (启用)
|
||||
-1, -- UserGender
|
||||
phone, -- UserTele
|
||||
create_time, -- UserCreateTime
|
||||
COALESCE(last_login_time, create_time), -- UserLastLoginDate
|
||||
CASE WHEN user_type = 'admin' THEN 1 ELSE 0 END, -- IsStaff
|
||||
CASE WHEN user_type = 'admin' THEN 1 ELSE 0 END, -- IsSuperuser
|
||||
yonghuid, -- YonghuID
|
||||
COALESCE(avatar, 'a_long/morentouxiang.jpg'), -- UserAvatar
|
||||
user_type -- UserType
|
||||
FROM `user_main`
|
||||
WHERE yonghuid IS NOT NULL AND yonghuid != '';
|
||||
|
||||
-- ============================================================
|
||||
-- 第2步:迁移敏感数据到 user_sensitive_data 表
|
||||
-- ============================================================
|
||||
|
||||
INSERT INTO `user_sensitive_data` (
|
||||
`UserUUID_id`,
|
||||
`OpenID`,
|
||||
`UnionID`,
|
||||
`Password`,
|
||||
`PhoneVerified`,
|
||||
`Zhifu`,
|
||||
`SKZhanghao`,
|
||||
`IP`,
|
||||
`create_time`,
|
||||
`update_time`
|
||||
)
|
||||
SELECT
|
||||
u.`UserUUID`,
|
||||
um.openid,
|
||||
um.unionid,
|
||||
um.password,
|
||||
um.shoujihao_renzheng,
|
||||
um.zhifu,
|
||||
um.skzhanghao,
|
||||
um.ip,
|
||||
um.create_time,
|
||||
NOW()
|
||||
FROM `user_main` um
|
||||
JOIN `User` u ON u.`YonghuID` = um.yonghuid;
|
||||
|
||||
-- ============================================================
|
||||
-- 第3步:更新扩展表的外键引用
|
||||
-- 扩展表(user_dashou, user_shangjia 等)的 user_id 原来指向 user_main.id(自增整数)
|
||||
-- 现在需要改为指向 User.UserUUID(16字节二进制)
|
||||
-- ============================================================
|
||||
|
||||
-- user_boss
|
||||
UPDATE `user_boss` ub
|
||||
JOIN `user_main` um ON um.id = ub.user_id
|
||||
JOIN `User` u ON u.`YonghuID` = um.yonghuid
|
||||
SET ub.user_id = u.`UserUUID`;
|
||||
|
||||
-- user_dashou
|
||||
UPDATE `user_dashou` ud
|
||||
JOIN `user_main` um ON um.id = ud.user_id
|
||||
JOIN `User` u ON u.`YonghuID` = um.yonghuid
|
||||
SET ud.user_id = u.`UserUUID`;
|
||||
|
||||
-- user_shangjia
|
||||
UPDATE `user_shangjia` us
|
||||
JOIN `user_main` um ON um.id = us.user_id
|
||||
JOIN `User` u ON u.`YonghuID` = um.yonghuid
|
||||
SET us.user_id = u.`UserUUID`;
|
||||
|
||||
-- user_guanshi
|
||||
UPDATE `user_guanshi` ug
|
||||
JOIN `user_main` um ON um.id = ug.user_id
|
||||
JOIN `User` u ON u.`YonghuID` = um.yonghuid
|
||||
SET ug.user_id = u.`UserUUID`;
|
||||
|
||||
-- user_zuzhang
|
||||
UPDATE `user_zuzhang` uz
|
||||
JOIN `user_main` um ON um.id = uz.user_id
|
||||
JOIN `User` u ON u.`YonghuID` = um.yonghuid
|
||||
SET uz.user_id = u.`UserUUID`;
|
||||
|
||||
-- user_shenheguan
|
||||
UPDATE `user_shenheguan` ush
|
||||
JOIN `user_main` um ON um.id = ush.user_id
|
||||
JOIN `User` u ON u.`YonghuID` = um.yonghuid
|
||||
SET ush.user_id = u.`UserUUID`;
|
||||
|
||||
-- admin_profile
|
||||
UPDATE `admin_profile` ap
|
||||
JOIN `user_main` um ON um.id = ap.user_id
|
||||
JOIN `User` u ON u.`YonghuID` = um.yonghuid
|
||||
SET ap.user_id = u.`UserUUID`;
|
||||
|
||||
-- user_kefu
|
||||
UPDATE `user_kefu` uk
|
||||
JOIN `user_main` um ON um.id = uk.user_id
|
||||
JOIN `User` u ON u.`YonghuID` = um.yonghuid
|
||||
SET uk.user_id = u.`UserUUID`;
|
||||
|
||||
-- ============================================================
|
||||
-- 第4步:更新 yonghu_dianpu_bangding 表的 to_field 引用
|
||||
-- 原来用 to_field='yonghuid' 关联 user_main.yonghuid
|
||||
-- 现在用 to_field='YonghuID' 关联 User.YonghuID
|
||||
-- 数据本身不需要变(yonghuid 值相同),但需要确认列名
|
||||
-- ============================================================
|
||||
|
||||
-- yonghu_dianpu_bangding 的 yonghu_id 列存储的是 yonghuid 字符串值
|
||||
-- 新模型 to_field='YonghuID',列名变为 yonghu_id(Django 自动生成)
|
||||
-- 如果旧列名也是 yonghu_id,则数据不需要迁移
|
||||
|
||||
-- ============================================================
|
||||
-- 第5步:验证数据完整性
|
||||
-- ============================================================
|
||||
|
||||
-- 验证 User 表行数 = user_main 表行数
|
||||
SELECT 'User count' AS check_name, COUNT(*) AS cnt FROM `User`
|
||||
UNION ALL
|
||||
SELECT 'user_main count', COUNT(*) FROM `user_main`
|
||||
UNION ALL
|
||||
SELECT 'user_sensitive_data count', COUNT(*) FROM `user_sensitive_data`
|
||||
UNION ALL
|
||||
SELECT 'user_dashou count', COUNT(*) FROM `user_dashou`
|
||||
UNION ALL
|
||||
SELECT 'user_shangjia count', COUNT(*) FROM `user_shangjia`;
|
||||
|
||||
-- 验证所有扩展表的 user_id 都能匹配到 User 表
|
||||
SELECT 'orphan user_dashou' AS check_name, COUNT(*) AS cnt
|
||||
FROM `user_dashou` ud LEFT JOIN `User` u ON u.`UserUUID` = ud.user_id
|
||||
WHERE u.`UserUUID` IS NULL
|
||||
UNION ALL
|
||||
SELECT 'orphan user_shangjia', COUNT(*)
|
||||
FROM `user_shangjia` us LEFT JOIN `User` u ON u.`UserUUID` = us.user_id
|
||||
WHERE u.`UserUUID` IS NULL;
|
||||
|
||||
-- ============================================================
|
||||
-- 第6步:确认无误后删除旧表(手动执行)
|
||||
-- ============================================================
|
||||
-- DROP TABLE IF EXISTS `user_main`;
|
||||
-- 注意:删除前请确保所有数据已正确迁移!
|
||||
@@ -1,205 +1,454 @@
|
||||
# Generated by Django 5.2.10 on 2026-01-14 19:59
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Lilubiao',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('lilu', models.DecimalField(decimal_places=4, max_digits=5, null=True, verbose_name='平台分成利率,1是平台,2是商家')),
|
||||
('fadanpingtai', models.CharField(max_length=10, null=True, verbose_name='订单所属平台,(商家或平台)')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'lilubiao',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Ptliushui',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('zonge', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='收取总金额')),
|
||||
('zhichuzonge', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='支出总金额')),
|
||||
('zongshouyi', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='总收益')),
|
||||
('rizonge', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='日收取')),
|
||||
('rizhichu', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='日支出')),
|
||||
('rishouyi', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='日收益')),
|
||||
('zongshoucishu', models.IntegerField(default=0, verbose_name='总收取次数')),
|
||||
('rishoucishu', models.IntegerField(default=0, verbose_name='日收取次数')),
|
||||
('zongzhichucishu', models.IntegerField(default=0, verbose_name='总支出次数')),
|
||||
('rizhichucishu', models.IntegerField(default=0, verbose_name='日支出次数')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'ptliushui',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Chufajilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dashouid', models.CharField(db_index=True, max_length=7, null=True, verbose_name='被罚打手ID')),
|
||||
('qingqiuid', models.CharField(db_index=True, max_length=7, null=True, verbose_name='请求处罚ID')),
|
||||
('chuliid', models.CharField(db_index=True, max_length=7, null=True, verbose_name='处理处罚ID')),
|
||||
('cfliyou', models.TextField(blank=True, null=True, verbose_name='处罚理由')),
|
||||
('sqzhuangtai', models.IntegerField(blank=True, default=0, null=True, verbose_name='处罚申请状态:0待处理,1成功,2驳回')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回处罚理由')),
|
||||
('jifen', models.IntegerField(default=0, verbose_name='扣除打手积分')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, null=True, verbose_name='订单ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'chufajilu',
|
||||
'indexes': [models.Index(fields=['dashouid'], name='chufajilu_dashoui_07aac0_idx'), models.Index(fields=['qingqiuid'], name='chufajilu_qingqiu_ac160e_idx'), models.Index(fields=['chuliid'], name='chufajilu_chuliid_cd63ac_idx'), models.Index(fields=['dingdan_id'], name='chufajilu_dingdan_b8f0c2_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Dashoutupian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, null=True, verbose_name='订单ID')),
|
||||
('dashou', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='接单打手ID')),
|
||||
('tupian', models.CharField(blank=True, max_length=500, null=True, verbose_name='打手提交图片URL')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'dashoutupian',
|
||||
'indexes': [models.Index(fields=['dashou'], name='dashoutupia_dashou_7de8bd_idx'), models.Index(fields=['dingdan_id'], name='dashoutupia_dingdan_97c685_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Dingdan',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('zhuangtai', models.IntegerField(blank=True, db_index=True, default=1, null=True, verbose_name='订单状态')),
|
||||
('fadan_pingtai', models.IntegerField(blank=True, null=True, verbose_name='发单平台')),
|
||||
('jine', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='订单金额')),
|
||||
('dashou_fencheng', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='打手分成')),
|
||||
('jiedan_dashou_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='接单打手ID')),
|
||||
('dashou_liuyan', models.TextField(blank=True, null=True, verbose_name='打手留言')),
|
||||
('zhiding_id', models.CharField(blank=True, max_length=32, null=True, verbose_name='指定ID')),
|
||||
('shangpin_id', models.IntegerField(blank=True, null=True, verbose_name='商品ID')),
|
||||
('leixing_id', models.PositiveIntegerField(blank=True, null=True, verbose_name='商品类型ID')),
|
||||
('tupian', models.CharField(blank=True, max_length=500, null=True, verbose_name='商品图片URL')),
|
||||
('yaoqiuleixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='抢单要求类型')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('yongjin', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='佣金要求')),
|
||||
('jieshao', models.TextField(blank=True, null=True, verbose_name='订单介绍')),
|
||||
('beizhu', models.TextField(blank=True, null=True, verbose_name='订单备注')),
|
||||
('nicheng', models.CharField(blank=True, max_length=50, null=True, verbose_name='游戏昵称')),
|
||||
('user1_id', models.CharField(db_index=True, max_length=30, null=True, verbose_name='用户1标识')),
|
||||
('user2_id', models.CharField(db_index=True, max_length=30, null=True, verbose_name='用户2打手标识')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '订单',
|
||||
'verbose_name_plural': '订单',
|
||||
'db_table': 'dingdan',
|
||||
'indexes': [models.Index(fields=['zhuangtai'], name='dingdan_zhuangt_2febe8_idx'), models.Index(fields=['dingdan_id'], name='dingdan_dingdan_83dcb6_idx'), models.Index(fields=['jiedan_dashou_id'], name='dingdan_jiedan__921bfa_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Liaotian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('user1_id', models.CharField(db_index=True, max_length=30, verbose_name='用户1标识')),
|
||||
('user2_id', models.CharField(db_index=True, max_length=30, verbose_name='用户2标识')),
|
||||
('dingdan_id', models.CharField(max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('zhuangtai', models.IntegerField(choices=[(1, '开启中'), (0, '已关闭')], db_index=True, default=1, verbose_name='聊天状态')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'liaotian',
|
||||
'indexes': [models.Index(fields=['user1_id'], name='liaotian_user1_i_6be6cd_idx'), models.Index(fields=['user2_id'], name='liaotian_user2_i_9f61a4_idx'), models.Index(fields=['zhuangtai'], name='liaotian_zhuangt_5e8be5_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Pingfen',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dashou', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='接单打手ID')),
|
||||
('zongfen', models.PositiveIntegerField(default=0, verbose_name='总分')),
|
||||
('cishu', models.PositiveIntegerField(default=0, verbose_name='评分次数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '评分表',
|
||||
'db_table': 'pingfenbiao',
|
||||
'indexes': [models.Index(fields=['dashou'], name='pingfenbiao_dashou_f62f10_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Tuikuanjilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('dashouid', models.CharField(max_length=7, null=True, verbose_name='接单打手ID')),
|
||||
('qingqiuid', models.CharField(max_length=7, null=True, verbose_name='请求用户ID')),
|
||||
('chuliid', models.CharField(db_index=True, max_length=7, null=True, verbose_name='处理人ID')),
|
||||
('liyou', models.TextField(blank=True, null=True, verbose_name='理由')),
|
||||
('sqzhuangtai', models.IntegerField(blank=True, db_index=True, default=0, null=True, verbose_name='申请状态:0待处理,1成功,2驳回')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回理由')),
|
||||
('jine', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='订单金额')),
|
||||
('dashou_fencheng', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='打手分成')),
|
||||
('jieshao', models.TextField(blank=True, null=True, verbose_name='订单介绍')),
|
||||
('beizhu', models.TextField(blank=True, null=True, verbose_name='订单备注')),
|
||||
('nicheng', models.CharField(blank=True, max_length=50, null=True, verbose_name='游戏昵称')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'tuikuanjilu',
|
||||
'indexes': [models.Index(fields=['chuliid'], name='tuikuanjilu_chuliid_0b0f16_idx'), models.Index(fields=['sqzhuangtai'], name='tuikuanjilu_sqzhuan_d89dc9_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DingdanPingtai',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('laoban_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='老板ID')),
|
||||
('laoban_pingjia', models.TextField(blank=True, null=True, verbose_name='老板评价')),
|
||||
('dingdan', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='pingtai_kuozhan', to='orders.dingdan', verbose_name='订单')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '平台订单扩展',
|
||||
'verbose_name_plural': '平台订单扩展',
|
||||
'db_table': 'dingdan_pingtai',
|
||||
'indexes': [models.Index(fields=['laoban_id'], name='dingdan_pin_laoban__d55e6f_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DingdanShangjia',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('shangjia_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='商家ID')),
|
||||
('shangjia_pingjia', models.TextField(blank=True, null=True, verbose_name='商家评价')),
|
||||
('cfliyou', models.TextField(blank=True, null=True, verbose_name='商家处罚理由')),
|
||||
('sqzhuangtai', models.IntegerField(blank=True, default=0, null=True, verbose_name='处罚申请状态:0待处理,1成功,2驳回')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回商家处罚理由')),
|
||||
('sjnicheng', models.CharField(max_length=50, null=True, verbose_name='商家昵称')),
|
||||
('dingdan', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='shangjia_kuozhan', to='orders.dingdan', verbose_name='订单')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商家订单扩展',
|
||||
'verbose_name_plural': '商家订单扩展',
|
||||
'db_table': 'dingdan_shangjia',
|
||||
'indexes': [models.Index(fields=['shangjia_id'], name='dingdan_sha_shangji_64d28b_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
# Generated by Django 4.2.27 on 2026-06-17 01:32
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Chufajilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dashouid', models.CharField(db_index=True, max_length=7, null=True, verbose_name='被罚打手ID')),
|
||||
('qingqiuid', models.CharField(db_index=True, max_length=11, null=True, verbose_name='请求处罚ID')),
|
||||
('chuliid', models.CharField(db_index=True, max_length=11, null=True, verbose_name='处理处罚ID')),
|
||||
('cfliyou', models.TextField(blank=True, null=True, verbose_name='处罚理由')),
|
||||
('ssliyou', models.TextField(blank=True, null=True, verbose_name='打手申诉理由')),
|
||||
('sqzhuangtai', models.IntegerField(blank=True, default=0, null=True, verbose_name='处罚申请状态:0待处理,1成功,2驳回')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回处罚理由')),
|
||||
('jifen', models.IntegerField(default=0, verbose_name='扣除打手积分')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, null=True, verbose_name='订单ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'chufajilu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Chufatupian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, null=True, verbose_name='订单ID')),
|
||||
('yonghuid', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='用户ID')),
|
||||
('tupian', models.CharField(blank=True, max_length=500, null=True, verbose_name='证据图片URL')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'chufatupian',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Dashoutupian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, null=True, verbose_name='订单ID')),
|
||||
('dashou', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='接单打手ID')),
|
||||
('tupian', models.CharField(blank=True, max_length=500, null=True, verbose_name='打手提交图片URL')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'dashoutupian',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Dingdan',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('zhuangtai', models.IntegerField(blank=True, db_index=True, default=1, null=True, verbose_name='订单状态')),
|
||||
('fadan_pingtai', models.IntegerField(blank=True, null=True, verbose_name='发单平台')),
|
||||
('jine', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='订单金额')),
|
||||
('dashou_fencheng', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='打手分成')),
|
||||
('guanshi_fencheng', models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=10, null=True, verbose_name='管事分成')),
|
||||
('jiedan_dashou_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='接单打手ID')),
|
||||
('dashou_liuyan', models.TextField(blank=True, null=True, verbose_name='打手留言')),
|
||||
('zhiding_id', models.CharField(blank=True, max_length=32, null=True, verbose_name='指定ID')),
|
||||
('shangpin_id', models.IntegerField(blank=True, null=True, verbose_name='商品ID')),
|
||||
('leixing_id', models.PositiveIntegerField(blank=True, null=True, verbose_name='商品类型ID')),
|
||||
('tupian', models.CharField(blank=True, max_length=500, null=True, verbose_name='商品图片URL')),
|
||||
('yaoqiuleixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='抢单要求类型')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('yongjin', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='佣金要求')),
|
||||
('jieshao', models.TextField(blank=True, null=True, verbose_name='订单介绍')),
|
||||
('beizhu', models.TextField(blank=True, null=True, verbose_name='订单备注')),
|
||||
('nicheng', models.CharField(blank=True, max_length=50, null=True, verbose_name='游戏昵称')),
|
||||
('user1_id', models.CharField(db_index=True, max_length=30, null=True, verbose_name='用户1标识')),
|
||||
('user2_id', models.CharField(db_index=True, max_length=30, null=True, verbose_name='用户2打手标识')),
|
||||
('auto_task_id', models.CharField(blank=True, default='', max_length=255, verbose_name='延时任务ID')),
|
||||
('auto_expire_at', models.DateTimeField(blank=True, null=True, verbose_name='计划过期时间')),
|
||||
('pending_dispatch', models.BooleanField(db_index=True, default=False, verbose_name='待调度标记')),
|
||||
('status_8_time', models.DateTimeField(blank=True, null=True, verbose_name='状态变为8的时间')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('clkf', models.CharField(db_index=True, max_length=20, null=True, verbose_name='处理客服')),
|
||||
('tkly', models.CharField(blank=True, max_length=500, null=True, verbose_name='退款/拒绝理由')),
|
||||
('wechat_transaction_id', models.CharField(blank=True, db_index=True, max_length=64, null=True, verbose_name='微信支付订单号')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '订单',
|
||||
'verbose_name_plural': '订单',
|
||||
'db_table': 'dingdan',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DingdanPeihu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('zhudashou_id', models.CharField(db_index=True, max_length=32, verbose_name='主打手ID')),
|
||||
('peihu1_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='陪护1打手ID')),
|
||||
('peihu2_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='陪护2打手ID')),
|
||||
('zhuangtai', models.IntegerField(default=1, verbose_name='陪护订单状态')),
|
||||
('peihu_xuqiu_shuliang', models.IntegerField(default=1, verbose_name='陪护需求数量')),
|
||||
('yongjin_yaoqiu', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='抢单佣金要求')),
|
||||
('peihu1_dengji_xuqiu', models.PositiveIntegerField(blank=True, null=True, verbose_name='陪护1等级需求(称号ID)')),
|
||||
('peihu2_dengji_xuqiu', models.PositiveIntegerField(blank=True, null=True, verbose_name='陪护2等级需求(称号ID)')),
|
||||
('peihu1_zhadan_danze', models.CharField(blank=True, max_length=10, null=True, verbose_name='陪护1炸单担责比例')),
|
||||
('peihu2_zhadan_danze', models.CharField(blank=True, max_length=10, null=True, verbose_name='陪护2炸单担责比例')),
|
||||
('peihu1_fenhong', models.CharField(blank=True, max_length=10, null=True, verbose_name='陪护1分红比例')),
|
||||
('peihu2_fenhong', models.CharField(blank=True, max_length=10, null=True, verbose_name='陪护2分红比例')),
|
||||
('zhiding_peihu1', models.CharField(blank=True, max_length=32, null=True, verbose_name='指定陪护1 ID')),
|
||||
('zhiding_peihu2', models.CharField(blank=True, max_length=32, null=True, verbose_name='指定陪护2 ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '陪护订单',
|
||||
'verbose_name_plural': '陪护订单',
|
||||
'db_table': 'dingdan_peihu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DingdanPingtai',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('laoban_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='老板ID')),
|
||||
('laoban_pingjia', models.TextField(blank=True, null=True, verbose_name='老板评价')),
|
||||
('jjjs_biaoshi', models.IntegerField(default=0, verbose_name='拒绝结算标记(1表示拒绝结算)')),
|
||||
('pingtai_shouyi', models.DecimalField(blank=True, decimal_places=2, default=0.0, max_digits=10, null=True, verbose_name='平台收益')),
|
||||
('dianpu_shouyi', models.DecimalField(blank=True, decimal_places=2, default=0.0, max_digits=10, null=True, verbose_name='店铺收益')),
|
||||
('dianpu_id', models.PositiveIntegerField(blank=True, db_index=True, null=True, verbose_name='所属店铺ID')),
|
||||
('shangji_dianpu_id', models.PositiveIntegerField(blank=True, db_index=True, null=True, verbose_name='该订单的上级店铺ID')),
|
||||
('shangji_fenhong', models.DecimalField(blank=True, decimal_places=2, default=0.0, max_digits=10, null=True, verbose_name='上级分红金额')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '平台订单扩展',
|
||||
'verbose_name_plural': '平台订单扩展',
|
||||
'db_table': 'dingdan_pingtai',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DingdanShangjia',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('shangjia_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='商家ID')),
|
||||
('shangjia_pingjia', models.TextField(blank=True, null=True, verbose_name='商家评价')),
|
||||
('cfliyou', models.TextField(blank=True, null=True, verbose_name='商家处罚理由')),
|
||||
('sqzhuangtai', models.IntegerField(blank=True, default=0, null=True, verbose_name='处罚申请状态:0待处理,1成功,2驳回')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回商家处罚理由')),
|
||||
('sjnicheng', models.CharField(max_length=50, null=True, verbose_name='商家昵称')),
|
||||
('shangyige_dingdan_id', models.CharField(blank=True, max_length=32, null=True, verbose_name='上一个订单ID')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商家订单扩展',
|
||||
'verbose_name_plural': '商家订单扩展',
|
||||
'db_table': 'dingdan_shangjia',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Fadan',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='自增主键')),
|
||||
('beichufa_id', models.CharField(db_index=True, max_length=20, verbose_name='被处罚用户ID')),
|
||||
('shenqing_chufa', models.CharField(blank=True, max_length=20, null=True, verbose_name='申请处罚者ID')),
|
||||
('shenfen', models.IntegerField(choices=[(1, '打手'), (2, '管事'), (3, '商家'), (4, '组长')], default=1, verbose_name='被处罚者身份')),
|
||||
('chufaliyou', models.TextField(blank=True, null=True, verbose_name='处罚理由')),
|
||||
('fakuanjine', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='罚款金额')),
|
||||
('guanliandingdan_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='关联订单ID')),
|
||||
('zhuangtai', models.IntegerField(choices=[(1, '待缴纳'), (2, '已缴纳'), (3, '申诉中'), (4, '已驳回')], db_index=True, default=1, verbose_name='罚单状态')),
|
||||
('yingxiang_qiangdan', models.IntegerField(choices=[(1, '影响抢单'), (0, '不影响抢单')], db_index=True, default=1, verbose_name='是否影响抢单')),
|
||||
('shensuliyou', models.TextField(blank=True, null=True, verbose_name='申诉理由')),
|
||||
('tongyi_chufaliyou', models.TextField(blank=True, null=True, verbose_name='同意处罚理由')),
|
||||
('bohuiliyou', models.TextField(blank=True, null=True, verbose_name='驳回理由')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('shenqingren_shenfen', models.IntegerField(choices=[(1, '客服'), (2, '售后'), (3, '管理员'), (4, '店铺'), (5, '商家')], default=1, verbose_name='申请处罚人身份')),
|
||||
('chulizhe_shenfen', models.IntegerField(choices=[(1, '客服'), (2, '售后'), (3, '管理员')], default=2, verbose_name='处理者身份')),
|
||||
('chulizhe', models.CharField(blank=True, max_length=20, null=True, verbose_name='处理者')),
|
||||
('shenqingren_fenhong_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='申请人分红金额')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '罚单',
|
||||
'verbose_name_plural': '罚单',
|
||||
'db_table': 'fadan',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='FadanFenhongLilv',
|
||||
fields=[
|
||||
('shenfen', models.IntegerField(choices=[(1, '客服'), (2, '售后'), (3, '管理员'), (4, '店铺'), (5, '商家')], primary_key=True, serialize=False, verbose_name='申请处罚人身份')),
|
||||
('lilv', models.DecimalField(decimal_places=4, default=0.0, max_digits=5, verbose_name='分红费率')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '罚款分红费率配置',
|
||||
'verbose_name_plural': '罚款分红费率配置',
|
||||
'db_table': 'fadan_fenhong_lilv',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Lilubiao',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('lilu', models.DecimalField(decimal_places=4, max_digits=5, null=True, verbose_name='平台分成利率,1是平台,2是商家')),
|
||||
('fadanpingtai', models.CharField(max_length=10, null=True, verbose_name='订单所属平台,(商家或平台)')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'lilubiao',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Ptliushui',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('zonge', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='收取总金额')),
|
||||
('zhichuzonge', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='支出总金额')),
|
||||
('zongshouyi', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='总收益')),
|
||||
('rizonge', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='日收取')),
|
||||
('rizhichu', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='日支出')),
|
||||
('rishouyi', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='日收益')),
|
||||
('zongshoucishu', models.IntegerField(default=0, verbose_name='总收取次数')),
|
||||
('rishoucishu', models.IntegerField(default=0, verbose_name='日收取次数')),
|
||||
('zongzhichucishu', models.IntegerField(default=0, verbose_name='总支出次数')),
|
||||
('rizhichucishu', models.IntegerField(default=0, verbose_name='日支出次数')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'ptliushui',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Tuikuanjilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('dashouid', models.CharField(max_length=7, null=True, verbose_name='接单打手ID')),
|
||||
('qingqiuid', models.CharField(max_length=7, null=True, verbose_name='请求用户ID')),
|
||||
('chuliid', models.CharField(db_index=True, max_length=11, null=True, verbose_name='处理人ID')),
|
||||
('liyou', models.TextField(blank=True, null=True, verbose_name='理由')),
|
||||
('sqzhuangtai', models.IntegerField(blank=True, db_index=True, default=0, null=True, verbose_name='申请状态:0待处理,1成功,2驳回')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回理由')),
|
||||
('jine', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='订单金额')),
|
||||
('dashou_fencheng', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='打手分成')),
|
||||
('jieshao', models.TextField(blank=True, null=True, verbose_name='订单介绍')),
|
||||
('beizhu', models.TextField(blank=True, null=True, verbose_name='订单备注')),
|
||||
('nicheng', models.CharField(blank=True, max_length=50, null=True, verbose_name='游戏昵称')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'tuikuanjilu',
|
||||
'indexes': [models.Index(fields=['chuliid'], name='tuikuanjilu_chuliid_0b0f16_idx'), models.Index(fields=['sqzhuangtai'], name='tuikuanjilu_sqzhuan_d89dc9_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Pingfen',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dashou', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='接单打手ID')),
|
||||
('zongfen', models.PositiveIntegerField(default=0, verbose_name='总分')),
|
||||
('cishu', models.PositiveIntegerField(default=0, verbose_name='评分次数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '评分表',
|
||||
'db_table': 'pingfenbiao',
|
||||
'indexes': [models.Index(fields=['dashou'], name='pingfenbiao_dashou_f62f10_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OrderDashouHistory',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, verbose_name='订单ID')),
|
||||
('dashou_id', models.CharField(db_index=True, max_length=7, verbose_name='打手ID')),
|
||||
('times', models.PositiveSmallIntegerField(verbose_name='第几次接单(从1开始)')),
|
||||
('operator', models.CharField(max_length=11, verbose_name='操作客服ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '订单打手变更历史',
|
||||
'verbose_name_plural': '订单打手变更历史',
|
||||
'db_table': 'order_dashou_history',
|
||||
'indexes': [models.Index(fields=['dingdan_id'], name='order_dasho_dingdan_1e79ab_idx'), models.Index(fields=['dashou_id'], name='order_dasho_dashou__0a637c_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Liaotian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('user1_id', models.CharField(db_index=True, max_length=30, verbose_name='用户1标识')),
|
||||
('user2_id', models.CharField(db_index=True, max_length=30, verbose_name='用户2标识')),
|
||||
('dingdan_id', models.CharField(max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('zhuangtai', models.IntegerField(choices=[(1, '开启中'), (0, '已关闭')], db_index=True, default=1, verbose_name='聊天状态')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'liaotian',
|
||||
'indexes': [models.Index(fields=['user1_id'], name='liaotian_user1_i_6be6cd_idx'), models.Index(fields=['user2_id'], name='liaotian_user2_i_9f61a4_idx'), models.Index(fields=['zhuangtai'], name='liaotian_zhuangt_5e8be5_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='FadanShensuTupian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('beichufa_id', models.CharField(db_index=True, max_length=7, verbose_name='被处罚用户ID')),
|
||||
('tupian_url', models.CharField(max_length=500, verbose_name='图片相对URL')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('yongtu', models.IntegerField(choices=[(1, '处罚证据图片'), (2, '申诉图片')], default=2, verbose_name='图片用途')),
|
||||
('fadan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='shensu_tupians', to='orders.fadan', verbose_name='关联罚单')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '罚款申诉图片',
|
||||
'verbose_name_plural': '罚款申诉图片',
|
||||
'db_table': 'fadan_shensu_tupian',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='FadanFenhong',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='自增主键')),
|
||||
('fenhongzhe_id', models.CharField(db_index=True, max_length=20, verbose_name='分红者ID')),
|
||||
('zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='分红总额')),
|
||||
('ketixian_fenhong', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现分红')),
|
||||
('shenfen', models.IntegerField(choices=[(1, '商家'), (2, '客服'), (3, '平台管理者'), (4, '店铺'), (5, '售后')], default=1, verbose_name='分红者身份')),
|
||||
('fenhong_cishu', models.IntegerField(default=0, verbose_name='分红次数')),
|
||||
('is_individual_rate', models.BooleanField(default=False, verbose_name='是否单独开启分红利率')),
|
||||
('yingde_lilv', models.DecimalField(decimal_places=4, default=0.0, max_digits=5, verbose_name='分红应得利率')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '罚款分红',
|
||||
'verbose_name_plural': '罚款分红',
|
||||
'db_table': 'fadan_fenhong',
|
||||
'indexes': [models.Index(fields=['fenhongzhe_id'], name='fadan_fenhong_zhe_idx'), models.Index(fields=['shenfen'], name='fadan_fenhong_sf_idx')],
|
||||
},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='fadan',
|
||||
index=models.Index(fields=['beichufa_id', 'yingxiang_qiangdan', 'zhuangtai'], name='fadan_qiangdan_check'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='fadan',
|
||||
index=models.Index(fields=['guanliandingdan_id'], name='fadan_dingdan_idx'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dingdanshangjia',
|
||||
name='dingdan',
|
||||
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='shangjia_kuozhan', to='orders.dingdan', verbose_name='订单'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dingdanpingtai',
|
||||
name='dingdan',
|
||||
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='pingtai_kuozhan', to='orders.dingdan', verbose_name='订单'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdanpeihu',
|
||||
index=models.Index(fields=['zhudashou_id'], name='dingdan_pei_zhudash_583f4e_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdanpeihu',
|
||||
index=models.Index(fields=['peihu1_id'], name='dingdan_pei_peihu1__728279_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdanpeihu',
|
||||
index=models.Index(fields=['peihu2_id'], name='dingdan_pei_peihu2__77e45e_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdanpeihu',
|
||||
index=models.Index(fields=['zhuangtai'], name='dingdan_pei_zhuangt_22eaf6_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdan',
|
||||
index=models.Index(fields=['zhuangtai'], name='dingdan_zhuangt_2febe8_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdan',
|
||||
index=models.Index(fields=['dingdan_id'], name='dingdan_dingdan_83dcb6_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdan',
|
||||
index=models.Index(fields=['jiedan_dashou_id'], name='dingdan_jiedan__921bfa_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdan',
|
||||
index=models.Index(fields=['wechat_transaction_id'], name='dingdan_wechat__278b79_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dashoutupian',
|
||||
index=models.Index(fields=['dashou'], name='dashoutupia_dashou_7de8bd_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dashoutupian',
|
||||
index=models.Index(fields=['dingdan_id'], name='dashoutupia_dingdan_97c685_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='chufatupian',
|
||||
index=models.Index(fields=['yonghuid'], name='chufatupian_yonghui_71e585_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='chufatupian',
|
||||
index=models.Index(fields=['dingdan_id'], name='chufatupian_dingdan_ce0dd4_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='chufajilu',
|
||||
index=models.Index(fields=['dashouid'], name='chufajilu_dashoui_07aac0_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='chufajilu',
|
||||
index=models.Index(fields=['qingqiuid'], name='chufajilu_qingqiu_ac160e_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='chufajilu',
|
||||
index=models.Index(fields=['chuliid'], name='chufajilu_chuliid_cd63ac_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='chufajilu',
|
||||
index=models.Index(fields=['dingdan_id'], name='chufajilu_dingdan_b8f0c2_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='fadanshensutupian',
|
||||
index=models.Index(fields=['fadan_id'], name='fadan_shens_fadan_i_78fab9_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='fadanshensutupian',
|
||||
index=models.Index(fields=['beichufa_id'], name='fadan_shens_beichuf_59748e_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdanshangjia',
|
||||
index=models.Index(fields=['shangjia_id'], name='dingdan_sha_shangji_64d28b_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdanpingtai',
|
||||
index=models.Index(fields=['laoban_id'], name='dingdan_pin_laoban__d55e6f_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdanpingtai',
|
||||
index=models.Index(fields=['dianpu_id'], name='dingdan_pin_dianpu__9fbe27_idx'),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-17 15:21
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='auto_expire_at',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='计划过期时间'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='auto_task_id',
|
||||
field=models.CharField(blank=True, default='', max_length=255, verbose_name='延时任务ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-17 16:26
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0002_dingdan_auto_expire_at_dingdan_auto_task_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='pending_dispatch',
|
||||
field=models.BooleanField(db_index=True, default=False, verbose_name='待调度标记'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='status_8_time',
|
||||
field=models.DateTimeField(blank=True, null=True, verbose_name='状态变为8的时间'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-17 23:57
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0003_dingdan_pending_dispatch_dingdan_status_8_time'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='tuikuanjilu',
|
||||
name='chuliid',
|
||||
field=models.CharField(db_index=True, max_length=11, null=True, verbose_name='处理人ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-20 19:23
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0004_alter_tuikuanjilu_chuliid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='chufajilu',
|
||||
name='chuliid',
|
||||
field=models.CharField(db_index=True, max_length=11, null=True, verbose_name='处理处罚ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,28 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-07 19:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0005_alter_chufajilu_chuliid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Chufatupian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, null=True, verbose_name='订单ID')),
|
||||
('yonghuid', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='用户ID')),
|
||||
('tupian', models.CharField(blank=True, max_length=500, null=True, verbose_name='证据图片URL')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'db_table': 'chufatupian',
|
||||
'indexes': [models.Index(fields=['yonghuid'], name='chufatupian_yonghui_71e585_idx'), models.Index(fields=['dingdan_id'], name='chufatupian_dingdan_ce0dd4_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-08 00:59
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0006_chufatupian'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='chufajilu',
|
||||
name='ssliyou',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='打手申诉理由'),
|
||||
),
|
||||
]
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-14 18:56
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0007_chufajilu_ssliyou'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='is_cross',
|
||||
field=models.IntegerField(default=0, verbose_name='是否跨平台订单(0否,1是)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='partner_order_id',
|
||||
field=models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='对方平台订单ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-21 14:37
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0008_dingdan_is_cross_dingdan_partner_order_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdanpingtai',
|
||||
name='clkf',
|
||||
field=models.CharField(db_index=True, max_length=20, null=True, verbose_name='处理客服'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dingdanpingtai',
|
||||
name='jjjs_biaoshi',
|
||||
field=models.IntegerField(default=0, verbose_name='拒绝结算标记(1表示拒绝结算)'),
|
||||
),
|
||||
]
|
||||
@@ -1,22 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-21 16:33
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0009_dingdanpingtai_clkf_dingdanpingtai_jjjs_biaoshi'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='dingdanpingtai',
|
||||
name='clkf',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='clkf',
|
||||
field=models.CharField(db_index=True, max_length=20, null=True, verbose_name='处理客服'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-21 17:15
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0010_remove_dingdanpingtai_clkf_dingdan_clkf'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='tkly',
|
||||
field=models.CharField(blank=True, max_length=500, null=True, verbose_name='退款/拒绝理由'),
|
||||
),
|
||||
]
|
||||
@@ -1,22 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-22 12:38
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0011_dingdan_tkly'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='wechat_transaction_id',
|
||||
field=models.CharField(blank=True, db_index=True, max_length=64, null=True, verbose_name='微信支付订单号'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdan',
|
||||
index=models.Index(fields=['wechat_transaction_id'], name='dingdan_wechat__278b79_idx'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-22 19:56
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0012_dingdan_wechat_transaction_id_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='chufajilu',
|
||||
name='qingqiuid',
|
||||
field=models.CharField(db_index=True, max_length=11, null=True, verbose_name='请求处罚ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-03-24 17:34
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0013_alter_chufajilu_qingqiuid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='dispatch_type',
|
||||
field=models.IntegerField(choices=[(1, '我方派单'), (2, '对方派单')], default=0, verbose_name='派发情况'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='partner_club_id',
|
||||
field=models.CharField(blank=True, db_index=True, max_length=6, null=True, verbose_name='对方俱乐部ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,73 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-01 09:22
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0014_dingdan_dispatch_type_dingdan_partner_club_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='PreSettlement',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='我方订单ID')),
|
||||
('partner_order_id', models.CharField(db_index=True, max_length=32, verbose_name='对方订单ID')),
|
||||
('partner_club_id', models.CharField(db_index=True, max_length=6, verbose_name='对方俱乐部ID')),
|
||||
('dashou_id', models.CharField(db_index=True, max_length=7, verbose_name='接单打手ID')),
|
||||
('amount', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='打手应分金额')),
|
||||
('order_amount', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='订单原金额')),
|
||||
('status', models.SmallIntegerField(choices=[(0, '待结算'), (1, '已结算'), (2, '已拒绝')], default=0, verbose_name='结算状态')),
|
||||
('process_time', models.DateTimeField(blank=True, null=True, verbose_name='处理时间')),
|
||||
('operator', models.CharField(blank=True, default='', max_length=32, verbose_name='操作人')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '预结算表',
|
||||
'verbose_name_plural': '预结算表',
|
||||
'db_table': 'pre_settlement',
|
||||
'indexes': [models.Index(fields=['dingdan_id'], name='pre_settlem_dingdan_4f3541_idx'), models.Index(fields=['partner_order_id'], name='pre_settlem_partner_45b29e_idx'), models.Index(fields=['partner_club_id'], name='pre_settlem_partner_d2c44c_idx'), models.Index(fields=['dashou_id'], name='pre_settlem_dashou__d5fe7c_idx'), models.Index(fields=['status'], name='pre_settlem_status_0aa711_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='OrderDashouHistory',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, verbose_name='订单ID')),
|
||||
('dashou_id', models.CharField(db_index=True, max_length=7, verbose_name='打手ID')),
|
||||
('times', models.PositiveSmallIntegerField(verbose_name='第几次接单(从1开始)')),
|
||||
('operator', models.CharField(max_length=11, verbose_name='操作客服ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '订单打手变更历史',
|
||||
'verbose_name_plural': '订单打手变更历史',
|
||||
'db_table': 'order_dashou_history',
|
||||
'indexes': [models.Index(fields=['dingdan_id'], name='order_dasho_dingdan_1e79ab_idx'), models.Index(fields=['dashou_id'], name='order_dasho_dashou__0a637c_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='CrossPlatformOrderData',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='我方订单ID')),
|
||||
('partner_order_id', models.CharField(db_index=True, max_length=32, verbose_name='对方平台订单ID')),
|
||||
('partner_club_id', models.CharField(db_index=True, max_length=6, verbose_name='对方俱乐部ID')),
|
||||
('partner_order_status', models.IntegerField(default=0, verbose_name='对方平台订单状态')),
|
||||
('partner_dashou_id', models.CharField(blank=True, default='', max_length=32, verbose_name='对方平台接单打手ID')),
|
||||
('partner_amount', 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='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '跨平台订单扩展',
|
||||
'verbose_name_plural': '跨平台订单扩展',
|
||||
'db_table': 'cross_platform_order_data',
|
||||
'indexes': [models.Index(fields=['dingdan_id'], name='cross_platf_dingdan_498d08_idx'), models.Index(fields=['partner_order_id'], name='cross_platf_partner_5d5615_idx'), models.Index(fields=['partner_club_id'], name='cross_platf_partner_1054e1_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,22 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-04 15:10
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0015_presettlement_orderdashouhistory_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='presettlement',
|
||||
name='dingdan_id',
|
||||
field=models.CharField(db_index=True, max_length=32, verbose_name='我方订单ID'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='presettlement',
|
||||
unique_together={('dingdan_id', 'dashou_id')},
|
||||
),
|
||||
]
|
||||
@@ -1,32 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-23 14:56
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0016_alter_presettlement_dingdan_id_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdanpingtai',
|
||||
name='dianpu_id',
|
||||
field=models.PositiveIntegerField(blank=True, db_index=True, null=True, verbose_name='所属店铺ID'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dingdanpingtai',
|
||||
name='dianpu_shouyi',
|
||||
field=models.DecimalField(blank=True, decimal_places=2, default=0.0, max_digits=10, null=True, verbose_name='店铺收益'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dingdanpingtai',
|
||||
name='pingtai_shouyi',
|
||||
field=models.DecimalField(blank=True, decimal_places=2, default=0.0, max_digits=10, null=True, verbose_name='平台收益'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdanpingtai',
|
||||
index=models.Index(fields=['dianpu_id'], name='dingdan_pin_dianpu__9fbe27_idx'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-30 02:36
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0017_dingdanpingtai_dianpu_id_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdanshangjia',
|
||||
name='partner_yonghu_id',
|
||||
field=models.CharField(blank=True, max_length=32, null=True, verbose_name='对方平台用户ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-05 10:33
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0018_dingdanshangjia_partner_yonghu_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdanpingtai',
|
||||
name='shangji_dianpu_id',
|
||||
field=models.PositiveIntegerField(blank=True, db_index=True, null=True, verbose_name='该订单的上级店铺ID'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dingdanpingtai',
|
||||
name='shangji_fenhong',
|
||||
field=models.DecimalField(blank=True, decimal_places=2, default=0.0, max_digits=10, null=True, verbose_name='上级分红金额'),
|
||||
),
|
||||
]
|
||||
@@ -1,58 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-06 11:28
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0019_dingdanpingtai_shangji_dianpu_id_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='FadanFenhong',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='自增主键')),
|
||||
('fenhongzhe_id', models.CharField(db_index=True, max_length=20, verbose_name='分红者ID')),
|
||||
('zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='分红总额')),
|
||||
('ketixian_fenhong', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现分红')),
|
||||
('shenfen', models.IntegerField(choices=[(1, '商家'), (2, '客服'), (3, '平台管理者')], default=1, verbose_name='分红者身份')),
|
||||
('fenhong_cishu', models.IntegerField(default=0, verbose_name='分红次数')),
|
||||
('yingde_lilv', models.DecimalField(decimal_places=4, default=0.0, max_digits=5, verbose_name='分红应得利率')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '罚款分红',
|
||||
'verbose_name_plural': '罚款分红',
|
||||
'db_table': 'fadan_fenhong',
|
||||
'indexes': [models.Index(fields=['fenhongzhe_id'], name='fadan_fenhong_zhe_idx'), models.Index(fields=['shenfen'], name='fadan_fenhong_sf_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Fadan',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='自增主键')),
|
||||
('beichufa_id', models.CharField(db_index=True, max_length=20, verbose_name='被处罚用户ID')),
|
||||
('shenqing_chufa', models.CharField(blank=True, max_length=20, null=True, verbose_name='申请处罚者ID')),
|
||||
('shenfen', models.IntegerField(choices=[(1, '打手'), (2, '管事'), (3, '商家'), (4, '组长')], default=1, verbose_name='被处罚者身份')),
|
||||
('chufaliyou', models.TextField(blank=True, null=True, verbose_name='处罚理由')),
|
||||
('fakuanjine', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='罚款金额')),
|
||||
('guanliandingdan_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='关联订单ID')),
|
||||
('zhuangtai', models.IntegerField(choices=[(1, '待缴纳'), (2, '已缴纳'), (3, '申诉中'), (4, '已驳回')], db_index=True, default=1, verbose_name='罚单状态')),
|
||||
('yingxiang_qiangdan', models.IntegerField(choices=[(1, '影响抢单'), (0, '不影响抢单')], db_index=True, default=1, verbose_name='是否影响抢单')),
|
||||
('shensuliyou', models.TextField(blank=True, null=True, verbose_name='申诉理由')),
|
||||
('tongyi_chufaliyou', models.TextField(blank=True, null=True, verbose_name='同意处罚理由')),
|
||||
('bohuiliyou', models.TextField(blank=True, null=True, verbose_name='驳回理由')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '罚单',
|
||||
'verbose_name_plural': '罚单',
|
||||
'db_table': 'fadan',
|
||||
'indexes': [models.Index(fields=['beichufa_id', 'yingxiang_qiangdan', 'zhuangtai'], name='fadan_qiangdan_check'), models.Index(fields=['guanliandingdan_id'], name='fadan_dingdan_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,30 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-07 11:15
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0020_fadanfenhong_fadan'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='FadanShensuTupian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('beichufa_id', models.CharField(db_index=True, max_length=7, verbose_name='被处罚用户ID')),
|
||||
('tupian_url', models.CharField(max_length=500, verbose_name='图片相对URL')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('fadan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='shensu_tupians', to='orders.fadan', verbose_name='关联罚单')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '罚款申诉图片',
|
||||
'verbose_name_plural': '罚款申诉图片',
|
||||
'db_table': 'fadan_shensu_tupian',
|
||||
'indexes': [models.Index(fields=['fadan_id'], name='fadan_shens_fadan_i_78fab9_idx'), models.Index(fields=['beichufa_id'], name='fadan_shens_beichuf_59748e_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-07 16:18
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0021_fadanshensutupian'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='fadan',
|
||||
name='partner_club_id',
|
||||
field=models.CharField(blank=True, db_index=True, max_length=6, null=True, verbose_name='对方俱乐部ID'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='fadan',
|
||||
name='shenqingren_shenfen',
|
||||
field=models.IntegerField(choices=[(1, '客服'), (2, '售后'), (3, '管理员')], default=1, verbose_name='申请处罚人身份'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-07 17:03
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0022_fadan_partner_club_id_fadan_shenqingren_shenfen'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='fadanshensutupian',
|
||||
name='yongtu',
|
||||
field=models.IntegerField(choices=[(1, '处罚证据图片'), (2, '申诉图片')], default=2, verbose_name='图片用途'),
|
||||
),
|
||||
]
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-07 19:41
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0023_fadanshensutupian_yongtu'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='fadan',
|
||||
name='chulizhe',
|
||||
field=models.CharField(blank=True, max_length=20, null=True, verbose_name='处理者'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='fadan',
|
||||
name='chulizhe_shenfen',
|
||||
field=models.IntegerField(choices=[(1, '客服'), (2, '售后'), (3, '管理员')], default=2, verbose_name='处理者身份'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-10 00:31
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0024_fadan_chulizhe_fadan_chulizhe_shenfen'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='fadan',
|
||||
name='shenqingren_shenfen',
|
||||
field=models.IntegerField(choices=[(1, '客服'), (2, '售后'), (3, '管理员'), (4, '店铺')], default=1, verbose_name='申请处罚人身份'),
|
||||
),
|
||||
]
|
||||
@@ -1,37 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-10 17:40
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0025_alter_fadan_shenqingren_shenfen'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='FadanFenhongLilv',
|
||||
fields=[
|
||||
('shenfen', models.IntegerField(choices=[(1, '客服'), (2, '售后'), (3, '管理员'), (4, '店铺'), (5, '商家')], primary_key=True, serialize=False, verbose_name='申请处罚人身份')),
|
||||
('lilv', models.DecimalField(decimal_places=4, default=0.0, max_digits=5, verbose_name='分红费率')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '罚款分红费率配置',
|
||||
'verbose_name_plural': '罚款分红费率配置',
|
||||
'db_table': 'fadan_fenhong_lilv',
|
||||
},
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='fadan',
|
||||
name='shenqingren_shenfen',
|
||||
field=models.IntegerField(choices=[(1, '客服'), (2, '售后'), (3, '管理员'), (4, '店铺'), (5, '商家')], default=1, verbose_name='申请处罚人身份'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='fadanfenhong',
|
||||
name='shenfen',
|
||||
field=models.IntegerField(choices=[(1, '商家'), (2, '客服'), (3, '平台管理者'), (4, '店铺'), (5, '售后')], default=1, verbose_name='分红者身份'),
|
||||
),
|
||||
]
|
||||
@@ -1,42 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-22 15:53
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0026_fadanfenhonglilv_alter_fadan_shenqingren_shenfen_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='DingdanPeihu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('zhudashou_id', models.CharField(db_index=True, max_length=32, verbose_name='主打手ID')),
|
||||
('peihu1_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='陪护1打手ID')),
|
||||
('peihu2_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='陪护2打手ID')),
|
||||
('zhuangtai', models.IntegerField(default=1, verbose_name='陪护订单状态')),
|
||||
('peihu_xuqiu_shuliang', models.IntegerField(default=1, verbose_name='陪护需求数量')),
|
||||
('yongjin_yaoqiu', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='抢单佣金要求')),
|
||||
('peihu1_dengji_xuqiu', models.PositiveIntegerField(blank=True, null=True, verbose_name='陪护1等级需求(称号ID)')),
|
||||
('peihu2_dengji_xuqiu', models.PositiveIntegerField(blank=True, null=True, verbose_name='陪护2等级需求(称号ID)')),
|
||||
('peihu1_zhadan_danze', models.CharField(blank=True, max_length=10, null=True, verbose_name='陪护1炸单担责比例')),
|
||||
('peihu2_zhadan_danze', models.CharField(blank=True, max_length=10, null=True, verbose_name='陪护2炸单担责比例')),
|
||||
('peihu1_fenhong', models.CharField(blank=True, max_length=10, null=True, verbose_name='陪护1分红比例')),
|
||||
('peihu2_fenhong', models.CharField(blank=True, max_length=10, null=True, verbose_name='陪护2分红比例')),
|
||||
('zhiding_peihu1', models.CharField(blank=True, max_length=32, null=True, verbose_name='指定陪护1 ID')),
|
||||
('zhiding_peihu2', models.CharField(blank=True, max_length=32, null=True, verbose_name='指定陪护2 ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '陪护订单',
|
||||
'verbose_name_plural': '陪护订单',
|
||||
'db_table': 'dingdan_peihu',
|
||||
'indexes': [models.Index(fields=['zhudashou_id'], name='dingdan_pei_zhudash_583f4e_idx'), models.Index(fields=['peihu1_id'], name='dingdan_pei_peihu1__728279_idx'), models.Index(fields=['peihu2_id'], name='dingdan_pei_peihu2__77e45e_idx'), models.Index(fields=['zhuangtai'], name='dingdan_pei_zhuangt_22eaf6_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-29 17:23
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0027_dingdanpeihu'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdanshangjia',
|
||||
name='shangyige_dingdan_id',
|
||||
field=models.CharField(blank=True, max_length=32, null=True, verbose_name='上一个订单ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-31 22:34
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0028_dingdanshangjia_shangyige_dingdan_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='fadanfenhong',
|
||||
name='is_individual_rate',
|
||||
field=models.BooleanField(default=False, verbose_name='是否单独开启分红利率'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-06-01 00:30
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0029_fadanfenhong_is_individual_rate'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='fadan',
|
||||
name='shenqingren_fenhong_jine',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='申请人分红金额'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-06-12 01:29
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0030_fadan_shenqingren_fenhong_jine'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dingdan',
|
||||
name='guanshi_fencheng',
|
||||
field=models.DecimalField(blank=True, decimal_places=2, default=0, max_digits=10, null=True, verbose_name='管事分成'),
|
||||
),
|
||||
]
|
||||
@@ -1,43 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-06-15 01:42
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0031_dingdan_guanshi_fencheng'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.DeleteModel(
|
||||
name='CrossPlatformOrderData',
|
||||
),
|
||||
migrations.DeleteModel(
|
||||
name='PreSettlement',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='dingdan',
|
||||
name='dispatch_type',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='dingdan',
|
||||
name='is_cross',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='dingdan',
|
||||
name='partner_club_id',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='dingdan',
|
||||
name='partner_order_id',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='dingdanshangjia',
|
||||
name='partner_yonghu_id',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='fadan',
|
||||
name='partner_club_id',
|
||||
),
|
||||
]
|
||||
@@ -1,149 +1,208 @@
|
||||
# Generated by Django 5.2.10 on 2026-01-14 19:59
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Huiyuan',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('huiyuan_id', models.CharField(max_length=6, unique=True, verbose_name='会员ID')),
|
||||
('jieshao', models.CharField(max_length=30, verbose_name='会员介绍')),
|
||||
('jtjieshao', models.TextField(blank=True, null=True, verbose_name='会员规则介绍')),
|
||||
('jiage', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='会员价格')),
|
||||
('guanshifc', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='管事分成')),
|
||||
('goumai_cishu', models.PositiveIntegerField(default=0, verbose_name='购买次数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '会员',
|
||||
'verbose_name_plural': '会员',
|
||||
'db_table': 'huiyuan',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Huiyuangoumai',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='购买记录ID')),
|
||||
('huiyuan_id', models.CharField(db_index=True, max_length=6, verbose_name='会员ID')),
|
||||
('yonghu_id', models.CharField(db_index=True, max_length=32, verbose_name='用户ID')),
|
||||
('huiyuan_zhuangtai', models.PositiveIntegerField(default=1, verbose_name='会员状态')),
|
||||
('jieshao', models.CharField(max_length=30, null=True, verbose_name='会员介绍')),
|
||||
('daoqi_time', models.DateTimeField(verbose_name='会员到期时间')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户购买会员',
|
||||
'verbose_name_plural': '用户购买会员',
|
||||
'db_table': 'huiyuangoumai',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Shangpin',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='商品ID')),
|
||||
('biaoqian', models.CharField(blank=True, max_length=45, null=True, verbose_name='商品标题')),
|
||||
('jiage', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='商品价格')),
|
||||
('kucun', models.PositiveIntegerField(default=0, verbose_name='商品库存')),
|
||||
('leixing_id', models.PositiveIntegerField(blank=True, null=True, verbose_name='商品类型ID')),
|
||||
('zhuanqu_id', models.PositiveIntegerField(blank=True, null=True, verbose_name='商品专区ID')),
|
||||
('zhenshi_xiaoliang', models.PositiveIntegerField(default=0, verbose_name='商品真实销量')),
|
||||
('duiwai_xiaoliang', models.PositiveIntegerField(default=0, verbose_name='商品对外销量')),
|
||||
('jieshao', models.TextField(blank=True, null=True, verbose_name='商品介绍')),
|
||||
('xiadan_xuzhi', models.TextField(blank=True, null=True, verbose_name='下单须知')),
|
||||
('guize_tupian', models.CharField(blank=True, max_length=500, null=True, verbose_name='规则图片URL')),
|
||||
('yaoqiuleixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='抢单要求类型')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('yongjin', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='佣金要求')),
|
||||
('tupian_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='商品图片URL')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商品',
|
||||
'verbose_name_plural': '商品',
|
||||
'db_table': 'shangpin',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShangpinLeixing',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='类型ID')),
|
||||
('yaoqiuleixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='抢单要求类型')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('yongjin', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='佣金要求')),
|
||||
('jieshao', models.CharField(blank=True, max_length=45, null=True, verbose_name='类型介绍')),
|
||||
('tupian_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='类型图片URL')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商品类型',
|
||||
'verbose_name_plural': '商品类型',
|
||||
'db_table': 'shangpin_leixing',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShangpinZhuanqu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='专区ID')),
|
||||
('mingzi', models.CharField(blank=True, max_length=45, null=True, verbose_name='专区名称')),
|
||||
('leixing_id', models.PositiveIntegerField(verbose_name='类型ID')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商品专区',
|
||||
'verbose_name_plural': '商品专区',
|
||||
'db_table': 'shangpin_zhuanqu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Czjilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('zhuangtai', models.IntegerField(blank=True, null=True, verbose_name='订单状态')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('jine', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='订单金额')),
|
||||
('leixing', models.IntegerField(blank=True, null=True, verbose_name='充值类型,1:会员,2:押金,3:积分,4:商家')),
|
||||
('shuoming', models.CharField(blank=True, max_length=100, null=True, verbose_name='订单说明')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '充值记录订单',
|
||||
'verbose_name_plural': '充值记录订单',
|
||||
'db_table': 'czjilu',
|
||||
'indexes': [models.Index(fields=['dingdan_id'], name='czjilu_dingdan_39bbd0_idx'), models.Index(fields=['yonghuid'], name='czjilu_yonghui_a0555f_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Gsfenhong',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('guanshi', models.CharField(db_index=True, max_length=7, verbose_name='管事ID')),
|
||||
('dashouid', models.CharField(db_index=True, max_length=7, unique=True, verbose_name='打手ID')),
|
||||
('shuoming', models.CharField(blank=True, max_length=100, null=True, verbose_name='订单说明')),
|
||||
('fenhong', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='订单分红金额')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='打手头像')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='打手昵称')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管事分红记录',
|
||||
'verbose_name_plural': '管事分红记录',
|
||||
'db_table': 'gsfenhong',
|
||||
'indexes': [models.Index(fields=['guanshi'], name='gsfenhong_guanshi_dc440f_idx'), models.Index(fields=['dashouid'], name='gsfenhong_dashoui_5473ca_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
# Generated by Django 4.2.27 on 2026-06-17 01:32
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Czjilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('zhuangtai', models.IntegerField(blank=True, null=True, verbose_name='订单状态')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('jine', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='订单金额')),
|
||||
('leixing', models.IntegerField(blank=True, null=True, verbose_name='充值类型,1:会员,2:押金,3:积分,4:商家')),
|
||||
('shuoming', models.CharField(blank=True, max_length=100, null=True, verbose_name='订单说明')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '充值记录订单',
|
||||
'verbose_name_plural': '充值记录订单',
|
||||
'db_table': 'czjilu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DuociFenhong',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('huiyuan', models.CharField(max_length=10, verbose_name='会员ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='管事ID')),
|
||||
('cishu', models.PositiveIntegerField(verbose_name='分红次数')),
|
||||
('guanshi_fenhong', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='管事分红金额')),
|
||||
('zuzhang_fenhong', 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='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '多次分红配置',
|
||||
'verbose_name_plural': '多次分红配置',
|
||||
'db_table': 'duoci_fenhong',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Gsfenhong',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(max_length=32, unique=True, verbose_name='订单ID')),
|
||||
('guanshi', models.CharField(db_index=True, max_length=7, verbose_name='管事ID')),
|
||||
('dashouid', models.CharField(db_index=True, max_length=7, verbose_name='打手ID')),
|
||||
('shuoming', models.CharField(blank=True, max_length=100, null=True, verbose_name='订单说明')),
|
||||
('fenhong', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='订单分红金额')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='打手头像')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='打手昵称')),
|
||||
('zuzhang_id', models.CharField(blank=True, db_index=True, max_length=7, null=True, verbose_name='组长ID')),
|
||||
('zuzhang_fenhong', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='组长分红金额')),
|
||||
('fenhong_leixing', models.PositiveSmallIntegerField(choices=[(1, '会员分红'), (2, '押金分红'), (3, '商家订单分红')], default=1, verbose_name='分红类型')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管事分红记录',
|
||||
'verbose_name_plural': '管事分红记录',
|
||||
'db_table': 'gsfenhong',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Huiyuan',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('huiyuan_id', models.CharField(max_length=6, unique=True, verbose_name='会员ID')),
|
||||
('jieshao', models.CharField(max_length=30, verbose_name='会员介绍')),
|
||||
('jtjieshao', models.TextField(blank=True, null=True, verbose_name='会员规则介绍')),
|
||||
('jiage', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='会员价格')),
|
||||
('guanshifc', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='管事分成')),
|
||||
('zuzhangfc', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='组长分成')),
|
||||
('goumai_cishu', models.PositiveIntegerField(default=0, verbose_name='购买次数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '会员',
|
||||
'verbose_name_plural': '会员',
|
||||
'db_table': 'huiyuan',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Huiyuangoumai',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='购买记录ID')),
|
||||
('huiyuan_id', models.CharField(db_index=True, max_length=6, verbose_name='会员ID')),
|
||||
('yonghu_id', models.CharField(db_index=True, max_length=32, verbose_name='用户ID')),
|
||||
('huiyuan_zhuangtai', models.PositiveIntegerField(default=1, verbose_name='会员状态')),
|
||||
('jieshao', models.CharField(max_length=30, null=True, verbose_name='会员介绍')),
|
||||
('daoqi_time', models.DateTimeField(verbose_name='会员到期时间')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户购买会员',
|
||||
'verbose_name_plural': '用户购买会员',
|
||||
'db_table': 'huiyuangoumai',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Shangpin',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='商品ID')),
|
||||
('biaoqian', models.CharField(blank=True, max_length=45, null=True, verbose_name='商品标题')),
|
||||
('jiage', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='商品价格')),
|
||||
('kucun', models.PositiveIntegerField(default=0, verbose_name='商品库存')),
|
||||
('leixing_id', models.PositiveIntegerField(blank=True, null=True, verbose_name='商品类型ID')),
|
||||
('zhuanqu_id', models.PositiveIntegerField(blank=True, null=True, verbose_name='商品专区ID')),
|
||||
('zhenshi_xiaoliang', models.PositiveIntegerField(default=0, verbose_name='商品真实销量')),
|
||||
('duiwai_xiaoliang', models.PositiveIntegerField(default=0, verbose_name='商品对外销量')),
|
||||
('jieshao', models.TextField(blank=True, null=True, verbose_name='商品介绍')),
|
||||
('xiadan_xuzhi', models.TextField(blank=True, null=True, verbose_name='下单须知')),
|
||||
('guize_tupian', models.CharField(blank=True, max_length=500, null=True, verbose_name='规则图片URL')),
|
||||
('yaoqiuleixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='抢单要求类型')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('yongjin', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='佣金要求')),
|
||||
('kaioi_ewai_dashou_fencheng', models.BooleanField(default=False, verbose_name='是否开启打手额外分成')),
|
||||
('ewai_dashou_fencheng', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='打手额外分成金额')),
|
||||
('tupian_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='商品图片URL')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更改时间')),
|
||||
('paixu', models.IntegerField(default=0, verbose_name='排序权重')),
|
||||
('shenhezhuangtai', models.IntegerField(default=1, help_text='1=正常, 2=审核专用', verbose_name='审核状态')),
|
||||
('shangjia_zhuangtai', models.BooleanField(default=True, verbose_name='是否上架')),
|
||||
('fengjin_zhuangtai', models.BooleanField(default=True, verbose_name='是否封禁')),
|
||||
('shenhe_zhuangtai', models.BooleanField(default=False, help_text='True=审核通过,False=未审核', verbose_name='平台审核状态')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商品',
|
||||
'verbose_name_plural': '商品',
|
||||
'db_table': 'shangpin',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShangpinLeixing',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='类型ID')),
|
||||
('yaoqiuleixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='抢单要求类型')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('yongjin', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='佣金要求')),
|
||||
('jieshao', models.CharField(blank=True, max_length=45, null=True, verbose_name='类型介绍')),
|
||||
('tupian_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='类型图片URL')),
|
||||
('paixu', models.IntegerField(default=0, verbose_name='排序权重')),
|
||||
('shenhezhuangtai', models.IntegerField(default=1, help_text='1=正常, 2=审核专用', verbose_name='审核状态')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商品类型',
|
||||
'verbose_name_plural': '商品类型',
|
||||
'db_table': 'shangpin_leixing',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShangpinMeiriTongji',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('riqi', models.DateField(db_index=True, verbose_name='统计日期')),
|
||||
('nian', models.PositiveSmallIntegerField(verbose_name='年份')),
|
||||
('yue', models.PositiveSmallIntegerField(verbose_name='月份')),
|
||||
('ri', models.PositiveSmallIntegerField(verbose_name='日')),
|
||||
('diandan_zongliang', models.PositiveIntegerField(default=0, verbose_name='点单总量')),
|
||||
('diandan_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='点单总额')),
|
||||
('chengjiao_zongliang', models.PositiveIntegerField(default=0, verbose_name='成交总量')),
|
||||
('chengjiao_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='成交总额')),
|
||||
('tuikuan_zongliang', models.PositiveIntegerField(default=0, verbose_name='退款总量')),
|
||||
('tuikuan_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='退款总额')),
|
||||
('pingtai_shouyi', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='平台收益')),
|
||||
('dianpu_zongshouyi', 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='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商品每日统计',
|
||||
'verbose_name_plural': '商品每日统计',
|
||||
'db_table': 'shangpin_meiri_tongji',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShangpinZhuanqu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='专区ID')),
|
||||
('mingzi', models.CharField(blank=True, max_length=45, null=True, verbose_name='专区名称')),
|
||||
('leixing_id', models.PositiveIntegerField(verbose_name='类型ID')),
|
||||
('paixu', models.IntegerField(default=0, verbose_name='排序权重')),
|
||||
('shenhezhuangtai', models.IntegerField(default=1, help_text='1=正常, 2=审核专用', verbose_name='审核状态')),
|
||||
('shangjia_zhuangtai', models.BooleanField(default=True, verbose_name='是否上架')),
|
||||
('fengjin_zhuangtai', models.BooleanField(default=True, verbose_name='是否封禁')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商品专区',
|
||||
'verbose_name_plural': '商品专区',
|
||||
'db_table': 'shangpin_zhuanqu',
|
||||
},
|
||||
),
|
||||
]
|
||||
|
||||
@@ -1,29 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-18 14:24
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterUniqueTogether(
|
||||
name='huiyuangoumai',
|
||||
unique_together={('yonghu_id', 'huiyuan_id')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='huiyuangoumai',
|
||||
index=models.Index(fields=['yonghu_id'], name='huiyuangoum_yonghu__ba2138_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='huiyuangoumai',
|
||||
index=models.Index(fields=['huiyuan_id'], name='huiyuangoum_huiyuan_35fe1d_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='huiyuangoumai',
|
||||
index=models.Index(fields=['yonghu_id', 'huiyuan_id'], name='huiyuangoum_yonghu__21e6e1_idx'),
|
||||
),
|
||||
]
|
||||
105
products/migrations/0002_initial.py
Normal file
105
products/migrations/0002_initial.py
Normal file
@@ -0,0 +1,105 @@
|
||||
# Generated by Django 4.2.27 on 2026-06-17 01:32
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
('rank', '0001_initial'),
|
||||
('products', '0001_initial'),
|
||||
('shop', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='shangpinzhuanqu',
|
||||
name='dianpu',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='shop.dianpu', verbose_name='所属店铺'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinzhuanqu',
|
||||
name='dianpu_leixing',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shop.shangpinleixingdianpu', verbose_name='店铺商品类型'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinmeiritongji',
|
||||
name='shangpin',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='products.shangpin', verbose_name='商品ID'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinleixing',
|
||||
name='bankuai',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rank.bankuai', verbose_name='所属板块'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='dianpu',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='shop.dianpu', verbose_name='所属店铺'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='dianpu_leixing',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shop.shangpinleixingdianpu', verbose_name='店铺商品类型'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='huiyuangoumai',
|
||||
index=models.Index(fields=['yonghu_id'], name='huiyuangoum_yonghu__ba2138_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='huiyuangoumai',
|
||||
index=models.Index(fields=['huiyuan_id'], name='huiyuangoum_huiyuan_35fe1d_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='huiyuangoumai',
|
||||
index=models.Index(fields=['yonghu_id', 'huiyuan_id'], name='huiyuangoum_yonghu__21e6e1_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='huiyuangoumai',
|
||||
unique_together={('yonghu_id', 'huiyuan_id')},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='huiyuan',
|
||||
name='bankuai',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rank.bankuai', verbose_name='所属板块'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='gsfenhong',
|
||||
index=models.Index(fields=['guanshi'], name='gsfenhong_guanshi_dc440f_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='gsfenhong',
|
||||
index=models.Index(fields=['dashouid'], name='gsfenhong_dashoui_5473ca_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='duocifenhong',
|
||||
index=models.Index(fields=['yonghuid'], name='duoci_fenho_yonghui_db6a2f_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='duocifenhong',
|
||||
unique_together={('huiyuan', 'yonghuid', 'cishu')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='czjilu',
|
||||
index=models.Index(fields=['dingdan_id'], name='czjilu_dingdan_39bbd0_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='czjilu',
|
||||
index=models.Index(fields=['yonghuid'], name='czjilu_yonghui_a0555f_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='shangpinmeiritongji',
|
||||
index=models.Index(fields=['shangpin', 'riqi'], name='shangpin_me_shangpi_d27e5c_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='shangpinmeiritongji',
|
||||
index=models.Index(fields=['nian', 'yue', 'ri'], name='shangpin_me_nian_e3b409_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='shangpinmeiritongji',
|
||||
unique_together={('shangpin', 'riqi')},
|
||||
),
|
||||
]
|
||||
@@ -1,33 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-07 19:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0002_alter_huiyuangoumai_unique_together_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='paixu',
|
||||
field=models.IntegerField(default=0, verbose_name='排序权重'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinleixing',
|
||||
name='paixu',
|
||||
field=models.IntegerField(default=0, verbose_name='排序权重'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinleixing',
|
||||
name='shenhezhuangtai',
|
||||
field=models.IntegerField(default=1, help_text='1=正常, 2=审核专用', verbose_name='审核状态'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinzhuanqu',
|
||||
name='paixu',
|
||||
field=models.IntegerField(default=0, verbose_name='排序权重'),
|
||||
),
|
||||
]
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-09 15:38
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0003_shangpin_paixu_shangpinleixing_paixu_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='shenhezhuangtai',
|
||||
field=models.IntegerField(default=1, help_text='1=正常, 2=审核专用', verbose_name='审核状态'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinzhuanqu',
|
||||
name='shenhezhuangtai',
|
||||
field=models.IntegerField(default=1, help_text='1=正常, 2=审核专用', verbose_name='审核状态'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-27 15:22
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0004_shangpin_shenhezhuangtai_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='gsfenhong',
|
||||
name='dashouid',
|
||||
field=models.CharField(db_index=True, max_length=7, verbose_name='打手ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,45 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-03-18 12:09
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0005_alter_gsfenhong_dashouid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='gsfenhong',
|
||||
name='huiyuan_id',
|
||||
field=models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='huiyuan',
|
||||
name='zuzhangfc',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='组长分成'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DuociFenhong',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('guanshi', models.CharField(db_index=True, max_length=7, verbose_name='管事ID')),
|
||||
('zuzhang', models.CharField(blank=True, db_index=True, max_length=7, null=True, verbose_name='组长ID')),
|
||||
('cishu', models.PositiveIntegerField(verbose_name='分红次数')),
|
||||
('guanshi_fenhong', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='管事分红金额')),
|
||||
('zuzhang_fenhong', 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='更新时间')),
|
||||
('huiyuan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='products.huiyuan', verbose_name='会员')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '多次分红配置',
|
||||
'verbose_name_plural': '多次分红配置',
|
||||
'db_table': 'duoci_fenhong',
|
||||
'indexes': [models.Index(fields=['guanshi'], name='duoci_fenho_guanshi_b3de53_idx'), models.Index(fields=['zuzhang'], name='duoci_fenho_zuzhang_69997d_idx')],
|
||||
'unique_together': {('huiyuan', 'guanshi', 'cishu')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,47 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-03-19 13:40
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0006_gsfenhong_huiyuan_id_huiyuan_zuzhangfc_duocifenhong'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveIndex(
|
||||
model_name='duocifenhong',
|
||||
name='duoci_fenho_guanshi_b3de53_idx',
|
||||
),
|
||||
migrations.RemoveIndex(
|
||||
model_name='duocifenhong',
|
||||
name='duoci_fenho_zuzhang_69997d_idx',
|
||||
),
|
||||
migrations.RenameField(
|
||||
model_name='duocifenhong',
|
||||
old_name='guanshi',
|
||||
new_name='yonghuid',
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='duocifenhong',
|
||||
unique_together=set(),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='duocifenhong',
|
||||
name='huiyuan',
|
||||
field=models.CharField(max_length=10, verbose_name='会员ID'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='duocifenhong',
|
||||
unique_together={('huiyuan', 'yonghuid', 'cishu')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='duocifenhong',
|
||||
index=models.Index(fields=['yonghuid'], name='duoci_fenho_yonghui_db6a2f_idx'),
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='duocifenhong',
|
||||
name='zuzhang',
|
||||
),
|
||||
]
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-03-19 13:53
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0007_remove_duocifenhong_duoci_fenho_guanshi_b3de53_idx_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='gsfenhong',
|
||||
name='zuzhang_fenhong',
|
||||
field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='组长分红金额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='gsfenhong',
|
||||
name='zuzhang_id',
|
||||
field=models.CharField(blank=True, db_index=True, max_length=7, null=True, verbose_name='组长ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,23 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-03-22 15:35
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0008_gsfenhong_zuzhang_fenhong_gsfenhong_zuzhang_id'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='ewai_dashou_fencheng',
|
||||
field=models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='打手额外分成金额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='kaioi_ewai_dashou_fencheng',
|
||||
field=models.BooleanField(default=False, verbose_name='是否开启打手额外分成'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-03-24 17:34
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0009_shangpin_ewai_dashou_fencheng_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='shangpinleixing',
|
||||
name='is_cross_enabled',
|
||||
field=models.BooleanField(default=False, verbose_name='是否开启平台互通'),
|
||||
),
|
||||
]
|
||||
@@ -1,60 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-21 12:36
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('shop', '0001_initial'),
|
||||
('products', '0010_shangpinleixing_is_cross_enabled'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='dianpu',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='shop.dianpu', verbose_name='所属店铺'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='dianpu_leixing',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shop.shangpinleixingdianpu', verbose_name='店铺商品类型'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='fengjin_zhuangtai',
|
||||
field=models.BooleanField(default=True, verbose_name='是否封禁'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='shangjia_zhuangtai',
|
||||
field=models.BooleanField(default=True, verbose_name='是否上架'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpin',
|
||||
name='shenhe_zhuangtai',
|
||||
field=models.BooleanField(default=False, help_text='True=审核通过,False=未审核', verbose_name='平台审核状态'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinzhuanqu',
|
||||
name='dianpu',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='shop.dianpu', verbose_name='所属店铺'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinzhuanqu',
|
||||
name='dianpu_leixing',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='shop.shangpinleixingdianpu', verbose_name='店铺商品类型'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinzhuanqu',
|
||||
name='fengjin_zhuangtai',
|
||||
field=models.BooleanField(default=True, verbose_name='是否封禁'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shangpinzhuanqu',
|
||||
name='shangjia_zhuangtai',
|
||||
field=models.BooleanField(default=True, verbose_name='是否上架'),
|
||||
),
|
||||
]
|
||||
@@ -1,42 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-23 14:56
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0011_shangpin_dianpu_shangpin_dianpu_leixing_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ShangpinMeiriTongji',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('riqi', models.DateField(db_index=True, verbose_name='统计日期')),
|
||||
('nian', models.PositiveSmallIntegerField(verbose_name='年份')),
|
||||
('yue', models.PositiveSmallIntegerField(verbose_name='月份')),
|
||||
('ri', models.PositiveSmallIntegerField(verbose_name='日')),
|
||||
('diandan_zongliang', models.PositiveIntegerField(default=0, verbose_name='点单总量')),
|
||||
('diandan_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='点单总额')),
|
||||
('chengjiao_zongliang', models.PositiveIntegerField(default=0, verbose_name='成交总量')),
|
||||
('chengjiao_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='成交总额')),
|
||||
('tuikuan_zongliang', models.PositiveIntegerField(default=0, verbose_name='退款总量')),
|
||||
('tuikuan_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='退款总额')),
|
||||
('pingtai_shouyi', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='平台收益')),
|
||||
('dianpu_zongshouyi', 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='更新时间')),
|
||||
('shangpin', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='products.shangpin', verbose_name='商品ID')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商品每日统计',
|
||||
'verbose_name_plural': '商品每日统计',
|
||||
'db_table': 'shangpin_meiri_tongji',
|
||||
'indexes': [models.Index(fields=['shangpin', 'riqi'], name='shangpin_me_shangpi_d27e5c_idx'), models.Index(fields=['nian', 'yue', 'ri'], name='shangpin_me_nian_e3b409_idx')],
|
||||
'unique_together': {('shangpin', 'riqi')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,20 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-14 04:25
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rank', '0003_alter_dashoubiaoxian_bankuai'),
|
||||
('products', '0012_shangpinmeiritongji'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='shangpinleixing',
|
||||
name='bankuai',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rank.bankuai', verbose_name='所属板块'),
|
||||
),
|
||||
]
|
||||
@@ -1,20 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-16 16:51
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rank', '0010_kaohejilufeiyong'),
|
||||
('products', '0013_shangpinleixing_bankuai'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='huiyuan',
|
||||
name='bankuai',
|
||||
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='rank.bankuai', verbose_name='所属板块'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-06-12 01:29
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0014_huiyuan_bankuai'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='gsfenhong',
|
||||
name='fenhong_leixing',
|
||||
field=models.PositiveSmallIntegerField(choices=[(1, '会员分红'), (2, '押金分红'), (3, '商家订单分红')], default=1, verbose_name='分红类型'),
|
||||
),
|
||||
]
|
||||
@@ -1,17 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-06-15 01:42
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('products', '0015_gsfenhong_fenhong_leixing'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='shangpinleixing',
|
||||
name='is_cross_enabled',
|
||||
),
|
||||
]
|
||||
@@ -1,111 +1,277 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-12 02:17
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('orders', '0026_fadanfenhonglilv_alter_fadan_shenqingren_shenfen_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Bankuai',
|
||||
fields=[
|
||||
('bankuai_id', models.AutoField(primary_key=True, serialize=False, verbose_name='板块ID')),
|
||||
('mingcheng', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='板块名称')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '板块',
|
||||
'verbose_name_plural': '板块',
|
||||
'db_table': 'bankuai',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Chenghao',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('mingcheng', models.CharField(max_length=50, unique=True, verbose_name='称号名称')),
|
||||
('leixing', models.CharField(choices=[('dashou', '打手'), ('boss', '老板'), ('shangjia', '商家'), ('guanshi', '管事'), ('zuzhang', '组长')], max_length=10, verbose_name='称号类型')),
|
||||
('tubiao_url', models.CharField(blank=True, max_length=200, null=True, verbose_name='称号图标相对URL')),
|
||||
('texiao_miaoshu', models.TextField(blank=True, null=True, verbose_name='特效描述(JSON)')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('bankuai', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='rank.bankuai', verbose_name='所属板块(空=全板块通用)')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '称号',
|
||||
'verbose_name_plural': '称号',
|
||||
'db_table': 'chenghao',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='YonghuChenghao',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('huode_time', models.DateTimeField(auto_now_add=True, verbose_name='获得时间')),
|
||||
('chenghao', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.chenghao', verbose_name='称号')),
|
||||
('yonghu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='chenghao_list', to=settings.AUTH_USER_MODEL, verbose_name='用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户称号关联',
|
||||
'verbose_name_plural': '用户称号关联',
|
||||
'db_table': 'yonghu_chenghao',
|
||||
'indexes': [models.Index(fields=['yonghu', 'chenghao'], name='yonghu_chen_yonghu__cac0a1_idx')],
|
||||
'unique_together': {('yonghu', 'chenghao')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='JingyanJilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yonghu_id', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('yonghu_leixing', models.CharField(choices=[('dashou', '打手'), ('boss', '老板'), ('shangjia', '商家'), ('guanshi', '管事'), ('zuzhang', '组长')], max_length=10, verbose_name='用户类型')),
|
||||
('sudu_jingyan', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='上线速度经验')),
|
||||
('shili_jingyan', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='打手实力经验')),
|
||||
('taidu_jingyan', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='服务态度经验')),
|
||||
('zonghe_jingyan', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='综合经验')),
|
||||
('dingdan_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='关联订单ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('bankuai', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='rank.bankuai', verbose_name='所属板块')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '经验变动记录',
|
||||
'verbose_name_plural': '经验变动记录',
|
||||
'db_table': 'jingyan_jilu',
|
||||
'indexes': [models.Index(fields=['yonghu_id', 'bankuai', 'create_time'], name='jingyan_jil_yonghu__786992_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DashouBiaoxian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dashou_id', models.CharField(db_index=True, max_length=32, verbose_name='打手ID')),
|
||||
('shangxian_sudu', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='上线速度评价(1-5)')),
|
||||
('fuwu_taidu', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='服务态度评价(1-5)')),
|
||||
('fanche_cishu', models.PositiveIntegerField(blank=True, null=True, verbose_name='翻车次数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('jiedan_time', models.DateTimeField(blank=True, null=True, verbose_name='接单时间')),
|
||||
('tijiao_time', models.DateTimeField(blank=True, null=True, verbose_name='提交时间')),
|
||||
('bankuai', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='rank.bankuai', verbose_name='所属板块')),
|
||||
('dingdan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='biaoxian', to='orders.dingdan', verbose_name='关联订单')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '打手订单表现',
|
||||
'verbose_name_plural': '打手订单表现',
|
||||
'db_table': 'dashou_biaoxian',
|
||||
'indexes': [models.Index(fields=['dashou_id', 'bankuai', 'create_time'], name='dashou_biao_dashou__36e1c3_idx')],
|
||||
},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='chenghao',
|
||||
index=models.Index(fields=['leixing', 'bankuai'], name='chenghao_leixing_8f4371_idx'),
|
||||
),
|
||||
]
|
||||
# Generated by Django 4.2.27 on 2026-06-17 01:32
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('orders', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Bankuai',
|
||||
fields=[
|
||||
('bankuai_id', models.AutoField(primary_key=True, serialize=False, verbose_name='板块ID')),
|
||||
('mingcheng', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='板块名称')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '板块',
|
||||
'verbose_name_plural': '板块',
|
||||
'db_table': 'bankuai',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Chenghao',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('mingcheng', models.CharField(max_length=50, unique=True, verbose_name='称号名称')),
|
||||
('leixing', models.CharField(choices=[('dashou', '打手'), ('boss', '老板'), ('shangjia', '商家'), ('guanshi', '管事'), ('zuzhang', '组长')], max_length=10, verbose_name='称号类型')),
|
||||
('tubiao_url', models.CharField(blank=True, max_length=200, null=True, verbose_name='称号图标相对URL')),
|
||||
('texiao_miaoshu', models.TextField(blank=True, null=True, verbose_name='特效描述(JSON)')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('kaohe_guize', models.TextField(blank=True, null=True, verbose_name='考核规则')),
|
||||
('kaioi_jinpai', models.BooleanField(default=False, verbose_name='是否同时开启金牌')),
|
||||
('bankuai', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='rank.bankuai', verbose_name='所属板块(空=全板块通用)')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '称号',
|
||||
'verbose_name_plural': '称号',
|
||||
'db_table': 'chenghao',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='KaohePayTemp',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='订单ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('tag_id', models.IntegerField(verbose_name='标签ID')),
|
||||
('game_nick', models.CharField(max_length=100, verbose_name='游戏昵称')),
|
||||
('remark', models.TextField(blank=True, verbose_name='备注')),
|
||||
('reapply', models.BooleanField(default=False, verbose_name='是否再次申请')),
|
||||
('jilu_id', models.CharField(blank=True, max_length=32, null=True, verbose_name='原记录ID(再次申请时)')),
|
||||
('shenheguan_id', models.CharField(blank=True, max_length=7, verbose_name='指定考核官ID')),
|
||||
('cishu', models.IntegerField(verbose_name='本次考核次数(预计算)')),
|
||||
('fee', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='本次费用(分账单位)')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '考核支付临时表',
|
||||
'verbose_name_plural': '考核支付临时表',
|
||||
'db_table': 'kaohe_pay_temp',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShenheJilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('shenqingren_id', models.CharField(max_length=7, verbose_name='申请人用户ID')),
|
||||
('shenheguan_id', models.CharField(max_length=7, null=True, verbose_name='审核官用户ID')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '审核中'), (1, '通过'), (2, '未通过'), (3, '待审核')], default=0, verbose_name='审核状态')),
|
||||
('cishu', models.IntegerField(default=1, verbose_name='第几次审核')),
|
||||
('jiaofei_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='更新时间')),
|
||||
('jilu_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='记录ID')),
|
||||
('guize_neirong', models.TextField(blank=True, null=True, verbose_name='规则内容')),
|
||||
('shenheguan_youxi_id', models.CharField(blank=True, max_length=50, null=True, verbose_name='审核官游戏ID')),
|
||||
('dashou_youxi_id', models.CharField(blank=True, max_length=50, null=True, verbose_name='打手游戏ID')),
|
||||
('dashou_beizhu', models.TextField(blank=True, null=True, verbose_name='打手备注')),
|
||||
('bankuai', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='rank.bankuai', verbose_name='审核板块')),
|
||||
('chenghao', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='rank.chenghao', verbose_name='审核标签')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '审核记录',
|
||||
'verbose_name_plural': '审核记录',
|
||||
'db_table': 'shenhe_jilu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='KaoheJujueJilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('cishu', models.IntegerField(verbose_name='对应次数')),
|
||||
('shenheguan_id', models.CharField(max_length=7, verbose_name='考核官用户ID')),
|
||||
('yuanyin', models.TextField(verbose_name='拒绝原因')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('jilu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.shenhejilu', to_field='jilu_id', verbose_name='审核记录')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '拒绝原因记录',
|
||||
'verbose_name_plural': '拒绝原因记录',
|
||||
'db_table': 'kaohe_jujue_jilu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='KaoheJiluFeiyong',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('cishu', models.IntegerField(verbose_name='第几次考核')),
|
||||
('jine', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='缴纳金额')),
|
||||
('jilu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.shenhejilu', to_field='jilu_id', verbose_name='考核记录')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '考核记录费用',
|
||||
'verbose_name_plural': '考核记录费用',
|
||||
'db_table': 'kaohe_jilu_feiyong',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='KaoheguanBankuai',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('kaoheguan_id', models.CharField(db_index=True, max_length=7, verbose_name='考核官用户ID')),
|
||||
('bankuai', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.bankuai', verbose_name='所属板块')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '考核官板块关联',
|
||||
'verbose_name_plural': '考核官板块关联',
|
||||
'db_table': 'kaoheguan_bankuai',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='KaoheCishuFeiyong',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('cishu', models.IntegerField(verbose_name='第几次考核')),
|
||||
('feiyong', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='需缴纳金额')),
|
||||
('chenghao', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.chenghao', verbose_name='标签')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '考核次数费用',
|
||||
'verbose_name_plural': '考核次数费用',
|
||||
'db_table': 'kaohe_cishu_feiyong',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='JingyanJilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yonghu_id', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('yonghu_leixing', models.CharField(choices=[('dashou', '打手'), ('boss', '老板'), ('shangjia', '商家'), ('guanshi', '管事'), ('zuzhang', '组长')], max_length=10, verbose_name='用户类型')),
|
||||
('sudu_jingyan', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='上线速度经验')),
|
||||
('shili_jingyan', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='打手实力经验')),
|
||||
('taidu_jingyan', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='服务态度经验')),
|
||||
('zonghe_jingyan', models.DecimalField(decimal_places=2, default=0, max_digits=8, verbose_name='综合经验')),
|
||||
('dingdan_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='关联订单ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('bankuai', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='rank.bankuai', verbose_name='所属板块')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '经验变动记录',
|
||||
'verbose_name_plural': '经验变动记录',
|
||||
'db_table': 'jingyan_jilu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DingdanBiaoqian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('chenghao', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.chenghao', verbose_name='标签')),
|
||||
('dingdan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='orders.dingdan', to_field='dingdan_id', verbose_name='订单')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '订单需求标签',
|
||||
'verbose_name_plural': '订单需求标签',
|
||||
'db_table': 'dingdan_biaoqian',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DashouBiaoxian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dashou_id', models.CharField(db_index=True, max_length=32, verbose_name='打手ID')),
|
||||
('shangxian_sudu', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='上线速度评价(1-5)')),
|
||||
('fuwu_taidu', models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='服务态度评价(1-5)')),
|
||||
('fanche_cishu', models.PositiveIntegerField(blank=True, null=True, verbose_name='翻车次数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('jiedan_time', models.DateTimeField(blank=True, null=True, verbose_name='接单时间')),
|
||||
('tijiao_time', models.DateTimeField(blank=True, null=True, verbose_name='提交时间')),
|
||||
('bankuai', models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='rank.bankuai', verbose_name='所属板块')),
|
||||
('dingdan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='biaoxian', to='orders.dingdan', to_field='dingdan_id', verbose_name='关联订单')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '打手订单表现',
|
||||
'verbose_name_plural': '打手订单表现',
|
||||
'db_table': 'dashou_biaoxian',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='YonghuChenghao',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('huode_time', models.DateTimeField(auto_now_add=True, verbose_name='获得时间')),
|
||||
('chenghao', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.chenghao', verbose_name='称号')),
|
||||
('yonghu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='chenghao_list', to=settings.AUTH_USER_MODEL, verbose_name='用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户称号关联',
|
||||
'verbose_name_plural': '用户称号关联',
|
||||
'db_table': 'yonghu_chenghao',
|
||||
'indexes': [models.Index(fields=['yonghu', 'chenghao'], name='yonghu_chen_yonghu__cac0a1_idx')],
|
||||
'unique_together': {('yonghu', 'chenghao')},
|
||||
},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='shenhejilu',
|
||||
index=models.Index(fields=['shenqingren_id', 'zhuangtai'], name='shenhe_jilu_shenqin_502e9b_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='shenhejilu',
|
||||
index=models.Index(fields=['shenheguan_id'], name='shenhe_jilu_shenheg_5c9959_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='kaohejujuejilu',
|
||||
index=models.Index(fields=['jilu_id', 'cishu'], name='kaohe_jujue_jilu_id_1f2b29_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='kaohejilufeiyong',
|
||||
unique_together={('jilu', 'cishu')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='kaoheguanbankuai',
|
||||
index=models.Index(fields=['kaoheguan_id'], name='kaoheguan_b_kaohegu_00f7c5_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='kaoheguanbankuai',
|
||||
unique_together={('kaoheguan_id', 'bankuai')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='kaohecishufeiyong',
|
||||
index=models.Index(fields=['chenghao', 'cishu'], name='kaohe_cishu_chengha_edc272_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='kaohecishufeiyong',
|
||||
unique_together={('chenghao', 'cishu')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='jingyanjilu',
|
||||
index=models.Index(fields=['yonghu_id', 'bankuai', 'create_time'], name='jingyan_jil_yonghu__786992_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dingdanbiaoqian',
|
||||
index=models.Index(fields=['dingdan'], name='dingdan_bia_dingdan_4d046b_idx'),
|
||||
),
|
||||
migrations.AlterUniqueTogether(
|
||||
name='dingdanbiaoqian',
|
||||
unique_together={('dingdan', 'chenghao')},
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='dashoubiaoxian',
|
||||
index=models.Index(fields=['dashou_id', 'bankuai', 'create_time'], name='dashou_biao_dashou__36e1c3_idx'),
|
||||
),
|
||||
migrations.AddIndex(
|
||||
model_name='chenghao',
|
||||
index=models.Index(fields=['leixing', 'bankuai'], name='chenghao_leixing_8f4371_idx'),
|
||||
),
|
||||
]
|
||||
|
||||
@@ -1,20 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-12 02:25
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0026_fadanfenhonglilv_alter_fadan_shenqingren_shenfen_and_more'),
|
||||
('rank', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='dashoubiaoxian',
|
||||
name='dingdan',
|
||||
field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='biaoxian', to='orders.dingdan', to_field='dingdan_id', verbose_name='关联订单'),
|
||||
),
|
||||
]
|
||||
@@ -1,19 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-12 02:32
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rank', '0002_alter_dashoubiaoxian_dingdan'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='dashoubiaoxian',
|
||||
name='bankuai',
|
||||
field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.PROTECT, to='rank.bankuai', verbose_name='所属板块'),
|
||||
),
|
||||
]
|
||||
@@ -1,26 +0,0 @@
|
||||
# dengji/migrations/0004_dingdanbiaoqian.py
|
||||
from django.db import migrations
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0026_fadanfenhonglilv_alter_fadan_shenqingren_shenfen_and_more'), # 保持你之前的依赖
|
||||
('rank', '0003_alter_dashoubiaoxian_bankuai'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunSQL(
|
||||
sql="""
|
||||
CREATE TABLE IF NOT EXISTS dingdan_biaoqian (
|
||||
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
|
||||
create_time DATETIME(6) NOT NULL,
|
||||
chenghao_id BIGINT NOT NULL,
|
||||
dingdan_id VARCHAR(32) NOT NULL,
|
||||
CONSTRAINT fk_dingdanbiaoqian_chenghao FOREIGN KEY (chenghao_id) REFERENCES chenghao (id),
|
||||
CONSTRAINT fk_dingdanbiaoqian_dingdan FOREIGN KEY (dingdan_id) REFERENCES dingdan (dingdan_id),
|
||||
UNIQUE KEY uniq_dingdan_chenghao (dingdan_id, chenghao_id)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
|
||||
""",
|
||||
reverse_sql="DROP TABLE IF EXISTS dingdan_biaoqian;"
|
||||
),
|
||||
]
|
||||
@@ -1,36 +0,0 @@
|
||||
# dengji/migrations/0005_fix_state.py
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('orders', '0026_fadanfenhonglilv_alter_fadan_shenqingren_shenfen_and_more'), # 保持你之前的依赖
|
||||
('rank', '0004_dingdanbiaoqian'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.SeparateDatabaseAndState(
|
||||
database_operations=[], # 表已存在,不做任何数据库操作
|
||||
state_operations=[
|
||||
migrations.CreateModel(
|
||||
name='DingdanBiaoqian',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('chenghao', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.chenghao', verbose_name='标签')),
|
||||
('dingdan', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='orders.dingdan', to_field='dingdan_id', verbose_name='订单')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '订单需求标签',
|
||||
'verbose_name_plural': '订单需求标签',
|
||||
'db_table': 'dingdan_biaoqian',
|
||||
'unique_together': {('dingdan', 'chenghao')},
|
||||
'indexes': [
|
||||
models.Index(fields=['dingdan'], name='dingdan_bia_dingdan_4d046b_idx'),
|
||||
],
|
||||
},
|
||||
),
|
||||
],
|
||||
),
|
||||
]
|
||||
@@ -1,35 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-14 18:42
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rank', '0005_fix_state'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='ShenheJilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('shenqingren_id', models.CharField(max_length=7, verbose_name='申请人用户ID')),
|
||||
('shenheguan_id', models.CharField(max_length=7, null=True, verbose_name='审核官用户ID')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '审核中'), (1, '通过'), (2, '未通过')], default=0, verbose_name='审核状态')),
|
||||
('cishu', models.IntegerField(default=1, verbose_name='第几次审核')),
|
||||
('jiaofei_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='更新时间')),
|
||||
('bankuai', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='rank.bankuai', verbose_name='审核板块')),
|
||||
('chenghao', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.PROTECT, to='rank.chenghao', verbose_name='审核标签')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '审核记录',
|
||||
'verbose_name_plural': '审核记录',
|
||||
'db_table': 'shenhe_jilu',
|
||||
'indexes': [models.Index(fields=['shenqingren_id', 'zhuangtai'], name='shenhe_jilu_shenqin_502e9b_idx'), models.Index(fields=['shenheguan_id'], name='shenhe_jilu_shenheg_5c9959_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,29 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-15 00:31
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rank', '0006_shenhejilu'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='KaoheguanBankuai',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('kaoheguan_id', models.CharField(db_index=True, max_length=7, verbose_name='考核官用户ID')),
|
||||
('bankuai', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.bankuai', verbose_name='所属板块')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '考核官板块关联',
|
||||
'verbose_name_plural': '考核官板块关联',
|
||||
'db_table': 'kaoheguan_bankuai',
|
||||
'indexes': [models.Index(fields=['kaoheguan_id'], name='kaoheguan_b_kaohegu_00f7c5_idx')],
|
||||
'unique_together': {('kaoheguan_id', 'bankuai')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,48 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-15 04:16
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rank', '0007_kaoheguanbankuai'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='chenghao',
|
||||
name='kaohe_guize',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='考核规则'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shenhejilu',
|
||||
name='dashou_beizhu',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='打手备注'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shenhejilu',
|
||||
name='dashou_youxi_id',
|
||||
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='打手游戏ID'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shenhejilu',
|
||||
name='guize_neirong',
|
||||
field=models.TextField(blank=True, null=True, verbose_name='规则内容'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shenhejilu',
|
||||
name='jilu_id',
|
||||
field=models.CharField(db_index=True, max_length=32, null=True, verbose_name='记录ID'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='shenhejilu',
|
||||
name='shenheguan_youxi_id',
|
||||
field=models.CharField(blank=True, max_length=50, null=True, verbose_name='审核官游戏ID'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='shenhejilu',
|
||||
name='zhuangtai',
|
||||
field=models.IntegerField(choices=[(0, '审核中'), (1, '通过'), (2, '未通过'), (3, '待审核')], default=0, verbose_name='审核状态'),
|
||||
),
|
||||
]
|
||||
@@ -1,58 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-15 13:20
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rank', '0008_chenghao_kaohe_guize_shenhejilu_dashou_beizhu_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='chenghao',
|
||||
name='kaioi_jinpai',
|
||||
field=models.BooleanField(default=False, verbose_name='是否同时开启金牌'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='shenhejilu',
|
||||
name='jilu_id',
|
||||
field=models.CharField(db_index=True, default='Sh111', max_length=32, unique=True, verbose_name='记录ID'),
|
||||
preserve_default=False,
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='KaoheJujueJilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('cishu', models.IntegerField(verbose_name='对应次数')),
|
||||
('shenheguan_id', models.CharField(max_length=7, verbose_name='考核官用户ID')),
|
||||
('yuanyin', models.TextField(verbose_name='拒绝原因')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('jilu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.shenhejilu', to_field='jilu_id', verbose_name='审核记录')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '拒绝原因记录',
|
||||
'verbose_name_plural': '拒绝原因记录',
|
||||
'db_table': 'kaohe_jujue_jilu',
|
||||
'indexes': [models.Index(fields=['jilu_id', 'cishu'], name='kaohe_jujue_jilu_id_1f2b29_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='KaoheCishuFeiyong',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('cishu', models.IntegerField(verbose_name='第几次考核')),
|
||||
('feiyong', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='需缴纳金额')),
|
||||
('chenghao', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.chenghao', verbose_name='标签')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '考核次数费用',
|
||||
'verbose_name_plural': '考核次数费用',
|
||||
'db_table': 'kaohe_cishu_feiyong',
|
||||
'indexes': [models.Index(fields=['chenghao', 'cishu'], name='kaohe_cishu_chengha_edc272_idx')],
|
||||
'unique_together': {('chenghao', 'cishu')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,29 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-15 16:10
|
||||
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rank', '0009_chenghao_kaioi_jinpai_alter_shenhejilu_jilu_id_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='KaoheJiluFeiyong',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('cishu', models.IntegerField(verbose_name='第几次考核')),
|
||||
('jine', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='缴纳金额')),
|
||||
('jilu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.shenhejilu', to_field='jilu_id', verbose_name='考核记录')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '考核记录费用',
|
||||
'verbose_name_plural': '考核记录费用',
|
||||
'db_table': 'kaohe_jilu_feiyong',
|
||||
'unique_together': {('jilu', 'cishu')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,35 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-19 13:35
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('rank', '0010_kaohejilufeiyong'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='KaohePayTemp',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dingdan_id', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='订单ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('tag_id', models.IntegerField(verbose_name='标签ID')),
|
||||
('game_nick', models.CharField(max_length=100, verbose_name='游戏昵称')),
|
||||
('remark', models.TextField(blank=True, verbose_name='备注')),
|
||||
('reapply', models.BooleanField(default=False, verbose_name='是否再次申请')),
|
||||
('jilu_id', models.CharField(blank=True, max_length=32, null=True, verbose_name='原记录ID(再次申请时)')),
|
||||
('shenheguan_id', models.CharField(blank=True, max_length=7, verbose_name='指定考核官ID')),
|
||||
('cishu', models.IntegerField(verbose_name='本次考核次数(预计算)')),
|
||||
('fee', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='本次费用(分账单位)')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '考核支付临时表',
|
||||
'verbose_name_plural': '考核支付临时表',
|
||||
'db_table': 'kaohe_pay_temp',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,92 +1,163 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-21 12:36
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('products', '0010_shangpinleixing_is_cross_enabled'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='YonghuPingzheng',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='自增主键ID')),
|
||||
('zhanghao', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='登录账号')),
|
||||
('mima', models.CharField(max_length=255, verbose_name='密码')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='是否启用')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('yonghu', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, to_field='yonghuid', verbose_name='关联用户ID')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户认证凭证',
|
||||
'verbose_name_plural': '用户认证凭证',
|
||||
'db_table': 'yonghu_pingzheng',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Dianpu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='店铺自增ID')),
|
||||
('dianpu_mingcheng', models.CharField(max_length=50, verbose_name='店铺名称')),
|
||||
('dianpu_touxiang', models.CharField(blank=True, max_length=500, null=True, verbose_name='店铺头像URL')),
|
||||
('lianxi_dianhua', models.CharField(blank=True, max_length=20, null=True, verbose_name='联系电话')),
|
||||
('weixinhao', models.CharField(blank=True, max_length=50, null=True, verbose_name='微信号')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '封禁'), (1, '正常')], default=1, verbose_name='店铺状态')),
|
||||
('bangding_yonghushu', models.PositiveIntegerField(default=0, verbose_name='绑定用户总数')),
|
||||
('erweima_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='店铺二维码相对URL')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('pingzheng', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='shop.yonghupingzheng', verbose_name='关联用户凭证')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '平台商家店铺',
|
||||
'verbose_name_plural': '平台商家店铺',
|
||||
'db_table': 'dianpu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='YonghuDianpuBangding',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='绑定自增ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('dianpu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='shop.dianpu', verbose_name='关联店铺ID')),
|
||||
('yonghu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, to_field='yonghuid', verbose_name='用户ID')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户店铺绑定关系',
|
||||
'verbose_name_plural': '用户店铺绑定关系',
|
||||
'db_table': 'yonghu_dianpu_bangding',
|
||||
'unique_together': {('yonghu', 'dianpu')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShangpinLeixingDianpu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='类型自增ID')),
|
||||
('jieshao', models.CharField(max_length=45, verbose_name='类型介绍')),
|
||||
('tupian_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='类型图片URL')),
|
||||
('paixu', models.IntegerField(default=0, verbose_name='排序权重')),
|
||||
('shangjia_zhuangtai', models.BooleanField(default=True, verbose_name='是否上架')),
|
||||
('fengjin_zhuangtai', models.BooleanField(default=False, verbose_name='是否封禁')),
|
||||
('shenhe_zhuangtai', models.BooleanField(default=False, help_text='True=审核通过,False=未审核', verbose_name='平台审核状态')),
|
||||
('dianpu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='shop.dianpu', verbose_name='所属店铺')),
|
||||
('gonggong_leixing', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='products.shangpinleixing', verbose_name='映射的公共商品类型')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '店铺商品类型映射',
|
||||
'verbose_name_plural': '店铺商品类型映射',
|
||||
'db_table': 'shangdian_shangpin_leixing',
|
||||
'indexes': [models.Index(fields=['dianpu'], name='shangdian_s_dianpu__100f93_idx'), models.Index(fields=['gonggong_leixing'], name='shangdian_s_gonggon_88a9a0_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
# Generated by Django 4.2.27 on 2026-06-17 01:32
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
('products', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='DianpuMorenPeizhi',
|
||||
fields=[
|
||||
('id', models.PositiveSmallIntegerField(default=1, editable=False, primary_key=True, serialize=False)),
|
||||
('moren_choucheng_feilv', models.DecimalField(decimal_places=4, default=0.1, max_digits=5, verbose_name='默认订单抽成费率(小数,0.1000=10%)')),
|
||||
('moren_tixian_xiane', models.DecimalField(decimal_places=2, default=1000.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='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '店铺默认配置',
|
||||
'verbose_name_plural': '店铺默认配置',
|
||||
'db_table': 'dianpu_moren_peizhi',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DianpuShangpinShenheShezhi',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('kaiqi_shenhe', 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='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商品审核模式配置',
|
||||
'verbose_name_plural': '商品审核模式配置',
|
||||
'db_table': 'dianpu_shangpin_shenhe_shezhi',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='YonghuPingzheng',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='自增主键ID')),
|
||||
('yonghu', models.CharField(db_index=True, max_length=7, unique=True, verbose_name='关联用户ID')),
|
||||
('zhanghao', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='登录账号')),
|
||||
('mima', models.CharField(max_length=255, verbose_name='密码')),
|
||||
('is_active', models.BooleanField(default=True, verbose_name='是否启用')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户认证凭证',
|
||||
'verbose_name_plural': '用户认证凭证',
|
||||
'db_table': 'yonghu_pingzheng',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DianpuShouzhiMeiriTongji',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dianpu_id', models.PositiveIntegerField(db_index=True, verbose_name='店铺ID')),
|
||||
('riqi', models.DateField(db_index=True, verbose_name='统计日期')),
|
||||
('nian', models.PositiveSmallIntegerField(verbose_name='年份')),
|
||||
('yue', models.PositiveSmallIntegerField(verbose_name='月份')),
|
||||
('ri', models.PositiveSmallIntegerField(verbose_name='日')),
|
||||
('xiadan_zongliang', models.PositiveIntegerField(default=0, verbose_name='下单总量')),
|
||||
('xiadan_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='下单总额')),
|
||||
('chengjiao_zongliang', models.PositiveIntegerField(default=0, verbose_name='成交总量')),
|
||||
('chengjiao_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='成交总额')),
|
||||
('tuikuan_zongliang', models.PositiveIntegerField(default=0, verbose_name='退款总量')),
|
||||
('tuikuan_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='退款总额')),
|
||||
('shouyi_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='更新时间')),
|
||||
('shangji_fenhong_cishu', models.PositiveIntegerField(default=0, verbose_name='作为上级获得分红次数')),
|
||||
('shangji_fenhong_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='作为上级获得分红总额')),
|
||||
('shangji_id', models.PositiveIntegerField(blank=True, null=True, verbose_name='当天对应的上级店铺ID(若无则为空)')),
|
||||
('gei_shangji_cishu', models.PositiveIntegerField(default=0, verbose_name='给上级分红次数')),
|
||||
('gei_shangji_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='给上级分红总额')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '店铺每日收支统计',
|
||||
'verbose_name_plural': '店铺每日收支统计',
|
||||
'db_table': 'dianpu_shouzhi_meiri_tongji',
|
||||
'indexes': [models.Index(fields=['dianpu_id', 'riqi'], name='dianpu_shou_dianpu__bffdb2_idx'), models.Index(fields=['nian', 'yue', 'ri'], name='dianpu_shou_nian_a0f415_idx')],
|
||||
'unique_together': {('dianpu_id', 'riqi')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Dianpu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='店铺自增ID')),
|
||||
('dianpu_mingcheng', models.CharField(max_length=50, verbose_name='店铺名称')),
|
||||
('dianpu_touxiang', models.CharField(blank=True, max_length=500, null=True, verbose_name='店铺头像URL')),
|
||||
('lianxi_dianhua', models.CharField(blank=True, max_length=20, null=True, verbose_name='联系电话')),
|
||||
('weixinhao', models.CharField(blank=True, max_length=50, null=True, verbose_name='微信号')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '封禁'), (1, '正常')], default=1, verbose_name='店铺状态')),
|
||||
('bangding_yonghushu', models.PositiveIntegerField(default=0, verbose_name='绑定用户总数')),
|
||||
('erweima_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='店铺二维码相对URL')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('kaiqi_shouyi_choucheng', models.BooleanField(default=False, verbose_name='是否开启店铺订单收益抽成')),
|
||||
('shouyi_choucheng_feilv', models.DecimalField(blank=True, decimal_places=4, default=0.0, max_digits=5, null=True, verbose_name='店铺订单收益抽成费率(小数,如0.1000=10%)')),
|
||||
('ketixian_yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='店铺可提现余额')),
|
||||
('zhengqu_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='店铺赚取总额')),
|
||||
('meiri_tixian_xiane', models.DecimalField(blank=True, decimal_places=2, default=0.0, max_digits=10, null=True, verbose_name='店铺每日提现限额')),
|
||||
('kaiqi_meiri_xiane', models.BooleanField(default=False, verbose_name='是否开启每日提现限额')),
|
||||
('yaoqing_dianpu_id', models.PositiveIntegerField(blank=True, db_index=True, null=True, verbose_name='邀请人店铺ID(上级)')),
|
||||
('fenhong_choucheng_feilv', models.DecimalField(blank=True, decimal_places=4, default=0.05, max_digits=5, null=True, verbose_name='上级分红抽成费率(默认5%)')),
|
||||
('shangji_fenhong_leiji', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='作为上级累计获得分红')),
|
||||
('shangji_ketixian_fenhong', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='作为上级可提现分红余额')),
|
||||
('pingzheng', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='shop.yonghupingzheng', verbose_name='关联用户凭证')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '平台商家店铺',
|
||||
'verbose_name_plural': '平台商家店铺',
|
||||
'db_table': 'dianpu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='YonghuDianpuBangding',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='绑定自增ID')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('dianpu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='shop.dianpu', verbose_name='关联店铺ID')),
|
||||
('yonghu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL, to_field='YonghuID', verbose_name='用户ID')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户店铺绑定关系',
|
||||
'verbose_name_plural': '用户店铺绑定关系',
|
||||
'db_table': 'yonghu_dianpu_bangding',
|
||||
'unique_together': {('yonghu', 'dianpu')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='ShangpinLeixingDianpu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='类型自增ID')),
|
||||
('jieshao', models.CharField(max_length=45, verbose_name='类型介绍')),
|
||||
('tupian_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='类型图片URL')),
|
||||
('paixu', models.IntegerField(default=0, verbose_name='排序权重')),
|
||||
('shangjia_zhuangtai', models.BooleanField(default=True, verbose_name='是否上架')),
|
||||
('fengjin_zhuangtai', models.BooleanField(default=False, verbose_name='是否封禁')),
|
||||
('shenhe_zhuangtai', models.BooleanField(default=False, help_text='True=审核通过,False=未审核', verbose_name='平台审核状态')),
|
||||
('dianpu', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='shop.dianpu', verbose_name='所属店铺')),
|
||||
('gonggong_leixing', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='products.shangpinleixing', verbose_name='映射的公共商品类型')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '店铺商品类型映射',
|
||||
'verbose_name_plural': '店铺商品类型映射',
|
||||
'db_table': 'shangdian_shangpin_leixing',
|
||||
'indexes': [models.Index(fields=['dianpu'], name='shangdian_s_dianpu__100f93_idx'), models.Index(fields=['gonggong_leixing'], name='shangdian_s_gonggon_88a9a0_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-21 13:04
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('shop', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='yonghupingzheng',
|
||||
name='yonghu',
|
||||
field=models.CharField(db_index=True, max_length=7, unique=True, verbose_name='关联用户ID'),
|
||||
),
|
||||
]
|
||||
@@ -1,85 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-23 14:56
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('shop', '0002_alter_yonghupingzheng_yonghu'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='DianpuMorenPeizhi',
|
||||
fields=[
|
||||
('id', models.PositiveSmallIntegerField(default=1, editable=False, primary_key=True, serialize=False)),
|
||||
('moren_choucheng_feilv', models.DecimalField(decimal_places=4, default=0.1, max_digits=5, verbose_name='默认订单抽成费率(小数,0.1000=10%)')),
|
||||
('moren_tixian_xiane', models.DecimalField(decimal_places=2, default=1000.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='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '店铺默认配置',
|
||||
'verbose_name_plural': '店铺默认配置',
|
||||
'db_table': 'dianpu_moren_peizhi',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpu',
|
||||
name='kaiqi_meiri_xiane',
|
||||
field=models.BooleanField(default=False, verbose_name='是否开启每日提现限额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpu',
|
||||
name='kaiqi_shouyi_choucheng',
|
||||
field=models.BooleanField(default=False, verbose_name='是否开启店铺订单收益抽成'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpu',
|
||||
name='ketixian_yue',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='店铺可提现余额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpu',
|
||||
name='meiri_tixian_xiane',
|
||||
field=models.DecimalField(blank=True, decimal_places=2, default=0.0, max_digits=10, null=True, verbose_name='店铺每日提现限额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpu',
|
||||
name='shouyi_choucheng_feilv',
|
||||
field=models.DecimalField(blank=True, decimal_places=4, default=0.0, max_digits=5, null=True, verbose_name='店铺订单收益抽成费率(小数,如0.1000=10%)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpu',
|
||||
name='zhengqu_zonge',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='店铺赚取总额'),
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='DianpuShouzhiMeiriTongji',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('dianpu_id', models.PositiveIntegerField(db_index=True, verbose_name='店铺ID')),
|
||||
('riqi', models.DateField(db_index=True, verbose_name='统计日期')),
|
||||
('nian', models.PositiveSmallIntegerField(verbose_name='年份')),
|
||||
('yue', models.PositiveSmallIntegerField(verbose_name='月份')),
|
||||
('ri', models.PositiveSmallIntegerField(verbose_name='日')),
|
||||
('xiadan_zongliang', models.PositiveIntegerField(default=0, verbose_name='下单总量')),
|
||||
('xiadan_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='下单总额')),
|
||||
('chengjiao_zongliang', models.PositiveIntegerField(default=0, verbose_name='成交总量')),
|
||||
('chengjiao_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='成交总额')),
|
||||
('tuikuan_zongliang', models.PositiveIntegerField(default=0, verbose_name='退款总量')),
|
||||
('tuikuan_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='退款总额')),
|
||||
('shouyi_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='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '店铺每日收支统计',
|
||||
'verbose_name_plural': '店铺每日收支统计',
|
||||
'db_table': 'dianpu_shouzhi_meiri_tongji',
|
||||
'indexes': [models.Index(fields=['dianpu_id', 'riqi'], name='dianpu_shou_dianpu__bffdb2_idx'), models.Index(fields=['nian', 'yue', 'ri'], name='dianpu_shou_nian_a0f415_idx')],
|
||||
'unique_together': {('dianpu_id', 'riqi')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,27 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-04-25 12:05
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('shop', '0003_dianpumorenpeizhi_dianpu_kaiqi_meiri_xiane_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='DianpuShangpinShenheShezhi',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('kaiqi_shenhe', 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='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商品审核模式配置',
|
||||
'verbose_name_plural': '商品审核模式配置',
|
||||
'db_table': 'dianpu_shangpin_shenhe_shezhi',
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,33 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-05 10:33
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('shop', '0004_dianpushangpinshenheshezhi'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dianpu',
|
||||
name='fenhong_choucheng_feilv',
|
||||
field=models.DecimalField(blank=True, decimal_places=4, default=0.05, max_digits=5, null=True, verbose_name='上级分红抽成费率(默认5%)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpu',
|
||||
name='shangji_fenhong_leiji',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='作为上级累计获得分红'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpu',
|
||||
name='shangji_ketixian_fenhong',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='作为上级可提现分红余额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpu',
|
||||
name='yaoqing_dianpu_id',
|
||||
field=models.PositiveIntegerField(blank=True, db_index=True, null=True, verbose_name='邀请人店铺ID(上级)'),
|
||||
),
|
||||
]
|
||||
@@ -1,38 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-05-10 18:17
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('shop', '0005_dianpu_fenhong_choucheng_feilv_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='dianpushouzhimeiritongji',
|
||||
name='gei_shangji_cishu',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='给上级分红次数'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpushouzhimeiritongji',
|
||||
name='gei_shangji_zonge',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='给上级分红总额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpushouzhimeiritongji',
|
||||
name='shangji_fenhong_cishu',
|
||||
field=models.PositiveIntegerField(default=0, verbose_name='作为上级获得分红次数'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpushouzhimeiritongji',
|
||||
name='shangji_fenhong_zonge',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='作为上级获得分红总额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='dianpushouzhimeiritongji',
|
||||
name='shangji_id',
|
||||
field=models.PositiveIntegerField(blank=True, null=True, verbose_name='当天对应的上级店铺ID(若无则为空)'),
|
||||
),
|
||||
]
|
||||
@@ -148,8 +148,8 @@ class DianpuShouzhiMeiriTongji(QModel):
|
||||
class YonghuDianpuBangding(QModel):
|
||||
id = models.AutoField(primary_key=True, verbose_name='绑定自增ID')
|
||||
yonghu = models.ForeignKey(
|
||||
'users.UserMain', # 🔥 完整路径
|
||||
to_field='yonghuid',
|
||||
'gvsdsdk.User',
|
||||
to_field='YonghuID',
|
||||
on_delete=models.CASCADE,
|
||||
db_index=True,
|
||||
verbose_name='用户ID'
|
||||
|
||||
@@ -1,213 +1,393 @@
|
||||
# Generated by Django 5.2.10 on 2026-01-14 19:59
|
||||
|
||||
import django.db.models.deletion
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='Xiugaijilu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='记录ID')),
|
||||
('yonghuid', models.CharField(max_length=7, verbose_name='被修改用户ID')),
|
||||
('xiugaiid', models.CharField(max_length=30, verbose_name='修改人账号ID')),
|
||||
('leixing', models.IntegerField(verbose_name='被修改用户类型')),
|
||||
('xiugaitijiao', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的打手提现金额')),
|
||||
('xiugaitijiaoq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的打手提现金额')),
|
||||
('jifen', models.IntegerField(default=0, verbose_name='修改后的打手积分')),
|
||||
('yjifen', models.IntegerField(default=0, verbose_name='修改前的打手积分')),
|
||||
('yajin', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的打手押金')),
|
||||
('yyajin', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的打手押金')),
|
||||
('shangjiayue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的商家余额')),
|
||||
('shangjiayueq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的商家余额')),
|
||||
('guanshiyue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的管事余额')),
|
||||
('guanshiyueq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的管事余额')),
|
||||
('huiyuants', models.IntegerField(default=0, verbose_name='添加会员天数')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('qitashuoming', models.TextField(blank=True, null=True, verbose_name='其他说明')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '修改记录表',
|
||||
'verbose_name_plural': '修改记录表',
|
||||
'db_table': 'xiugaijilu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserMain',
|
||||
fields=[
|
||||
('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='主键ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, unique=True, verbose_name='用户ID')),
|
||||
('openid', models.CharField(db_index=True, max_length=64, unique=True, verbose_name='微信OpenID')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='头像')),
|
||||
('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
|
||||
('password', models.CharField(blank=True, max_length=200, null=True, verbose_name='密码')),
|
||||
('zhifu', models.CharField(blank=True, max_length=500, null=True, verbose_name='收款码图片')),
|
||||
('skzhanghao', models.CharField(blank=True, max_length=11, null=True, verbose_name='收款账号')),
|
||||
('ip', models.CharField(blank=True, max_length=50, null=True, verbose_name='来访用户ip')),
|
||||
('last_login_time', models.DateTimeField(blank=True, null=True, verbose_name='最后登录时间')),
|
||||
('user_type', models.CharField(choices=[('normal', '普通用户'), ('dashou', '打手'), ('shop', '商家'), ('guanshi', '管事'), ('admin', '管理员')], default='normal', max_length=10, verbose_name='用户类型')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户主表',
|
||||
'verbose_name_plural': '用户主表',
|
||||
'db_table': 'user_main',
|
||||
'indexes': [models.Index(fields=['yonghuid'], name='user_main_yonghui_b8b2fe_idx'), models.Index(fields=['openid'], name='user_main_openid_c9edbe_idx'), models.Index(fields=['user_type'], name='user_main_user_ty_8515fd_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Tixianjilu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='提现记录ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='提现用户ID')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='头像')),
|
||||
('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='打手昵称')),
|
||||
('leixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='提现类型1:打手佣金2:管事分红')),
|
||||
('zhifu', models.CharField(blank=True, max_length=500, null=True, verbose_name='收款码图片')),
|
||||
('skzhanghao', models.CharField(blank=True, max_length=11, null=True, verbose_name='收款账号')),
|
||||
('jine', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='提现金额')),
|
||||
('zhuangtai', models.IntegerField(blank=True, db_index=True, default=1, null=True, verbose_name='提现状态1:审核2:成功3:失败')),
|
||||
('fangshi', models.IntegerField(blank=True, db_index=True, null=True, verbose_name='收款方式1:微信2:支付宝')),
|
||||
('shenheid', models.CharField(db_index=True, max_length=7, null=True, verbose_name='审核用户ID')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回理由')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '提现记录表',
|
||||
'verbose_name_plural': '提现记录表',
|
||||
'db_table': 'tixianjilu',
|
||||
'indexes': [models.Index(fields=['yonghuid'], name='tixianjilu_yonghui_8083bb_idx'), models.Index(fields=['zhuangtai'], name='tixianjilu_zhuangt_839d8e_idx'), models.Index(fields=['shenheid'], name='tixianjilu_shenhei_470e0c_idx'), models.Index(fields=['fangshi'], name='tixianjilu_fangshi_a1e0bc_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdminProfile',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('password', models.CharField(max_length=255, verbose_name='密码')),
|
||||
('wechat', models.CharField(blank=True, max_length=50, verbose_name='管理员微信')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='admin_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管理员扩展表',
|
||||
'verbose_name_plural': '管理员扩展表',
|
||||
'db_table': 'admin_profile',
|
||||
'indexes': [models.Index(fields=['user'], name='admin_profi_user_id_7d067d_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserBoss',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nickname', models.CharField(max_length=50, verbose_name='老板昵称')),
|
||||
('zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='消费总额')),
|
||||
('alldingdan', models.IntegerField(default=0, verbose_name='订单总数')),
|
||||
('alltui', models.IntegerField(default=0, verbose_name='退款总数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='boss_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '老板扩展表',
|
||||
'verbose_name_plural': '老板扩展表',
|
||||
'db_table': 'user_boss',
|
||||
'indexes': [models.Index(fields=['user'], name='user_boss_user_id_4e81a4_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserDashou',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='打手昵称')),
|
||||
('chenghao', models.CharField(max_length=50, null=True, verbose_name='打手称号')),
|
||||
('zhuangtai', models.IntegerField(default=1, verbose_name='打手状态')),
|
||||
('zaixianzhuangtai', models.IntegerField(default=1, verbose_name='打手在线状态')),
|
||||
('zhanghaozhuangtai', models.IntegerField(default=1, verbose_name='打手账号状态')),
|
||||
('jieshao', models.TextField(null=True, verbose_name='打手介绍')),
|
||||
('jiedanzongliang', models.IntegerField(default=0, verbose_name='接单总量')),
|
||||
('chengjiaozongliang', models.IntegerField(default=0, verbose_name='成交单总量')),
|
||||
('tuikuanliang', models.IntegerField(default=0, verbose_name='退款订单总量')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现余额')),
|
||||
('zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='打单赚取总额')),
|
||||
('dianhua', models.CharField(max_length=20, null=True, verbose_name='打手电话')),
|
||||
('wechat', models.CharField(max_length=50, null=True, verbose_name='打手微信号')),
|
||||
('yaoqingren', models.CharField(db_index=True, max_length=7, null=True, verbose_name='邀请人ID')),
|
||||
('jinrijiedan', models.IntegerField(default=0, verbose_name='今日接单数量')),
|
||||
('jinrishouyi', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日收益金额')),
|
||||
('jinyuejiedan', models.IntegerField(default=0, verbose_name='今月接单数量')),
|
||||
('jinyueshouyi', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今月收益金额')),
|
||||
('jifen', models.IntegerField(default=0, verbose_name='打手积分')),
|
||||
('yajin', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='打手押金')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='dashou_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '打手扩展表',
|
||||
'verbose_name_plural': '打手扩展表',
|
||||
'db_table': 'user_dashou',
|
||||
'indexes': [models.Index(fields=['user'], name='user_dashou_user_id_cf0410_idx'), models.Index(fields=['yaoqingren'], name='user_dashou_yaoqing_894658_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserGuanshi',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yaoqingma', models.CharField(db_index=True, max_length=20, null=True, verbose_name='邀请码')),
|
||||
('dianhua', models.CharField(max_length=20, null=True, verbose_name='管事电话')),
|
||||
('wechat', models.CharField(max_length=50, null=True, verbose_name='管事微信号')),
|
||||
('yaogingshuliang', models.IntegerField(default=0, verbose_name='邀请打手总数')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='管事状态')),
|
||||
('jinrichongzhi', models.IntegerField(default=0, verbose_name='今日充值打手数量')),
|
||||
('jinyuechongzhi', models.IntegerField(default=0, verbose_name='今月充值打手数量')),
|
||||
('chongzhifenrun', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='充值分佣总额')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现余额')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='guanshi_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管事扩展表',
|
||||
'verbose_name_plural': '管事扩展表',
|
||||
'db_table': 'user_guanshi',
|
||||
'indexes': [models.Index(fields=['user'], name='user_guansh_user_id_cbadac_idx'), models.Index(fields=['yaoqingma'], name='user_guansh_yaoqing_21d1d4_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserShangjia',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nicheng', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='商家昵称')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '待审核'), (1, '正常'), (2, '禁用')], default=1, verbose_name='商家状态')),
|
||||
('dianhua', models.CharField(max_length=20, null=True, verbose_name='商家电话')),
|
||||
('wechat', models.CharField(max_length=50, null=True, verbose_name='商家微信号')),
|
||||
('fabu', models.IntegerField(default=0, verbose_name='发布订单总数量')),
|
||||
('tuikuan', models.IntegerField(default=0, verbose_name='退款订单总量')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家余额')),
|
||||
('chengjiao', models.IntegerField(default=0, verbose_name='商家成交订单总量')),
|
||||
('jinridingdan', models.IntegerField(default=0, verbose_name='商家今日订单总量')),
|
||||
('jinriliushui', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家今日流水')),
|
||||
('jinyuedingdan', models.IntegerField(default=0, verbose_name='商家今月订单总量')),
|
||||
('jinyueliushui', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家今月流水')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='shop_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商家扩展表',
|
||||
'verbose_name_plural': '商家扩展表',
|
||||
'db_table': 'user_shangjia',
|
||||
'indexes': [models.Index(fields=['user'], name='user_shangj_user_id_823c5c_idx'), models.Index(fields=['nicheng'], name='user_shangj_nicheng_6967bc_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
# Generated by Django 4.2.27 on 2026-06-17 01:32
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
initial = True
|
||||
|
||||
dependencies = [
|
||||
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='OfficialAccountUser',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('unionid', models.CharField(db_index=True, max_length=64, null=True, verbose_name='UnionID')),
|
||||
('official_openid', models.CharField(db_index=True, max_length=64, unique=True, verbose_name='服务号OpenID')),
|
||||
('subscribe_time', models.DateTimeField(auto_now_add=True, verbose_name='关注时间')),
|
||||
('is_subscribed', models.BooleanField(default=True, verbose_name='是否关注')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '服务号用户',
|
||||
'verbose_name_plural': '服务号用户',
|
||||
'db_table': 'official_account_user',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Xiugaijilu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='记录ID')),
|
||||
('yonghuid', models.CharField(max_length=7, verbose_name='被修改用户ID')),
|
||||
('xiugaiid', models.CharField(max_length=30, verbose_name='修改人账号ID')),
|
||||
('leixing', models.IntegerField(verbose_name='被修改用户类型')),
|
||||
('xiugaitijiao', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的打手提现金额')),
|
||||
('xiugaitijiaoq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的打手提现金额')),
|
||||
('jifen', models.IntegerField(default=0, verbose_name='修改后的打手积分')),
|
||||
('yjifen', models.IntegerField(default=0, verbose_name='修改前的打手积分')),
|
||||
('yajin', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的打手押金')),
|
||||
('yyajin', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的打手押金')),
|
||||
('shangjiayue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的商家余额')),
|
||||
('shangjiayueq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的商家余额')),
|
||||
('guanshiyue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改后的管事余额')),
|
||||
('guanshiyueq', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='修改前的管事余额')),
|
||||
('huiyuants', models.IntegerField(default=0, verbose_name='添加会员天数')),
|
||||
('huiyuan_id', models.CharField(blank=True, max_length=6, null=True, verbose_name='会员ID')),
|
||||
('qitashuoming', models.TextField(blank=True, null=True, verbose_name='其他说明')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '修改记录表',
|
||||
'verbose_name_plural': '修改记录表',
|
||||
'db_table': 'xiugaijilu',
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TixianShenheJilu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('shenhe_danhao', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='审核单号')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('leixing', models.PositiveSmallIntegerField(db_index=True, verbose_name='提现类型')),
|
||||
('zhuangtai', models.IntegerField(db_index=True, default=1, verbose_name='审核状态(1审核中2提现成功3提现失败4审核成功5审核失败6待收款)')),
|
||||
('shenqing_jine', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='申请提现金额(扣款额)')),
|
||||
('shouxufei', models.DecimalField(decimal_places=2, default=0, max_digits=10, verbose_name='手续费')),
|
||||
('shijidaozhang', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='实际到账金额')),
|
||||
('feilv', models.DecimalField(decimal_places=4, default=0, max_digits=5, verbose_name='手续费率')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回/失败原因')),
|
||||
('bo_hui_ren_id', models.CharField(blank=True, db_index=True, max_length=11, null=True, verbose_name='驳回人用户ID')),
|
||||
('shenhe_ren_id', models.CharField(blank=True, db_index=True, max_length=11, null=True, verbose_name='审核通过操作人ID')),
|
||||
('tixianjilu_id', models.IntegerField(blank=True, db_index=True, null=True, verbose_name='关联Tixianjilu.id')),
|
||||
('tixian_auto_id', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='最近一次打款单号(非唯一,重试收款会更新)')),
|
||||
('fail_reason', models.TextField(blank=True, null=True, verbose_name='微信打款失败原因')),
|
||||
('dakuan_mode', models.PositiveSmallIntegerField(db_index=True, default=1, verbose_name='打款方式(1手动2自动)')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '提现审核记录',
|
||||
'verbose_name_plural': '提现审核记录',
|
||||
'db_table': 'tixian_shenhe_jilu',
|
||||
'indexes': [models.Index(fields=['yonghuid', 'zhuangtai'], name='tixian_shen_yonghui_a782e9_idx'), models.Index(fields=['yonghuid', 'leixing'], name='tixian_shen_yonghui_bb44eb_idx'), models.Index(fields=['shenhe_danhao'], name='tixian_shen_shenhe__4a1ca7_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='Tixianjilu',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='提现记录ID')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='提现用户ID')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='头像')),
|
||||
('phone', models.CharField(blank=True, max_length=11, null=True, verbose_name='手机号')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='打手昵称')),
|
||||
('leixing', models.PositiveIntegerField(blank=True, null=True, verbose_name='提现类型1:打手佣金2:管事分红')),
|
||||
('zhifu', models.CharField(blank=True, max_length=500, null=True, verbose_name='收款码图片')),
|
||||
('skzhanghao', models.CharField(blank=True, max_length=11, null=True, verbose_name='收款账号')),
|
||||
('jine', models.DecimalField(blank=True, decimal_places=2, max_digits=10, null=True, verbose_name='提现金额')),
|
||||
('zhuangtai', models.IntegerField(blank=True, db_index=True, default=1, null=True, verbose_name='提现状态1:审核2:成功3:失败')),
|
||||
('fangshi', models.IntegerField(blank=True, db_index=True, null=True, verbose_name='收款方式1:微信2:支付宝')),
|
||||
('shenheid', models.CharField(db_index=True, max_length=11, null=True, verbose_name='审核用户ID')),
|
||||
('bhliyou', models.TextField(blank=True, null=True, verbose_name='驳回理由')),
|
||||
('shenhe_jilu_id', models.IntegerField(blank=True, db_index=True, null=True, verbose_name='关联提现审核记录ID(TixianShenheJilu.id)')),
|
||||
('shenhe_danhao', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='关联提现审核单号')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '提现记录表',
|
||||
'verbose_name_plural': '提现记录表',
|
||||
'db_table': 'tixianjilu',
|
||||
'indexes': [models.Index(fields=['yonghuid'], name='tixianjilu_yonghui_8083bb_idx'), models.Index(fields=['zhuangtai'], name='tixianjilu_zhuangt_839d8e_idx'), models.Index(fields=['shenheid'], name='tixianjilu_shenhei_470e0c_idx'), models.Index(fields=['fangshi'], name='tixianjilu_fangshi_a1e0bc_idx'), models.Index(fields=['shenhe_danhao'], name='tixianjilu_shenhe__7b3e7f_idx'), models.Index(fields=['shenhe_jilu_id'], name='tixianjilu_shenhe__d9355e_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='TixianAutoRecord',
|
||||
fields=[
|
||||
('id', models.BigAutoField(primary_key=True, serialize=False)),
|
||||
('tixian_id', models.CharField(db_index=True, max_length=32, unique=True, verbose_name='提现订单号(自定义)')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('leixing', models.IntegerField(verbose_name='提现类型 1打手 2管事')),
|
||||
('jine', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='申请提现金额')),
|
||||
('shouxufei', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='手续费')),
|
||||
('shijidaozhang', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='实际到账金额')),
|
||||
('feilv', models.DecimalField(decimal_places=4, max_digits=5, verbose_name='费率')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '处理中'), (1, '成功'), (2, '失败')], default=0, verbose_name='状态')),
|
||||
('wechat_transfer_no', models.CharField(blank=True, max_length=64, null=True, verbose_name='微信转账单号')),
|
||||
('wechat_package', models.TextField(blank=True, null=True, verbose_name='微信返回的package_info(JSON)')),
|
||||
('fail_reason', models.TextField(blank=True, null=True, verbose_name='失败原因')),
|
||||
('shenhe_danhao', models.CharField(blank=True, db_index=True, max_length=32, null=True, verbose_name='关联审核单号')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '自动提现记录',
|
||||
'verbose_name_plural': '自动提现记录',
|
||||
'db_table': 'tixian_auto_record',
|
||||
'indexes': [models.Index(fields=['tixian_id'], name='tixian_auto_tixian__273dac_idx'), models.Index(fields=['yonghuid'], name='tixian_auto_yonghui_61c5b6_idx'), models.Index(fields=['zhuangtai'], name='tixian_auto_zhuangt_24d9fa_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='RankingRecord',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('zhouqi', models.IntegerField(choices=[(1, '日榜'), (2, '月榜')], verbose_name='周期类型')),
|
||||
('tongji_date', models.DateField(db_index=True, verbose_name='统计日期')),
|
||||
('shenfen', models.IntegerField(choices=[(2, '打手'), (3, '管事'), (4, '商家')], verbose_name='用户身份')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('paiming', models.IntegerField(verbose_name='排名')),
|
||||
('zhizhi', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='指标值')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='用户昵称')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='头像')),
|
||||
('chuangjian_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '排行榜记录',
|
||||
'verbose_name_plural': '排行榜记录',
|
||||
'db_table': 'ranking_record',
|
||||
'indexes': [models.Index(fields=['zhouqi', 'tongji_date', 'shenfen', 'paiming'], name='ranking_rec_zhouqi_fc9f4d_idx'), models.Index(fields=['yonghuid', 'zhouqi'], name='ranking_rec_yonghui_e5be77_idx'), models.Index(fields=['tongji_date'], name='ranking_rec_tongji__820158_idx')],
|
||||
'unique_together': {('zhouqi', 'tongji_date', 'shenfen', 'paiming')},
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserZuzhang',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('yaoqingma', models.CharField(db_index=True, max_length=20, null=True, verbose_name='组长邀请码')),
|
||||
('fenyong_zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='分佣总额(元)')),
|
||||
('ketixian_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='可提现金额(元)')),
|
||||
('yaoqing_zongshu', models.IntegerField(default=0, verbose_name='邀请总数')),
|
||||
('jinri_fenyong', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日分佣(元)')),
|
||||
('jinyue_fenyong', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今月分佣(元)')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='账号状态')),
|
||||
('haibao_url', models.CharField(blank=True, max_length=500, null=True, verbose_name='推广海报相对URL')),
|
||||
('jinri_tixian', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='今日提现金额(元)')),
|
||||
('last_tixian_time', models.DateTimeField(blank=True, null=True, verbose_name='最后提现时间')),
|
||||
('ewai_tixian_xiane', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='额外提现限额(元)')),
|
||||
('kaioi_ewai_tixian', models.BooleanField(default=False, verbose_name='开启额外提现')),
|
||||
('kaioi_ewai_fenhong', models.BooleanField(default=False, verbose_name='开启额外分红')),
|
||||
('ewai_fenhong_jine', models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='额外分红金额(元)')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='zuzhang_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '组长扩展表',
|
||||
'verbose_name_plural': '组长扩展表',
|
||||
'db_table': 'user_zuzhang',
|
||||
'indexes': [models.Index(fields=['user'], name='user_zuzhan_user_id_8064f2_idx'), models.Index(fields=['yaoqingma'], name='user_zuzhan_yaoqing_cba91d_idx')],
|
||||
},
|
||||
),
|
||||
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(on_delete=django.db.models.deletion.CASCADE, related_name='shenheguan_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '审核官扩展表',
|
||||
'verbose_name_plural': '审核官扩展表',
|
||||
'db_table': 'user_shenheguan',
|
||||
'indexes': [models.Index(fields=['user'], name='user_shenhe_user_id_624f19_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserShangjia',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nicheng', models.CharField(db_index=True, max_length=50, unique=True, verbose_name='商家昵称')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '待审核'), (1, '正常'), (2, '禁用')], default=1, verbose_name='商家状态')),
|
||||
('dianhua', models.CharField(max_length=20, null=True, verbose_name='商家电话')),
|
||||
('wechat', models.CharField(max_length=50, null=True, verbose_name='商家微信号')),
|
||||
('fabu', models.IntegerField(default=0, verbose_name='发布订单总数量')),
|
||||
('tuikuan', models.IntegerField(default=0, verbose_name='退款订单总量')),
|
||||
('yue', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家余额')),
|
||||
('chengjiao', models.IntegerField(default=0, verbose_name='商家成交订单总量')),
|
||||
('jinridingdan', models.IntegerField(default=0, verbose_name='商家今日订单总量')),
|
||||
('jinriliushui', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家今日流水')),
|
||||
('jinyuedingdan', models.IntegerField(default=0, verbose_name='商家今月订单总量')),
|
||||
('jinyueliushui', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='商家今月流水')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='shop_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '商家扩展表',
|
||||
'verbose_name_plural': '商家扩展表',
|
||||
'db_table': 'user_shangjia',
|
||||
'indexes': [models.Index(fields=['user'], name='user_shangj_user_id_823c5c_idx'), models.Index(fields=['nicheng'], name='user_shangj_nicheng_6967bc_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserSensitiveData',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('OpenID', models.CharField(blank=True, db_index=True, max_length=64, null=True, unique=True, verbose_name='微信OpenID')),
|
||||
('UnionID', models.CharField(blank=True, db_index=True, max_length=64, null=True, verbose_name='微信UnionID')),
|
||||
('Password', models.CharField(blank=True, max_length=200, null=True, verbose_name='本地密码')),
|
||||
('PhoneVerified', models.BooleanField(default=False, verbose_name='手机号是否已认证')),
|
||||
('Zhifu', models.CharField(blank=True, max_length=500, null=True, verbose_name='收款码图片')),
|
||||
('SKZhanghao', models.CharField(blank=True, max_length=11, null=True, verbose_name='收款账号')),
|
||||
('IP', models.CharField(blank=True, max_length=50, null=True, verbose_name='来访用户IP')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('UserUUID', models.OneToOneField(db_column='UserUUID', on_delete=django.db.models.deletion.CASCADE, related_name='sensitive_data', to=settings.AUTH_USER_MODEL, verbose_name='关联用户UUID')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '用户敏感数据',
|
||||
'verbose_name_plural': '用户敏感数据',
|
||||
'db_table': 'user_sensitive_data',
|
||||
'indexes': [models.Index(fields=['OpenID'], name='user_sensit_OpenID_41a0d1_idx'), models.Index(fields=['UnionID'], name='user_sensit_UnionID_bd018d_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(on_delete=django.db.models.deletion.CASCADE, related_name='kefu_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '客服扩展表',
|
||||
'verbose_name_plural': '客服扩展表',
|
||||
'db_table': 'user_kefu',
|
||||
'indexes': [models.Index(fields=['user'], name='user_kefu_user_id_5fe3a1_idx'), models.Index(fields=['zhuangtai'], name='user_kefu_zhuangt_317491_idx')],
|
||||
},
|
||||
),
|
||||
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(on_delete=django.db.models.deletion.CASCADE, related_name='guanshi_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管事扩展表',
|
||||
'verbose_name_plural': '管事扩展表',
|
||||
'db_table': 'user_guanshi',
|
||||
'indexes': [models.Index(fields=['user'], name='user_guansh_user_id_cbadac_idx'), models.Index(fields=['yaoqingma'], name='user_guansh_yaoqing_21d1d4_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='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(on_delete=django.db.models.deletion.CASCADE, related_name='dashou_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '打手扩展表',
|
||||
'verbose_name_plural': '打手扩展表',
|
||||
'db_table': 'user_dashou',
|
||||
'indexes': [models.Index(fields=['user'], name='user_dashou_user_id_cf0410_idx'), models.Index(fields=['yaoqingren'], name='user_dashou_yaoqing_894658_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='UserBoss',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nickname', models.CharField(max_length=50, verbose_name='老板昵称')),
|
||||
('zonge', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='消费总额')),
|
||||
('alldingdan', models.IntegerField(default=0, verbose_name='订单总数')),
|
||||
('alltui', models.IntegerField(default=0, verbose_name='退款总数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='boss_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '老板扩展表',
|
||||
'verbose_name_plural': '老板扩展表',
|
||||
'db_table': 'user_boss',
|
||||
'indexes': [models.Index(fields=['user'], name='user_boss_user_id_4e81a4_idx')],
|
||||
},
|
||||
),
|
||||
migrations.CreateModel(
|
||||
name='AdminProfile',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('password', models.CharField(max_length=255, verbose_name='密码')),
|
||||
('wechat', models.CharField(blank=True, max_length=50, verbose_name='管理员微信')),
|
||||
('yaoqingma', models.CharField(db_index=True, max_length=20, null=True, verbose_name='管理员邀请码')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='admin_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '管理员扩展表',
|
||||
'verbose_name_plural': '管理员扩展表',
|
||||
'db_table': 'admin_profile',
|
||||
'indexes': [models.Index(fields=['user'], name='admin_profi_user_id_7d067d_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-21 12:46
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0001_initial'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='adminprofile',
|
||||
name='yaoqingma',
|
||||
field=models.CharField(db_index=True, max_length=20, null=True, verbose_name='管理员邀请码'),
|
||||
),
|
||||
]
|
||||
@@ -1,35 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-24 23:30
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0002_adminprofile_yaoqingma'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='RankingRecord',
|
||||
fields=[
|
||||
('id', models.AutoField(primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('zhouqi', models.IntegerField(choices=[(1, '日榜'), (2, '月榜')], verbose_name='周期类型')),
|
||||
('tongji_date', models.DateField(db_index=True, verbose_name='统计日期')),
|
||||
('shenfen', models.IntegerField(choices=[(2, '打手'), (3, '管事'), (4, '商家')], verbose_name='用户身份')),
|
||||
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
|
||||
('paiming', models.IntegerField(verbose_name='排名')),
|
||||
('zhizhi', models.DecimalField(decimal_places=2, default=0.0, max_digits=12, verbose_name='指标值')),
|
||||
('nicheng', models.CharField(max_length=50, null=True, verbose_name='用户昵称')),
|
||||
('avatar', models.CharField(blank=True, max_length=500, null=True, verbose_name='头像')),
|
||||
('chuangjian_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '排行榜记录',
|
||||
'verbose_name_plural': '排行榜记录',
|
||||
'db_table': 'ranking_record',
|
||||
'indexes': [models.Index(fields=['zhouqi', 'tongji_date', 'shenfen', 'paiming'], name='ranking_rec_zhouqi_fc9f4d_idx'), models.Index(fields=['yonghuid', 'zhouqi'], name='ranking_rec_yonghui_e5be77_idx'), models.Index(fields=['tongji_date'], name='ranking_rec_tongji__820158_idx')],
|
||||
'unique_together': {('zhouqi', 'tongji_date', 'shenfen', 'paiming')},
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-01-24 23:55
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0003_rankingrecord'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='usermain',
|
||||
name='avatar',
|
||||
field=models.CharField(blank=True, default='a_long/morentouxiang.jpg', max_length=500, null=True, verbose_name='头像'),
|
||||
),
|
||||
]
|
||||
@@ -1,35 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-07 19:42
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0004_alter_usermain_avatar'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='OfficialAccountUser',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('unionid', models.CharField(db_index=True, max_length=64, verbose_name='UnionID')),
|
||||
('official_openid', models.CharField(db_index=True, max_length=64, unique=True, verbose_name='服务号OpenID')),
|
||||
('subscribe_time', models.DateTimeField(auto_now_add=True, verbose_name='关注时间')),
|
||||
('is_subscribed', models.BooleanField(default=True, verbose_name='是否关注')),
|
||||
('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('updated_at', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '服务号用户',
|
||||
'verbose_name_plural': '服务号用户',
|
||||
'db_table': 'official_account_user',
|
||||
},
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='usermain',
|
||||
name='unionid',
|
||||
field=models.CharField(blank=True, db_index=True, max_length=64, null=True, verbose_name='微信UnionID'),
|
||||
),
|
||||
]
|
||||
@@ -1,18 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-07 22:45
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0005_officialaccountuser_usermain_unionid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='officialaccountuser',
|
||||
name='unionid',
|
||||
field=models.CharField(db_index=True, max_length=64, null=True, verbose_name='UnionID'),
|
||||
),
|
||||
]
|
||||
@@ -1,36 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-21 14:37
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0006_alter_officialaccountuser_unionid'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.CreateModel(
|
||||
name='UserKefu',
|
||||
fields=[
|
||||
('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||
('nicheng', models.CharField(max_length=50, verbose_name='客服昵称')),
|
||||
('erjimima', models.CharField(max_length=128, verbose_name='二级密码')),
|
||||
('zhuangtai', models.IntegerField(choices=[(0, '禁用'), (1, '正常')], default=1, verbose_name='客服状态')),
|
||||
('jinrichuli', models.IntegerField(default=0, verbose_name='今日处理订单数')),
|
||||
('jinyuechuli', models.IntegerField(default=0, verbose_name='本月处理订单数')),
|
||||
('zongchuli', models.IntegerField(default=0, verbose_name='累计处理订单数')),
|
||||
('create_time', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
|
||||
('update_time', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
|
||||
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, related_name='kefu_profile', to=settings.AUTH_USER_MODEL, verbose_name='关联用户')),
|
||||
],
|
||||
options={
|
||||
'verbose_name': '客服扩展表',
|
||||
'verbose_name_plural': '客服扩展表',
|
||||
'db_table': 'user_kefu',
|
||||
'indexes': [models.Index(fields=['user'], name='user_kefu_user_id_5fe3a1_idx'), models.Index(fields=['zhuangtai'], name='user_kefu_zhuangt_317491_idx')],
|
||||
},
|
||||
),
|
||||
]
|
||||
@@ -1,28 +0,0 @@
|
||||
# Generated by Django 4.2.27 on 2026-02-27 15:22
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('users', '0007_userkefu'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='fenghong_erci',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='二次分红金额'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='fenghong_erci_enabled',
|
||||
field=models.BooleanField(default=False, verbose_name='开启二次分红'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='userguanshi',
|
||||
name='fenhong_yici',
|
||||
field=models.DecimalField(decimal_places=2, default=0.0, max_digits=10, verbose_name='首次分红金额'),
|
||||
),
|
||||
]
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user