Эх сурвалжийг харах

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

locky 2 жил өмнө
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
     DeviceLogController, CouponController, AiController, ShadowController, SuperPasswordTool
 from Controller.Cron import CronTaskController
 from Controller.Cron import CronTaskController
 from Controller.MessagePush import EquipmentMessagePush
 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.Surveys import CloudStorageController
 from Controller.UserDevice import UserDeviceShareController
 from Controller.UserDevice import UserDeviceShareController
 
 

+ 6 - 13
Controller/DetectController.py

@@ -190,6 +190,7 @@ class DetectControllerView(View):
         # 设备语言
         # 设备语言
         lang = request_dict.get('lang', 'en')
         lang = request_dict.get('lang', 'en')
         tz = request_dict.get('tz', '0')
         tz = request_dict.get('tz', '0')
+        domain_name = request_dict.get('domain_name', None)
         # 消息提醒功能新增
         # 消息提醒功能新增
 
 
         # 如果传空上来,就默认为0
         # 如果传空上来,就默认为0
@@ -207,17 +208,6 @@ class DetectControllerView(View):
         # 判断推送类型对应key是否存在
         # 判断推送类型对应key是否存在
         print('push_type:', push_type)
         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)
         dvqs = Device_Info.objects.filter(userID_id=userID, UID=uid)
         status = int(status)
         status = int(status)
         # 获取用户区域
         # 获取用户区域
@@ -313,8 +303,11 @@ class DetectControllerView(View):
                 # utko.generate(data={'uid': uid})
                 # utko.generate(data={'uid': uid})
                 etkObj = ETkObject(etk='')
                 etkObj = ETkObject(etk='')
                 etk = etkObj.encrypt(uid)
                 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})
                 return response.json(0, {'detectUrl': detectUrl})
         else:
         else:
             return response.json(14)
             return response.json(14)

+ 4 - 0
Controller/DetectControllerV2.py

@@ -79,6 +79,7 @@ class DetectControllerViewV2(View):
         company_secrete = request_dict.get('company_secrete', None)
         company_secrete = request_dict.get('company_secrete', None)
         region = request_dict.get('region', None)  # app必须传:1:国外,2:国内
         region = request_dict.get('region', None)  # app必须传:1:国外,2:国内
         electricity_status = request_dict.get('electricity_status', None)
         electricity_status = request_dict.get('electricity_status', None)
+        domain_name = request_dict.get('domain_name', None)
         if not region:
         if not region:
             return response.json(444, 'region')
             return response.json(444, 'region')
         region = int(region)
         region = int(region)
@@ -239,6 +240,9 @@ class DetectControllerViewV2(View):
                 else:
                 else:
                     url = DETECT_PUSH_DOMAIN_JIUAN
                     url = DETECT_PUSH_DOMAIN_JIUAN
                     urls = DETECT_PUSH_DOMAINS_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}". \
                 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)
                     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}". \
                 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 datetime
 import logging
 import logging
 import time
 import time
+import calendar
 from decimal import Decimal
 from decimal import Decimal
 
 
+from dateutil.parser import parse
 from django.db import transaction
 from django.db import transaction
+from django.db.models import Sum
 from django.http import QueryDict
 from django.http import QueryDict
 from django.views import View
 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.ResponseObject import ResponseObject
 from Object.utils import LocalDateTimeUtil
 from Object.utils import LocalDateTimeUtil
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
@@ -63,16 +66,16 @@ class SmartSocketView(View):
             return self.save_count_down(request_dict, response)
             return self.save_count_down(request_dict, response)
         elif operation == 'saveSchedule':  # 添加插座排程
         elif operation == 'saveSchedule':  # 添加插座排程
             return self.save_socket_schedule(request_dict, response)
             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)
             return self.get_today_scene(request_dict, response)
         elif operation == 'get-all-scene':  # 统计智能插座电量
         elif operation == 'get-all-scene':  # 统计智能插座电量
             return self.get_all_scene(request_dict, response)
             return self.get_all_scene(request_dict, response)
         elif operation == 'get-socket-schedule':  # 智能插座排程记录查询
         elif operation == 'get-socket-schedule':  # 智能插座排程记录查询
             return self.get_socket_schedule(request_dict, response)
             return self.get_socket_schedule(request_dict, response)
         elif operation == 'get-log':  # 智能插座开关日志记录查询
         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)
         return response.json(404)
 
 
     @classmethod
     @classmethod
@@ -231,6 +234,7 @@ class SmartSocketView(View):
                                    "created_time": now_time,
                                    "created_time": now_time,
                                    "updated_time": now_time,
                                    "updated_time": now_time,
                                    "online": True,
                                    "online": True,
+                                   "start": True if start == 1 else False,
                                    "count_down_time": count_down_time}
                                    "count_down_time": count_down_time}
                     socket_info_qs = SocketInfo.objects.create(**socket_dict)
                     socket_info_qs = SocketInfo.objects.create(**socket_dict)
                     count_down_id = socket_info_qs.id
                     count_down_id = socket_info_qs.id
@@ -343,134 +347,155 @@ class SmartSocketView(View):
     @staticmethod
     @staticmethod
     def get_today_scene(request_dict, response):
     def get_today_scene(request_dict, response):
         """
         """
-        查询当天插座电量
+        查询插座电量
         @request_dict serialNumber: 序列号
         @request_dict serialNumber: 序列号
         @param request_dict: 请求数据
         @param request_dict: 请求数据
         @param response: 响应
         @param response: 响应
         @return: 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)
             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)
             return response.json(173)
         try:
         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)
             return response.json(0, data)
         except Exception as e:
         except Exception as e:
-            print(e)
-            return response.json(500)
+            return response.json(500, repr(e))
 
 
     @classmethod
     @classmethod
     def get_all_scene(cls, request_dict, response):
     def get_all_scene(cls, request_dict, response):
-        '''
+        """
         统计智能插座电量
         统计智能插座电量
         @request_dict serialNumber: 序列号
         @request_dict serialNumber: 序列号
         @request_dict unit: 时间单位
         @request_dict unit: 时间单位
         @param request_dict: 请求数据
         @param request_dict: 请求数据
         @param response: 响应
         @param response: 响应
         @return: response
         @return: response
-        '''
+        """
         serial_number = request_dict.get('serialNumber', None)
         serial_number = request_dict.get('serialNumber', None)
         unit = request_dict.get('unit', None)
         unit = request_dict.get('unit', None)
         # 确定是否会传值
         # 确定是否会传值
         startTime = request_dict.get('startTime', None)
         startTime = request_dict.get('startTime', None)
         endTime = request_dict.get('endTime', 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():
         if not socket_power_qs.exists():
             return response.json(173)
             return response.json(173)
-        data = {}
-        # for device_info in device_info_qs:
-        #     device_id = device_info['id']
-        #     device_list.append(device_id)
         try:
         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][
             data['accumulated_time'] = socket_power_qs[0]['accumulated_time'] if socket_power_qs[0][
                 'accumulated_time'] else 0.00
                 'accumulated_time'] else 0.00
+            # 功率
             data['power'] = socket_power_qs[0]['power'] if socket_power_qs[0]['power'] 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 = []
             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({
                 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
                     '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
             data['week_or_month_or_year'] = new_list
             return response.json(0, data)
             return response.json(0, data)
         except Exception as e:
         except Exception as e:
-            print(e)
-            return response.json(500)
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
     def get_socket_schedule(request_dict, response):
     def get_socket_schedule(request_dict, response):
@@ -492,33 +517,39 @@ class SmartSocketView(View):
         page, size = int(page), int(size)
         page, size = int(page), int(size)
         socket_schedule_qs = SocketSchedule.objects.filter(serial_number=serial_number).values('switch_status',
         socket_schedule_qs = SocketSchedule.objects.filter(serial_number=serial_number).values('switch_status',
                                                                                                'start_time', 'end_time',
                                                                                                '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():
         if not socket_schedule_qs.exists():
             return response.json(173)
             return response.json(173)
         try:
         try:
             schedule_list = []
             schedule_list = []
             for socket_schedule in socket_schedule_qs:
             for socket_schedule in socket_schedule_qs:
                 schedule_list.append({
                 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:
         except Exception as e:
-            print(e)
-            return response.json(500)
+            return response.json(500, repr(e))
 
 
     @staticmethod
     @staticmethod
-    def get_log(request_dict, response, user_id):
+    def get_log(request_dict, response):
         """
         """
         智能插座开关日志记录查询
         智能插座开关日志记录查询
         @param request_dict: 请求参数
         @param request_dict: 请求参数
-        @param user_id: 用户ID
         @request_dict page: 页数
         @request_dict page: 页数
         @request_dict size: 条数
         @request_dict size: 条数
         @request_dict serialNumber: 设备序列号
         @request_dict serialNumber: 设备序列号
@@ -526,74 +557,99 @@ class SmartSocketView(View):
         @request_dict endTime: 结束时间
         @request_dict endTime: 结束时间
         @param response: 响应对象
         @param response: 响应对象
         @return: response
         @return: response
+        # 日誌擦護用序列號查詢
         """
         """
         page = request_dict.get('pageNo', None)
         page = request_dict.get('pageNo', None)
         size = request_dict.get('pageSize', None)
         size = request_dict.get('pageSize', None)
         serial_number = request_dict.get('serialNumber', 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]):
         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
     @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)
         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)
             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,
     type_switch = models.SmallIntegerField(default=0,
                                            verbose_name='开关类型 0:总开关,1:倒计时开关')
                                            verbose_name='开关类型 0:总开关,1:倒计时开关')
     status = models.BooleanField(default=False, 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='倒计时时间戳')
     count_down_time = models.IntegerField(default=0, verbose_name='倒计时时间戳')
     created_time = models.IntegerField(default=0, verbose_name='创建时间')
     created_time = models.IntegerField(default=0, verbose_name='创建时间')
     updated_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'
         db_table = 's_socket_schedule'
         verbose_name = '插座排程'
         verbose_name = '插座排程'
         verbose_name_plural = 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"