EquipmentInfo.py 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263
  1. import time
  2. import traceback
  3. from django.utils.decorators import method_decorator
  4. from django.views.decorators.csrf import csrf_exempt
  5. from django.views.generic.base import View
  6. from Model.models import Device_Info, Equipment_Info, UidPushModel
  7. from Model.models import Device_User
  8. from Object.ResponseObject import ResponseObject
  9. from Object.TokenObject import TokenObject
  10. from Service.CommonService import CommonService
  11. from Service.EquipmentInfoService import EquipmentInfoService
  12. from Service.ModelService import ModelService
  13. class EquipmentInfo(View):
  14. @method_decorator(csrf_exempt)
  15. def dispatch(self, *args, **kwargs):
  16. return super(EquipmentInfo, self).dispatch(*args, **kwargs)
  17. def get(self, request, *args, **kwargs):
  18. request.encoding = 'utf-8'
  19. return self.validation(request_dict=request.GET)
  20. def post(self, request, *args, **kwargs):
  21. request.encoding = 'utf-8'
  22. return self.validation(request_dict=request.POST)
  23. def validation(self, request_dict, *args, **kwargs):
  24. token = request_dict.get('token', None)
  25. response = ResponseObject()
  26. tko = TokenObject(token)
  27. if tko.code != 0:
  28. return response.json(tko.code)
  29. userID = tko.userID
  30. operation = request_dict.get('operation', None)
  31. if not userID:
  32. return response.json(309)
  33. if operation == 'query': # 查询推送消息
  34. return self.query_info(request_dict, userID, response)
  35. elif operation == 'add':
  36. return self.add_info(request_dict, userID, response)
  37. elif operation == 'update': # 已读推送消息
  38. return self.update_info(request_dict, userID, response)
  39. elif operation == 'update-answer-status': # 已接听一键通话消息
  40. return self.update_answer_status(request_dict, userID, response)
  41. elif operation == 'delete': # 删除推送消息
  42. return self.delete_info(request_dict, response)
  43. elif operation == 'findByTime':
  44. return self.findByTime_info(request_dict, userID, response)
  45. if operation == 'queryByAdmin':
  46. return self.query_all_info(request_dict, userID, response)
  47. if operation == 'deleteByAdmin':
  48. return self.delete_by_admin(request_dict, userID, response)
  49. else:
  50. return response.json(444, {"parm": "operation"})
  51. def add_info(self, request_dict, userID, response):
  52. return response.json(0)
  53. def query_info(self, request_dict, userID, response):
  54. page = int(request_dict.get('page', None))
  55. line = int(request_dict.get('line', None))
  56. if not page or not line:
  57. return response.json(444, 'page,line')
  58. qs = Equipment_Info.objects.filter(userID_id=userID)
  59. uid = request_dict.get('uid', None)
  60. if uid:
  61. qs = qs.filter(devUid=uid)
  62. dvqs = Device_Info.objects.filter(UID=uid).values('Type', 'NickName')
  63. uid_type_dict = {uid: {'type': dvqs[0]['Type'], 'NickName': dvqs[0]['NickName']}}
  64. else:
  65. dvqs = Device_Info.objects.filter(userID_id=userID).values('UID', 'Type', 'NickName')
  66. uid_type_dict = {}
  67. for dv in dvqs:
  68. uid_type_dict[dv['UID']] = {'type': dv['Type'], 'NickName': dv['NickName']}
  69. if not qs.exists():
  70. return response.json(0, {'datas': [], 'count': 0})
  71. count = qs.count()
  72. res = qs[(page - 1) * line:page * line]
  73. send_json = CommonService.qs_to_dict(res)
  74. res = []
  75. for p in send_json['datas']:
  76. p['fields']['viewAccont'] = ''
  77. p['fields']['viewPwd'] = ''
  78. devUid = p['fields']['devUid']
  79. if devUid in uid_type_dict.keys():
  80. p['fields']['uid_type'] = uid_type_dict[devUid]['type']
  81. p['fields']['devNickName'] = uid_type_dict[devUid]['NickName']
  82. else:
  83. p['uid_type'] = ''
  84. res.append(p)
  85. return response.json(0, {'datas': res, 'count': count})
  86. @staticmethod
  87. def update_info(request_dict, userID, response):
  88. is_update_all = int(request_dict.get('is_update_all', 0))
  89. event_type = request_dict.get('eventType', None)
  90. if is_update_all == 1:
  91. kwargs = {
  92. 'device_user_id': userID,
  93. 'status': 0
  94. }
  95. if event_type:
  96. kwargs['event_type'] = int(event_type)
  97. try:
  98. EquipmentInfoService.all_read_equipment_info(**kwargs)
  99. except Exception as e:
  100. print(repr(e))
  101. else:
  102. id_list = request_dict.getlist('id[]', None)
  103. if id_list is None or len(id_list) < 1:
  104. id_list = request_dict.getlist('id', None)
  105. if not id_list:
  106. return response.json(444)
  107. for full_id in id_list:
  108. try:
  109. ei_id = int(full_id[2:])
  110. equipment_info_model = EquipmentInfoService.get_equipment_info_model_with_full_id(full_id)
  111. equipment_info_model.objects.filter(id=ei_id).update(status=1)
  112. except Exception as e:
  113. print(repr(e))
  114. return response.json(0)
  115. @staticmethod
  116. def update_answer_status(request_dict, user_id, response):
  117. """
  118. 更新一键通话消息状态为已接听
  119. @param request_dict:
  120. @param user_id: 用户id
  121. @param response:
  122. @return:
  123. """
  124. uid = request_dict.get('uid', None)
  125. event_time = request_dict.get('event_time', None)
  126. if not all([uid, event_time]):
  127. return response.json(444)
  128. kwargs = {
  129. 'device_user_id': user_id,
  130. 'device_uid': uid,
  131. 'event_time': event_time,
  132. 'event_type__in': [606, 607]
  133. }
  134. try:
  135. EquipmentInfoService.update_equipment_info_answer_status(**kwargs)
  136. except Exception as e:
  137. print(repr(e))
  138. return response.json(0)
  139. @staticmethod
  140. def delete_info(request_dict, response):
  141. id_list = request_dict.getlist('id[]', None)
  142. if id_list is None or len(id_list) < 1:
  143. id_list = request_dict.getlist('id', None)
  144. if not id_list:
  145. return response.json(444)
  146. try:
  147. for full_id in id_list:
  148. ei_id = int(full_id[2:])
  149. equipment_info_model = EquipmentInfoService.get_equipment_info_model_with_full_id(full_id)
  150. equipment_info_model.objects.filter(id=ei_id).delete()
  151. except Exception as e:
  152. print(repr(e))
  153. return response.json(0)
  154. def findByTime_info(self, request_dict, userID, response):
  155. startTime = request_dict.get('startTime')
  156. endTime = request_dict.get('endTime')
  157. page = int(request_dict.get('page', None))
  158. line = int(request_dict.get('line', None))
  159. if not startTime or not endTime or not page or not line:
  160. return response.json(444, 'startTime, endTime, page, line')
  161. uid_list = Device_Info.objects.filter(userID_id=userID).values_list('UID', flat=True)
  162. if not len(uid_list):
  163. return response.json(0, {'datas': [], 'count': 0})
  164. qs = Equipment_Info.objects.filter(userID_id=userID,
  165. eventTime__range=(startTime, endTime)).order_by('-id')
  166. if qs.exists():
  167. count = qs.count()
  168. res = qs[(page - 1) * line:page * line]
  169. send_json = CommonService.qs_to_dict(res)
  170. send_json['count'] = count
  171. return response.json(0, send_json)
  172. # 管理员查询指定用户的推送信息接口
  173. def query_all_info(self, request_dict, userID, response):
  174. page = int(request_dict.get('page', None))
  175. line = int(request_dict.get('line', None))
  176. username = request_dict.get('username', None)
  177. uid = request_dict.get('uid', None)
  178. devNickName = request_dict.get('devNickName', None)
  179. Channel = request_dict.get('Channel', None)
  180. if not page or not line:
  181. return response.json(444, 'page,line')
  182. check_perm = ModelService.check_perm(userID=userID, permID=30)
  183. if not check_perm:
  184. return response.json(404)
  185. if not username and not uid and not devNickName and not Channel:
  186. qs = Equipment_Info.objects.all().order_by('-id')
  187. elif username:
  188. user = Device_User.objects.filter(username=username)
  189. users = CommonService.qs_to_dict(user)
  190. # 从字典类型中找到对应的pk值,即是userID
  191. user_id = users.get('datas')[0].get('pk')
  192. if not user.exists():
  193. return response.json(104)
  194. uid_list = Device_Info.objects.filter(userID_id=user_id).values_list('UID', flat=True)
  195. if not len(uid_list):
  196. return response.json(0, {'datas': [], 'count': 0})
  197. qs = Equipment_Info.objects.filter(userID_id=user_id).order_by('-id')
  198. elif uid:
  199. qs = Equipment_Info.objects.filter(devUid=uid).order_by('-id')
  200. elif devNickName:
  201. qs = Equipment_Info.objects.filter(devNickName=devNickName).order_by('-id')
  202. elif Channel:
  203. qs = Equipment_Info.objects.filter(Channel=Channel).order_by('-id')
  204. if not qs.exists():
  205. return response.json(0, {'datas': [], 'count': 0})
  206. count = qs.count()
  207. res = qs[(page - 1) * line:page * line]
  208. send_json = CommonService.qs_to_dict(res)
  209. send_json['count'] = count
  210. return response.json(0, send_json)
  211. # 管理员的删除推送信息的接口
  212. def delete_by_admin(self, request_dict, userID, response):
  213. id_list = request_dict.getlist('id', None)
  214. if not len(id_list):
  215. return response.json(444, 'id is None or not list')
  216. check_perm = ModelService.check_perm(userID=userID, permID=10)
  217. if check_perm is True:
  218. try:
  219. is_delete = Equipment_Info.objects.filter(id__in=id_list).delete()
  220. except Exception as e:
  221. errorInfo = traceback.format_exc()
  222. print(errorInfo)
  223. return response.json(424, {'details': repr(e)})
  224. else:
  225. return response.json(0, {'delete_count': is_delete[0]})
  226. else:
  227. return response.json(404)
  228. '''
  229. use information_schema;
  230. select concat(round(sum(data_length/1024/1024),2),'MB') as data from tables where table_schema='Ansjer81';
  231. '''
  232. # 按季度删除访问日志
  233. def deleteExpireEquipmentInfoById(request):
  234. response = ResponseObject()
  235. id = int(request.GET.get('id', None))
  236. if id is None:
  237. return response.json(0)
  238. Equipment_Info.objects.filter(id__lte=id).delete()
  239. return response.json(0)