@@ -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 |