@@ -4,6 +4,7 @@ from django.db import models |
||
4 | 4 |
from django.utils.translation import ugettext_lazy as _ |
5 | 5 |
from django_models_ext import BaseModelMixin, SexModelMixin |
6 | 6 |
from jsonfield import JSONField |
7 |
+from TimeConvert import TimeConvert as tc |
|
7 | 8 |
|
8 | 9 |
from kodo.basemodels import LensmanTypeBoolMixin |
9 | 10 |
from mch.models import SaleclerkInfo |
@@ -461,6 +462,27 @@ class UserInfo(BaseModelMixin, LensmanTypeBoolMixin): |
||
461 | 462 |
def sendcustomwxamessage(self): |
462 | 463 |
# 关注公众号 + 未领保修卡 + 已绑定镜头 |
463 | 464 |
return self.subscribe and not self.has_membercard and self.shots_num |
465 |
+ |
|
466 |
+ @property |
|
467 |
+ def admindata(self): |
|
468 |
+ return { |
|
469 |
+ 'user_id': self.user_id, |
|
470 |
+ 'nickname': self.nickname, |
|
471 |
+ 'avatar': self.avatar, |
|
472 |
+ 'phone': self.phone, |
|
473 |
+ 'sex': self.sex, |
|
474 |
+ 'province': self.province, |
|
475 |
+ 'city': self.city, |
|
476 |
+ 'subscribe': self.subscribe, |
|
477 |
+ 'membercardid': self.membercardid, |
|
478 |
+ 'memberusercardcode': self.memberusercardcode, |
|
479 |
+ 'created_at': tc.local_string(self.created_at, format='%Y-%m-%d'), |
|
480 |
+ |
|
481 |
+ #会员信息 |
|
482 |
+ 'integral': self.integral, |
|
483 |
+ 'shots_num': self.shots_num, |
|
484 |
+ 'level': self.level, |
|
485 |
+ } |
|
464 | 486 |
|
465 | 487 |
|
466 | 488 |
class UserLoginLogInfo(BaseModelMixin): |
@@ -6,9 +6,12 @@ from django.conf import settings |
||
6 | 6 |
from django.db import transaction |
7 | 7 |
from django_logit import logit |
8 | 8 |
from django_response import response |
9 |
+from paginator import pagination |
|
9 | 10 |
from TimeConvert import TimeConvert as tc |
10 | 11 |
|
11 | 12 |
from mch.models import AdministratorInfo, ConsumeInfoSubmitLogInfo |
13 |
+from account.models import UserInfo |
|
14 |
+from integral.models import SaleclerkSubmitLogInfo |
|
12 | 15 |
from utils.error.errno_utils import (AdministratorStatusCode, ProductBrandStatusCode, ProductCouponStatusCode, |
13 | 16 |
ProductMachineStatusCode) |
14 | 17 |
|
@@ -97,3 +100,56 @@ def usecoupon(request): |
||
97 | 100 |
log.save() |
98 | 101 |
|
99 | 102 |
return response(200, 'Use Coupon Success', u'核销优惠券成功') |
103 |
+ |
|
104 |
+@logit |
|
105 |
+def userinfo(request): |
|
106 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) |
|
107 |
+ admin_id = request.POST.get('admin_id', '') |
|
108 |
+ page = request.POST.get('page', 1) |
|
109 |
+ num = request.POST.get('num', 20) |
|
110 |
+ |
|
111 |
+ if brand_id != settings.KODO_DEFAULT_BRAND_ID: |
|
112 |
+ return response(ProductBrandStatusCode.BRAND_NOT_MATCH) |
|
113 |
+ |
|
114 |
+ try: |
|
115 |
+ administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) |
|
116 |
+ except AdministratorInfo.DoesNotExist: |
|
117 |
+ return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) |
|
118 |
+ |
|
119 |
+ userinfos = UserInfo.objects.filter(status=True).order_by('-created_at') |
|
120 |
+ count = userinfos.count() |
|
121 |
+ userinfos, left = pagination(userinfos, page, num) |
|
122 |
+ userinfos = [userinfo.admindata for userinfo in userinfos] |
|
123 |
+ |
|
124 |
+ return response(200, 'Userinfo Success', u'用户列表获取成功', data={ |
|
125 |
+ 'userinfos': userinfos, |
|
126 |
+ 'count': count, |
|
127 |
+ 'left': left, |
|
128 |
+ }) |
|
129 |
+ |
|
130 |
+@logit |
|
131 |
+def query_usergoods(request): |
|
132 |
+ brand_id = request.POST.get('brand_id', settings.KODO_DEFAULT_BRAND_ID) |
|
133 |
+ admin_id = request.POST.get('admin_id', '') |
|
134 |
+ user_id = request.POST.get('user_id', '') |
|
135 |
+ |
|
136 |
+ if brand_id != settings.KODO_DEFAULT_BRAND_ID: |
|
137 |
+ return response(ProductBrandStatusCode.BRAND_NOT_MATCH) |
|
138 |
+ |
|
139 |
+ # 校验用户是否存在 |
|
140 |
+ try: |
|
141 |
+ user = UserInfo.objects.get(user_id=user_id) |
|
142 |
+ except UserInfo.DoesNotExist: |
|
143 |
+ return response(UserStatusCode.USER_NOT_FOUND) |
|
144 |
+ |
|
145 |
+ try: |
|
146 |
+ administrator = AdministratorInfo.objects.get(admin_id=admin_id, user_status=AdministratorInfo.ACTIVATED, status=True) |
|
147 |
+ except AdministratorInfo.DoesNotExist: |
|
148 |
+ return response(AdministratorStatusCode.ADMINISTRATOR_NOT_FOUND) |
|
149 |
+ |
|
150 |
+ logs = ConsumeInfoSubmitLogInfo.objects.filter(brand_id=administrator.brand_id, user_id=user_id, status=True).order_by('-created_at') |
|
151 |
+ logs = [log.adminuserdata for log in logs] |
|
152 |
+ |
|
153 |
+ return response(200, 'Userinfo Success', u'用户列表获取成功', data={ |
|
154 |
+ 'logs': logs, |
|
155 |
+ }) |
@@ -288,6 +288,9 @@ urlpatterns += [ |
||
288 | 288 |
url(r'^admin/querysn$', admin_views.querysn, name='querysn'), |
289 | 289 |
url(r'^admin/queryusedsn$', admin_views.queryusedsn, name='queryusedsn'), |
290 | 290 |
url(r'^admin/usecoupon$', admin_views.usecoupon, name='usecoupon'), |
291 |
+ |
|
292 |
+ url(r'^admin/userinfo$', admin_views.userinfo, name='userinfo'), |
|
293 |
+ url(r'^admin/query_usergoods$', admin_views.query_usergoods, name='query_usergoods'), |
|
291 | 294 |
] |
292 | 295 |
|
293 | 296 |
urlpatterns += [ |
@@ -602,6 +602,20 @@ class ConsumeInfoSubmitLogInfo(BaseModelMixin): |
||
602 | 602 |
'used_at': self.used_at, |
603 | 603 |
} |
604 | 604 |
|
605 |
+ @property |
|
606 |
+ def adminuserdata(self): |
|
607 |
+ try: |
|
608 |
+ model_info = ModelInfo.objects.get(model_id=self.model_id) |
|
609 |
+ except ModelInfo.DoesNotExist: |
|
610 |
+ model_info = {} |
|
611 |
+ |
|
612 |
+ return { |
|
613 |
+ 'model_name': self.model_name, |
|
614 |
+ 'serialNo': self.serialNo, |
|
615 |
+ 'integral': model_info.shot_member_integral, |
|
616 |
+ 'dupload': self.dupload, |
|
617 |
+ 'created_at': tc.local_string(self.created_at, format='%Y-%m-%d'), |
|
618 |
+ } |
|
605 | 619 |
|
606 | 620 |
class ActivityInfo(BaseModelMixin): |
607 | 621 |
FIXED_EXPIRED_TIME = 0 |