|
@@ -6,6 +6,7 @@
|
|
|
@Email : zhangdongming@asj6.wecom.work
|
|
|
@Software: PyCharm
|
|
|
"""
|
|
|
+import datetime
|
|
|
import logging
|
|
|
import time
|
|
|
|
|
@@ -13,9 +14,7 @@ from django.db import transaction
|
|
|
from django.http import QueryDict
|
|
|
from django.views import View
|
|
|
|
|
|
-from Model.models import SocketInfo, SocketSchedule, Device_Info
|
|
|
-from Object.ResponseObject import ResponseObject
|
|
|
-from Object.TokenObject import TokenObject
|
|
|
+from Model.models import SocketInfo, SocketSchedule, Device_Info, UidSetModel, SocketPowerStatistics
|
|
|
from Service.CommonService import CommonService
|
|
|
|
|
|
LOGGER = logging.getLogger('info')
|
|
@@ -48,17 +47,26 @@ class SmartSocketView(View):
|
|
|
return self.validation(put, request, operation)
|
|
|
|
|
|
def validation(self, request_dict, request, operation):
|
|
|
- token = TokenObject(request.META.get('HTTP_AUTHORIZATION'))
|
|
|
- lang = request_dict.get('lang', 'cn')
|
|
|
- response = ResponseObject(lang)
|
|
|
- if token.code != 0:
|
|
|
- return response.json(token.code)
|
|
|
+ token_code, user_id, response = CommonService \
|
|
|
+ .verify_token_get_user_id(request_dict, request)
|
|
|
+ if token_code != 0:
|
|
|
+ return response.json(token_code)
|
|
|
if operation == 'addSwitch': # 添加插座开关
|
|
|
return self.add_switch(request_dict, response)
|
|
|
elif operation == 'addCountDown': # 添加插座倒计时
|
|
|
return self.add_count_down(request_dict, response)
|
|
|
elif operation == 'addSchedule': # 添加插座排程
|
|
|
return self.save_socket_schedule(request_dict, response)
|
|
|
+ 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)
|
|
|
return response.json(404)
|
|
|
|
|
|
@staticmethod
|
|
@@ -270,3 +278,263 @@ class SmartSocketView(View):
|
|
|
result = CommonService.req_publish_mqtt_msg(serial_number, topic_name, msg)
|
|
|
LOGGER.info('智能插座排程任务发布MQTT消息结果{}'.format(result))
|
|
|
return result
|
|
|
+
|
|
|
+ # 以下是查询智能插座接口
|
|
|
+
|
|
|
+ @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)
|