@@ -145,6 +145,7 @@ urlpatterns += [ |
||
| 145 | 145 |
url(r'^op/splash$', op_views.splash_api, name='splash_api'), # 启动页面 |
| 146 | 146 |
url(r'^op/feedback$', op_views.feedback_api, name='feedback_api'), # 用户反馈 |
| 147 | 147 |
url(r'^op/download$', op_views.download_api, name='download_api'), # 下载接口 |
| 148 |
+ url(r'^op/bpversion$', op_views.box_program_version_api, name='box_program_version_api'), # BOX 程序版本信息 |
|
| 148 | 149 |
] |
| 149 | 150 |
|
| 150 | 151 |
# 地理位置相关 |
@@ -5,11 +5,12 @@ from django.contrib import admin |
||
| 5 | 5 |
from django.template.loader import render_to_string |
| 6 | 6 |
from pysnippets.strsnippets import strip |
| 7 | 7 |
|
| 8 |
-from operation.models import (APPSettingsInfo, FeedbackInfo, GuestEntranceControlInfo, LatestAppInfo, PatchInfo, |
|
| 9 |
- SplashInfo) |
|
| 8 |
+from operation.models import (APPSettingsInfo, BoxProgramVersionInfo, FeedbackInfo, GuestEntranceControlInfo, |
|
| 9 |
+ LatestAppInfo, PatchInfo, SplashInfo) |
|
| 10 | 10 |
from utils.disk_utils import write_to_disk |
| 11 | 11 |
from utils.redis.rapp import set_latest_app |
| 12 | 12 |
from utils.redis.rguest import delete_guest_entrance_control, set_guest_entrance_control |
| 13 |
+from utils.redis.roperation.rbox_program_version import set_box_program_version |
|
| 13 | 14 |
from utils.redis.rpatch import del_app_patch_info, set_app_patch_info |
| 14 | 15 |
from utils.redis.rsettings import del_app_settings_info, set_app_settings_info |
| 15 | 16 |
|
@@ -17,12 +18,12 @@ from utils.redis.rsettings import del_app_settings_info, set_app_settings_info |
||
| 17 | 18 |
class LatestAppInfoAdmin(admin.ModelAdmin): |
| 18 | 19 |
list_display = ('latest_adr_version_code', 'latest_adr_version_name', 'latest_adr_app', 'latest_adr_url', 'latest_ios_version_code', 'latest_ios_version_name', 'latest_ios_url', 'src', 'status', 'created_at', 'updated_at')
|
| 19 | 20 |
list_filter = ('src', 'status')
|
| 21 |
+ actions = None |
|
| 20 | 22 |
|
| 21 | 23 |
def save_model(self, request, obj, form, change): |
| 22 |
- obj.latest_adr_version_code = strip(obj.latest_adr_version_code) |
|
| 23 | 24 |
obj.latest_adr_version_name = strip(obj.latest_adr_version_name) |
| 24 | 25 |
obj.latest_adr_app = strip(obj.latest_adr_app) |
| 25 |
- obj.latest_ios_version_code = strip(obj.latest_ios_version_code) |
|
| 26 |
+ obj.latest_adr_url = strip(obj.latest_adr_url) |
|
| 26 | 27 |
obj.latest_ios_version_name = strip(obj.latest_ios_version_name) |
| 27 | 28 |
obj.latest_ios_url = strip(obj.latest_ios_url) |
| 28 | 29 |
obj.save() |
@@ -69,6 +70,12 @@ class LatestAppInfoAdmin(admin.ModelAdmin): |
||
| 69 | 70 |
# 设置最新 APP 信息 |
| 70 | 71 |
set_latest_app(obj.src) |
| 71 | 72 |
|
| 73 |
+ def delete_model(self, request, obj): |
|
| 74 |
+ obj.delete() |
|
| 75 |
+ |
|
| 76 |
+ # 设置最新 APP 信息 |
|
| 77 |
+ set_latest_app(obj.src) |
|
| 78 |
+ |
|
| 72 | 79 |
|
| 73 | 80 |
class PatchInfoAdmin(admin.ModelAdmin): |
| 74 | 81 |
list_display = ('platform', 'version', 'patch', 'src', 'status', 'created_at', 'updated_at')
|
@@ -141,9 +148,30 @@ class GuestEntranceControlInfoAdmin(admin.ModelAdmin): |
||
| 141 | 148 |
delete_guest_entrance_control() |
| 142 | 149 |
|
| 143 | 150 |
|
| 151 |
+class BoxProgramVersionInfoAdmin(admin.ModelAdmin): |
|
| 152 |
+ list_display = ('srv_version_code', 'srv_version_name', 'proc_version_code', 'proc_version_name', 'status', 'created_at', 'updated_at')
|
|
| 153 |
+ list_filter = ('status', )
|
|
| 154 |
+ actions = None |
|
| 155 |
+ |
|
| 156 |
+ def save_model(self, request, obj, form, change): |
|
| 157 |
+ obj.srv_version_name = strip(obj.srv_version_name) |
|
| 158 |
+ obj.proc_version_name = strip(obj.proc_version_name) |
|
| 159 |
+ obj.save() |
|
| 160 |
+ |
|
| 161 |
+ # 设置 BOX 程序版本信息 |
|
| 162 |
+ set_box_program_version() |
|
| 163 |
+ |
|
| 164 |
+ def delete_model(self, request, obj): |
|
| 165 |
+ obj.delete() |
|
| 166 |
+ |
|
| 167 |
+ # 设置 BOX 程序版本信息 |
|
| 168 |
+ set_box_program_version() |
|
| 169 |
+ |
|
| 170 |
+ |
|
| 144 | 171 |
admin.site.register(LatestAppInfo, LatestAppInfoAdmin) |
| 145 | 172 |
admin.site.register(PatchInfo, PatchInfoAdmin) |
| 146 | 173 |
admin.site.register(APPSettingsInfo, APPSettingsInfoAdmin) |
| 147 | 174 |
admin.site.register(SplashInfo, SplashInfoAdmin) |
| 148 | 175 |
admin.site.register(FeedbackInfo, FeedbackInfoAdmin) |
| 149 | 176 |
admin.site.register(GuestEntranceControlInfo, GuestEntranceControlInfoAdmin) |
| 177 |
+admin.site.register(BoxProgramVersionInfo, BoxProgramVersionInfoAdmin) |
@@ -0,0 +1,31 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+from __future__ import unicode_literals |
|
| 3 |
+ |
|
| 4 |
+from django.db import models, migrations |
|
| 5 |
+ |
|
| 6 |
+ |
|
| 7 |
+class Migration(migrations.Migration): |
|
| 8 |
+ |
|
| 9 |
+ dependencies = [ |
|
| 10 |
+ ('operation', '0011_auto_20170315_2243'),
|
|
| 11 |
+ ] |
|
| 12 |
+ |
|
| 13 |
+ operations = [ |
|
| 14 |
+ migrations.CreateModel( |
|
| 15 |
+ name='BoxProgramVersionInfo', |
|
| 16 |
+ fields=[ |
|
| 17 |
+ ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
|
|
| 18 |
+ ('status', models.BooleanField(default=True, help_text='\u72b6\u6001', db_index=True, verbose_name='status')),
|
|
| 19 |
+ ('created_at', models.DateTimeField(help_text='\u521b\u5efa\u65f6\u95f4', verbose_name='created_at', auto_now_add=True)),
|
|
| 20 |
+ ('updated_at', models.DateTimeField(help_text='\u66f4\u65b0\u65f6\u95f4', verbose_name='updated_at', auto_now=True)),
|
|
| 21 |
+ ('srv_version_code', models.IntegerField(default=0, help_text='Box Server \u7248\u672c\u53f7', verbose_name='srv_version_code')),
|
|
| 22 |
+ ('srv_version_name', models.CharField(help_text='Box Server \u7248\u672c\u540d', max_length=255, null=True, verbose_name='srv_version_name', blank=True)),
|
|
| 23 |
+ ('proc_version_code', models.IntegerField(default=0, help_text='Box Proc \u7248\u672c\u53f7', verbose_name='proc_version_code')),
|
|
| 24 |
+ ('proc_version_name', models.CharField(help_text='Box Proc \u7248\u672c\u540d', max_length=255, null=True, verbose_name='proc_version_name', blank=True)),
|
|
| 25 |
+ ], |
|
| 26 |
+ options={
|
|
| 27 |
+ 'verbose_name': 'boxprogramversioninfo', |
|
| 28 |
+ 'verbose_name_plural': 'boxprogramversioninfo', |
|
| 29 |
+ }, |
|
| 30 |
+ ), |
|
| 31 |
+ ] |
@@ -148,3 +148,27 @@ class GuestEntranceControlInfo(CreateUpdateMixin, PlatformMixin, VersionMixin, P |
||
| 148 | 148 |
'max_adr': self.max_adr, |
| 149 | 149 |
'max_ios': self.max_ios, |
| 150 | 150 |
} |
| 151 |
+ |
|
| 152 |
+ |
|
| 153 |
+class BoxProgramVersionInfo(CreateUpdateMixin): |
|
| 154 |
+ srv_version_code = models.IntegerField(_(u'srv_version_code'), default=0, help_text=u'Box Server 版本号') |
|
| 155 |
+ srv_version_name = models.CharField(_(u'srv_version_name'), max_length=255, blank=True, null=True, help_text=u'Box Server 版本名') |
|
| 156 |
+ |
|
| 157 |
+ proc_version_code = models.IntegerField(_(u'proc_version_code'), default=0, help_text=u'Box Proc 版本号') |
|
| 158 |
+ proc_version_name = models.CharField(_(u'proc_version_name'), max_length=255, blank=True, null=True, help_text=u'Box Proc 版本名') |
|
| 159 |
+ |
|
| 160 |
+ class Meta: |
|
| 161 |
+ verbose_name = _('boxprogramversioninfo')
|
|
| 162 |
+ verbose_name_plural = _('boxprogramversioninfo')
|
|
| 163 |
+ |
|
| 164 |
+ def __unicode__(self): |
|
| 165 |
+ return u'{0.pk}'.format(self)
|
|
| 166 |
+ |
|
| 167 |
+ @property |
|
| 168 |
+ def data(self): |
|
| 169 |
+ return {
|
|
| 170 |
+ 'srv_version_code': self.srv_version_code, |
|
| 171 |
+ 'srv_version_name': self.srv_version_name, |
|
| 172 |
+ 'proc_version_code': self.proc_version_code, |
|
| 173 |
+ 'proc_version_name': self.proc_version_name, |
|
| 174 |
+ } |
@@ -1,5 +1,7 @@ |
||
| 1 | 1 |
# -*- coding: utf-8 -*- |
| 2 | 2 |
|
| 3 |
+import json |
|
| 4 |
+ |
|
| 3 | 5 |
from django.conf import settings |
| 4 | 6 |
from django.shortcuts import redirect |
| 5 | 7 |
from logit import logit |
@@ -10,6 +12,7 @@ from utils.error.errno_utils import UserStatusCode |
||
| 10 | 12 |
from utils.error.response_utils import response |
| 11 | 13 |
from utils.redis.rapp import get_latest_app |
| 12 | 14 |
from utils.redis.rguest import get_guest_entrance_control |
| 15 |
+from utils.redis.roperation.rbox_program_version import get_box_program_version |
|
| 13 | 16 |
from utils.redis.rpatch import get_app_patch_info |
| 14 | 17 |
from utils.redis.rsettings import get_app_settings_info |
| 15 | 18 |
from utils.version_utils import is_version_match |
@@ -150,3 +153,13 @@ def download_api(request): |
||
| 150 | 153 |
return redirect(ios_url) |
| 151 | 154 |
|
| 152 | 155 |
return redirect(get_latest_app(src).get('latest_adr_url', ''))
|
| 156 |
+ |
|
| 157 |
+ |
|
| 158 |
+def box_program_version_api(request): |
|
| 159 |
+ """ BOX 程序版本信息 """ |
|
| 160 |
+ bpversion = get_box_program_version() |
|
| 161 |
+ |
|
| 162 |
+ return response(200, 'Get Box Program Version Success', u'获取盒子程序版本成功', {
|
|
| 163 |
+ 'bpversion': bpversion, |
|
| 164 |
+ 'bpversion_str': json.dumps(bpversion), |
|
| 165 |
+ }) |
@@ -63,3 +63,6 @@ GUEST_ENTRANCE_CONTROL_INFO = 'guest:entrance:control:info:%s' # STRING,游 |
||
| 63 | 63 |
LATEST_APP_INFO = 'latest:app:info:%s' # STRING,最新 APP 信息,src |
| 64 | 64 |
APP_SETTINGS_INFO = 'app:settings:info:%s:%s:%s' # STRING,APP 设置信息,platform、channel、version |
| 65 | 65 |
APP_PATCH_INFO = 'app:patch:info:%s:%s:%s' # STRING,APP 补丁信息,platform、version、src |
| 66 |
+ |
|
| 67 |
+# BOX 相关 |
|
| 68 |
+BOX_PROGRAM_VERSION_INFO = 'box:program:version:info' # STRING,BOX 程序版本信息 |
@@ -0,0 +1,20 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from utils.redis.connect import r |
|
| 4 |
+from utils.redis.rkeys import BOX_PROGRAM_VERSION_INFO |
|
| 5 |
+ |
|
| 6 |
+ |
|
| 7 |
+def set_box_program_version(): |
|
| 8 |
+ """ 设置 BOX 程序版本信息 """ |
|
| 9 |
+ from operation.models import BoxProgramVersionInfo |
|
| 10 |
+ try: |
|
| 11 |
+ bpverion = BoxProgramVersionInfo.objects.filter(status=True)[0].data |
|
| 12 |
+ except IndexError: |
|
| 13 |
+ bpverion = {}
|
|
| 14 |
+ r.setjson(BOX_PROGRAM_VERSION_INFO, bpverion) |
|
| 15 |
+ return bpverion |
|
| 16 |
+ |
|
| 17 |
+ |
|
| 18 |
+def get_box_program_version(): |
|
| 19 |
+ """ 获取 BOX 程序版本信息 """ |
|
| 20 |
+ return r.getjson(BOX_PROGRAM_VERSION_INFO) or set_box_program_version() |