VPGController.py 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. import os
  4. import re
  5. import time
  6. from django.db import transaction
  7. from django.views import View
  8. from django.views.decorators.csrf import csrf_exempt
  9. from Ansjer.config import BASE_DIR
  10. from Model.models import RegionModel, CompanyModel, VPGModel, UIDModel, MacModel, UIDCompanySerialModel
  11. from Object.uidManageResponseObject import uidManageResponseObject
  12. from Object.TokenObject import TokenObject
  13. from Service.CommonService import CommonService
  14. from Service.ModelService import ModelService
  15. class VPGView(View):
  16. def get(self, request, *args, **kwargs):
  17. request.encoding = 'utf-8'
  18. operation = kwargs.get('operation', None)
  19. request_dict = request.GET
  20. return self.validate(request_dict, operation)
  21. def post(self, request, *args, **kwargs):
  22. request.encoding = 'utf-8'
  23. operation = kwargs.get('operation', None)
  24. request_dict = request.POST
  25. return self.validate(request_dict, operation)
  26. def validate(self, request_dict, operation):
  27. token = TokenObject(request_dict.get('token', None))
  28. response = uidManageResponseObject()
  29. if token.code != 0:
  30. return response.json(token.code)
  31. if operation == 'add':
  32. return self.do_add(token.userID, request_dict, response)
  33. elif operation == 'update':
  34. return self.do_update(token.userID, request_dict, response)
  35. elif operation == 'delete':
  36. return self.do_delete(token.userID, request_dict, response)
  37. elif operation == 'list':
  38. return self.do_list(token.userID, request_dict, response)
  39. elif operation == 'uid_list':
  40. return self.do_uid_list(token.userID, request_dict, response)
  41. else:
  42. return response.json(404)
  43. def do_add(self, userID, request_dict, response):
  44. # perm = ModelService.check_perm_uid_manage(userID, 0)
  45. # if not perm:
  46. # return response.json(309)
  47. name = request_dict.get('vpg', None)
  48. region_id = request_dict.get('region_id', None)
  49. company_id = request_dict.get('company_id', None)
  50. if name and region_id and company_id:
  51. region_qs = RegionModel.objects.filter(id=region_id)
  52. if not region_qs.exists():
  53. return response.json(374)
  54. company_qs = CompanyModel.objects.filter(secret=company_id)
  55. if not company_qs.exists():
  56. return response.json(373)
  57. company = company_qs[0]
  58. now_time = int(time.time())
  59. vpgModel = VPGModel(name=name, region_id=region_id, company_id=company.id, add_time=now_time, update_time=now_time)
  60. vpgModel.save()
  61. return response.json(0)
  62. else:
  63. return response.json(444)
  64. def do_update(self, userID, request_dict, response):
  65. # perm = ModelService.check_perm_uid_manage(userID, 0)
  66. # if not perm:
  67. # return response.json(309)
  68. id = request_dict.get('id', None)
  69. name = request_dict.get('vpg', None)
  70. region_id = request_dict.get('region_id', None)
  71. company_id = request_dict.get('company_id', None)
  72. if id:
  73. vpg_qs = VPGModel.objects.filter(id=id)
  74. if vpg_qs.exists():
  75. now_time = int(time.time())
  76. update = {
  77. 'update_time': now_time
  78. }
  79. if name:
  80. update['name'] = name
  81. if region_id:
  82. update['region_id'] = region_id
  83. if company_id:
  84. update['company_id'] = company_id
  85. vpg_qs.update(**update)
  86. return response.json(0)
  87. else:
  88. return response.json(173)
  89. else:
  90. return response.json(444)
  91. def do_delete(self, userID, request_dict, response):
  92. # perm = ModelService.check_perm_uid_manage(userID, 0)
  93. # if not perm:
  94. # return response.json(309)
  95. id = request_dict.get('id', None)
  96. if id:
  97. vpg_qs = VPGModel.objects.filter(id=id)
  98. if vpg_qs.exists():
  99. vpg_qs.delete()
  100. return response.json(0)
  101. else:
  102. return response.json(173)
  103. else:
  104. return response.json(444)
  105. def do_list(self, userID, request_dict, response):
  106. # perm = ModelService.check_perm_uid_manage(userID, 0)
  107. # if not perm:
  108. # return response.json(309)
  109. company_id = request_dict.get('company_id', None)
  110. region_id = request_dict.get('region_id', None)
  111. page = request_dict.get('page', None)
  112. line = request_dict.get('limit', None)
  113. if page and line:
  114. page = int(page)
  115. line = int(line)
  116. start = (page - 1) * line
  117. end = start + line
  118. vpg_qs = VPGModel.objects.filter()
  119. if company_id:
  120. vpg_qs.filter(company_id=company_id)
  121. if region_id:
  122. vpg_qs.filter(region_id=region_id)
  123. count = vpg_qs.count()
  124. vpg_qs = vpg_qs.values('id', 'name', 'region__name', 'region_id', 'company__name', 'add_time',
  125. 'update_time', 'company__secret', 'uid_count')
  126. vpg_qs = vpg_qs[start:end]
  127. # for vpg in vpg_qs:
  128. # vpg['uid_count'] = UIDModel.objects.filter(vpg_id=vpg['id']).count()
  129. res = {
  130. 'count': count,
  131. 'data': list(vpg_qs),
  132. }
  133. return response.json(0, res)
  134. else:
  135. return response.json(444)
  136. def do_uid_list(self, userID, request_dict, response):
  137. vpg_id = request_dict.get('vpg_id', None)
  138. page = int(request_dict.get('page', None))
  139. line = int(request_dict.get('limit', None))
  140. if not vpg_id:
  141. return response.json(444)
  142. start = (page - 1) * line
  143. end = start + line
  144. uid_qs = UIDModel.objects.filter(vpg_id=vpg_id).values('uid')
  145. count = VPGModel.objects.get(id=vpg_id).uid_count # 从vpg表获取uid总数
  146. uid_qs = uid_qs[start:end] # 显示条数
  147. res = {
  148. 'count': count,
  149. 'data': list(uid_qs),
  150. }
  151. return response.json(0, res)
  152. @csrf_exempt
  153. def do_upload_uid(request):
  154. # 上传UID,需要request.FILES,单独提取出来
  155. # perm = ModelService.check_perm_uid_manage(userID, 0)
  156. # if not perm:
  157. # return response.json(309)
  158. request.encoding = 'utf-8'
  159. response = uidManageResponseObject()
  160. if request.method == "POST":
  161. request_dict = request.POST
  162. elif request.method == "GET":
  163. request_dict = request.GET
  164. else:
  165. return response.json(444)
  166. file = request.FILES.get('file', None)
  167. vpg_id = request_dict.get('vpg_id', None)
  168. bulk = []
  169. add_time = update_time = int(time.time())
  170. MAC = MacModel.objects.filter().values('id', 'value', 'is_active')[0] # 获取最新可用的mac
  171. current_mac = MAC['value']
  172. if (not MAC['is_active']) or (current_mac[-8:] == 'FF.FF.FF'):
  173. return response.json(175)
  174. # path = '/'.join((BASE_DIR, 'static/uid')).replace('\\', '/') + '/'
  175. # if not os.path.exists(path):
  176. # os.makedirs(path)
  177. # full_path = path + str(file)
  178. # with open(full_path, 'wb+') as uid_file:
  179. try:
  180. for chunk in file.chunks():
  181. # str_chunk = str(chunk)
  182. # print('str(chunk):', str_chunk)
  183. # str_chunk = re.findall("b\'(.*)\'", str_chunk)[0]
  184. # str_chunk = str_chunk.split('\\r\\n')
  185. # print('str(chunk):', str_chunk)
  186. uid_list = re.findall("b\'(.*)\'", str(chunk))[0].split('\\r\\n')
  187. for uid in uid_list:
  188. UID = UIDModel(
  189. mac=current_mac,
  190. uid_extra='',
  191. status=0,
  192. add_time=add_time,
  193. update_time=update_time,
  194. area=0, # 关联vgp表已有区域信息,可以考虑去掉
  195. vpg_id=vpg_id,
  196. )
  197. if len(uid) == 14: # 宸云
  198. UID.p2p_type = 1
  199. UID.uid = uid
  200. elif len(uid) == 20: # tutk
  201. UID.p2p_type = 2
  202. UID.uid = uid
  203. elif len(uid) == 23: # 宸云完整uid
  204. a = uid.split('-')
  205. new_uid = a[0] + a[1] + a[2].split(',')[0]
  206. UID.p2p_type = 1
  207. UID.uid = new_uid
  208. UID.full_uid_code = uid
  209. bulk.append(UID)
  210. temp_mac = CommonService.updateMac(current_mac) # mac地址值+1;后3个字节为FF时返回None
  211. if temp_mac:
  212. current_mac = temp_mac # 更新赋值写入uid表
  213. else:
  214. temp_mac = current_mac # 赋值为FF写入mac表
  215. break
  216. with transaction.atomic():
  217. UIDModel.objects.bulk_create(bulk) # 批量写入uid数据
  218. uid_count = UIDModel.objects.filter(vpg_id=vpg_id).count() # 获取族群下uid的数量
  219. VPGModel.objects.filter(id=vpg_id).update(uid_count=uid_count) # 更新vgp表的uid_count
  220. MacModel.objects.filter().update(value=temp_mac) # 更新mac表的mac地址值
  221. return response.json(0)
  222. except Exception as e:
  223. print(e)
  224. return response.json(500, repr(e))