Browse Source

新增电量统计存库接口

zhangdongming 2 years ago
parent
commit
2c6bc3b516
1 changed files with 49 additions and 1 deletions
  1. 49 1
      Controller/SensorGateway/SmartSocketController.py

+ 49 - 1
Controller/SensorGateway/SmartSocketController.py

@@ -9,12 +9,15 @@
 import datetime
 import datetime
 import logging
 import logging
 import time
 import time
+from decimal import Decimal
 
 
 from django.db import transaction
 from django.db import transaction
 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, UidSetModel, SocketPowerStatistics
+from Object.ResponseObject import ResponseObject
+from Object.utils import LocalDateTimeUtil
 from Service.CommonService import CommonService
 from Service.CommonService import CommonService
 
 
 LOGGER = logging.getLogger('info')
 LOGGER = logging.getLogger('info')
@@ -47,6 +50,9 @@ class SmartSocketView(View):
         return self.validation(put, request, operation)
         return self.validation(put, request, operation)
 
 
     def validation(self, request_dict, request, operation):
     def validation(self, request_dict, request, operation):
+        ResponseObject('cn')
+        if operation == 'savePowerStatistics':  # 保存电量上报统计
+            return self.save_power_statistics(request_dict, ResponseObject('cn'))
         token_code, user_id, response = CommonService \
         token_code, user_id, response = CommonService \
             .verify_token_get_user_id(request_dict, request)
             .verify_token_get_user_id(request_dict, request)
         if token_code != 0:
         if token_code != 0:
@@ -69,6 +75,48 @@ class SmartSocketView(View):
             return self.editor_socket_device(request_dict, response, user_id)
             return self.editor_socket_device(request_dict, response, user_id)
         return response.json(404)
         return response.json(404)
 
 
+    @classmethod
+    def save_power_statistics(cls, request_dict, response):
+        try:
+            serial_number = request_dict.get('serialNumber', None)
+            electricity = request_dict.get('electricity', 0.00)
+            power = request_dict.get('power', None)
+            accumulated_time = request_dict.get('accumulatedTime', None)
+            device_time = request_dict.get('deviceTime', None)
+            LOGGER.info('{}上报电量统计data:{}'.format(serial_number, request_dict))
+            if not all([serial_number, electricity, power, accumulated_time, device_time]):
+                return response.json(444)
+            device_time = int(device_time)
+            electricity = Decimal(electricity).quantize(Decimal("0.00"))
+            power = int(power)
+            accumulated_time = int(accumulated_time)
+            now_time = int(time.time())
+            start_time, end_time = LocalDateTimeUtil.get_today_date(True)
+            # 设备当前统计时间,查询电量统计记录 设备时间大于创建记录时间、并且创建记录时间小于当天结束时间
+            power_qs = SocketPowerStatistics.objects.filter(serial_number=serial_number,
+                                                            created_time__gt=device_time,
+                                                            created_time__lte=end_time)
+            data = {
+                'electricity': electricity,
+                'power': power,
+                'accumulated_time': accumulated_time,
+                'updated_time': now_time
+            }
+            if not power_qs.exists():
+                socket_info_qs = SocketInfo.objects.filter(serial_number=serial_number).values('device_id')
+                if not socket_info_qs.exists():
+                    return response.json(173)
+                data['device_id'] = socket_info_qs[0]['device_id']
+                data['created_time'] = now_time
+                data['serial_number'] = serial_number
+                SocketPowerStatistics.objects.create(**data)
+                return response.json(0)
+            power_qs.update(**data)
+            return response.json(0)
+        except Exception as e:
+            LOGGER.info('智能插座电量存库异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
+            return response.json(177)
+
     @staticmethod
     @staticmethod
     def get_serial_number_by_device_id(deviceId):
     def get_serial_number_by_device_id(deviceId):
         """
         """
@@ -241,7 +289,7 @@ class SmartSocketView(View):
                 data['created_time'] = now_time
                 data['created_time'] = now_time
                 socket_schedule = SocketSchedule.objects.create(**data)
                 socket_schedule = SocketSchedule.objects.create(**data)
                 task_id = socket_schedule.id
                 task_id = socket_schedule.id
-            # 排程任务下发给设备
+            # 排程任务下发给设备
             cls.send_socket_schedule(serial_number, task_id, int(task_type), int(start_time),
             cls.send_socket_schedule(serial_number, task_id, int(task_type), int(start_time),
                                      int(end_time), int(repeat), device_switch,
                                      int(end_time), int(repeat), device_switch,
                                      task_switch)
                                      task_switch)