فهرست منبع

移除插座URL、整合插座查询接口至SmartSocketController

zhangdongming 2 سال پیش
والد
کامیت
8407c2d2ed
2فایلهای تغییر یافته به همراه276 افزوده شده و 10 حذف شده
  1. 0 2
      Ansjer/urls.py
  2. 276 8
      Controller/SensorGateway/SmartSocketController.py

+ 0 - 2
Ansjer/urls.py

@@ -287,8 +287,6 @@ urlpatterns = [
     re_path(r'serial/(?P<operation>.*)', SerialManageController.SerialView.as_view()),
     # 数据系统模块
     re_path(r'^dataManagement/', include("Ansjer.server_urls.datasystem_url")),
-    # 查询智能插座
-    re_path(r'^smartSocket/(?P<operation>.*)', SmartSocketStatisticsController.SmartSocketStatisticsView.as_view()),
     # 后台界面接口 -------------------------------------------------------------------------------------------------------
 
     # 定时任务接口

+ 276 - 8
Controller/SensorGateway/SmartSocketController.py

@@ -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)