import traceback from django.utils.decorators import method_decorator from django.views.decorators.csrf import csrf_exempt from django.views.generic import TemplateView from django.views.generic.base import View from Ansjer.config import SERVER_DOMAIN from Model.models import Equipment_Info, Device_Info, Device_User from Object.ResponseObject import ResponseObject from Object.TokenObject import TokenObject from Object.UidTokenObject import UidTokenObject from Service.CommonService import CommonService from Service.ModelService import ModelService import time ''' http://192.168.136.45:8077/equipment/info?token=test&operation=add&devUid=2N1K3LE78TYJ38CE111A&Channel=0&eventType=1&eventTime=1234567890&operation=add&alarm=21342134&receiveTime=1234567891234567 http://test.dvema.com/equipment/info?token=test&operation=query&page=1&line=10 http://192.168.136.45:8077/equipment/info?token=test&operation=delete&devUid=UKPAH63V23U4ZHEB111A&id=5&id=6&id=7 http://192.168.136.40:8077/equipment/info?token=test&operation=update&devUid=UKPAH63V23U4ZHEB111A&id=3&id=4 http://192.168.136.45:8077/equipment/info?token=test&operation=queryByAdmin&page=1&line=10&userID_id=151547867345163613800138001 http://192.168.136.45:8077/equipment/info?token=test&operation=deleteByAdmin&id=5&id=6&id=7 ''' class EquipmentInfo(View): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(EquipmentInfo, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): request.encoding = 'utf-8' return self.validation(request_dict=request.GET) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' return self.validation(request_dict=request.POST) def validation(self, request_dict, *args, **kwargs): token = request_dict.get('token', None) response = ResponseObject() tko = TokenObject(token) if tko.code != 0: return response.json(tko.code) userID = tko.userID operation = request_dict.get('operation', None) if not userID: return response.json(309) if operation == 'query': return self.query_info(request_dict, userID, response) elif operation == 'add': return self.add_info(request_dict, userID, response) elif operation == 'update': return self.update_info(request_dict, userID, response) elif operation == 'delete': return self.delete_info(request_dict, userID, response) elif operation == 'findByTime': return self.findByTime_info(request_dict, userID, response) if operation == 'queryByAdmin': return self.query_all_info(request_dict, userID, response) if operation == 'deleteByAdmin': return self.delete_by_admin(request_dict, userID, response) else: return response.json(444, {"parm": "operation"}) def add_info(self, request_dict, userID, response): devUid = request_dict.get('devUid', None) Channel = request_dict.get('Channel', None) eventType = request_dict.get('eventType', None) eventTime = request_dict.get('eventTime', None) receiveTime = request_dict.get('receiveTime', None) alarm = request_dict.get('alarm', None) if not devUid or not Channel or not eventType or not eventTime or not alarm or not receiveTime: return response.json(444, 'devUid, Channel, eventType, eventTime, alarm, receiveTime') own_device = ModelService.check_own_device(userID, UID=devUid) if own_device is not True: return response.json(14) device_info = Device_Info.objects.filter(UID=devUid, userID_id=userID) if not device_info.exists(): return response.json(14) try: nowTime = int(time.time()) equipment_info = Equipment_Info( userID=Device_User.objects.get(userID=userID), devUid=devUid, Channel=Channel, eventType=eventType, receiveTime=receiveTime, eventTime=eventTime, devNickName=device_info[0].NickName, addTime=nowTime, alarm=alarm) equipment_info.save() except Exception: errorInfo = traceback.format_exc() print(errorInfo) return response.json(500, errorInfo) else: if equipment_info.id: return response.json(0, {'infoID': equipment_info.id, 'devUid': devUid, 'Channel': Channel, 'alarm': alarm, 'eventType': eventType, 'eventTime': eventTime, 'receiveTime': receiveTime, 'devNickName': equipment_info.devNickName}) else: return response.json(500) def query_info(self, request_dict, userID, response): page = int(request_dict.get('page', None)) line = int(request_dict.get('line', None)) if not page or not line: return response.json(444, 'page,line') qs = Equipment_Info.objects.filter(userID_id=userID) uid = request_dict.get('uid', None) if uid: qs.filter(devUid=uid) if not qs.exists(): return response.json(0, {'datas': [], 'count': 0}) count = qs.count() res = qs[(page - 1) * line:page * line] send_json = CommonService.qs_to_dict(res) res = [] for p in send_json['datas']: p['fields']['viewAccont'] = '' p['fields']['viewPwd'] = '' res.append(p) return response.json(0, {'datas': res, 'count': count}) # return response.json(0, send_json) def update_info(self, request_dict, userID, response): id_list = request_dict.getlist('id[]', None) if id_list is None or len(id_list) < 1: id_list = request_dict.getlist('id', None) param_flag = CommonService.get_param_flag(data=[id_list]) if param_flag is True: count = 0 for id in id_list: try: eq = Equipment_Info.objects.filter(id=int(id)) if eq.exists(): own_dev = ModelService.check_own_device(userID, eq[0].devUid) if own_dev is True: count += 1 eq.update(status=1) except Exception as e: print(repr(e)) return response.json(0, {'update_success': count}) else: return response.json(444) def delete_info(self, request_dict, userID, response): id_list = request_dict.getlist('id[]', None) if id_list is None or len(id_list) < 1: id_list = request_dict.getlist('id', None) param_flag = CommonService.get_param_flag(data=[id_list]) if param_flag is True: try: for id in id_list: eq = Equipment_Info.objects.filter(id=id) if eq.exists(): own_dev = ModelService.check_own_device(userID, eq[0].devUid) if own_dev is True: eq.delete() except Exception as e: errorInfo = traceback.format_exc() print(errorInfo) return response.json(424, repr(e)) else: return response.json(0) else: return response.json(444) def findByTime_info(self, request_dict, userID, response): startTime = request_dict.get('startTime') endTime = request_dict.get('endTime') page = int(request_dict.get('page', None)) line = int(request_dict.get('line', None)) if not startTime or not endTime or not page or not line: return response.json(444, 'startTime, endTime, page, line') uid_list = Device_Info.objects.filter(userID_id=userID).values_list('UID', flat=True) if not len(uid_list): return response.json(0, {'datas': [], 'count': 0}) qs = Equipment_Info.objects.filter(userID_id=userID, eventTime__range=(startTime, endTime)).order_by('-id') if qs.exists(): count = qs.count() res = qs[(page - 1) * line:page * line] send_json = CommonService.qs_to_dict(res) send_json['count'] = count return response.json(0, send_json) # 管理员查询指定用户的推送信息接口 def query_all_info(self, request_dict, userID, response): page = int(request_dict.get('page', None)) line = int(request_dict.get('line', None)) username = request_dict.get('username', None) uid = request_dict.get('uid', None) devNickName = request_dict.get('devNickName', None) Channel = request_dict.get('Channel', None) if not page or not line: return response.json(444, 'page,line') check_perm = ModelService.check_perm(userID=userID, permID=30) if not check_perm: return response.json(404) if not username and not uid and not devNickName and not Channel: qs = Equipment_Info.objects.all().order_by('-id') elif username: user = Device_User.objects.filter(username=username) users = CommonService.qs_to_dict(user) # 从字典类型中找到对应的pk值,即是userID user_id = users.get('datas')[0].get('pk') if not user.exists(): return response.json(104) uid_list = Device_Info.objects.filter(userID_id=user_id).values_list('UID', flat=True) if not len(uid_list): return response.json(0, {'datas': [], 'count': 0}) qs = Equipment_Info.objects.filter(userID_id=user_id).order_by('-id') elif uid: qs = Equipment_Info.objects.filter(devUid=uid).order_by('-id') elif devNickName: qs = Equipment_Info.objects.filter(devNickName=devNickName).order_by('-id') elif Channel: qs = Equipment_Info.objects.filter(Channel=Channel).order_by('-id') if not qs.exists(): return response.json(0, {'datas': [], 'count': 0}) count = qs.count() res = qs[(page - 1) * line:page * line] send_json = CommonService.qs_to_dict(res) send_json['count'] = count return response.json(0, send_json) # 管理员的删除推送信息的接口 def delete_by_admin(self, request_dict, userID, response): id_list = request_dict.getlist('id', None) if not len(id_list): return response.json(444, 'id is None or not list') check_perm = ModelService.check_perm(userID=userID, permID=10) if check_perm is True: try: is_delete = Equipment_Info.objects.filter(id__in=id_list).delete() except Exception as e: errorInfo = traceback.format_exc() print(errorInfo) return response.json(424, {'details': repr(e)}) else: return response.json(0, {'delete_count': is_delete[0]}) else: return response.json(404) # http://192.168.136.40:8077/detect/add?UID=FTSLL8HM437Z38WU111A&Channel=0&eventType=1&eventTime=1234567890 # 设备推送信息添加接口 class AddDetectionView(TemplateView): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(AddDetectionView, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): request.encoding = 'utf-8' return self.validation(request_dict=request.GET) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' return self.validation(request_dict=request.POST) def validation(self, request_dict, *args, **kwargs): response = ResponseObject() # 设备添加token uidToken = request_dict.get('uidToken', None) Channel = request_dict.get('Channel', None) eventType = request_dict.get('eventType', None) eventTime = request_dict.get('eventTime', None) utko = UidTokenObject(uidToken) if utko.flag is False: return response.json(444, 'tidToken is wrong') UID = utko.UID if not Channel or not eventType or not eventTime: return response.json(444, 'uidToken,Channel,eventType,eventTime') dv_qs = Device_Info.objects.filter(UID=UID, iSNotification=True).values("userID_id", "NickName") if not dv_qs.exists(): return response.json(10, 'device not detect') qs_list = [] for dv in dv_qs: add_data = { 'userID_id': dv["userID_id"], 'devUid': UID, 'Channel': Channel, 'eventType': eventType, 'eventTime': eventTime, 'devNickName': dv["NickName"], } qs_list.append(Equipment_Info(**add_data)) if qs_list: print(1) Equipment_Info.objects.bulk_create(qs_list) print(2) return response.json(0) else: return response.json(10, '无设备开启') # http://192.168.136.40:8077/detect/status?token=local&id=138001380001543918745881545&iSNotification=0 # 设备推送开关 class DetectStatusView(View): @method_decorator(csrf_exempt) def dispatch(self, *args, **kwargs): return super(DetectStatusView, self).dispatch(*args, **kwargs) def get(self, request, *args, **kwargs): request.encoding = 'utf-8' return self.validation(request_dict=request.GET) def post(self, request, *args, **kwargs): request.encoding = 'utf-8' return self.validation(request_dict=request.POST) def validation(self, request_dict, *args, **kwargs): token = request_dict.get('token', None) id = request_dict.get('id', None) iSNotification = request_dict.get('iSNotification', None) response = ResponseObject() if token is None: return response.json(309) tko = TokenObject(token) response.lang = tko.lang if tko.code != 0: return response.json(tko.code) userID = tko.userID return self.do_update(userID, id, iSNotification, response) def do_update(self, userID, id, iSNotification, response): qs = Device_Info.objects.filter(id=id, userID_id=userID) if qs.exists(): qs.update(iSNotification=iSNotification) data = {'uid': qs[0].UID} utko = UidTokenObject() uid_token = utko.generate(data) return response.json(0, {'uid_token': uid_token, 'push_url': '{SERVER_DOMAIN}detect/add'.format(SERVER_DOMAIN=SERVER_DOMAIN)}) else: return response.json(173) # 按季度删除访问日志 def deleteExpireEquipmentInfo(request): response = ResponseObject() i = int(request.GET.get('i', 10)) import time nowTime = int(time.time()) for i in range(5): ei = Equipment_Info.objects.filter(addTime__lte=str(nowTime - 3600 * 24 * 30))[0:10000] id_list = ei.values_list("id", flat=True) print(id_list) Equipment_Info.objects.filter(id__in=list(id_list)).delete() return response.json(0)