UserBrandController.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  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. param_area = CommonService.get_param_flag(data=[country,province,city])
  89. if param_area is True:
  90. status = 1
  91. country = country
  92. province = province
  93. city = city
  94. area = area
  95. street = street
  96. longitude = longitude
  97. latitude = latitude
  98. else:
  99. status = 0
  100. resp=urllib.request.urlopen('http://test.dvema.com/getTZ?etk=ODhVRlpMVjBZNU5VdEhVMVl6UVRsSE9URXhNVUUlM0Q4OA==&ip='+self.clientIP+'&lang=EN')
  101. html=resp.read()
  102. html.decode('utf-8')
  103. jsonData = json.loads(html)
  104. print(jsonData['data']['city_name'])
  105. country = jsonData['data']['country_name']
  106. province = jsonData[ 'data']['region_name']
  107. city = jsonData['data']['city_name']
  108. area = ''
  109. street = ''
  110. longitude = jsonData['data']['longitude']
  111. latitude = jsonData['data']['latitude']
  112. param_flag = CommonService.get_param_flag(data=[deviceSupplier, deviceModel,osType,osVersion])
  113. if param_flag is True:
  114. try:
  115. user_brand = User_Brand(
  116. userID=Device_User.objects.get(userID=userID),
  117. deviceSupplier=deviceSupplier,
  118. deviceModel=deviceModel,
  119. osType=osType,
  120. osVersion=osVersion,
  121. ip=self.clientIP,
  122. addTime = int(time.time()),
  123. status = status,
  124. country = country,
  125. province = province,
  126. city = city,
  127. area = area,
  128. street = street,
  129. longitude = longitude,
  130. latitude = latitude
  131. )
  132. user_brand.save()
  133. except Exception:
  134. errorInfo = traceback.format_exc()
  135. print(errorInfo)
  136. return response.json(424, {'details': errorInfo})
  137. else:
  138. print(type(user_brand.addTime))
  139. return response.json(0,{'id':user_brand.id})
  140. else:
  141. # 参数错误
  142. return response.json(444)
  143. def query_info(self, request_dict, userID,response):
  144. page = int(request_dict.get('page', None))
  145. line = int(request_dict.get('line', None))
  146. param_flag = CommonService.get_param_flag(data=[page, line])
  147. if param_flag is True:
  148. user_brand_queryset = User_Brand.objects.all().order_by('-id')
  149. if user_brand_queryset.exists():
  150. count = user_brand_queryset.count()
  151. res = user_brand_queryset[(page - 1) * line:page * line]
  152. send_json = CommonService.qs_to_dict(res)
  153. for k, v in enumerate(send_json["datas"]):
  154. username = ModelService.get_user_name(userID=send_json["datas"][k]['fields']['userID'])
  155. send_json["datas"][k]['fields']['username']=username
  156. send_json['count'] = count
  157. return response.json(0, send_json)
  158. return response.json(0, {'datas': [], 'count': 0})
  159. else:
  160. return response.json(444)
  161. def delete_by_admin(self, request_dict, userID,response):
  162. id_list = request_dict.getlist('id', None)
  163. param_flag = CommonService.get_param_flag(data=[id_list])
  164. if param_flag is True:
  165. check_perm = ModelService.check_perm(userID=userID, permID=10)
  166. if check_perm is True:
  167. is_delete = User_Brand.objects.filter(id__in=id_list).delete()
  168. return response.json(0, {'delete_count': is_delete[0]})
  169. else:
  170. return response.json(404)
  171. else:
  172. return response.json(444)
  173. # 查询每个用户最新的一条记录统计信息
  174. def query_all_info(self, request_dict, userID,response):
  175. page = int(request_dict.get('page', None))
  176. line = int(request_dict.get('line', None))
  177. param_flag = CommonService.get_param_flag(data=[page, line])
  178. if param_flag is True:
  179. check_perm = ModelService.check_perm(userID=userID,permID=30)
  180. if check_perm is True:
  181. # 按照用户去重复查询
  182. user_brand_queryset = User_Brand.objects.all().order_by('userID').values_list('userID', flat=True).distinct()
  183. print (user_brand_queryset)
  184. send_jsons=[]
  185. counts=0
  186. for i in user_brand_queryset:
  187. counts=counts+1
  188. user_brand_querysetlast = User_Brand.objects.filter(userID=i).order_by('-addTime')[:1]
  189. user_brand_querysetlast = CommonService.qs_to_dict(user_brand_querysetlast)
  190. username = ModelService.get_user_name(userID=user_brand_querysetlast["datas"][0]['fields']['userID'])
  191. user_brand_querysetlast["datas"][0]['fields']['username']=username
  192. send_jsons.append(user_brand_querysetlast["datas"][0])
  193. # 按照加入的日期排序
  194. send_jsons = sorted(send_jsons, key=lambda x:x['fields']['addTime'], reverse=True)
  195. # 分页
  196. send_jsons = send_jsons[(page - 1) * line:page * line]
  197. return response.json(0, {'datas': send_jsons, 'count': counts})
  198. else:
  199. return response.json(404)
  200. else:
  201. return response.json(444)
  202. # 品牌统计的接口
  203. def query_deviceSupplier_info(self, request_dict, userID,response):
  204. check_perm = ModelService.check_perm(userID=userID,permID=30)
  205. if check_perm is True:
  206. # 按照用户去重复查询
  207. user_brand_queryset = User_Brand.objects.all().order_by('userID').values_list('userID', flat=True).distinct()
  208. print (user_brand_queryset)
  209. send_jsons=[]
  210. counts=0
  211. for i in user_brand_queryset:
  212. counts=counts+1
  213. user_brand_querysetlast = User_Brand.objects.filter(userID=i).order_by('-addTime')[:1]
  214. user_brand_querysetlast = CommonService.qs_to_dict(user_brand_querysetlast)
  215. username = ModelService.get_user_name(userID=user_brand_querysetlast["datas"][0]['fields']['userID'])
  216. user_brand_querysetlast["datas"][0]['fields']['username']=username
  217. send_jsons.append(user_brand_querysetlast["datas"][0])
  218. deviceSupplier=[]
  219. for k, v in enumerate(send_jsons):
  220. deviceSupplier.append(v['fields']['deviceSupplier'])
  221. deviceSupplier = Counter(deviceSupplier)
  222. print (deviceSupplier)
  223. return response.json(0, {'datas': deviceSupplier,'counts':counts})
  224. else:
  225. return response.json(404)
  226. # 区域统计的接口
  227. def query_area_info(self, request_dict, userID,response):
  228. check_perm = ModelService.check_perm(userID=userID,permID=30)
  229. if check_perm is True:
  230. # 按照用户去重复查询
  231. user_brand_queryset = User_Brand.objects.all().order_by('userID').values_list('userID', flat=True).distinct()
  232. print (user_brand_queryset)
  233. send_jsons=[]
  234. counts=0
  235. for i in user_brand_queryset:
  236. counts=counts+1
  237. user_brand_querysetlast = User_Brand.objects.filter(userID=i).order_by('-addTime')[:1]
  238. user_brand_querysetlast = CommonService.qs_to_dict(user_brand_querysetlast)
  239. username = ModelService.get_user_name(userID=user_brand_querysetlast["datas"][0]['fields']['userID'])
  240. user_brand_querysetlast["datas"][0]['fields']['username']=username
  241. send_jsons.append(user_brand_querysetlast["datas"][0])
  242. deviceSupplier=[]
  243. for k, v in enumerate(send_jsons):
  244. deviceSupplier.append(v['fields']['city'])
  245. deviceSupplier = Counter(deviceSupplier)
  246. deviceSupplier = deviceSupplier
  247. return response.json(0, {'datas': deviceSupplier,'counts':counts})
  248. else:
  249. return response.json(404)