@@ -3,7 +3,7 @@  | 
            ||
| 3 | 3 | 
                from django.contrib import admin  | 
            
| 4 | 4 | 
                from django_admin import ChangeOnlyModelAdmin, ReadOnlyModelAdmin  | 
            
| 5 | 5 | 
                 | 
            
| 6 | 
                -from account.models import UserInfo, UserIntegralIncomeExpensesInfo, LensmanInfo  | 
            |
| 6 | 
                +from account.models import LensmanInfo, UserInfo, UserIntegralIncomeExpensesInfo  | 
            |
| 7 | 7 | 
                from mch.models import ConsumeInfoSubmitLogInfo  | 
            
| 8 | 8 | 
                 | 
            
| 9 | 9 | 
                 | 
            
                @@ -24,6 +24,7 @@ class LensmanInfoAdmin(ChangeOnlyModelAdmin, admin.ModelAdmin):  | 
            ||
| 24 | 24 | 
                     list_filter = ('lensman_status', 'status')
               | 
            
| 25 | 25 | 
                     search_fields = ('user_id', 'name', 'phone')
               | 
            
| 26 | 26 | 
                 | 
            
| 27 | 
                +  | 
            |
| 27 | 28 | 
                class UserIntegralIncomeExpensesInfoAdmin(ChangeOnlyModelAdmin, admin.ModelAdmin):  | 
            
| 28 | 29 | 
                     list_display = ('user_id', 'brand_id', 'brand_name', 'model_id', 'model_name', 'code', 'integral_from', 'integral', 'final_integral', 'remark', 'updated_at', 'created_at')
               | 
            
| 29 | 30 | 
                     list_filter = ('integral_from', 'status')
               | 
            
                @@ -1,12 +1,13 @@  | 
            ||
| 1 | 1 | 
                # -*- coding: utf-8 -*-  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 
                +import datetime  | 
            |
| 4 | 
                +  | 
            |
| 3 | 5 | 
                from django.conf import settings  | 
            
| 4 | 6 | 
                from django.db import models  | 
            
| 5 | 7 | 
                from django.utils.translation import ugettext_lazy as _  | 
            
| 6 | 8 | 
                from django_models_ext import BaseModelMixin, SexModelMixin  | 
            
| 7 | 9 | 
                from shortuuidfield import ShortUUIDField  | 
            
| 8 | 10 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 9 | 
                -import datetime  | 
            |
| 10 | 11 | 
                 | 
            
| 11 | 12 | 
                from kodo.basemodels import LensmanTypeBoolMixin  | 
            
| 12 | 13 | 
                from mch.models import ConsumeInfoSubmitLogInfo, MaintenancemanInfo, SaleclerkInfo  | 
            
                @@ -271,7 +272,7 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin):  | 
            ||
| 271 | 272 | 
                'identity_card_name': self.identity_card_name,  | 
            
| 272 | 273 | 
                 | 
            
| 273 | 274 | 
                'tenancy_shot_permission': self.tenancy_shot_permission,  | 
            
| 274 | 
                - #摄影师  | 
            |
| 275 | 
                + # 摄影师  | 
            |
| 275 | 276 | 
                'is_lensman': bool(self.lensmaninfo),  | 
            
| 276 | 277 | 
                'lensman_info': self.lensmaninfo,  | 
            
| 277 | 278 | 
                }  | 
            
                @@ -376,7 +377,6 @@ class LensmanInfo(BaseModelMixin):  | 
            ||
| 376 | 377 | 
                (DISABLED, u'已禁用'),  | 
            
| 377 | 378 | 
                )  | 
            
| 378 | 379 | 
                 | 
            
| 379 | 
                -  | 
            |
| 380 | 380 | 
                lensman_id = ShortUUIDField(_(u'lensman_id'), max_length=32, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True, unique=True)  | 
            
| 381 | 381 | 
                 | 
            
| 382 | 382 | 
                user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)  | 
            
                @@ -408,7 +408,7 @@ class LensmanInfo(BaseModelMixin):  | 
            ||
| 408 | 408 | 
                 | 
            
| 409 | 409 | 
                def __unicode__(self):  | 
            
| 410 | 410 | 
                return '%d' % self.pk  | 
            
| 411 | 
                -  | 
            |
| 411 | 
                +  | 
            |
| 412 | 412 | 
                @property  | 
            
| 413 | 413 | 
                def is_expired(self):  | 
            
| 414 | 414 | 
                now_time = datetime.datetime.now()  | 
            
                @@ -448,6 +448,7 @@ class LensmanInfo(BaseModelMixin):  | 
            ||
| 448 | 448 | 
                'created_at': tc.local_string(utc_dt=self.created_at),  | 
            
| 449 | 449 | 
                }  | 
            
| 450 | 450 | 
                 | 
            
| 451 | 
                +  | 
            |
| 451 | 452 | 
                class UserIntegralIncomeExpensesInfo(BaseModelMixin):  | 
            
| 452 | 453 | 
                PRODUCT = 0  | 
            
| 453 | 454 | 
                SHARE = 1  | 
            
                @@ -500,7 +501,7 @@ class UserIntegralIncomeExpensesInfo(BaseModelMixin):  | 
            ||
| 500 | 501 | 
                'expired_at': self.expired_at if self.expired_at else '',  | 
            
| 501 | 502 | 
                'created_at': tc.local_string(utc_dt=self.created_at),  | 
            
| 502 | 503 | 
                }  | 
            
| 503 | 
                -  | 
            |
| 504 | 
                +  | 
            |
| 504 | 505 | 
                @property  | 
            
| 505 | 506 | 
                def lensman_userdata(self):  | 
            
| 506 | 507 | 
                act = MemberActivityInfo.objects.get(activity_id=self.activity_id)  | 
            
                @@ -513,7 +514,7 @@ class UserIntegralIncomeExpensesInfo(BaseModelMixin):  | 
            ||
| 513 | 514 | 
                'expired_at': self.expired_at if self.expired_at else '',  | 
            
| 514 | 515 | 
                'created_at': tc.local_string(utc_dt=self.created_at),  | 
            
| 515 | 516 | 
                }  | 
            
| 516 | 
                -  | 
            |
| 517 | 
                +  | 
            |
| 517 | 518 | 
                 | 
            
| 518 | 519 | 
                class LensmanIntegralIncomeExpensesInfo(BaseModelMixin):  | 
            
| 519 | 520 | 
                user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)  | 
            
                @@ -549,14 +550,14 @@ class LensmanIntegralIncomeExpensesInfo(BaseModelMixin):  | 
            ||
| 549 | 550 | 
                'expired_at': self.expired_at if self.expired_at else '',  | 
            
| 550 | 551 | 
                'created_at': tc.local_string(utc_dt=self.created_at),  | 
            
| 551 | 552 | 
                }  | 
            
| 552 | 
                -  | 
            |
| 553 | 
                +  | 
            |
| 553 | 554 | 
                @property  | 
            
| 554 | 555 | 
                def userdata(self):  | 
            
| 555 | 556 | 
                if self.activity_id:  | 
            
| 556 | 557 | 
                act = MemberActivityInfo.objects.get(activity_id=self.activity_id)  | 
            
| 557 | 558 | 
                else:  | 
            
| 558 | 559 | 
                act = None  | 
            
| 559 | 
                -  | 
            |
| 560 | 
                +  | 
            |
| 560 | 561 | 
                         return {
               | 
            
| 561 | 562 | 
                'integral': self.integral,  | 
            
| 562 | 563 | 
                'remark': self.remark,  | 
            
                @@ -564,4 +565,4 @@ class LensmanIntegralIncomeExpensesInfo(BaseModelMixin):  | 
            ||
| 564 | 565 | 
                'activity_id': self.activity_id,  | 
            
| 565 | 566 | 
                'expired_at': self.expired_at if self.expired_at else '',  | 
            
| 566 | 567 | 
                'created_at': tc.local_string(utc_dt=self.created_at),  | 
            
| 567 | 
                - }  | 
            |
| 568 | 
                + }  | 
            
                @@ -1027,7 +1027,6 @@ def member_activity_contribute_welfare_unlock(request, administrator):  | 
            ||
| 1027 | 1027 | 
                except MemberActivityInfo.DoesNotExist:  | 
            
| 1028 | 1028 | 
                return (MemberActivityStatusCode.ACTIVITY_NOT_FOUND)  | 
            
| 1029 | 1029 | 
                 | 
            
| 1030 | 
                -  | 
            |
| 1031 | 1030 | 
                     data = {
               | 
            
| 1032 | 1031 | 
                         "thing1": {
               | 
            
| 1033 | 1032 | 
                "value": act.title[:20],  | 
            
                @@ -1045,7 +1044,7 @@ def member_activity_contribute_welfare_unlock(request, administrator):  | 
            ||
| 1045 | 1044 | 
                 | 
            
| 1046 | 1045 | 
                     res = sendwxasubscribemessage(openid=user.openid_miniapp, template_id=settings.TEMPLATE_ID_UNLOCKING_WELFARE, data=data, miniprogram_state=None, lang=None, page='/pages/member/activity/activity?unlocking_id={}'.format(unlocking_info.unlocking_id))
               | 
            
| 1047 | 1046 | 
                     # sendtemplatemessage(openid=user.openid, template_id=settings.TEMPLATE_ID_UNLOCKING_WELFARE, data=data, miniappid=appid, minipagepath='/pages/member/activity/activity?unlocking_id={}'.format(unlocking_info.unlocking_id))
               | 
            
| 1048 | 
                -  | 
            |
| 1047 | 
                +  | 
            |
| 1049 | 1048 | 
                unlocking_info.send_template_message_res = json.dumps(res)  | 
            
| 1050 | 1049 | 
                unlocking_info.save()  | 
            
| 1051 | 1050 | 
                 | 
            
                @@ -2,16 +2,15 @@  | 
            ||
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                from __future__ import division  | 
            
| 4 | 4 | 
                 | 
            
| 5 | 
                -from paginator import pagination  | 
            |
| 6 | 
                -  | 
            |
| 7 | 5 | 
                from django.db import transaction  | 
            
| 8 | 6 | 
                from django.db.models import Q  | 
            
| 9 | 7 | 
                from django_logit import logit  | 
            
| 10 | 8 | 
                from django_response import response  | 
            
| 9 | 
                +from paginator import pagination  | 
            |
| 11 | 10 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 12 | 11 | 
                 | 
            
| 13 | 
                -from kodo.decorators import check_admin  | 
            |
| 14 | 12 | 
                from account.models import UserInfo  | 
            
| 13 | 
                +from kodo.decorators import check_admin  | 
            |
| 15 | 14 | 
                from mch.models import AdministratorInfo, ConsumeShotUnbindingInfo  | 
            
| 16 | 15 | 
                 | 
            
| 17 | 16 | 
                 | 
            
                @@ -23,11 +23,11 @@ def get_signed_contribtion_contract_file_api(request, administrator):  | 
            ||
| 23 | 23 | 
                BusinessType = 'FLOW'  | 
            
| 24 | 24 | 
                BusinessIds = [contract.flow_id]  | 
            
| 25 | 25 | 
                FileType = 'PDF'  | 
            
| 26 | 
                - UrlTtl = '86400' # 过期时间  | 
            |
| 26 | 
                + UrlTtl = '86400' # 过期时间  | 
            |
| 27 | 27 | 
                 | 
            
| 28 | 28 | 
                # TODO: 获取合同文件 https://qian.tencent.com/developers/companyApis/templatesAndFiles/DescribeFileUrls  | 
            
| 29 | 29 | 
                FileUrls = []  | 
            
| 30 | 30 | 
                 | 
            
| 31 | 31 | 
                     return response(200, data={
               | 
            
| 32 | 32 | 
                'file_url': FileUrls[0].Url  | 
            
| 33 | 
                - })  | 
            |
| 33 | 
                + })  | 
            
                @@ -1,12 +1,14 @@  | 
            ||
| 1 | 1 | 
                # -*- coding: utf-8 -*-  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                from django.conf.urls import include, url  | 
            
| 4 | 
                -from api.lensman import contract_admin_views, contract_mp_views, activity_admin_views  | 
            |
| 4 | 
                +  | 
            |
| 5 | 
                +from api.lensman import activity_admin_views, contract_admin_views, contract_mp_views  | 
            |
| 6 | 
                +  | 
            |
| 5 | 7 | 
                 | 
            
| 6 | 8 | 
                urlpatterns = [  | 
            
| 7 | 9 | 
                url(r'^mp/lensman/contribution/contract/get$', contract_mp_views.get_contribtion_contract_api, name='get_contribtion_contract_api'),  | 
            
| 8 | 10 | 
                url(r'^mp/lensman/contribution/contract/status/get$', contract_mp_views.get_contribtion_contract_status_api, name='get_contribtion_contract_status_api'),  | 
            
| 9 | 
                -  | 
            |
| 11 | 
                +  | 
            |
| 10 | 12 | 
                url(r'^mp/ess/callback$', contract_mp_views.ess_callback, name='ess_callback'),  | 
            
| 11 | 13 | 
                ]  | 
            
| 12 | 14 | 
                 | 
            
                @@ -5,9 +5,9 @@ from __future__ import division  | 
            ||
| 5 | 5 | 
                from datetime import datetime  | 
            
| 6 | 6 | 
                 | 
            
| 7 | 7 | 
                from django.conf import settings  | 
            
| 8 | 
                +from django.db.models import Q  | 
            |
| 8 | 9 | 
                from django_logit import logit  | 
            
| 9 | 10 | 
                from django_response import response  | 
            
| 10 | 
                -from django.db.models import Q  | 
            |
| 11 | 11 | 
                from paginator import pagination  | 
            
| 12 | 12 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 13 | 13 | 
                 | 
            
                @@ -29,8 +29,7 @@ def lensman_list(request, administrator):  | 
            ||
| 29 | 29 | 
                     logs = LensmanInfo.objects.filter(status=True).order_by('-pk')
               | 
            
| 30 | 30 | 
                 | 
            
| 31 | 31 | 
                if query:  | 
            
| 32 | 
                - logs = logs.filter(Q(name__icontains=query) |  | 
            |
| 33 | 
                - Q(phone__icontains=query))  | 
            |
| 32 | 
                + logs = logs.filter(Q(name__icontains=query) | Q(phone__icontains=query))  | 
            |
| 34 | 33 | 
                 | 
            
| 35 | 34 | 
                if lensman_status:  | 
            
| 36 | 35 | 
                logs = logs.filter(lensman_status=lensman_status)  | 
            
                @@ -8,6 +8,7 @@ from django_response import response  | 
            ||
| 8 | 8 | 
                 | 
            
| 9 | 9 | 
                from account.models import LensmanInfo, LensmanIntegralIncomeExpensesInfo  | 
            
| 10 | 10 | 
                 | 
            
| 11 | 
                +  | 
            |
| 11 | 12 | 
                @logit  | 
            
| 12 | 13 | 
                def lensman_register(request):  | 
            
| 13 | 14 | 
                     user_id = request.POST.get('user_id', '')
               | 
            
                @@ -27,29 +28,28 @@ def lensman_register(request):  | 
            ||
| 27 | 28 | 
                 | 
            
| 28 | 29 | 
                @logit  | 
            
| 29 | 30 | 
                def lensman_detail(request):  | 
            
| 30 | 
                -  user_id = request.POST.get('user_id', '')
               | 
            |
| 31 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 31 | 32 | 
                 | 
            
| 32 | 
                - try:  | 
            |
| 33 | 
                - lensman = LensmanInfo.objects.get(user_id=user_id, status=True)  | 
            |
| 34 | 
                - except LensmanInfo.DoesNotExist:  | 
            |
| 35 | 
                - return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 33 | 
                + try:  | 
            |
| 34 | 
                + lensman = LensmanInfo.objects.get(user_id=user_id, status=True)  | 
            |
| 35 | 
                + except LensmanInfo.DoesNotExist:  | 
            |
| 36 | 
                + return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 36 | 37 | 
                 | 
            
| 37 | 
                - return response(200, 'Get Lensman Detail Success', u'获取摄影师信息成功', data=lensman.data)  | 
            |
| 38 | 
                + return response(200, 'Get Lensman Detail Success', u'获取摄影师信息成功', data=lensman.data)  | 
            |
| 38 | 39 | 
                 | 
            
| 39 | 40 | 
                 | 
            
| 40 | 41 | 
                @logit  | 
            
| 41 | 42 | 
                def lensman_integral_list(request):  | 
            
| 42 | 
                -  user_id = request.POST.get('user_id', '')
               | 
            |
| 43 | 
                -  brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
               | 
            |
| 43 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 44 | 
                +    brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
               | 
            |
| 45 | 
                +  | 
            |
| 46 | 
                + try:  | 
            |
| 47 | 
                + lensman = LensmanInfo.objects.get(user_id=user_id, status=True)  | 
            |
| 48 | 
                + except LensmanInfo.DoesNotExist:  | 
            |
| 49 | 
                + return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 44 | 50 | 
                 | 
            
| 45 | 
                - try:  | 
            |
| 46 | 
                - lensman = LensmanInfo.objects.get(user_id=user_id, status=True)  | 
            |
| 47 | 
                - except LensmanInfo.DoesNotExist:  | 
            |
| 48 | 
                - return response(200, 'Lensman Not Found', u'摄影师不存在')  | 
            |
| 49 | 
                -  | 
            |
| 50 | 
                -  integrals = LensmanIntegralIncomeExpensesInfo.objects.filter(user_id=user_id, status=True).order_by('-pk')
               | 
            |
| 51 | 
                +    integrals = LensmanIntegralIncomeExpensesInfo.objects.filter(user_id=user_id, status=True).order_by('-pk')
               | 
            |
| 51 | 52 | 
                 | 
            
| 52 | 
                - integrals = [integral.userdata for integral in integrals]  | 
            |
| 53 | 
                -  | 
            |
| 53 | 
                + integrals = [integral.userdata for integral in integrals]  | 
            |
| 54 | 54 | 
                 | 
            
| 55 | 
                - return response(200, 'Get Lensman Integral List Success', u'获取摄影师积分列表成功', data=integrals)  | 
            |
| 55 | 
                + return response(200, 'Get Lensman Integral List Success', u'获取摄影师积分列表成功', data=integrals)  | 
            
                @@ -17,9 +17,9 @@ from TimeConvert import TimeConvert as tc  | 
            ||
| 17 | 17 | 
                from account.models import UserInfo  | 
            
| 18 | 18 | 
                from coupon.models import CouponInfo, UserCouponInfo  | 
            
| 19 | 19 | 
                from integral.models import SaleclerkSubmitLogInfo  | 
            
| 20 | 
                -from logs.models import AdministratorLoginLogInfo, MchInfoEncryptLogInfo, ComplementCodeLogInfo  | 
            |
| 21 | 
                -from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, DistributorInfo,  | 
            |
| 22 | 
                - LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo, ConsumeShotUnbindingInfo)  | 
            |
| 20 | 
                +from logs.models import AdministratorLoginLogInfo, ComplementCodeLogInfo, MchInfoEncryptLogInfo  | 
            |
| 21 | 
                +from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, ConsumeInfoSubmitLogInfo, ConsumeShotUnbindingInfo,  | 
            |
| 22 | 
                + DistributorInfo, LatestAppInfo, LatestAppScreenInfo, ModelInfo, OperatorInfo)  | 
            |
| 23 | 23 | 
                from statistic.models import ConsumeModelSaleStatisticInfo, ConsumeSaleStatisticInfo, ConsumeUserStatisticInfo  | 
            
| 24 | 24 | 
                from utils.error.errno_utils import (AdministratorStatusCode, OperatorStatusCode, ProductBrandStatusCode,  | 
            
| 25 | 25 | 
                ProductModelStatusCode, UserStatusCode)  | 
            
                @@ -28,16 +28,17 @@ def distributor_list(request):  | 
            ||
| 28 | 28 | 
                'left': left,  | 
            
| 29 | 29 | 
                })  | 
            
| 30 | 30 | 
                 | 
            
| 31 | 
                +  | 
            |
| 31 | 32 | 
                @logit  | 
            
| 32 | 33 | 
                def salesman_detail(request):  | 
            
| 33 | 
                -  user_id = request.POST.get('user_id', '')
               | 
            |
| 34 | 
                +    user_id = request.POST.get('user_id', '')
               | 
            |
| 34 | 35 | 
                 | 
            
| 35 | 
                - try:  | 
            |
| 36 | 
                - salesman = SaleclerkInfo.objects.get(user_id=user_id, status=True)  | 
            |
| 37 | 
                - except SaleclerkInfo.DoesNotExist:  | 
            |
| 38 | 
                - return response(SaleclerkStatusCode.CLERK_NOT_FOUND)  | 
            |
| 36 | 
                + try:  | 
            |
| 37 | 
                + salesman = SaleclerkInfo.objects.get(user_id=user_id, status=True)  | 
            |
| 38 | 
                + except SaleclerkInfo.DoesNotExist:  | 
            |
| 39 | 
                + return response(SaleclerkStatusCode.CLERK_NOT_FOUND)  | 
            |
| 39 | 40 | 
                 | 
            
| 40 | 
                - return response(200, 'Get Salesman Detail Success', u'获取销售员信息成功', data=salesman.data)  | 
            |
| 41 | 
                + return response(200, 'Get Salesman Detail Success', u'获取销售员信息成功', data=salesman.data)  | 
            |
| 41 | 42 | 
                 | 
            
| 42 | 43 | 
                 | 
            
| 43 | 44 | 
                @logit  | 
            
                @@ -72,4 +73,4 @@ def salesman_register(request):  | 
            ||
| 72 | 73 | 
                 | 
            
| 73 | 74 | 
                clerk, _ = SaleclerkInfo.objects.update_or_create(brand_id=brand_id, unionid=unionid, defaults=fields)  | 
            
| 74 | 75 | 
                 | 
            
| 75 | 
                -    return response(200, 'Submit Success', u'提交成功', {})
               | 
            |
| 76 | 
                +    return response(200, 'Submit Success', u'提交成功', {})
               | 
            
                @@ -79,7 +79,6 @@ def shot_create(request, administrator):  | 
            ||
| 79 | 79 | 
                if TenancyShotInfo.objects.filter(model_id=model_id, sn=sn).exists():  | 
            
| 80 | 80 | 
                return response(TenancyStatusCode.TENANCY_SHOT_ALREADY_EXIST)  | 
            
| 81 | 81 | 
                 | 
            
| 82 | 
                -  | 
            |
| 83 | 82 | 
                shot = TenancyShotInfo.objects.create(  | 
            
| 84 | 83 | 
                model_id=model_id,  | 
            
| 85 | 84 | 
                model_name=model_name,  | 
            
                @@ -256,6 +255,7 @@ def shot_request_update(request, administrator):  | 
            ||
| 256 | 255 | 
                'req': req.admindata,  | 
            
| 257 | 256 | 
                })  | 
            
| 258 | 257 | 
                 | 
            
| 258 | 
                +  | 
            |
| 259 | 259 | 
                @logit  | 
            
| 260 | 260 | 
                @check_admin  | 
            
| 261 | 261 | 
                def shot_request_delete(request, administrator):  | 
            
                @@ -3,10 +3,11 @@  | 
            ||
| 3 | 3 | 
                from django.conf.urls import include, url  | 
            
| 4 | 4 | 
                from django_file_upload import views as file_views  | 
            
| 5 | 5 | 
                 | 
            
| 6 | 
                -from api import (admin_views, clerk_views, complement_views, distributor_views, encrypt_views, express_views, log_views,  | 
            |
| 7 | 
                - maintenance_point_views, maintenance_views, mch_views, member_views, model_views, operator_views,  | 
            |
| 8 | 
                - refresh_views, sr_views, staff_views, tenancy_admin_views, tenancy_views, tencentcloud_views, wx_views,  | 
            |
| 9 | 
                - wxa_views, consumer_admin_view, salesman_mp_views, lensman_mp_views, lensman_admin_views)  | 
            |
| 6 | 
                +from api import (admin_views, clerk_views, complement_views, consumer_admin_view, distributor_views, encrypt_views,  | 
            |
| 7 | 
                + express_views, lensman_admin_views, lensman_mp_views, log_views, maintenance_point_views,  | 
            |
| 8 | 
                + maintenance_views, mch_views, member_views, model_views, operator_views, refresh_views,  | 
            |
| 9 | 
                + salesman_mp_views, sr_views, staff_views, tenancy_admin_views, tenancy_views, tencentcloud_views,  | 
            |
| 10 | 
                + wx_views, wxa_views)  | 
            |
| 10 | 11 | 
                from miniapp import qy_views  | 
            
| 11 | 12 | 
                from miniapp import views as mini_views  | 
            
| 12 | 13 | 
                from page import oauth_views, sale_views, screen_views  | 
            
                @@ -277,7 +278,7 @@ urlpatterns += [  | 
            ||
| 277 | 278 | 
                url(r'^admin/complement/code/contacted$', admin_views.complement_code_contacted, name='complement_code_contacted'),  | 
            
| 278 | 279 | 
                ]  | 
            
| 279 | 280 | 
                 | 
            
| 280 | 
                -#销售员  | 
            |
| 281 | 
                +# 销售员  | 
            |
| 281 | 282 | 
                urlpatterns += [  | 
            
| 282 | 283 | 
                url(r'^mp/distributor/list$', salesman_mp_views.distributor_list, name='mp_distributor_list'),  | 
            
| 283 | 284 | 
                url(r'^mp/salesman/register$', salesman_mp_views.salesman_register, name='mp_salesman_register'),  | 
            
                @@ -371,14 +372,14 @@ urlpatterns += [  | 
            ||
| 371 | 372 | 
                     url(r'', include(('member.urls', 'member'), namespace='member')),
               | 
            
| 372 | 373 | 
                ]  | 
            
| 373 | 374 | 
                 | 
            
| 374 | 
                -#摄影师模块  | 
            |
| 375 | 
                +# 摄影师模块  | 
            |
| 375 | 376 | 
                urlpatterns += [  | 
            
| 376 | 
                - #小程序  | 
            |
| 377 | 
                + # 小程序  | 
            |
| 377 | 378 | 
                url(r'^mp/lensman/detail$', lensman_mp_views.lensman_detail, name='mp_lensman_detail'),  | 
            
| 378 | 379 | 
                url(r'^mp/lensman/register$', lensman_mp_views.lensman_register, name='mp_lensman_register'),  | 
            
| 379 | 380 | 
                url(r'^mp/lensman/integral/list$', lensman_mp_views.lensman_integral_list, name='mp_lensman_integral_list'),  | 
            
| 380 | 381 | 
                 | 
            
| 381 | 
                - #管理后台  | 
            |
| 382 | 
                + # 管理后台  | 
            |
| 382 | 383 | 
                url(r'^admin/lensman/list$', lensman_admin_views.lensman_list, name='admin_lensman_list'),  | 
            
| 383 | 384 | 
                url(r'^admin/lensman/audit$', lensman_admin_views.lensman_audit, name='admin_lensman_audit'),  | 
            
| 384 | 385 | 
                url(r'^admin/lensman/update$', lensman_admin_views.lensman_update, name='admin_lensman_update'),  | 
            
                @@ -387,4 +388,3 @@ urlpatterns += [  | 
            ||
| 387 | 388 | 
                 | 
            
| 388 | 389 | 
                     url(r'', include(('api.lensman.lensman_urls', 'lensman'), namespace='lensman')),
               | 
            
| 389 | 390 | 
                ]  | 
            
| 390 | 
                -  | 
            
                @@ -69,7 +69,7 @@ class LensmanContributionContractInfo(BaseModelMixin):  | 
            ||
| 69 | 69 | 
                 | 
            
| 70 | 70 | 
                @property  | 
            
| 71 | 71 | 
                def contract_status(self):  | 
            
| 72 | 
                - if(self.tencent_approve_status == 3 and self.tencent_contract_status == 4):  | 
            |
| 72 | 
                + if self.tencent_approve_status == 3 and self.tencent_contract_status == 4:  | 
            |
| 73 | 73 | 
                return 1  | 
            
| 74 | 74 | 
                else:  | 
            
| 75 | 75 | 
                return 0  | 
            
                @@ -1,3 +1,4 @@  | 
            ||
| 1 | 1 | 
                from django.test import TestCase  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 
                +  | 
            |
| 3 | 4 | 
                # Create your tests here.  | 
            
                @@ -1,3 +1,4 @@  | 
            ||
| 1 | 1 | 
                from django.shortcuts import render  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 
                +  | 
            |
| 3 | 4 | 
                # Create your views here.  | 
            
                @@ -1,3 +1,4 @@  | 
            ||
| 1 | 1 | 
                from django.contrib import admin  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 
                +  | 
            |
| 3 | 4 | 
                # Register your models here.  | 
            
                @@ -5,6 +5,7 @@ from django.utils.translation import ugettext_lazy as _  | 
            ||
| 5 | 5 | 
                from django_models_ext import BaseModelMixin  | 
            
| 6 | 6 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 7 | 7 | 
                 | 
            
| 8 | 
                +  | 
            |
| 8 | 9 | 
                class LensmanContributionActivityIncomeExpensesInfo(BaseModelMixin):  | 
            
| 9 | 10 | 
                user_id = models.CharField(_(u'user_id'), max_length=32, blank=True, null=True, help_text=u'用户唯一标识', db_index=True)  | 
            
| 10 | 11 | 
                lensman_id = models.CharField(_(u'lensman_id'), max_length=32, blank=True, null=True, help_text=u'摄影师唯一标识', db_index=True)  | 
            
                @@ -20,7 +21,7 @@ class LensmanContributionActivityIncomeExpensesInfo(BaseModelMixin):  | 
            ||
| 20 | 21 | 
                 | 
            
| 21 | 22 | 
                def __unicode__(self):  | 
            
| 22 | 23 | 
                return '%d' % self.pk  | 
            
| 23 | 
                -  | 
            |
| 24 | 
                +  | 
            |
| 24 | 25 | 
                @property  | 
            
| 25 | 26 | 
                def data(self):  | 
            
| 26 | 27 | 
                         return {
               | 
            
                @@ -31,7 +32,7 @@ class LensmanContributionActivityIncomeExpensesInfo(BaseModelMixin):  | 
            ||
| 31 | 32 | 
                'created_at': tc.local_string(utc_dt=self.created_at, format='%Y-%m-%d %H:%M:%S'),  | 
            
| 32 | 33 | 
                'updated_at': tc.local_string(utc_dt=self.updated_at, format='%Y-%m-%d %H:%M:%S')  | 
            
| 33 | 34 | 
                }  | 
            
| 34 | 
                -  | 
            |
| 35 | 
                +  | 
            |
| 35 | 36 | 
                @property  | 
            
| 36 | 37 | 
                def admindata(self):  | 
            
| 37 | 
                - return self.data  | 
            |
| 38 | 
                + return self.data  | 
            
                @@ -1,3 +1,4 @@  | 
            ||
| 1 | 1 | 
                from django.test import TestCase  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 
                +  | 
            |
| 3 | 4 | 
                # Create your tests here.  | 
            
                @@ -1,3 +1,4 @@  | 
            ||
| 1 | 1 | 
                from django.shortcuts import render  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 
                +  | 
            |
| 3 | 4 | 
                # Create your views here.  | 
            
                @@ -10,8 +10,8 @@ from pysnippets.strsnippets import strip  | 
            ||
| 10 | 10 | 
                 | 
            
| 11 | 11 | 
                from integral.models import SaleclerkSubmitLogInfo  | 
            
| 12 | 12 | 
                from mch.models import (ActivityInfo, AdministratorInfo, BrandInfo, CameraModelInfo, ConsumeInfoSubmitLogInfo,  | 
            
| 13 | 
                - DistributorInfo, LatestAppInfo, LatestAppScreenInfo, MaintenancemanInfo, ModelCameraBodyInfo,  | 
            |
| 14 | 
                - ModelInfo, OperatorInfo, SaleclerkInfo, ConsumeShotUnbindingInfo)  | 
            |
| 13 | 
                + ConsumeShotUnbindingInfo, DistributorInfo, LatestAppInfo, LatestAppScreenInfo,  | 
            |
| 14 | 
                + MaintenancemanInfo, ModelCameraBodyInfo, ModelInfo, OperatorInfo, SaleclerkInfo)  | 
            |
| 15 | 15 | 
                from utils.redis.rshot import update_member_shot_data  | 
            
| 16 | 16 | 
                 | 
            
| 17 | 17 | 
                 | 
            
                @@ -9,8 +9,8 @@ from jsonfield import JSONField  | 
            ||
| 9 | 9 | 
                from shortuuidfield import ShortUUIDField  | 
            
| 10 | 10 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 11 | 11 | 
                 | 
            
| 12 | 
                -from kodo.basemodels import BrandInfoMixin  | 
            |
| 13 | 12 | 
                from coupon.models import CouponInfo  | 
            
| 13 | 
                +from kodo.basemodels import BrandInfoMixin  | 
            |
| 14 | 14 | 
                 | 
            
| 15 | 15 | 
                 | 
            
| 16 | 16 | 
                class AdministratorInfo(BaseModelMixin):  | 
            
                @@ -9,8 +9,8 @@ from django_response import response  | 
            ||
| 9 | 9 | 
                from paginator import pagination  | 
            
| 10 | 10 | 
                from TimeConvert import TimeConvert as tc  | 
            
| 11 | 11 | 
                 | 
            
| 12 | 
                -from member.models import MemberActivityInfo, MemberActivitySignupInfo, MemberActivityContributionInfo  | 
            |
| 13 | 12 | 
                from kodo.decorators import check_admin  | 
            
| 13 | 
                +from member.models import MemberActivityContributionInfo, MemberActivityInfo, MemberActivitySignupInfo  | 
            |
| 14 | 14 | 
                from utils.error.errno_utils import MemberActivityStatusCode  | 
            
| 15 | 15 | 
                 | 
            
| 16 | 16 | 
                 | 
            
                @@ -255,11 +255,10 @@ def activity_signup_list(request, administrator):  | 
            ||
| 255 | 255 | 
                 | 
            
| 256 | 256 | 
                if is_signin:  | 
            
| 257 | 257 | 
                logs = logs.filter(is_signin=is_signin)  | 
            
| 258 | 
                -  | 
            |
| 258 | 
                +  | 
            |
| 259 | 259 | 
                if audit_status:  | 
            
| 260 | 260 | 
                logs = logs.filter(audit_status=audit_status)  | 
            
| 261 | 261 | 
                 | 
            
| 262 | 
                -  | 
            |
| 263 | 262 | 
                count = logs.count()  | 
            
| 264 | 263 | 
                logs, left = pagination(logs, page, num)  | 
            
| 265 | 264 | 
                logs = [log.admindata for log in logs]  | 
            
                @@ -7,8 +7,9 @@ from django_query import get_query_value  | 
            ||
| 7 | 7 | 
                from django_response import response  | 
            
| 8 | 8 | 
                from paginator import pagination  | 
            
| 9 | 9 | 
                 | 
            
| 10 | 
                -from account.models import UserInfo, LensmanInfo  | 
            |
| 11 | 
                -from member.models import MemberActivityContributionInfo, MemberActivityInfo, MemberActivitySignupInfo, MemberActivityDataInfo  | 
            |
| 10 | 
                +from account.models import LensmanInfo, UserInfo  | 
            |
| 11 | 
                +from member.models import (MemberActivityContributionInfo, MemberActivityDataInfo, MemberActivityInfo,  | 
            |
| 12 | 
                + MemberActivitySignupInfo)  | 
            |
| 12 | 13 | 
                from utils.error.errno_utils import MemberActivityContributionStatusCode, MemberActivityStatusCode, UserStatusCode  | 
            
| 13 | 14 | 
                 | 
            
| 14 | 15 | 
                 | 
            
                @@ -38,6 +39,7 @@ def activity_list(request):  | 
            ||
| 38 | 39 | 
                'activitys': activitys,  | 
            
| 39 | 40 | 
                })  | 
            
| 40 | 41 | 
                 | 
            
| 42 | 
                +  | 
            |
| 41 | 43 | 
                @logit  | 
            
| 42 | 44 | 
                def activity_list_v2(request):  | 
            
| 43 | 45 | 
                     brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
               | 
            
                @@ -51,6 +53,7 @@ def activity_list_v2(request):  | 
            ||
| 51 | 53 | 
                'activitys': activitys,  | 
            
| 52 | 54 | 
                })  | 
            
| 53 | 55 | 
                 | 
            
| 56 | 
                +  | 
            |
| 54 | 57 | 
                @logit  | 
            
| 55 | 58 | 
                def activity_series_list(request):  | 
            
| 56 | 59 | 
                     brand_id = request.POST.get('brand_id') or settings.KODO_DEFAULT_BRAND_ID
               | 
            
                @@ -95,7 +98,7 @@ def activity_signup(request):  | 
            ||
| 95 | 98 | 
                act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)  | 
            
| 96 | 99 | 
                except MemberActivityInfo.DoesNotExist:  | 
            
| 97 | 100 | 
                return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)  | 
            
| 98 | 
                -  | 
            |
| 101 | 
                +  | 
            |
| 99 | 102 | 
                     MemberActivitySignupInfo.objects.update_or_create(user_id=user_id, activity_id=activity_id, defaults={
               | 
            
| 100 | 103 | 
                'title': act.title,  | 
            
| 101 | 104 | 
                'lensman_id': lensman_id,  | 
            
                @@ -7,8 +7,8 @@ from django_admin import DeleteModelAdmin  | 
            ||
| 7 | 7 | 
                from account.models import UserInfo  | 
            
| 8 | 8 | 
                from member.models import (GoodsInfo, GoodsOrderInfo, MemberActivityContributionInfo,  | 
            
| 9 | 9 | 
                MemberActivityContributionWelfareInfo, MemberActivityContributionWelfareUnlockingInfo,  | 
            
| 10 | 
                - MemberActivityGroupShareInfo, MemberActivityInfo, MemberActivitySigninInfo,  | 
            |
| 11 | 
                - MemberActivitySignupInfo, RightInfo, ShotTypeInfo, MemberActivityDataInfo)  | 
            |
| 10 | 
                + MemberActivityDataInfo, MemberActivityGroupShareInfo, MemberActivityInfo,  | 
            |
| 11 | 
                + MemberActivitySigninInfo, MemberActivitySignupInfo, RightInfo, ShotTypeInfo)  | 
            |
| 12 | 12 | 
                from pre.custom_message import sendwxasubscribemessage  | 
            
| 13 | 13 | 
                from utils.redis.rshot import update_member_shot_data  | 
            
| 14 | 14 | 
                 | 
            
                @@ -89,6 +89,7 @@ class MemberActivitySignupInfoAdmin(admin.ModelAdmin):  | 
            ||
| 89 | 89 | 
                class MemberActivitySignupInfoAdmin(admin.ModelAdmin):  | 
            
| 90 | 90 | 
                     list_display = ('signup_id', 'user_id', 'activity_id', 'title', 'name', 'phone', 'status', 'created_at', 'updated_at')
               | 
            
| 91 | 91 | 
                 | 
            
| 92 | 
                +  | 
            |
| 92 | 93 | 
                class MemberActivityDataInfoAdmin(admin.ModelAdmin):  | 
            
| 93 | 94 | 
                     list_display = ('data_id', 'user_id', 'activity_id', 'title', 'lensman_id', 'status', 'created_at', 'updated_at')
               | 
            
| 94 | 95 | 
                 | 
            
                @@ -4,6 +4,7 @@ from django.conf.urls import url  | 
            ||
| 4 | 4 | 
                 | 
            
| 5 | 5 | 
                from member import activity_admin_views, lensman_activity_admin_views  | 
            
| 6 | 6 | 
                 | 
            
| 7 | 
                +  | 
            |
| 7 | 8 | 
                # activity  | 
            
| 8 | 9 | 
                urlpatterns = [  | 
            
| 9 | 10 | 
                url(r'^member/activity/list$', activity_admin_views.activity_list, name='admin_member_activity_list'), # 获取会员活动列表  | 
            
                @@ -18,7 +19,7 @@ urlpatterns += [  | 
            ||
| 18 | 19 | 
                url(r'^member/activity/signup/audit$', lensman_activity_admin_views.activity_signup_audit, name='admin_member_activity_signup_audit'),  | 
            
| 19 | 20 | 
                ]  | 
            
| 20 | 21 | 
                 | 
            
| 21 | 
                -#activity data  | 
            |
| 22 | 
                +# activity data  | 
            |
| 22 | 23 | 
                urlpatterns += [  | 
            
| 23 | 24 | 
                url(r'^member/activity/data/list$', lensman_activity_admin_views.activity_data_list, name='admin_member_activity_data_list'),  | 
            
| 24 | 25 | 
                url(r'^member/activity/integral/add$', lensman_activity_admin_views.activity_integral_add, name='admin_member_activity_integral_add'),  | 
            
                @@ -6,9 +6,9 @@ from django_logit import logit  | 
            ||
| 6 | 6 | 
                from django_response import response  | 
            
| 7 | 7 | 
                from paginator import pagination  | 
            
| 8 | 8 | 
                 | 
            
| 9 | 
                -from account.models import LensmanIntegralIncomeExpensesInfo, UserInfo, LensmanInfo  | 
            |
| 10 | 
                -from member.models import MemberActivitySignupInfo, MemberActivityDataInfo  | 
            |
| 9 | 
                +from account.models import LensmanInfo, LensmanIntegralIncomeExpensesInfo, UserInfo  | 
            |
| 11 | 10 | 
                from kodo.decorators import check_admin  | 
            
| 11 | 
                +from member.models import MemberActivityDataInfo, MemberActivitySignupInfo  | 
            |
| 12 | 12 | 
                from utils.error.errno_utils import UserStatusCode  | 
            
| 13 | 13 | 
                 | 
            
| 14 | 14 | 
                 | 
            
                @@ -37,13 +37,14 @@ def activity_data_list(request, administrator):  | 
            ||
| 37 | 37 | 
                count = logs.count()  | 
            
| 38 | 38 | 
                logs, left = pagination(logs, page, num)  | 
            
| 39 | 39 | 
                logs = [log.admindata for log in logs]  | 
            
| 40 | 
                -  | 
            |
| 40 | 
                +  | 
            |
| 41 | 41 | 
                     return response(200, 'Get Member Activity Data List Success', u'获取会员活动数据列表成功', data={
               | 
            
| 42 | 42 | 
                'logs': logs,  | 
            
| 43 | 43 | 
                'count': count,  | 
            
| 44 | 44 | 
                'left': left,  | 
            
| 45 | 45 | 
                })  | 
            
| 46 | 46 | 
                 | 
            
| 47 | 
                +  | 
            |
| 47 | 48 | 
                @check_admin  | 
            
| 48 | 49 | 
                def activity_integral_add(request, administrator):  | 
            
| 49 | 50 | 
                     activity_id = request.POST.get('activity_id', '')
               | 
            
                @@ -1,14 +1,16 @@  | 
            ||
| 1 | 1 | 
                # -*- coding: utf-8 -*-  | 
            
| 2 | 2 | 
                 | 
            
| 3 | 3 | 
                from django.conf import settings  | 
            
| 4 | 
                -from django_logit import logit  | 
            |
| 5 | 4 | 
                from django.db.models import Q  | 
            
| 5 | 
                +from django_logit import logit  | 
            |
| 6 | 6 | 
                from django_response import response  | 
            
| 7 | 7 | 
                 | 
            
| 8 | 8 | 
                from account.models import LensmanInfo  | 
            
| 9 | 
                -from member.models import MemberActivityInfo, MemberActivityDataInfo, MemberActivitySignupInfo, MemberActivityContributionInfo  | 
            |
| 9 | 
                +from member.models import (MemberActivityContributionInfo, MemberActivityDataInfo, MemberActivityInfo,  | 
            |
| 10 | 
                + MemberActivitySignupInfo)  | 
            |
| 10 | 11 | 
                from utils.error.errno_utils import MemberActivityStatusCode  | 
            
| 11 | 12 | 
                 | 
            
| 13 | 
                +  | 
            |
| 12 | 14 | 
                @logit  | 
            
| 13 | 15 | 
                def activity_data_submit(request):  | 
            
| 14 | 16 | 
                     user_id = request.POST.get('user_id', '')
               | 
            
                @@ -20,7 +22,7 @@ def activity_data_submit(request):  | 
            ||
| 20 | 22 | 
                act = MemberActivityInfo.objects.get(activity_id=activity_id, status=True)  | 
            
| 21 | 23 | 
                except MemberActivityInfo.DoesNotExist:  | 
            
| 22 | 24 | 
                return response(MemberActivityStatusCode.ACTIVITY_NOT_FOUND)  | 
            
| 23 | 
                -  | 
            |
| 25 | 
                +  | 
            |
| 24 | 26 | 
                try:  | 
            
| 25 | 27 | 
                lensman = LensmanInfo.objects.get(lensman_id=lensman_id, status=True)  | 
            
| 26 | 28 | 
                except LensmanInfo.DoesNotExist:  | 
            
                @@ -82,10 +84,8 @@ def activity_message_read(request):  | 
            ||
| 82 | 84 | 
                 | 
            
| 83 | 85 | 
                if signup_id:  | 
            
| 84 | 86 | 
                MemberActivitySignupInfo.objects.filter(user_id=user_id, signup_id=signup_id).update(is_read=True)  | 
            
| 85 | 
                -  | 
            |
| 87 | 
                +  | 
            |
| 86 | 88 | 
                if contribution_id:  | 
            
| 87 | 89 | 
                MemberActivityContributionInfo.objects.filter(user_id=user_id, contribution_id=contribution_id).update(is_read=True)  | 
            
| 88 | 90 | 
                 | 
            
| 89 | 91 | 
                return response(200, 'Activity Message Has Read Success', '活动消息已读')  | 
            
| 90 | 
                -  | 
            |
| 91 | 
                -  | 
            
                @@ -507,7 +507,7 @@ class MemberActivityInfo(BaseModelMixin, BrandInfoMixin):  | 
            ||
| 507 | 507 | 
                def is_contributed(self, user_id):  | 
            
| 508 | 508 | 
                # 是否投稿  | 
            
| 509 | 509 | 
                return MemberActivityContributionInfo.objects.filter(user_id=user_id, activity_id=self.activity_id, status=True).exists()  | 
            
| 510 | 
                -  | 
            |
| 510 | 
                +  | 
            |
| 511 | 511 | 
                def is_signup_passed(self, user_id):  | 
            
| 512 | 512 | 
                return MemberActivitySignupInfo.objects.filter(user_id=user_id, activity_id=self.activity_id, audit_status=MemberActivitySignupInfo.PASSED, status=True).exists()  | 
            
| 513 | 513 | 
                 | 
            
                @@ -780,7 +780,6 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin):  | 
            ||
| 780 | 780 | 
                @property  | 
            
| 781 | 781 | 
                def final_avatar(self):  | 
            
| 782 | 782 | 
                return self.avatar and self.avatar.replace(settings.QINIU_FILE_URL_BEFORE, settings.QINIU_FILE_URL_AFTER).replace(settings.QINIU_FILE_URL_BEFORE2, settings.QINIU_FILE_URL_AFTER)  | 
            
| 783 | 
                -  | 
            |
| 784 | 783 | 
                 | 
            
| 785 | 784 | 
                @property  | 
            
| 786 | 785 | 
                def data(self):  | 
            
                @@ -810,7 +809,8 @@ class MemberActivitySignupInfo(BaseModelMixin, BrandInfoMixin):  | 
            ||
| 810 | 809 | 
                'is_signin': self.is_signin,  | 
            
| 811 | 810 | 
                'audit_status': self.audit_status,  | 
            
| 812 | 811 | 
                }  | 
            
| 813 | 
                -  | 
            |
| 812 | 
                +  | 
            |
| 813 | 
                +  | 
            |
| 814 | 814 | 
                class MemberActivityDataInfo(BaseModelMixin, BrandInfoMixin):  | 
            
| 815 | 815 | 
                data_id = ShortUUIDField(_(u'data_id'), max_length=32, blank=True, null=True, help_text=u'活动数据唯一标识', db_index=True, unique=True)  | 
            
| 816 | 816 | 
                 | 
            
                @@ -953,7 +953,6 @@ class MemberActivityContributionInfo(BaseModelMixin, BrandInfoMixin):  | 
            ||
| 953 | 953 | 
                 | 
            
| 954 | 954 | 
                is_read = models.BooleanField(_(u'is_read'), default=False, help_text=u'审核消息是否已读')  | 
            
| 955 | 955 | 
                 | 
            
| 956 | 
                -  | 
            |
| 957 | 956 | 
                class Meta:  | 
            
| 958 | 957 | 
                verbose_name = _(u'会员活动投稿信息')  | 
            
| 959 | 958 | 
                verbose_name_plural = _(u'会员活动投稿信息')  | 
            
                @@ -1101,7 +1100,6 @@ class MemberActivityContributionWelfareUnlockingInfo(BaseModelMixin, BrandInfoMi  | 
            ||
| 1101 | 1100 | 
                 | 
            
| 1102 | 1101 | 
                send_template_message_res = JSONField(_(u'send_template_message_res'), blank=True, null=True, help_text=u'send_template_message_res')  | 
            
| 1103 | 1102 | 
                 | 
            
| 1104 | 
                -  | 
            |
| 1105 | 1103 | 
                class Meta:  | 
            
| 1106 | 1104 | 
                verbose_name = _(u'会员活动投稿福利解锁信息')  | 
            
| 1107 | 1105 | 
                verbose_name_plural = _(u'会员活动投稿福利解锁信息')  | 
            
                @@ -4,6 +4,7 @@ from django.conf.urls import url  | 
            ||
| 4 | 4 | 
                 | 
            
| 5 | 5 | 
                from member import activity_mp_views, lensman_activity_mp_views  | 
            
| 6 | 6 | 
                 | 
            
| 7 | 
                +  | 
            |
| 7 | 8 | 
                # activity  | 
            
| 8 | 9 | 
                urlpatterns = [  | 
            
| 9 | 10 | 
                url(r'^member/activity/home$', activity_mp_views.activity_home, name='mp_member_activity_home'), # 获取会员活动首页  | 
            
                @@ -37,8 +38,8 @@ urlpatterns += [  | 
            ||
| 37 | 38 | 
                url(r'^member/activity/contribute/detail/lastest$', activity_mp_views.activity_contribute_detail_lastest, name='member_activity_contribute_detail_lastest'),  | 
            
| 38 | 39 | 
                ]  | 
            
| 39 | 40 | 
                 | 
            
| 40 | 
                -#activity message  | 
            |
| 41 | 
                +# activity message  | 
            |
| 41 | 42 | 
                urlpatterns += [  | 
            
| 42 | 43 | 
                url(r'^member/activity/message$', lensman_activity_mp_views.activity_message, name='mp_member_activity_message'),  | 
            
| 43 | 44 | 
                url(r'^member/activity/message/read$', lensman_activity_mp_views.activity_message_read, name='mp_member_activity_message_read'),  | 
            
| 44 | 
                -]  | 
            |
| 45 | 
                +]  | 
            
                @@ -5,5 +5,6 @@  | 
            ||
| 5 | 5 | 
                # Ignoring error codes  | 
            
| 6 | 6 | 
                # -- E128 continuation line under-indented for visual indent  | 
            
| 7 | 7 | 
                # -- E501 line too long  | 
            
| 8 | 
                +# -- E731 do not assign a lambda expression, use a def  | 
            |
| 8 | 9 | 
                 | 
            
| 9 | 
                -pycodestyle --exclude=migrations --ignore=E128,E501 .  | 
            |
| 10 | 
                +pycodestyle --exclude=migrations --ignore=E128,E501,E731 .  |