Selaa lähdekoodia

Merge remote-tracking branch 'remotes/origin/locky' into test

Ansjer 3 vuotta sitten
vanhempi
commit
87110e70fb
1 muutettua tiedostoa jossa 93 lisäystä ja 2 poistoa
  1. 93 2
      Controller/SensorGateway/SubDeviceController.py

+ 93 - 2
Controller/SensorGateway/SubDeviceController.py

@@ -10,7 +10,7 @@ import time
 from django.db import transaction
 from django.views import View
 
-from Model.models import Device_Info, GatewaySubDevice, FamilyRoomDevice
+from Model.models import Device_Info, GatewaySubDevice, FamilyRoomDevice, SensorRecord
 from Object.ResponseObject import ResponseObject
 from Object.TokenObject import TokenObject
 
@@ -42,6 +42,8 @@ class GatewaySubDeviceView(View):
             return self.sensor_update(user_id, request_dict, response)
         elif operation == 'delete':  # 删除子设备
             return self.delete(request_dict, user_id, response)
+        elif operation == 'records':  # 查询子设备记录数据
+            return self.records(request_dict, response)
         else:
             return response.json(414)
 
@@ -159,7 +161,7 @@ class GatewaySubDeviceView(View):
         """
         更新子设备信息
         @param request_dict: 请求参数
-       @request_dict sub_device_id: 子设备id
+        @request_dict sub_device_id: 子设备id
         @param user_id: 用户id
         @param response: 响应对象
         @return: response
@@ -173,3 +175,92 @@ class GatewaySubDeviceView(View):
             return response.json(0)
         except Exception as e:
             return response.json(500, repr(e))
+
+    @staticmethod
+    def records(request_dict, response):
+        """
+        查询子设备记录数据
+        @param request_dict: 请求参数
+        @request_dict subDeviceId: 子设备id
+        @request_dict cycle: 时间周期
+        @param response: 响应对象
+        @return: response
+        """
+        sub_device_id = request_dict.get('subDeviceId', None)
+        cycle = request_dict.get('cycle', None)
+        if not all([sub_device_id]):
+            return response.json(444)
+        now_time = int(time.time())
+        try:
+            if not cycle:
+                sensor_record_qs = SensorRecord.objects.filter(gateway_sub_device_id=sub_device_id). \
+                    values('alarm', 'event_type', 'created_time').order_by('-created_time')
+                if not sensor_record_qs.exists():
+                    return response.json(0)
+                return response.json(0, list(sensor_record_qs))
+            else:
+                record_dict = {}
+                record_list = []
+                if cycle == '24 hours':
+                    start_time = now_time - 24*60*60
+                    sensor_record_qs = SensorRecord.objects.filter(gateway_sub_device_id=sub_device_id, created_time__range=(start_time, now_time)). \
+                        values('alarm', 'created_time').order_by('-created_time')
+                    if not sensor_record_qs.exists():
+                        return response.json(0)
+
+                    for sensor_record in sensor_record_qs:
+                        created_time = time.strftime('%m/%d %H:%M %w', time.localtime(sensor_record['created_time']))
+                        hour = int(created_time[-7:-5])
+                        minute = int(created_time[-4:-2])
+                        if hour != 23 and minute > 30:  # 不为23时且分钟大于30,hour+1
+                            hour += 1
+                        alarm = float(sensor_record['alarm'])
+                        # 组织数据,record_dict:{"0": [1.0, 2.0, 3.0], "1": [1.0, 2.0, 3.0]...}
+                        if str(hour) in record_dict:
+                            record_dict[str(hour)].append(alarm)
+                        else:
+                            record_dict[str(hour)] = [alarm]
+
+                elif cycle == 'Week':
+                    start_time = now_time - 24*60*60*7
+                    sensor_record_qs = SensorRecord.objects.filter(gateway_sub_device_id=sub_device_id, created_time__range=(start_time, now_time)). \
+                        values('alarm', 'created_time').order_by('-created_time')
+                    if not sensor_record_qs.exists():
+                        return response.json(0)
+
+                    for sensor_record in sensor_record_qs:
+                        created_time = time.strftime('%m/%d %H:%M %w', time.localtime(sensor_record['created_time']))
+                        week = int(created_time[-1:])
+                        alarm = float(sensor_record['alarm'])
+                        # 组织数据,record_dict:{"0": [1.0, 2.0, 3.0], "1": [1.0, 2.0, 3.0]...}
+                        if str(week) in record_dict:
+                            record_dict[str(week)].append(alarm)
+                        else:
+                            record_dict[str(week)] = [alarm]
+
+                elif cycle == 'Month':
+                    start_time = now_time - 24 * 60 * 60 * 30
+                    sensor_record_qs = SensorRecord.objects.filter(gateway_sub_device_id=sub_device_id,
+                                                                   created_time__range=(start_time, now_time)). \
+                        values('alarm', 'created_time').order_by('-created_time')
+                    if not sensor_record_qs.exists():
+                        return response.json(0)
+
+                    for sensor_record in sensor_record_qs:
+                        created_time = time.strftime('%m/%d %H:%M %w', time.localtime(sensor_record['created_time']))
+                        month = int(created_time[:2])
+                        day = int(created_time[3:5])
+                        date = str(month) + '/' + str(day)
+                        alarm = float(sensor_record['alarm'])
+                        # 组织数据,record_dict:{"0": [1.0, 2.0, 3.0], "1": [1.0, 2.0, 3.0]...}
+                        if date in record_dict:
+                            record_dict[date].append(alarm)
+                        else:
+                            record_dict[date] = [alarm]
+
+                # 组织响应数据列表,value为每 小时/天 的平均值
+                for k, v in record_dict.items():
+                    record_list.append({'key': k, 'value': round(sum(v)/len(v), 1)})
+                return response.json(0, record_list)
+        except Exception as e:
+            return response.json(500, repr(e))