pzb пре 6 година
родитељ
комит
16dd38cc64
3 измењених фајлова са 152 додато и 41 уклоњено
  1. 1 1
      Ansjer/urls.py
  2. 139 40
      Controller/UserBrandController.py
  3. 12 0
      Model/models.py

+ 1 - 1
Ansjer/urls.py

@@ -73,7 +73,7 @@ urlpatterns = [
     url(r'^adminManage/manage', AdminManage.AdminManage.as_view()),  # 管理员专属view
     url(r'^adminManage/manage', AdminManage.AdminManage.as_view()),  # 管理员专属view
     url(r'^equipment/OTA', EquipmentOTA.EquipmentOTA.as_view()),  # OTA重构类
     url(r'^equipment/OTA', EquipmentOTA.EquipmentOTA.as_view()),  # OTA重构类
     url(r'^feedbackInfo', FeedBackInfo.FeedBackInfo.as_view()),  # 用户反馈信息
     url(r'^feedbackInfo', FeedBackInfo.FeedBackInfo.as_view()),  # 用户反馈信息
-    url(r'^userbrandinfo',UserBrandController.UserBrandInfo.as_view()), # 用户登录的手机端品牌记录统计信息表
+    url(r'^userbrandinfo/(?P<operation>.*)$',UserBrandController.UserBrandInfo.as_view()), # 用户登录的手机端品牌记录统计信息表
 
 
     url(r'^appInfo', AppInfo.AppInfo.as_view()),  # app版本信息
     url(r'^appInfo', AppInfo.AppInfo.as_view()),  # app版本信息
     url(r'^accesslog', AccessLog.AccessLog.as_view()),
     url(r'^accesslog', AccessLog.AccessLog.as_view()),

+ 139 - 40
Controller/UserBrandController.py

@@ -18,17 +18,15 @@ from django.views.decorators.csrf import csrf_exempt
 from Service.ModelService import ModelService
 from Service.ModelService import ModelService
 from Model.models import User_Brand,Device_User
 from Model.models import User_Brand,Device_User
 from django.utils import timezone
 from django.utils import timezone
-import traceback,time
+import traceback,time,json,urllib.request
 from Object.ResponseObject import ResponseObject
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 from Object.TokenObject import TokenObject
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 from collections import Counter
 from collections import Counter
 '''
 '''
-
-http://192.168.136.45:8077/userbrandinfo?operation=query&token=test&page=1&line=10
-
-http://192.168.136.39:8000/userbrandinfo?operation=query&token=test&page=1&line=5
-http://192.168.136.39:8000/userbrandinfo?operation=queryAll&token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiY24iLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1NTk4OTY4NTd9.nhK3VSghSGjyXKjel4woz7R_3bhjgqQDlX-ypYsklNU&page=1&line=5
+http://192.168.136.45:8077/userbrandinfo/query?token=test&page=1&line=10
+http://192.168.136.39:8000/userbrandinfo/query?token=test&page=1&line=5
+http://192.168.136.39:8000/userbrandinfo/queryAll?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiY24iLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1NTk4OTY4NTd9.nhK3VSghSGjyXKjel4woz7R_3bhjgqQDlX-ypYsklNU&page=1&line=5
 '''
 '''
 
 
 
 
@@ -39,15 +37,18 @@ class UserBrandInfo(View):
 
 
     def get(self, request, *args, **kwargs):
     def get(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request.encoding = 'utf-8'
-        self.clientIP = CommonService.get_ip_address(request)
-        return self.validation(request_dict=request.GET)
+        operation = kwargs.get('operation')
+        return self.validation(request.GET, request, operation)
 
 
     def post(self, request, *args, **kwargs):
     def post(self, request, *args, **kwargs):
         request.encoding = 'utf-8'
         request.encoding = 'utf-8'
-        self.clientIP = CommonService.get_ip_address(request)
-        return self.validation(request_dict=request.POST)
+        operation = kwargs.get('operation')
+        return self.validation(request.POST, request, operation)
 
 
-    def validation(self, request_dict, *args, **kwargs):
+    def validation(self, request_dict, request, operation):
+        if operation is None:
+            return response.json(444, 'error path')
+        self.clientIP = CommonService.get_ip_address(request)
         response = ResponseObject()
         response = ResponseObject()
         token = request_dict.get('token', None)
         token = request_dict.get('token', None)
         if token is not None:
         if token is not None:
@@ -55,18 +56,22 @@ class UserBrandInfo(View):
             response.lang = tko.lang
             response.lang = tko.lang
             if tko.code == 0:
             if tko.code == 0:
                 userID = tko.userID
                 userID = tko.userID
-                operation = request_dict.get('operation', None)
                 if userID is not None:
                 if userID is not None:
-                    if operation == 'query':
+                    if operation == 'queryByAdmin':
                         return self.query_info(request_dict, userID,response)
                         return self.query_info(request_dict, userID,response)
                     elif operation == 'add':
                     elif operation == 'add':
                         return self.add_info(request_dict, userID,response)
                         return self.add_info(request_dict, userID,response)
-                    elif operation == 'queryAll':
+                    elif operation == 'queryAllByAdmin':
                         return self.query_all_info(request_dict, userID,response)
                         return self.query_all_info(request_dict, userID,response)
+                    elif operation == 'deleteByAdmin':
+                        return self.delete_by_admin(request_dict, userID,response)
                     elif operation == 'queryDeviceSupplier':
                     elif operation == 'queryDeviceSupplier':
                         return self.query_deviceSupplier_info(request_dict, userID,response)
                         return self.query_deviceSupplier_info(request_dict, userID,response)
+                    elif operation == 'queryArea':
+                        return self.query_area_info(request_dict, userID,response)
+
                     else:
                     else:
-                        return response.json(444,'444')
+                        return response.json(444)
                 else:
                 else:
                     return response.json(309)
                     return response.json(309)
             else:
             else:
@@ -78,32 +83,87 @@ class UserBrandInfo(View):
 
 
 
 
 
 
-    # http://192.168.136.39:8000/userbrandinfo?operation=add&token=test&deviceSupplier=12341234&deviceModel=deviceModel&osType=osType&osVersion=osVersion
+    # http://192.168.136.39:8000/userbrandinfo?operation=add&token=test&deviceSupplier=小米&deviceModel=HM NOTE 1TD&osType=WEB&osVersion=4.0.0
     def add_info(self, request_dict, userID,response):
     def add_info(self, request_dict, userID,response):
         deviceSupplier = request_dict.get('deviceSupplier', None)
         deviceSupplier = request_dict.get('deviceSupplier', None)
         deviceModel = request_dict.get('deviceModel', None)
         deviceModel = request_dict.get('deviceModel', None)
         osType = request_dict.get('osType', None)
         osType = request_dict.get('osType', None)
         osVersion = request_dict.get('osVersion', None)
         osVersion = request_dict.get('osVersion', None)
-
-        print(self.clientIP)
-        try:
-            user_brand = User_Brand(
-                userID=Device_User.objects.get(userID=userID),
-                deviceSupplier=deviceSupplier,
-                deviceModel=deviceModel,
-                osType=osType,
-                osVersion=osVersion,
-                ip=self.clientIP,
-                addTime = int(time.time())
-            )
-            user_brand.save()
-        except Exception:
-            errorInfo = traceback.format_exc()
-            print(errorInfo)
-            return response.json(424, {'details': errorInfo})
+        country = request_dict.get('country', None)
+        province = request_dict.get('province', None)
+        city = request_dict.get('city', None)
+        area = request_dict.get('area', None)
+        street = request_dict.get('street', None)
+        longitude = request_dict.get('longitude', None)
+        latitude = request_dict.get('latitude', None)
+        param_area = CommonService.get_param_flag(data=[country,province,city])
+        if  param_area is True:
+            status = 1
+            country = country
+            province = province
+            city = city
+            area = area
+            street = street
+            longitude = longitude
+            latitude = latitude
+        else:
+            status = 0
+            try:
+                print ('http://test.dvema.com/getTZ?etk=ODhVRlpMVjBZNU5VdEhVMVl6UVRsSE9URXhNVUUlM0Q4OA==&ip='+self.clientIP+'&lang=EN')
+                resp=urllib.request.urlopen('http://test.dvema.com/getTZ?etk=ODhVRlpMVjBZNU5VdEhVMVl6UVRsSE9URXhNVUUlM0Q4OA==&ip='+self.clientIP+'&lang=EN')
+                html=resp.read()
+                html.decode('utf-8')
+                jsonData = json.loads(html)
+                print(jsonData['data']['city_name'])
+                country = jsonData['data']['country_name']
+                province = jsonData[ 'data']['region_name']
+                city = jsonData['data']['city_name']
+                area = ''
+                street = ''
+                longitude = jsonData['data']['longitude']
+                latitude = jsonData['data']['latitude']
+            except Exception:
+                print ('失败')
+                country = ''
+                province =''
+                city = ''
+                area = ''
+                street = ''
+                longitude = ''
+                latitude = ''
+        param_flag = CommonService.get_param_flag(data=[deviceSupplier, deviceModel,osType,osVersion])
+        if param_flag is True:
+            try:
+                user_brand = User_Brand(
+                    userID=Device_User.objects.get(userID=userID),
+                    deviceSupplier=deviceSupplier,
+                    deviceModel=deviceModel,
+                    osType=osType,
+                    osVersion=osVersion,
+                    ip=self.clientIP,
+                    addTime = int(time.time()),
+                    status = status,
+                    country = country,
+                    province = province,
+                    city = city,
+                    area = area,
+                    street = street,
+                    longitude = longitude,
+                    latitude = latitude
+                )
+                user_brand.save()
+            except Exception:
+                errorInfo = traceback.format_exc()
+                print(errorInfo)
+                return response.json(424, {'details': errorInfo})
+            else:
+                print(type(user_brand.addTime))
+                return response.json(0,{'id':user_brand.id})
         else:
         else:
-            print(type(user_brand.addTime))
-            return response.json(0,{'id':user_brand.id})
+            # 参数错误
+             return response.json(444)
+
+
 
 
 
 
     def query_info(self, request_dict, userID,response):
     def query_info(self, request_dict, userID,response):
@@ -111,18 +171,32 @@ class UserBrandInfo(View):
         line = int(request_dict.get('line', None))
         line = int(request_dict.get('line', None))
         param_flag = CommonService.get_param_flag(data=[page, line])
         param_flag = CommonService.get_param_flag(data=[page, line])
         if param_flag is True:
         if param_flag is True:
-            user_brand_queryset = User_Brand.objects.filter(userID=userID).order_by('-id')
+            user_brand_queryset = User_Brand.objects.all().order_by('-id')
             if user_brand_queryset.exists():
             if user_brand_queryset.exists():
                 count = user_brand_queryset.count()
                 count = user_brand_queryset.count()
                 res = user_brand_queryset[(page - 1) * line:page * line]
                 res = user_brand_queryset[(page - 1) * line:page * line]
                 send_json = CommonService.qs_to_dict(res)
                 send_json = CommonService.qs_to_dict(res)
+                for k, v in enumerate(send_json["datas"]):
+                        username = ModelService.get_user_name(userID=send_json["datas"][k]['fields']['userID'])
+                        send_json["datas"][k]['fields']['username']=username
                 send_json['count'] = count
                 send_json['count'] = count
                 return response.json(0, send_json)
                 return response.json(0, send_json)
             return response.json(0, {'datas': [], 'count': 0})
             return response.json(0, {'datas': [], 'count': 0})
         else:
         else:
             return response.json(444)
             return response.json(444)
-
-
+    def delete_by_admin(self, request_dict, userID,response):
+        id_list = request_dict.getlist('id', None)
+        param_flag = CommonService.get_param_flag(data=[id_list])
+        if param_flag is True:
+            check_perm = ModelService.check_perm(userID=userID, permID=10)
+            if check_perm is True:
+                is_delete = User_Brand.objects.filter(id__in=id_list).delete()
+                return response.json(0, {'delete_count': is_delete[0]})
+            else:
+                return response.json(404)
+        else:
+            return response.json(444)
+    # 查询每个用户最新的一条记录统计信息
     def query_all_info(self, request_dict, userID,response):
     def query_all_info(self, request_dict, userID,response):
         page = int(request_dict.get('page', None))
         page = int(request_dict.get('page', None))
         line = int(request_dict.get('line', None))
         line = int(request_dict.get('line', None))
@@ -153,7 +227,7 @@ class UserBrandInfo(View):
         else:
         else:
             return response.json(444)
             return response.json(444)
 
 
-
+    # 品牌统计的接口
     def query_deviceSupplier_info(self, request_dict, userID,response):
     def query_deviceSupplier_info(self, request_dict, userID,response):
         check_perm = ModelService.check_perm(userID=userID,permID=30)
         check_perm = ModelService.check_perm(userID=userID,permID=30)
         if check_perm is True:
         if check_perm is True:
@@ -173,12 +247,37 @@ class UserBrandInfo(View):
             for k, v in enumerate(send_jsons):
             for k, v in enumerate(send_jsons):
                 deviceSupplier.append(v['fields']['deviceSupplier'])
                 deviceSupplier.append(v['fields']['deviceSupplier'])
             deviceSupplier = Counter(deviceSupplier)
             deviceSupplier = Counter(deviceSupplier)
-            return response.json(0, {'datas': deviceSupplier})
+            print (deviceSupplier)
+            return response.json(0, {'datas': deviceSupplier,'counts':counts})
 
 
         else:
         else:
             return response.json(404)
             return response.json(404)
+    # 区域统计的接口
+    def query_area_info(self, request_dict, userID,response):
+        check_perm = ModelService.check_perm(userID=userID,permID=30)
+        if check_perm is True:
+            # 按照用户去重复查询
+            user_brand_queryset = User_Brand.objects.all().order_by('userID').values_list('userID', flat=True).distinct()
+            print (user_brand_queryset)
+            send_jsons=[]
+            counts=0
+            for i in user_brand_queryset:
+                counts=counts+1
+                user_brand_querysetlast = User_Brand.objects.filter(userID=i).order_by('-addTime')[:1]
+                user_brand_querysetlast = CommonService.qs_to_dict(user_brand_querysetlast)
+                username = ModelService.get_user_name(userID=user_brand_querysetlast["datas"][0]['fields']['userID'])
+                user_brand_querysetlast["datas"][0]['fields']['username']=username
+                send_jsons.append(user_brand_querysetlast["datas"][0])
+            deviceSupplier=[]
+            for k, v in enumerate(send_jsons):
+                deviceSupplier.append(v['fields']['city'])
+            deviceSupplier = Counter(deviceSupplier)
+            deviceSupplier = deviceSupplier
 
 
+            return response.json(0, {'datas': deviceSupplier,'counts':counts})
 
 
+        else:
+            return response.json(404)
 
 
 
 
 
 

+ 12 - 0
Model/models.py

@@ -389,7 +389,19 @@ class User_Brand(models.Model):
     deviceModel = models.CharField(max_length=32, default='', verbose_name='(必填)设备型号 string @mock=HM NOTE 1TD')
     deviceModel = models.CharField(max_length=32, default='', verbose_name='(必填)设备型号 string @mock=HM NOTE 1TD')
     osType = models.CharField(max_length=32, default='', verbose_name='(必填)操作系统名称 string @mock=Android')
     osType = models.CharField(max_length=32, default='', verbose_name='(必填)操作系统名称 string @mock=Android')
     osVersion = models.CharField(max_length=32, default='', verbose_name='(必填)操作系统版本号 string @mock=4.0')
     osVersion = models.CharField(max_length=32, default='', verbose_name='(必填)操作系统版本号 string @mock=4.0')
+
+    country =  models.CharField(max_length=200, default='', verbose_name='国家')
+    province =  models.CharField(max_length=150, default='', verbose_name='省')
+    city =  models.CharField(max_length=132, default='', verbose_name='市')
+    area =  models.CharField(max_length=132, default='', verbose_name='区')
+    street =  models.CharField(max_length=132, default='', verbose_name='街道')
+
+    longitude =  models.CharField(max_length=30, default='', verbose_name='经度')
+    latitude =  models.CharField(max_length=30, default='', verbose_name='纬度')
+
+    status =  models.IntegerField(default=0, verbose_name='传国家省市信息过来就为状态:1 ,不传就为状态:0')
     ip = models.CharField(blank=True,max_length=20,default='',verbose_name=u'区域ip')
     ip = models.CharField(blank=True,max_length=20,default='',verbose_name=u'区域ip')
+
     addTime = models.IntegerField( verbose_name='添加时间', default=0)
     addTime = models.IntegerField( verbose_name='添加时间', default=0)
     def __str__(self):
     def __str__(self):
         return self.id
         return self.id