123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300 |
- import operator
- import time
- import datetime
- from django.db import transaction
- from django.forms import model_to_dict
- from django.http import JsonResponse
- from django.views import View
- from Model.models import SocketPowerStatistics, SocketInfo, Device_User, Device_Info, SocketSchedule, \
- CompanySerialModel, UIDCompanySerialModel, SocketRecordsLog, UidSetModel
- from Object.ResponseObject import ResponseObject
- from Service.CommonService import CommonService
- class SmartSocketStatisticsView(View):
- def get(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.GET, request, operation)
- def post(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- operation = kwargs.get('operation')
- return self.validation(request.POST, request, operation)
- def validation(self, request_dict, request, operation):
- token_code, user_id, response = CommonService.verify_token_get_user_id(request_dict, request)
- if token_code != 0:
- return response.json(token_code)
- elif operation == 'get-today-scene': # 查询当天插座电量
- return self.get_today_scene(request_dict, response)
- elif operation == 'get-all-scene': # 统计智能插座电量
- return self.get_all_scene(request_dict, response)
- elif operation == 'get-socket-schedule': # 智能插座排程记录查询
- return self.get_socket_schedule(request_dict, response)
- elif operation == 'get-log': # 智能插座开关日志记录查询
- return self.get_log(request_dict, response, user_id)
- elif operation == 'editor-socket-device': # 编辑设备信息
- return self.editor_socket_device(request_dict, response, user_id)
- else:
- return response.json(414)
- @staticmethod
- def get_today_scene(request_dict, response):
- """
- 查询当天插座电量
- @request_dict serialNumber: 序列号
- @param request_dict: 请求数据
- @param response: 响应
- @return: response
- """
- serial_number = request_dict.get('serialNumber', None)
- if not all([serial_number]):
- return response.json(444)
- socket_power_qs = SocketPowerStatistics.objects.filter(serial_number=serial_number).values('power',
- 'accumulated_time',
- 'electricity')
- if not socket_power_qs.exists():
- return response.json(173)
- socket_info_qs = SocketInfo.objects.filter(serial_number=serial_number).values('status', 'online',
- 'count_down_time')
- if not socket_info_qs.exists():
- return response.json(173)
- try:
- data = {}
- data['serialNumber'] = serial_number
- data['power'] = socket_power_qs[0]['power'] if socket_power_qs[0]['power'] else 0.00
- data['electricity'] = socket_power_qs[0]['electricity'] if socket_power_qs[0]['electricity'] else 0.00
- data['accumulatedTime'] = socket_power_qs[0]['accumulated_time'] if socket_power_qs[0][
- 'accumulated_time'] else '0:00'
- data['status'] = socket_info_qs[0]['status'] if socket_info_qs[0]['status'] else False
- data['online'] = socket_info_qs[0]['online'] if socket_info_qs[0]['online'] else False
- data['count_down_time'] = socket_info_qs[0]['count_down_time'] if socket_info_qs[0][
- 'count_down_time'] else '00:00:00'
- return response.json(0, data)
- except Exception as e:
- print(e)
- return response.json(500)
- @classmethod
- def get_all_scene(cls, request_dict, response):
- '''
- 统计智能插座电量
- @request_dict serialNumber: 序列号
- @request_dict unit: 时间单位
- @param request_dict: 请求数据
- @param response: 响应
- @return: response
- '''
- serial_number = request_dict.get('serialNumber', None)
- unit = request_dict.get('unit', None)
- # 确定是否会传值
- startTime = request_dict.get('startTime', None)
- endTime = request_dict.get('endTime', None)
- if not all([unit, serial_number]):
- return response.json(444)
- socket_power_qs = SocketPowerStatistics.objects.filter(serial_number=serial_number).values(
- 'electricity', 'accumulated_time', 'power')
- if not socket_power_qs.exists():
- return response.json(173)
- data = {}
- # for device_info in device_info_qs:
- # device_id = device_info['id']
- # device_list.append(device_id)
- try:
- data = {
- 'electricityToday': '',
- 'accumulated_time': '',
- 'power': '',
- 'electricityYesterday': '',
- 'electricityMonth': '',
- 'allElectricity': '',
- 'accumulatedTime': '',
- 'accumulatedPower': '',
- }
- nowTime = endTime
- data['electricity'] = socket_power_qs[0]['electricity'] if socket_power_qs[0]['electricity'] else 0.00
- # 昨天使用电量
- # data['electricityYesterday'] = socket_power_qs[1]['electricity'] if socket_power_qs[1][
- # 'electricity'] else 0.00
- data['accumulated_time'] = socket_power_qs[0]['accumulated_time'] if socket_power_qs[0][
- 'accumulated_time'] else 0.00
- data['power'] = socket_power_qs[0]['power'] if socket_power_qs[0]['power'] else 0.00
- time_list = []
- if not endTime:
- nowTime = 1679241600
- if unit == 'week':
- startTime = startTime
- if not startTime:
- startTime = datetime.datetime.fromtimestamp(int(nowTime)) - datetime.timedelta(days=7)
- end_time = datetime.datetime.fromtimestamp(int(nowTime))
- time_list = CommonService.cutting_time(startTime, end_time, time_unit='day')
- elif unit == 'month':
- startTime = startTime
- if not startTime:
- startTime = datetime.datetime.fromtimestamp(int(nowTime)) - datetime.timedelta(days=30)
- end_time = datetime.datetime.fromtimestamp(int(nowTime))
- time_list = CommonService.cutting_time(startTime, end_time, time_unit='day')
- elif unit == 'year':
- startTime = startTime
- if not startTime:
- startTime = datetime.datetime.fromtimestamp(int(nowTime)) - datetime.timedelta(days=365)
- end_time = datetime.datetime.fromtimestamp(int(nowTime))
- time_list = CommonService.cutting_time(startTime, end_time, time_unit='month')
- # all_time_list = []
- new_list = []
- for item in time_list:
- socket_power_qs = socket_power_qs.filter(created_time__gte=item[0], created_time__lt=item[1])
- time_tuple = time.localtime(item[-1]) # 把时间戳转换成时间元祖
- items = time.strftime('%Y-%m-%d', time_tuple)
- electricity = 0.00
- new_list.append({
- 'time': items,
- 'electricity': electricity
- })
- # #字典key相同则value放一起
- # socket_list = list(socket_power_qs)
- # new_list.append(socket_list[0])
- # for socket in range(1,len(socket_list)):
- # for new in new_list:
- # if operator.eq(new.keys(), socket_list[socket].keys()):
- # for key in new.keys():
- # new[key] += socket_list[socket][key]
- # break
- # elif operator.eq(new, new_list[-1]):
- # new_list.append(socket_list[socket])
- # break
- # data['dict'] = new_list
- data['week_or_month_or_year'] = new_list
- return response.json(0, data)
- except Exception as e:
- print(e)
- return response.json(500)
- @staticmethod
- def get_socket_schedule(request_dict, response):
- """
- 智能插座排程记录查询
- @param request_dict: 请求参数
- @request_dict page: 页数
- @request_dict size: 条数
- @request_dict serialNumber: 设备序列号
- @param response: 响应对象
- @return: response
- """
- page = request_dict.get('pageNo', None)
- size = request_dict.get('pageSize', None)
- serial_number = request_dict.get('serialNumber', None)
- if not all([page, size, serial_number]):
- return response.json(444)
- page, size = int(page), int(size)
- socket_schedule_qs = SocketSchedule.objects.filter(serial_number=serial_number).values('switch_status',
- 'start_time', 'end_time',
- 'repeat', 'task_status')
- count = socket_schedule_qs.count()
- socket_schedule_qs = socket_schedule_qs[(page - 1) * size:page * size]
- if not socket_schedule_qs.exists():
- return response.json(173)
- try:
- schedule_list = []
- for socket_schedule in socket_schedule_qs:
- schedule_list.append({
- 'start_time': socket_schedule['start_time'],
- 'end_time': socket_schedule['end_time'],
- 'switch_status': socket_schedule['switch_status'] if socket_schedule['switch_status'] else False,
- 'task_status': socket_schedule['task_status'] if socket_schedule['task_status'] else False,
- # 需转换进制
- 'repeat': socket_schedule['repeat']
- })
- return response.json(0, {'list': schedule_list, 'total': count})
- except Exception as e:
- print(e)
- return response.json(500)
- @staticmethod
- def get_log(request_dict, response, user_id):
- """
- 智能插座开关日志记录查询
- @param request_dict: 请求参数
- @param user_id: 用户ID
- @request_dict page: 页数
- @request_dict size: 条数
- @request_dict serialNumber: 设备序列号
- @request_dict startTime: 开始时间
- @request_dict endTime: 结束时间
- @param response: 响应对象
- @return: response
- """
- page = request_dict.get('pageNo', None)
- size = request_dict.get('pageSize', None)
- serial_number = request_dict.get('serialNumber', None)
- start_time = request_dict.get('startTime', None)
- end_time = request_dict.get('endTime', None)
- if not all([page, size, serial_number]):
- return response.json(444)
- socket_info_qs = SocketInfo.objects.filter(serial_number=serial_number)
- device_id_list = []
- pass
- @staticmethod
- def editor_socket_device(request_dict, response, user_id):
- """
- 编辑设备
- """
- # 编辑插座信息
- serial_number = request_dict.get('serialNumber', None)
- NickName = request_dict.get('NickName', None)
- #room_save
- # familyRoom = request_dict.get('familyRoom', None)
- type_switch = request_dict.get('typeSwitch', None) # 1:倒计时开关
- status = request_dict.get('status', None) # 开关状态 0:关闭,1:开启'
- # 编辑插座排程
- count_down_time = request_dict.get('countDownTime', None) # 倒计时时间戳
- time_type = request_dict.get('timeType', None) # 排查时间类型 0:按时间 1:按时间段划分'
- switch_status = request_dict.get('switchStatus', None) # 开关状态 0:关闭,1:开启
- start_time = request_dict.get('startTime', None)
- end_time = request_dict.get('endTime', None)
- repeat = request_dict.get('repeat', None) # 重复周期用数值表示
- if not all([serial_number]):
- return response.json(444)
- socket_info_qs = SocketInfo.objects.filter(serial_number=serial_number)
- if not socket_info_qs.exists():
- return response.json(173)
- try:
- with transaction.atomic():
- if NickName:
- Device_Info.objects.update(NickName=NickName)
- UidSetModel.objects.update(nickname=NickName)
- elif type_switch:
- socket_info_qs.update(type_switch=type_switch)
- elif status:
- socket_info_qs.update(status=status)
- elif count_down_time:
- socket_info_qs.update(count_down_time=count_down_time)
- socket_qs = SocketSchedule.objects.filter(serial_number=serial_number)
- if not socket_qs.exists():
- socket_info_qs.save()
- return response(0)
- elif time_type:
- socket_qs.update(time_type=time_type)
- elif switch_status:
- socket_qs.update(switch_status=switch_status)
- elif start_time:
- socket_qs.update(start_time=start_time)
- elif end_time:
- socket_qs.update(end_time=end_time)
- elif repeat:
- socket_qs.update(repeat=repeat)
- socket_info_qs.save()
- socket_qs.save()
- return response.json(0)
- except Exception as e:
- print(e)
- return response.json(500)
|