浏览代码

新增电量统计存库接口

zhangdongming 2 年之前
父节点
当前提交
2c6bc3b516
共有 1 个文件被更改,包括 49 次插入1 次删除
  1. 49 1
      Controller/SensorGateway/SmartSocketController.py

+ 49 - 1
Controller/SensorGateway/SmartSocketController.py

@@ -9,12 +9,15 @@
 import datetime
 import logging
 import time
+from decimal import Decimal
 
 from django.db import transaction
 from django.http import QueryDict
 from django.views import View
 
 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
 
 LOGGER = logging.getLogger('info')
@@ -47,6 +50,9 @@ class SmartSocketView(View):
         return self.validation(put, 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 \
             .verify_token_get_user_id(request_dict, request)
         if token_code != 0:
@@ -69,6 +75,48 @@ class SmartSocketView(View):
             return self.editor_socket_device(request_dict, response, user_id)
         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
     def get_serial_number_by_device_id(deviceId):
         """
@@ -241,7 +289,7 @@ class SmartSocketView(View):
                 data['created_time'] = now_time
                 socket_schedule = SocketSchedule.objects.create(**data)
                 task_id = socket_schedule.id
-            # 排程任务下发给设备
+            # 排程任务下发给设备
             cls.send_socket_schedule(serial_number, task_id, int(task_type), int(start_time),
                                      int(end_time), int(repeat), device_switch,
                                      task_switch)