@@ -6,9 +6,10 @@ import random  | 
            ||
| 6 | 6 | 
                 | 
            
| 7 | 7 | 
                from django_logit import logit  | 
            
| 8 | 8 | 
                from django_response import response  | 
            
| 9 | 
                +from TimeConvert import TimeConvert as tc  | 
            |
| 9 | 10 | 
                 | 
            
| 10 | 11 | 
                from logs.models import MchInfoDecryptLogInfo, MchInfoEncryptLogInfo  | 
            
| 11 | 
                -from mch.models import BrandInfo, ModelInfo  | 
            |
| 12 | 
                +from mch.models import ActivityInfo, BrandInfo, ModelInfo  | 
            |
| 12 | 13 | 
                from utils.algorithm.b64 import b64_decrypt, b64_encrypt  | 
            
| 13 | 14 | 
                from utils.algorithm.caesar import caesar_decrypt, caesar_encrypt  | 
            
| 14 | 15 | 
                from utils.algorithm.rsalg import rsa_decrypt, rsa_encrypt  | 
            
                @@ -108,6 +109,9 @@ def decrypt(request):  | 
            ||
| 108 | 109 | 
                mdli.decrypt_count += 1  | 
            
| 109 | 110 | 
                mdli.save()  | 
            
| 110 | 111 | 
                 | 
            
| 112 | 
                +    act = ActivityInfo.objects.filter(status=True).order_by('-pk').first()
               | 
            |
| 113 | 
                + has_unexpired_activity = True if act and act.has_unexpired_activity else False  | 
            |
| 114 | 
                +  | 
            |
| 111 | 115 | 
                     return response(200, data={
               | 
            
| 112 | 116 | 
                'plaintext': plaintext,  | 
            
| 113 | 117 | 
                'logo_url': brand.brand_logo_url if brand else '',  | 
            
                @@ -119,5 +123,6 @@ def decrypt(request):  | 
            ||
| 119 | 123 | 
                'Model': (model.model_full_name or model.model_name) if model else '',  | 
            
| 120 | 124 | 
                'DistributorID': distributor_pk,  | 
            
| 121 | 125 | 
                'SerialNo': sn,  | 
            
| 122 | 
                - }  | 
            |
| 126 | 
                + },  | 
            |
| 127 | 
                + 'has_unexpired_activity': has_unexpired_activity,  | 
            |
| 123 | 128 | 
                })  | 
            
                @@ -12,8 +12,8 @@ from pywe_storage import RedisStorage  | 
            ||
| 12 | 12 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 13 | 13 | 
                 | 
            
| 14 | 14 | 
                from account.models import UserInfo  | 
            
| 15 | 
                -from mch.models import (AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, LatestAppInfo,  | 
            |
| 16 | 
                - LatestAppScreenInfo, ModelInfo, OperatorInfo)  | 
            |
| 15 | 
                +from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo,  | 
            |
| 16 | 
                + LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo)  | 
            |
| 17 | 17 | 
                from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo  | 
            
| 18 | 18 | 
                from utils.error.errno_utils import (AdministratorStatusCode, OperatorStatusCode, ProductBrandStatusCode,  | 
            
| 19 | 19 | 
                ProductModelStatusCode, UserStatusCode)  | 
            
                @@ -274,6 +274,9 @@ def consumer_info_api(request):  | 
            ||
| 274 | 274 | 
                test_user=False,  | 
            
| 275 | 275 | 
                ).exists()  | 
            
| 276 | 276 | 
                 | 
            
| 277 | 
                +    act = ActivityInfo.objects.filter(status=True).order_by('-pk').first()
               | 
            |
| 278 | 
                + during_activity = True if act and act.has_unexpired_activity else False  | 
            |
| 279 | 
                +  | 
            |
| 277 | 280 | 
                # 记录用户信息提交记录  | 
            
| 278 | 281 | 
                log = ConsumeInfoSubmitLogInfo.objects.create(  | 
            
| 279 | 282 | 
                user_id=user_id,  | 
            
                @@ -293,6 +296,7 @@ def consumer_info_api(request):  | 
            ||
| 293 | 296 | 
                serialNo=serialNo,  | 
            
| 294 | 297 | 
                verifyResult=verifyResult,  | 
            
| 295 | 298 | 
                dupload=dupload,  | 
            
| 299 | 
                + submit_during_activity=during_activity,  | 
            |
| 296 | 300 | 
                test_user=user.test_user,  | 
            
| 297 | 301 | 
                )  | 
            
| 298 | 302 | 
                 | 
            
                @@ -8,8 +8,8 @@ from django_admin import AdvancedActionsModelAdmin, AdvancedExportExcelModelAdmi  | 
            ||
| 8 | 8 | 
                from django_models_ext import ProvinceShortModelMixin  | 
            
| 9 | 9 | 
                from pysnippets.strsnippets import strip  | 
            
| 10 | 10 | 
                 | 
            
| 11 | 
                -from mch.models import (AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo, LatestAppInfo,  | 
            |
| 12 | 
                - LatestAppScreenInfo, ModelInfo, OperatorInfo, SaleclerkInfo)  | 
            |
| 11 | 
                +from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo,  | 
            |
| 12 | 
                + LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo, SaleclerkInfo)  | 
            |
| 13 | 13 | 
                 | 
            
| 14 | 14 | 
                 | 
            
| 15 | 15 | 
                class AdministratorInfoAdmin(admin.ModelAdmin):  | 
            
                @@ -185,6 +185,10 @@ class ConsumeInfoSubmitLogInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin):  | 
            ||
| 185 | 185 | 
                     search_fields = ('user_id', 'phone', 'serialNo')
               | 
            
| 186 | 186 | 
                 | 
            
| 187 | 187 | 
                 | 
            
| 188 | 
                +class ActivityInfoAdmin(admin.ModelAdmin):  | 
            |
| 189 | 
                +    list_display = ('activity_name', 'start_at', 'end_at', 'status', 'created_at', 'updated_at')
               | 
            |
| 190 | 
                +  | 
            |
| 191 | 
                +  | 
            |
| 188 | 192 | 
                admin.site.register(AdministratorInfo, AdministratorInfoAdmin)  | 
            
| 189 | 193 | 
                admin.site.register(OperatorInfo, OperatorInfoAdmin)  | 
            
| 190 | 194 | 
                admin.site.register(BrandInfo, BrandInfoAdmin)  | 
            
                @@ -196,3 +200,4 @@ admin.site.register(SaleclerkInfo, SaleclerkInfoAdmin)  | 
            ||
| 196 | 200 | 
                admin.site.register(LatestAppInfo, LatestAppInfoAdmin)  | 
            
| 197 | 201 | 
                admin.site.register(LatestAppScreenInfo, LatestAppScreenInfoAdmin)  | 
            
| 198 | 202 | 
                admin.site.register(ConsumeInfoSubmitLogInfo, ConsumeInfoSubmitLogInfoAdmin)  | 
            
| 203 | 
                +admin.site.register(ActivityInfo, ActivityInfoAdmin)  | 
            
                @@ -0,0 +1,36 @@  | 
            ||
| 1 | 
                +# -*- coding: utf-8 -*-  | 
            |
| 2 | 
                +# Generated by Django 1.11.20 on 2019-03-01 06:02  | 
            |
| 3 | 
                +from __future__ import unicode_literals  | 
            |
| 4 | 
                +  | 
            |
| 5 | 
                +from django.db import migrations, models  | 
            |
| 6 | 
                +  | 
            |
| 7 | 
                +  | 
            |
| 8 | 
                +class Migration(migrations.Migration):  | 
            |
| 9 | 
                +  | 
            |
| 10 | 
                + dependencies = [  | 
            |
| 11 | 
                +        ('mch', '0029_auto_20181117_0052'),
               | 
            |
| 12 | 
                + ]  | 
            |
| 13 | 
                +  | 
            |
| 14 | 
                + operations = [  | 
            |
| 15 | 
                + migrations.CreateModel(  | 
            |
| 16 | 
                + name='ActivityInfo',  | 
            |
| 17 | 
                + fields=[  | 
            |
| 18 | 
                +                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
               | 
            |
| 19 | 
                +                ('status', models.BooleanField(db_index=True, default=True, help_text='Status', verbose_name='status')),
               | 
            |
| 20 | 
                +                ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
               | 
            |
| 21 | 
                +                ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
               | 
            |
| 22 | 
                +                ('activity_name', models.CharField(blank=True, help_text='\u6d3b\u52a8\u540d\u79f0', max_length=255, null=True, verbose_name='activity_name')),
               | 
            |
| 23 | 
                +                ('start_at', models.DateTimeField(help_text='start_at', verbose_name='start_at')),
               | 
            |
| 24 | 
                +                ('end_at', models.DateTimeField(help_text='end_at', verbose_name='end_at')),
               | 
            |
| 25 | 
                + ],  | 
            |
| 26 | 
                +            options={
               | 
            |
| 27 | 
                + 'verbose_name': '\u6d3b\u52a8\u4fe1\u606f',  | 
            |
| 28 | 
                + 'verbose_name_plural': '\u6d3b\u52a8\u4fe1\u606f',  | 
            |
| 29 | 
                + },  | 
            |
| 30 | 
                + ),  | 
            |
| 31 | 
                + migrations.AddField(  | 
            |
| 32 | 
                + model_name='consumeinfosubmitloginfo',  | 
            |
| 33 | 
                + name='submit_during_activity',  | 
            |
| 34 | 
                + field=models.BooleanField(db_index=True, default=False, help_text='\u662f\u5426\u4e3a\u6d3b\u52a8\u671f\u95f4\u4e0a\u4f20', verbose_name='submit_during_activity'),  | 
            |
| 35 | 
                + ),  | 
            |
| 36 | 
                + ]  | 
            
                @@ -6,6 +6,7 @@ from django.utils.translation import ugettext_lazy as _  | 
            ||
| 6 | 6 | 
                from django_models_ext import (BaseModelMixin, ProvinceShortModelMixin, SexModelMixin, upload_file_path,  | 
            
| 7 | 7 | 
                upload_file_url, upload_path)  | 
            
| 8 | 8 | 
                from shortuuidfield import ShortUUIDField  | 
            
| 9 | 
                +from TimeConvert import TimeConvert as tc  | 
            |
| 9 | 10 | 
                 | 
            
| 10 | 11 | 
                 | 
            
| 11 | 12 | 
                class AdministratorInfo(BaseModelMixin):  | 
            
                @@ -490,6 +491,8 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):  | 
            ||
| 490 | 491 | 
                 | 
            
| 491 | 492 | 
                dupload = models.BooleanField(_(u'dupload'), default=False, help_text=_(u'是否为重复提交'), db_index=True)  | 
            
| 492 | 493 | 
                 | 
            
| 494 | 
                + submit_during_activity = models.BooleanField(_(u'submit_during_activity'), default=False, help_text=_(u'是否为活动期间上传'), db_index=True)  | 
            |
| 495 | 
                +  | 
            |
| 493 | 496 | 
                test_user = models.BooleanField(_(u'test_user'), default=False, help_text=_(u'是否为测试用户'), db_index=True)  | 
            
| 494 | 497 | 
                 | 
            
| 495 | 498 | 
                class Meta:  | 
            
                @@ -519,4 +522,23 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin):  | 
            ||
| 519 | 522 | 
                'model_info': self.model_info,  | 
            
| 520 | 523 | 
                'serialNo': self.serialNo,  | 
            
| 521 | 524 | 
                'verifyResult': self.verifyResult,  | 
            
| 525 | 
                + 'submit_during_activity': self.submit_during_activity,  | 
            |
| 522 | 526 | 
                }  | 
            
| 527 | 
                +  | 
            |
| 528 | 
                +  | 
            |
| 529 | 
                +class ActivityInfo(BaseModelMixin):  | 
            |
| 530 | 
                + activity_name = models.CharField(_(u'activity_name'), max_length=255, blank=True, null=True, help_text=u'活动名称')  | 
            |
| 531 | 
                +  | 
            |
| 532 | 
                + start_at = models.DateTimeField(_(u'start_at'), help_text=_(u'start_at'))  | 
            |
| 533 | 
                + end_at = models.DateTimeField(_(u'end_at'), help_text=_(u'end_at'))  | 
            |
| 534 | 
                +  | 
            |
| 535 | 
                + class Meta:  | 
            |
| 536 | 
                + verbose_name = _(u'活动信息')  | 
            |
| 537 | 
                + verbose_name_plural = _(u'活动信息')  | 
            |
| 538 | 
                +  | 
            |
| 539 | 
                + def __unicode__(self):  | 
            |
| 540 | 
                + return unicode(self.pk)  | 
            |
| 541 | 
                +  | 
            |
| 542 | 
                + @property  | 
            |
| 543 | 
                + def has_unexpired_activity(self):  | 
            |
| 544 | 
                + return self.start_at <= tc.utc_datetime() < self.end_at  | 
            
                @@ -9,9 +9,9 @@ isoweek==1.3.3  | 
            ||
| 9 | 9 | 
                jsonfield==2.0.2  | 
            
| 10 | 10 | 
                mock==2.0.0  | 
            
| 11 | 11 | 
                monetary==1.0.2  | 
            
| 12 | 
                -pysnippets==1.0.6  | 
            |
| 12 | 
                +pysnippets==1.0.8  | 
            |
| 13 | 13 | 
                qiniu==7.2.2  | 
            
| 14 | 
                -requests==2.20.1  | 
            |
| 14 | 
                +requests==2.21.0  | 
            |
| 15 | 15 | 
                rlog==0.3  | 
            
| 16 | 16 | 
                rsa==3.4.2  | 
            
| 17 | 17 | 
                shortuuid==0.5.0  | 
            
                @@ -1,3 +1,3 @@  | 
            ||
| 1 | 1 | 
                ipdb==0.11  | 
            
| 2 | 
                -ipython==5.6.0  | 
            |
| 2 | 
                +ipython==5.8.0  | 
            |
| 3 | 3 | 
                uwsgi==2.0.17  | 
            
                @@ -1,4 +1,4 @@  | 
            ||
| 1 | 
                -Django==1.11.16  | 
            |
| 1 | 
                +Django==1.11.20  | 
            |
| 2 | 2 | 
                django-admin==1.3.2  | 
            
| 3 | 3 | 
                django-cors-headers==2.4.0  | 
            
| 4 | 4 | 
                django-curtail-uuid==1.0.4  | 
            
                @@ -6,7 +6,7 @@ django-detect==1.0.8  | 
            ||
| 6 | 6 | 
                django-file-md5==1.0.2  | 
            
| 7 | 7 | 
                django-file-upload==1.1.0  | 
            
| 8 | 8 | 
                django-ip==1.0.2  | 
            
| 9 | 
                -django-json-render==1.0.1  | 
            |
| 9 | 
                +django-json-render==1.0.2  | 
            |
| 10 | 10 | 
                django-json-response==1.1.5  | 
            
| 11 | 11 | 
                django-logit==1.1.3  | 
            
| 12 | 12 | 
                django-mobi==0.1.7  | 
            
                @@ -1,3 +1,3 @@  | 
            ||
| 1 | 
                -hiredis==0.3.0  | 
            |
| 1 | 
                +hiredis==1.0.0  | 
            |
| 2 | 2 | 
                redis==2.10.6  | 
            
| 3 | 
                -redis-extensions==1.2.4  | 
            |
| 3 | 
                +redis-extensions==1.2.5  |