diff --git a/auto_pt/views.py b/auto_pt/views.py index 749ac72..a0fcf55 100644 --- a/auto_pt/views.py +++ b/auto_pt/views.py @@ -13,11 +13,12 @@ import toml import transmission_rpc import yaml from django.contrib.auth.decorators import login_required +from django.forms import model_to_dict from django.http import JsonResponse, FileResponse, HttpResponse, Http404 from django.shortcuts import render from pt_site.UtilityTool import MessageTemplate, FileSizeConvert -from pt_site.models import SiteStatus, MySite, Site, Downloader, TorrentInfo +from pt_site.models import SiteStatus, MySite, Site, Downloader, TorrentInfo, UserLevelRule from pt_site.views import scheduler, pt_spider, exec_command, pool from ptools.base import CommonResponse, StatusCodeEnum, DownloaderCategory from ptools.settings import BASE_DIR @@ -616,6 +617,56 @@ def site_status_api(request): 'seeding_size': site_info.seed_vol, 'last_active': datetime.strftime(site_info.updated_at, '%Y/%m/%d %H:%M:%S'), } + try: + level_info = my_site.site.userlevelrule_set.filter(level=my_site.my_level).first() + + if not level_info: + pass + else: + if level_info.level_id == 0: + site_info.update({ + 'level_info': model_to_dict(level_info), + }) + else: + next_level = UserLevelRule.objects.filter( + site=my_site.site, + level_id=level_info.level_id + 1 + ).first() + levels = UserLevelRule.objects.filter( + site=my_site.site, + level_id__lte=level_info.level_id + ).order_by('-level_id').values_list('level', 'rights') + level_info_dict = model_to_dict(level_info) + level_info_dict.update( + { + 'uploaded': FileSizeConvert.parse_2_byte(level_info.uploaded), + 'downloaded': FileSizeConvert.parse_2_byte(level_info.downloaded), + # 'rights': [level.rights for level in levels], + 'rights': dict(levels), + } + ) + next_level_dict = model_to_dict(next_level) + next_level_dict.update( + { + 'uploaded': FileSizeConvert.parse_2_byte(next_level.uploaded), + 'downloaded': FileSizeConvert.parse_2_byte(next_level.downloaded), + } + ) + logger.info(f'我的站点id:{my_site.id}') + logger.info(f'当前等级:{level_info_dict}') + logger.info(f'下一等级:{next_level_dict}') + upgrade_day = my_site.time_join + timedelta(days=next_level.days * 7) + + logger.info(f'下一等级升级日期:{upgrade_day}') + site_info.update({ + 'level_info': level_info_dict, + 'next_level': next_level_dict, + 'upgrade_day': upgrade_day if upgrade_day > datetime.today() else False, + }) + except: + # raise + logger.warning(f'{my_site.site.name} 用户升级信息获取错误!') + pass status_list.append(site_info) # 按上传量排序 # status_list.sort(key=lambda x: x['mail'], reverse=False) @@ -654,7 +705,7 @@ def site_status_api(request): message = f'获取数列列表失败:{e}' logger.info(message) logger.error(traceback.format_exc(limit=3)) - return CommonResponse.error(msg=message) + return JsonResponse(data=CommonResponse.error(msg=message).to_dict(), safe=False) @login_required diff --git a/pt_site/admin.py b/pt_site/admin.py index 03393bf..b19d179 100644 --- a/pt_site/admin.py +++ b/pt_site/admin.py @@ -206,7 +206,7 @@ class UserLevelRuleAdmin(AjaxAdmin): 'score', 'ratio', 'torrents', - 'rights', + # 'rights', ) diff --git a/pt_site/migrations/0029_alter_userlevelrule_downloaded_and_more.py b/pt_site/migrations/0029_alter_userlevelrule_downloaded_and_more.py new file mode 100644 index 0000000..3e81fb7 --- /dev/null +++ b/pt_site/migrations/0029_alter_userlevelrule_downloaded_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.1.2 on 2023-01-07 21:13 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pt_site', '0028_userlevelrule'), + ] + + operations = [ + migrations.AlterField( + model_name='userlevelrule', + name='downloaded', + field=models.CharField(default=0, help_text='原样输入,例:50GB,1.5TB', max_length=12, verbose_name='下 载'), + ), + migrations.AlterField( + model_name='userlevelrule', + name='uploaded', + field=models.CharField(default=0, help_text='原样输入,例:50GB,1.5TB', max_length=12, verbose_name='上 传'), + ), + ] diff --git a/pt_site/migrations/0030_alter_userlevelrule_days_alter_userlevelrule_level_and_more.py b/pt_site/migrations/0030_alter_userlevelrule_days_alter_userlevelrule_level_and_more.py new file mode 100644 index 0000000..3b4138d --- /dev/null +++ b/pt_site/migrations/0030_alter_userlevelrule_days_alter_userlevelrule_level_and_more.py @@ -0,0 +1,28 @@ +# Generated by Django 4.1.2 on 2023-01-07 22:55 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('pt_site', '0029_alter_userlevelrule_downloaded_and_more'), + ] + + operations = [ + migrations.AlterField( + model_name='userlevelrule', + name='days', + field=models.IntegerField(default=0, help_text='原样输入,单位:周', verbose_name='时 间'), + ), + migrations.AlterField( + model_name='userlevelrule', + name='level', + field=models.CharField(default='User', help_text='请去除空格', max_length=24, verbose_name='等 级'), + ), + migrations.AlterField( + model_name='userlevelrule', + name='rights', + field=models.TextField(help_text='当前等级所享有的权利与义务', max_length=256, verbose_name='权 利'), + ), + ] diff --git a/pt_site/models.py b/pt_site/models.py index 8a556e6..3988155 100644 --- a/pt_site/models.py +++ b/pt_site/models.py @@ -265,15 +265,15 @@ class Site(BaseEntity): class UserLevelRule(BaseEntity): site = models.ForeignKey(verbose_name='站 点', to=Site, on_delete=models.CASCADE) level_id = models.IntegerField(verbose_name='等级id', default=1) - level = models.CharField(verbose_name='等 级', default='User', max_length=24) - days = models.IntegerField(verbose_name='时 间', default=0, help_text='单位:天') - uploaded = models.IntegerField(verbose_name='上 传', default=0, help_text='单位:GB') - downloaded = models.IntegerField(verbose_name='下 载', default=0, help_text='单位:GB') + level = models.CharField(verbose_name='等 级', default='User', max_length=24, help_text='请去除空格') + days = models.IntegerField(verbose_name='时 间', default=0, help_text='原样输入,单位:周') + uploaded = models.CharField(verbose_name='上 传', default=0, help_text='原样输入,例:50GB,1.5TB', max_length=12) + downloaded = models.CharField(verbose_name='下 载', default=0, help_text='原样输入,例:50GB,1.5TB', max_length=12) bonus = models.IntegerField(verbose_name='魔 力', default=0) score = models.IntegerField(verbose_name='积 分', default=0) ratio = models.FloatField(verbose_name='分享率', default=0) torrents = models.IntegerField(verbose_name='发 种', default=0) - rights = models.CharField(verbose_name='权 利', max_length=128, + rights = models.TextField(verbose_name='权 利', max_length=256, help_text='当前等级所享有的权利与义务') def __str__(self): diff --git a/templates/auto_pt/status.html b/templates/auto_pt/status.html index ddafa75..7283dd4 100644 --- a/templates/auto_pt/status.html +++ b/templates/auto_pt/status.html @@ -55,6 +55,18 @@ height: 35px !important; } + .incomplete { + color: red; + } + + .complete { + color: darkgreen; + } + + th { + width: 70px; + text-align: right; + } @@ -248,7 +260,94 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
当前等级:
下一等级:
升级时间:
上传量: / +
下载量: / +
魔力: /
+ 积分: + + / +
分享率: /
发种数: + /

权益:

即将拥有: + + +
已拥有: +
+
+ +
+
+
+ +
+
+ +