UserBrandController.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. """
  4. @Copyright (C) ansjer cop Video Technology Co.,Ltd.All rights reserved.
  5. @AUTHOR: ASJRD019
  6. @NAME: AnsjerFormal
  7. @software: PyCharm
  8. @DATE: 2019/5/9 11:50
  9. @Version: python3.6
  10. @MODIFY DECORD:ansjer dev
  11. @file: AliPayObject.py
  12. @Contact: pzb3076@163.com
  13. """
  14. from django.views.generic.base import View
  15. from django.utils.decorators import method_decorator
  16. from django.views.decorators.csrf import csrf_exempt
  17. from Service.ModelService import ModelService
  18. from Model.models import User_Brand,Device_User
  19. from django.utils import timezone
  20. import traceback,time,json,urllib.request
  21. from Object.ResponseObject import ResponseObject
  22. from Object.TokenObject import TokenObject
  23. from Service.CommonService import CommonService
  24. from collections import Counter
  25. '''
  26. http://192.168.136.45:8077/userbrandinfo/query?token=test&page=1&line=10
  27. http://192.168.136.39:8000/userbrandinfo/query?token=test&page=1&line=5
  28. http://192.168.136.39:8000/userbrandinfo/queryAll?token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySUQiOiIxNTQzOTA5MDUwNDEzMTM4MDAxMzgwMDAiLCJsYW5nIjoiY24iLCJ1c2VyIjoiMTM4MDAxMzgwMDEiLCJtX2NvZGUiOiIxMjM0MTMyNDMyMTQiLCJleHAiOjE1NTk4OTY4NTd9.nhK3VSghSGjyXKjel4woz7R_3bhjgqQDlX-ypYsklNU&page=1&line=5
  29. '''
  30. class UserBrandInfo(View):
  31. @method_decorator(csrf_exempt)
  32. def dispatch(self, *args, **kwargs):
  33. return super(UserBrandInfo, self).dispatch(*args, **kwargs)
  34. def get(self, request, *args, **kwargs):
  35. request.encoding = 'utf-8'
  36. operation = kwargs.get('operation')
  37. return self.validation(request.GET, request, operation)
  38. def post(self, request, *args, **kwargs):
  39. request.encoding = 'utf-8'
  40. operation = kwargs.get('operation')
  41. return self.validation(request.POST, request, operation)
  42. def validation(self, request_dict, request, operation):
  43. if operation is None:
  44. return response.json(444, 'error path')
  45. self.clientIP = CommonService.get_ip_address(request)
  46. response = ResponseObject()
  47. token = request_dict.get('token', None)
  48. if token is not None:
  49. tko = TokenObject(token)
  50. response.lang = tko.lang
  51. if tko.code == 0:
  52. userID = tko.userID
  53. if userID is not None:
  54. if operation == 'queryByAdmin':
  55. return self.query_info(request_dict, userID,response)
  56. elif operation == 'add':
  57. return self.add_info(request_dict, userID,response)
  58. elif operation == 'queryAllByAdmin':
  59. return self.query_all_info(request_dict, userID,response)
  60. elif operation == 'deleteByAdmin':
  61. return self.delete_by_admin(request_dict, userID,response)
  62. elif operation == 'queryDeviceSupplier':
  63. return self.query_deviceSupplier_info(request_dict, userID,response)
  64. elif operation == 'queryArea':
  65. return self.query_area_info(request_dict, userID,response)
  66. else:
  67. return response.json(444)
  68. else:
  69. return response.json(309)
  70. else:
  71. return response.json(tko.code)
  72. else:
  73. return response.json(309)
  74. # 获取外网IP
  75. # http://192.168.136.39:8000/userbrandinfo?operation=add&token=test&deviceSupplier=小米&deviceModel=HM NOTE 1TD&osType=WEB&osVersion=4.0.0
  76. def add_info(self, request_dict, userID,response):
  77. deviceSupplier = request_dict.get('deviceSupplier', None)
  78. deviceModel = request_dict.get('deviceModel', None)
  79. osType = request_dict.get('osType', None)
  80. osVersion = request_dict.get('osVersion', None)
  81. country = request_dict.get('country', None)
  82. province = request_dict.get('province', None)
  83. city = request_dict.get('city', None)
  84. area = request_dict.get('area', None)
  85. street = request_dict.get('street', None)
  86. longitude = request_dict.get('longitude', None)
  87. latitude = request_dict.get('latitude', None)
  88. appId = request_dict.get('appId', None)
  89. param_area = CommonService.get_param_flag(data=[country])
  90. must_fill_in = CommonService.get_param_flag(data=[appId,deviceSupplier,deviceModel,osType,osVersion])
  91. if must_fill_in is False:
  92. return response.json(444,'appId,deviceSupplier,deviceModel,osType,osVersion')
  93. if param_area is True:
  94. status = 1
  95. country = country
  96. province = province
  97. city = city
  98. area = area
  99. street = street
  100. longitude = longitude
  101. latitude = latitude
  102. else:
  103. status = 0
  104. jsonData = CommonService.getIpIpInfo(ip=self.clientIP,lang='EN')
  105. print(jsonData['city_name'])
  106. country = jsonData['country_name']
  107. province = jsonData['region_name']
  108. city = jsonData['city_name']
  109. area = ''
  110. street = ''
  111. longitude = jsonData['longitude']
  112. latitude = jsonData['latitude']
  113. param_flag = CommonService.get_param_flag(data=[deviceSupplier, deviceModel,osType,osVersion])
  114. if param_flag is True:
  115. try:
  116. user_brand = User_Brand(
  117. userID=Device_User.objects.get(userID=userID),
  118. deviceSupplier=deviceSupplier,
  119. deviceModel=deviceModel,
  120. osType=osType,
  121. osVersion=osVersion,
  122. ip=self.clientIP,
  123. addTime = int(time.time()),
  124. status = status,
  125. country = country,
  126. province = province,
  127. city = city,
  128. appId=appId,
  129. area = area,
  130. street = street,
  131. longitude = longitude,
  132. latitude = latitude
  133. )
  134. user_brand.save()
  135. except Exception:
  136. errorInfo = traceback.format_exc()
  137. print(errorInfo)
  138. return response.json(424, {'details': errorInfo})
  139. else:
  140. print(type(user_brand.addTime))
  141. return response.json(0,{'id':user_brand.id})
  142. else:
  143. # 参数错误
  144. return response.json(444)
  145. def query_info(self, request_dict, userID,response):
  146. page = int(request_dict.get('page', None))
  147. line = int(request_dict.get('line', None))
  148. param_flag = CommonService.get_param_flag(data=[page, line])
  149. if param_flag is True:
  150. user_brand_queryset = User_Brand.objects.all().order_by('-id')
  151. if user_brand_queryset.exists():
  152. count = user_brand_queryset.count()
  153. res = user_brand_queryset[(page - 1) * line:page * line]
  154. send_json = CommonService.qs_to_dict(res)
  155. for k, v in enumerate(send_json["datas"]):
  156. username = ModelService.get_user_name(userID=send_json["datas"][k]['fields']['userID'])
  157. send_json["datas"][k]['fields']['username']=username
  158. send_json['count'] = count
  159. return response.json(0, send_json)
  160. return response.json(0, {'datas': [], 'count': 0})
  161. else:
  162. return response.json(444)
  163. def delete_by_admin(self, request_dict, userID,response):
  164. id_list = request_dict.getlist('id', None)
  165. param_flag = CommonService.get_param_flag(data=[id_list])
  166. if param_flag is True:
  167. check_perm = ModelService.check_perm(userID=userID, permID=10)
  168. if check_perm is True:
  169. is_delete = User_Brand.objects.filter(id__in=id_list).delete()
  170. return response.json(0, {'delete_count': is_delete[0]})
  171. else:
  172. return response.json(404)
  173. else:
  174. return response.json(444)
  175. # 查询每个用户最新的一条记录统计信息
  176. def query_all_info(self, request_dict, userID,response):
  177. page = int(request_dict.get('page', None))
  178. line = int(request_dict.get('line', None))
  179. param_flag = CommonService.get_param_flag(data=[page, line])
  180. if param_flag is True:
  181. check_perm = ModelService.check_perm(userID=userID,permID=30)
  182. if check_perm is True:
  183. # 按照用户去重复查询
  184. user_brand_queryset = User_Brand.objects.all().order_by('userID').values_list('userID', flat=True).distinct()
  185. print (user_brand_queryset)
  186. send_jsons=[]
  187. counts=0
  188. for i in user_brand_queryset:
  189. counts=counts+1
  190. user_brand_querysetlast = User_Brand.objects.filter(userID=i).order_by('-addTime')[:1]
  191. user_brand_querysetlast = CommonService.qs_to_dict(user_brand_querysetlast)
  192. username = ModelService.get_user_name(userID=user_brand_querysetlast["datas"][0]['fields']['userID'])
  193. user_brand_querysetlast["datas"][0]['fields']['username']=username
  194. send_jsons.append(user_brand_querysetlast["datas"][0])
  195. # 按照加入的日期排序
  196. send_jsons = sorted(send_jsons, key=lambda x:x['fields']['addTime'], reverse=True)
  197. # 分页
  198. send_jsons = send_jsons[(page - 1) * line:page * line]
  199. return response.json(0, {'datas': send_jsons, 'count': counts})
  200. else:
  201. return response.json(404)
  202. else:
  203. return response.json(444)
  204. # 品牌统计的接口
  205. def query_deviceSupplier_info(self, request_dict, userID,response):
  206. check_perm = ModelService.check_perm(userID=userID,permID=30)
  207. if check_perm is True:
  208. # 按照用户去重复查询
  209. user_brand_queryset = User_Brand.objects.all().order_by('userID').values_list('userID', flat=True).distinct()
  210. print (user_brand_queryset)
  211. send_jsons=[]
  212. counts=0
  213. for i in user_brand_queryset:
  214. counts=counts+1
  215. user_brand_querysetlast = User_Brand.objects.filter(userID=i).order_by('-addTime')[:1]
  216. user_brand_querysetlast = CommonService.qs_to_dict(user_brand_querysetlast)
  217. username = ModelService.get_user_name(userID=user_brand_querysetlast["datas"][0]['fields']['userID'])
  218. user_brand_querysetlast["datas"][0]['fields']['username']=username
  219. send_jsons.append(user_brand_querysetlast["datas"][0])
  220. deviceSupplier=[]
  221. for k, v in enumerate(send_jsons):
  222. deviceSupplier.append(v['fields']['deviceSupplier'])
  223. deviceSupplier = Counter(deviceSupplier)
  224. print (deviceSupplier)
  225. return response.json(0, {'datas': deviceSupplier,'counts':counts})
  226. else:
  227. return response.json(404)
  228. # 区域统计的接口
  229. def query_area_info(self, request_dict, userID,response):
  230. check_perm = ModelService.check_perm(userID=userID,permID=30)
  231. if check_perm is True:
  232. # 按照用户去重复查询
  233. user_brand_queryset = User_Brand.objects.all().order_by('userID').values_list('userID', flat=True).distinct()
  234. print (user_brand_queryset)
  235. send_jsons=[]
  236. counts=0
  237. for i in user_brand_queryset:
  238. counts=counts+1
  239. user_brand_querysetlast = User_Brand.objects.filter(userID=i).order_by('-addTime')[:1]
  240. user_brand_querysetlast = CommonService.qs_to_dict(user_brand_querysetlast)
  241. username = ModelService.get_user_name(userID=user_brand_querysetlast["datas"][0]['fields']['userID'])
  242. user_brand_querysetlast["datas"][0]['fields']['username']=username
  243. send_jsons.append(user_brand_querysetlast["datas"][0])
  244. deviceSupplier=[]
  245. for k, v in enumerate(send_jsons):
  246. deviceSupplier.append(v['fields']['city'])
  247. deviceSupplier = Counter(deviceSupplier)
  248. deviceSupplier = deviceSupplier
  249. return response.json(0, {'datas': deviceSupplier,'counts':counts})
  250. else:
  251. return response.json(404)