Files
Django/rank/migrations/0004_rank_reward.py
XingQue 5ef4ff7c91 feat: 排行榜奖励按俱乐部分奖与手动领取
- 新增奖励方案/档位/结算/领取四表与懒结算服务
- 小程序 phbjlxx/phbjllq/phbjlphb 新接口,phbhqsj 零改动
- 后台 phbjhq/phbjbc/phbjjl 与 phbj666 权限菜单

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-01 17:40:56 +08:00

103 lines
6.6 KiB
Python

from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('rank', '0003_rename_dashou_biao_dashou__36e1c3_idx_dashou_biao_dashou__502414_idx_and_more'),
]
operations = [
migrations.CreateModel(
name='RankRewardScheme',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('club_id', models.CharField(db_index=True, max_length=16, verbose_name='俱乐部ID')),
('shenfen', models.CharField(db_index=True, max_length=16, verbose_name='身份')),
('period_type', models.CharField(choices=[('day', '日榜(昨日)'), ('week', '周榜(上周)'), ('month', '月榜(上月)')], max_length=16, verbose_name='周期类型')),
('sort_field', models.CharField(max_length=32, verbose_name='排序指标键')),
('title', models.CharField(blank=True, default='', max_length=128, verbose_name='展示标题')),
('description', models.TextField(blank=True, default='', verbose_name='规则说明')),
('enabled', models.BooleanField(default=False, verbose_name='启用')),
('claim_days', models.PositiveSmallIntegerField(default=30, verbose_name='领取有效天数')),
('min_metric', models.DecimalField(decimal_places=2, default=0, max_digits=12, verbose_name='最低指标门槛')),
('CreateTime', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('UpdateTime', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
],
options={
'verbose_name': '排行榜奖励方案',
'verbose_name_plural': '排行榜奖励方案',
'db_table': 'rank_reward_scheme',
'unique_together': {('club_id', 'shenfen', 'period_type')},
},
),
migrations.CreateModel(
name='RankRewardTier',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('rank_from', models.PositiveSmallIntegerField(verbose_name='名次起')),
('rank_to', models.PositiveSmallIntegerField(verbose_name='名次止')),
('reward_amount', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='奖金(元)')),
('label', models.CharField(blank=True, default='', max_length=32, verbose_name='档位标签')),
('scheme', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='tiers', to='rank.rankrewardscheme', verbose_name='方案')),
],
options={
'verbose_name': '排行榜奖励档位',
'verbose_name_plural': '排行榜奖励档位',
'db_table': 'rank_reward_tier',
'ordering': ['rank_from'],
},
),
migrations.CreateModel(
name='RankRewardSettlement',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('club_id', models.CharField(db_index=True, max_length=16, verbose_name='俱乐部ID')),
('period_key', models.CharField(db_index=True, max_length=32, verbose_name='周期键')),
('period_start', models.DateField(verbose_name='统计起始')),
('period_end', models.DateField(verbose_name='统计截止')),
('riqi_label', models.CharField(max_length=16, verbose_name='前端周期文案')),
('sort_field', models.CharField(max_length=32, verbose_name='结算时排序字段快照')),
('settled_at', models.DateTimeField(auto_now_add=True, verbose_name='结算时间')),
('claim_count', models.PositiveIntegerField(default=0, verbose_name='生成待领取数')),
('scheme', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='rank.rankrewardscheme', verbose_name='方案')),
],
options={
'verbose_name': '排行榜奖励结算',
'verbose_name_plural': '排行榜奖励结算',
'db_table': 'rank_reward_settlement',
'unique_together': {('club_id', 'scheme', 'period_key')},
},
),
migrations.CreateModel(
name='RankRewardClaim',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('club_id', models.CharField(db_index=True, max_length=16, verbose_name='俱乐部ID')),
('yonghuid', models.CharField(db_index=True, max_length=7, verbose_name='用户ID')),
('shenfen', models.CharField(max_length=16, verbose_name='身份')),
('mingci', models.PositiveSmallIntegerField(verbose_name='名次')),
('metric_value', models.DecimalField(decimal_places=2, default=0, max_digits=12, verbose_name='指标快照')),
('reward_amount', models.DecimalField(decimal_places=2, max_digits=10, verbose_name='奖金')),
('status', models.PositiveSmallIntegerField(choices=[(0, '待领取'), (1, '已领取'), (2, '已过期'), (3, '已取消')], db_index=True, default=0)),
('expire_at', models.DateTimeField(verbose_name='领取截止')),
('claimed_at', models.DateTimeField(blank=True, null=True, verbose_name='领取时间')),
('balance_field', models.CharField(max_length=32, verbose_name='入账字段')),
('idempotent_key', models.CharField(max_length=96, unique=True, verbose_name='幂等键')),
('CreateTime', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
('UpdateTime', models.DateTimeField(auto_now=True, verbose_name='更新时间')),
('settlement', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='claims', to='rank.rankrewardsettlement', verbose_name='结算批次')),
],
options={
'verbose_name': '排行榜奖励领取',
'verbose_name_plural': '排行榜奖励领取',
'db_table': 'rank_reward_claim',
'indexes': [
models.Index(fields=['yonghuid', 'status'], name='rank_reward_yonghu_st_idx'),
models.Index(fields=['club_id', 'status'], name='rank_reward_club_st_idx'),
],
},
),
]