Browse Source

Merge branch 'test' of http://192.168.136.99:3000/servers/ASJServer into locky

locky 2 years ago
parent
commit
b844e1cfea

+ 1 - 1
Ansjer/urls.py

@@ -25,7 +25,7 @@ from Controller import FeedBack, EquipmentOTA, EquipmentInfo, AdminManage, AppIn
     DeviceLogController, CouponController, AiController, ShadowController, SuperPasswordTool
 from Controller.Cron import CronTaskController
 from Controller.MessagePush import EquipmentMessagePush
-from Controller.SensorGateway import SensorGatewayController, EquipmentFamilyController, SmartSocketStatisticsController
+from Controller.SensorGateway import SensorGatewayController, EquipmentFamilyController
 from Controller.Surveys import CloudStorageController
 from Controller.UserDevice import UserDeviceShareController
 

+ 6 - 13
Controller/DetectController.py

@@ -190,6 +190,7 @@ class DetectControllerView(View):
         # 设备语言
         lang = request_dict.get('lang', 'en')
         tz = request_dict.get('tz', '0')
+        domain_name = request_dict.get('domain_name', None)
         # 消息提醒功能新增
 
         # 如果传空上来,就默认为0
@@ -207,17 +208,6 @@ class DetectControllerView(View):
         # 判断推送类型对应key是否存在
         print('push_type:', push_type)
 
-        if push_type == '0':
-            if appBundleId not in APNS_CONFIG.keys():
-                return response.json(904)
-        elif push_type == '1':
-            if appBundleId not in FCM_CONFIG.keys():
-                return response.json(904)
-        elif push_type == '2':
-            if appBundleId not in JPUSH_CONFIG.keys():
-                return response.json(904)
-        else:
-            return response.json(173)
         dvqs = Device_Info.objects.filter(userID_id=userID, UID=uid)
         status = int(status)
         # 获取用户区域
@@ -313,8 +303,11 @@ class DetectControllerView(View):
                 # utko.generate(data={'uid': uid})
                 etkObj = ETkObject(etk='')
                 etk = etkObj.encrypt(uid)
-                detectUrl = "{DETECT_PUSH_DOMAIN}notify/push?etk={etk}". \
-                    format(etk=etk, DETECT_PUSH_DOMAIN=DETECT_PUSH_DOMAIN)
+                if domain_name in ['api.zositeche.com', 'api.loocam3.com', 'common.neutral3.com']:
+                    detectUrl = 'http://push.zositeche.com/notify/push?etk={etk}'.format(etk=etk)
+                else:
+                    detectUrl = "{DETECT_PUSH_DOMAIN}notify/push?etk={etk}". \
+                        format(etk=etk, DETECT_PUSH_DOMAIN=DETECT_PUSH_DOMAIN)
                 return response.json(0, {'detectUrl': detectUrl})
         else:
             return response.json(14)

+ 4 - 0
Controller/DetectControllerV2.py

@@ -79,6 +79,7 @@ class DetectControllerViewV2(View):
         company_secrete = request_dict.get('company_secrete', None)
         region = request_dict.get('region', None)  # app必须传:1:国外,2:国内
         electricity_status = request_dict.get('electricity_status', None)
+        domain_name = request_dict.get('domain_name', None)
         if not region:
             return response.json(444, 'region')
         region = int(region)
@@ -239,6 +240,9 @@ class DetectControllerViewV2(View):
                 else:
                     url = DETECT_PUSH_DOMAIN_JIUAN
                     urls = DETECT_PUSH_DOMAINS_JIUAN
+                if domain_name in ['api.zositeche.com', 'api.loocam3.com', 'common.neutral3.com']:
+                    url = 'http://push.zositeche.com/'
+                    urls = 'https://push.zositeche.com/'
                 detectUrl = "{DETECT_PUSH_DOMAIN}notifyV2/push?etk={etk}&company_secrete={company_secrete}&region={region}". \
                     format(etk=etk, company_secrete=company_secrete, DETECT_PUSH_DOMAIN=url, region=region)
                 detectUrls = "{DETECT_PUSH_DOMAIN_V2}notifyV2/push?etk={etk}&company_secrete={company_secrete}&region={region}". \

+ 224 - 168
Controller/SensorGateway/SmartSocketController.py

@@ -9,13 +9,16 @@
 import datetime
 import logging
 import time
+import calendar
 from decimal import Decimal
 
+from dateutil.parser import parse
 from django.db import transaction
+from django.db.models import Sum
 from django.http import QueryDict
 from django.views import View
 
-from Model.models import SocketInfo, SocketSchedule, Device_Info, UidSetModel, SocketPowerStatistics
+from Model.models import SocketInfo, SocketSchedule, Device_Info, SocketPowerStatistics, SceneLog
 from Object.ResponseObject import ResponseObject
 from Object.utils import LocalDateTimeUtil
 from Service.CommonService import CommonService
@@ -63,16 +66,16 @@ class SmartSocketView(View):
             return self.save_count_down(request_dict, response)
         elif operation == 'saveSchedule':  # 添加插座排程
             return self.save_socket_schedule(request_dict, response)
-        elif operation == 'get-today-scene':  # 查询当天插座电量
+        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 self.get_log(request_dict, response)
+        elif operation == 'del-socket-schedule':  # 批量刪除排程
+            return self.del_socket_schedule(request_dict, response, user_id)
         return response.json(404)
 
     @classmethod
@@ -231,6 +234,7 @@ class SmartSocketView(View):
                                    "created_time": now_time,
                                    "updated_time": now_time,
                                    "online": True,
+                                   "start": True if start == 1 else False,
                                    "count_down_time": count_down_time}
                     socket_info_qs = SocketInfo.objects.create(**socket_dict)
                     count_down_id = socket_info_qs.id
@@ -343,134 +347,155 @@ class SmartSocketView(View):
     @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]):
+        serialNumber = request_dict.get('serialNumber', None)
+        if not serialNumber:
             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():
+        socket_power_qs = SocketPowerStatistics.objects.filter(serial_number=serialNumber).values('power',
+                                                                                                  'accumulated_time',
+                                                                                                  'electricity')
+        socket_info_qs = SocketInfo.objects.filter(serial_number=serialNumber).values('status', 'online',
+                                                                                      'count_down_time')
+        if not socket_info_qs.exists() or not socket_power_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'
+            data = {'serialNumber': serialNumber,
+                    'power': socket_power_qs[0]['power'] if socket_power_qs[0]['power'] else 0.00,
+                    'electricity': socket_power_qs[0]['electricity'] if socket_power_qs[0]['electricity'] else 0.00,
+                    'accumulatedTime': socket_power_qs[0]['accumulated_time'] if socket_power_qs[0][
+                        'accumulated_time'] else '0:00',
+                    'status': socket_info_qs[0]['status'] if socket_info_qs[0]['status'] else False,
+                    'online': socket_info_qs[0]['online'] if socket_info_qs[0]['online'] else False,
+                    '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)
+            return response.json(500, repr(e))
 
     @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 all([unit, serial_number, startTime, endTime]):
+            return response.json(444, {'error param': 'unit or serial_number or startTime or endTime'})
+        socket_power_qs = SocketPowerStatistics.objects.filter(serial_number=serial_number).values('electricity',
+                                                                                                   'accumulated_time',
+                                                                                                   'power',
+                                                                                                   'created_time')
         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 = {}
+            # 设备累计电量
+            all_electricity = socket_power_qs.aggregate(total=Sum('electricity'))
+            data['electricityAll'] = all_electricity['total'] if all_electricity['total'] else 0.00
+            # 当天使用电量
+            data['electricityToday'] = socket_power_qs[0]['electricity'] if socket_power_qs[0][
+                '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 = []
+
+            # 本月电费
+            nowTime = int(time.time())
+            nowTime = CommonService.timestamp_to_str(nowTime)
+            year, month = str(nowTime).split('-')[0], str(nowTime).split('-')[1]
+            end = calendar.monthrange(int(year), int(month))[1]
+            startTime_now = parse('%s-%s-01 00:00:00' % (year, month))
+            endTime_now = parse('%s-%s-%s 23:59:59' % (year, month, end))
+            startTime_now = CommonService.str_to_timestamp(str(startTime_now))
+            endTime_now = CommonService.str_to_timestamp(str(endTime_now))
+            electricity = socket_power_qs.filter(created_time__gte=startTime_now,
+                                                 created_time__lt=endTime_now).aggregate(
+                total=Sum('electricity'))
+            data['electricityMonth'] = electricity['total'] if electricity['total'] else 0.00
+
+            # 昨天使用电量
+            today = datetime.date.today()  # 获取今日日期
+            yesterday = today - datetime.timedelta(days=1)
+            # 昨天开始时间戳
+            yesterday_start_time = int(time.mktime(time.strptime(str(yesterday), '%Y-%m-%d')))
+            # 昨天结束时间戳
+            yesterday_end_time = int(time.mktime(time.strptime(str(today), '%Y-%m-%d'))) - 1
+            socket_qs = socket_power_qs.filter(created_time__gte=yesterday_start_time,
+                                               created_time__lt=yesterday_end_time).values('electricity')
+            data['electricityYesterday'] = socket_qs[0]['electricity'] if socket_qs[0][
+                'electricity'] else 0.00
+
+            #  时间和功耗
             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
+            socket_qs = socket_power_qs.filter(created_time__gte=startTime, created_time__lt=endTime).aggregate(
+                electricity=Sum('electricity'), accumulatedTime=Sum('accumulated_time'))
+            new_list.append({
+                'electricityAll': socket_qs['electricity'] if socket_qs['electricity'] else 0.00,
+                'accumulatedTimeAll': socket_qs['accumulatedTime'] if socket_qs['accumulatedTime'] else '0:00'
+            })
+
+            #  分割时间
+            diction = cls.splittings_time(startTime, endTime, unit)
+            if unit == 'year':
+                # 开始月
+                socket_qs = socket_power_qs.filter(created_time__gte=startTime,
+                                                   created_time__lt=diction['startMonth_time']).aggregate(
+                    electricity=Sum('electricity'), accumulatedTime=Sum('accumulated_time'))
+                startTime = time.localtime(int(startTime))  # 把时间戳转换成时间元祖
+                startTime = time.strftime('%Y-%m', startTime)
                 new_list.append({
-                    'time': items,
+                    'startTime': startTime,
+                    'electricity': socket_qs['electricity'] if socket_qs['electricity'] else 0.00
+                })
+            # 分割时间
+            # 查询天月
+            for item in diction['time_list']:
+                socket_qs = socket_power_qs.filter(created_time__gte=item[0],
+                                                   created_time__lt=item[1]).aggregate(electricity=Sum('electricity'))
+                hearTime = time.localtime(item[0])  # 把时间戳转换成时间元祖
+                if unit == 'year':
+                    startTime = time.strftime('%Y-%m', hearTime)
+                else:
+                    startTime = time.strftime('%Y-%m-%d', hearTime)
+                electricity = socket_qs['electricity'] if socket_qs[
+                    'electricity'] else 0.00
+                new_list.append({
+                    'startTime': startTime,
                     '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
+
+            if unit == 'year':
+                # 结束月
+                socket_qs = socket_power_qs.filter(created_time__gte=diction['endMonth_time'],
+                                                   created_time__lt=endTime).aggregate(
+                    electricity=Sum('electricity'))
+                endTime = time.localtime(int(endTime))  # 把时间戳转换成时间元祖
+                endTime = time.strftime('%Y-%m', endTime)
+                new_list.append({
+                    'startTime': endTime,
+                    'electricity': socket_qs['electricity'] if socket_qs['electricity'] else 0.00
+                })
+
             data['week_or_month_or_year'] = new_list
             return response.json(0, data)
         except Exception as e:
-            print(e)
-            return response.json(500)
+            return response.json(500, repr(e))
 
     @staticmethod
     def get_socket_schedule(request_dict, response):
@@ -492,33 +517,39 @@ class SmartSocketView(View):
         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]
+                                                                                               'repeat', 'task_status',
+                                                                                               'time_type',
+                                                                                               'created_time',
+                                                                                               'updated_time',
+                                                                                               'device_id',
+                                                                                               'id').order_by(
+            '-created_time')[(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,
+                    'taskId': socket_schedule['id'],
+                    'deviceID': socket_schedule['device_id'],
+                    'serialNumber': serial_number,
+                    'timeType': socket_schedule['time_type'],
+                    'startTime': socket_schedule['start_time'],
+                    'endTime': socket_schedule['end_time'],
+                    'switchStatus': socket_schedule['switch_status'] if socket_schedule['switch_status'] else False,
+                    'taskStatus': socket_schedule['task_status'] if socket_schedule['task_status'] else False,
                     # 需转换进制
-                    'repeat': socket_schedule['repeat']
+                    'repeat': socket_schedule['repeat'],
                 })
-            return response.json(0, {'list': schedule_list, 'total': count})
+            return response.json(0, schedule_list)
         except Exception as e:
-            print(e)
-            return response.json(500)
+            return response.json(500, repr(e))
 
     @staticmethod
-    def get_log(request_dict, response, user_id):
+    def get_log(request_dict, response):
         """
         智能插座开关日志记录查询
         @param request_dict: 请求参数
-        @param user_id: 用户ID
         @request_dict page: 页数
         @request_dict size: 条数
         @request_dict serialNumber: 设备序列号
@@ -526,74 +557,99 @@ class SmartSocketView(View):
         @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)
+            return response.json(444, {'errno: page or size or serial_number'})
+        page, size = int(page), int(size)
+        scene_log_qs = SceneLog.objects.filter(device_id=serial_number).values('tasks', 'status',
+                                                                               'created_time').order_by(
+            '-created_time')[(page - 1) * size:page * size]
+        if not scene_log_qs.exists():
+            return response.json(173)
+        try:
+            log_list = []
+            for scene_log in scene_log_qs:
+                data = {
+                    'serialNumber': serial_number,
+                    'tasks': scene_log['tasks'] if scene_log['tasks'] else '',
+                    'status': scene_log['status'] if scene_log['status'] else 0,
+                    'createdTime': scene_log['created_time'] if scene_log['created_time'] else '',
+                }
+                log_list.append(data)
+            return response.json(0, log_list)
+        except Exception as e:
+            return response.json(500, repr(e))
 
-        socket_info_qs = SocketInfo.objects.filter(serial_number=serial_number)
-        device_id_list = []
-        pass
+    @classmethod
+    def splittings_time(cls, startTime, endTime, unit):
+        diction = {}
+        time_list = []
+        # 开始时间
+        startTime = CommonService.timestamp_to_str(int(startTime))
+        endTime = CommonService.timestamp_to_str(int(endTime))
+        startYear, startMonth, startDay = \
+            str(startTime).split('-')[0], str(startTime).split('-')[1], str(startTime).split('-')[2]
+        # 结束时间
+        endYear, endMonth, endDay = str(endTime).split('-')[0], str(endTime).split('-')[1], str(endTime).split('-')[2]
+        if unit == 'week' or unit == 'month':
+            startTime = parse('%s-%s-%s' % (startYear, startMonth, startDay))
+            endTime = parse('%s-%s-%s' % (endYear, endMonth, endDay))
+            time_list = CommonService.cutting_time(startTime, endTime, time_unit='day')
+        elif unit == 'year':
+            startYear, startMonth = int(startTime.split('-')[0]), int(startTime.split('-')[1])
+            endYear, endMonth = int(endTime.split('-')[0]), int(endTime.split('-')[1])
+            # 获取下个月的第一天
+            if startMonth == 12:
+                startYear += 1
+                startMonth = 1
+            else:
+                startMonth += 1
+            #  计算(开始月,结束月)
+            startYear = str(startYear)
+            startMonth = str(startMonth)
+            startTime = parse('%s-%s-01 00:00:00' % (startYear, startMonth))
+            # 获取上个月最后一天
+            if endMonth == 1:
+                endYear -= 1
+                endMonth = 12
+            else:
+                endMonth -= 1
+            endDay = calendar.monthrange(endYear, endMonth)[1]
+            endYear = str(endYear)
+            endMonth = str(endMonth)
+            endTime = parse('%s-%s-%s 23:59:59' % (endYear, endMonth, endDay))
+            time_list = CommonService.cutting_time(startTime, endTime, time_unit='month')
+            startMonth_time = CommonService.str_to_timestamp(str(startTime))
+            endMonth_time = CommonService.str_to_timestamp(str(endTime))
+            diction['startMonth_time'] = startMonth_time
+            diction['endMonth_time'] = endMonth_time
+        diction['time_list'] = time_list
+        return diction
 
     @staticmethod
-    def editor_socket_device(request_dict, response, user_id):
+    def del_socket_schedule(request_dict, response, user_id):
         """
-        编辑设备
+        批量刪除排程
+        @param request_dict: 请求参数
+        @param user_id: 用戶user_id
+        @request_dict ids: 排程id
+        @request_dict serialNumber: 设备序列号
+        @param response: 响应对象
+        @return: response
         """
-        # 编辑插座信息
+        ids = request_dict.get('ids', None)
         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():
+        if not all({ids, serial_number}):
+            return response.json(444, {'error param': 'id or serialNumber'})
+        device_info_qs = Device_Info.objects.filter(userID_id=user_id, serial_number=serial_number)
+        if not device_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)
+        socket_schedule_qs = SocketSchedule.objects.filter(id__in=ids.split(','))
+        if not socket_schedule_qs.exists():
+            return response.json(173)
+        socket_schedule_qs.delete()
+        return response.json(0)

+ 0 - 300
Controller/SensorGateway/SmartSocketStatisticsController.py

@@ -1,300 +0,0 @@
-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)

+ 1 - 19
Model/models.py

@@ -3404,6 +3404,7 @@ class SocketInfo(models.Model):
     type_switch = models.SmallIntegerField(default=0,
                                            verbose_name='开关类型 0:总开关,1:倒计时开关')
     status = models.BooleanField(default=False, verbose_name='开关状态 0:关闭,1:开启')
+    start = models.BooleanField(default=False, verbose_name='倒计时状态 0:关闭,1:开启')
     count_down_time = models.IntegerField(default=0, verbose_name='倒计时时间戳')
     created_time = models.IntegerField(default=0, verbose_name='创建时间')
     updated_time = models.IntegerField(default=0, verbose_name='创建时间')
@@ -3433,22 +3434,3 @@ class SocketSchedule(models.Model):
         db_table = 's_socket_schedule'
         verbose_name = '插座排程'
         verbose_name_plural = verbose_name
-
-
-class SocketRecordsLog(models.Model):
-    id = models.AutoField(primary_key=True, verbose_name='自增id')
-    user_id = models.CharField(default='', db_index=True, max_length=32, verbose_name=u'用户id')
-    serial_number = models.CharField(db_index=True, max_length=20, default='',
-                                     verbose_name='序列号')
-    records_type = models.SmallIntegerField(default=0,
-                                            verbose_name='记录类型 0:设备开关 1:插座日志')
-    content = models.CharField(max_length=128, blank=True, verbose_name='记录内容')
-    status = models.SmallIntegerField(default=0, verbose_name='0:未读/未操作,1:已读/已操作')
-    created_time = models.IntegerField(default=0, verbose_name='创建时间')
-    updated_time = models.IntegerField(default=0, verbose_name='更新时间')
-
-    class Meta:
-        db_table = 's_socket_records_log'
-        verbose_name = '插座日志记录'
-        verbose_name_plural = verbose_name
-        app_label = "PushModel"