|
@@ -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)
|