|
@@ -76,6 +76,8 @@ class SmartSocketView(View):
|
|
|
return self.get_log(request_dict, response)
|
|
|
elif operation == 'del-socket-schedule': # 批量刪除排程
|
|
|
return self.del_socket_schedule(request_dict, response, user_id)
|
|
|
+ elif operation == 'get-unit-scene': # 查詢設備每日/月用電量
|
|
|
+ return self.get_unit_scene(request_dict, response)
|
|
|
return response.json(404)
|
|
|
|
|
|
@classmethod
|
|
@@ -379,7 +381,7 @@ class SmartSocketView(View):
|
|
|
|
|
|
# 以下是查询智能插座接口
|
|
|
|
|
|
- @classmethod
|
|
|
+ @staticmethod
|
|
|
def get_all_scene(cls, request_dict, response):
|
|
|
"""
|
|
|
统计智能插座电量
|
|
@@ -390,12 +392,9 @@ class SmartSocketView(View):
|
|
|
@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, startTime, endTime]):
|
|
|
- return response.json(444, {'error param': 'unit or serial_number or startTime or endTime'})
|
|
|
+ if not all([serial_number]):
|
|
|
+ return response.json(444, {'error param': 'serialNumber'})
|
|
|
socket_power_qs = SocketPowerStatistics.objects.filter(serial_number=serial_number).values('electricity',
|
|
|
'accumulated_time',
|
|
|
'power',
|
|
@@ -406,15 +405,15 @@ class SmartSocketView(View):
|
|
|
data = {}
|
|
|
# 设备累计电量
|
|
|
all_electricity = socket_power_qs.aggregate(total=Sum('electricity'))
|
|
|
- data['electricityAll'] = all_electricity['total'] if all_electricity['total'] else 0.00
|
|
|
+ data['electricityAll'] = all_electricity['total'] if all_electricity['total'] else 0
|
|
|
# 当天使用电量
|
|
|
data['electricityToday'] = socket_power_qs[0]['electricity'] if socket_power_qs[0][
|
|
|
- 'electricity'] else 0.00
|
|
|
+ 'electricity'] else 0
|
|
|
# 当天累计时长
|
|
|
data['accumulated_time'] = socket_power_qs[0]['accumulated_time'] if socket_power_qs[0][
|
|
|
- 'accumulated_time'] else '00:00:00'
|
|
|
+ 'accumulated_time'] else 0
|
|
|
# 功率
|
|
|
- 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
|
|
|
|
|
|
# 本月电费
|
|
|
nowTime = int(time.time())
|
|
@@ -428,7 +427,7 @@ class SmartSocketView(View):
|
|
|
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
|
|
|
+ data['electricityMonth'] = electricity['total'] if electricity['total'] else 0
|
|
|
|
|
|
# 昨天使用电量
|
|
|
today = datetime.date.today() # 获取今日日期
|
|
@@ -441,47 +440,6 @@ class SmartSocketView(View):
|
|
|
created_time__lt=yesterday_end_time).values('electricity')
|
|
|
data['electricityYesterday'] = socket_qs[0]['electricity'] if socket_qs.exists() else 0
|
|
|
|
|
|
- # 时间和功耗
|
|
|
- new_list = []
|
|
|
- socket_qs = socket_power_qs.filter(created_time__gte=startTime, created_time__lt=endTime).aggregate(
|
|
|
- electricity=Sum('electricity'), accumulatedTime=Sum('accumulated_time'))
|
|
|
- data['electricityTimeAll'] = socket_qs['electricity'] if socket_qs['electricity'] else 0.0
|
|
|
- data['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'))
|
|
|
- electricity = socket_qs['electricity'] if socket_qs['electricity'] else 0.0
|
|
|
- new_list.append({
|
|
|
- 'startTime': int(startTime),
|
|
|
- 'electricity': round(electricity, 1)
|
|
|
- })
|
|
|
- # 查询天月
|
|
|
- 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'))
|
|
|
- electricity = socket_qs['electricity'] if socket_qs['electricity'] else 0.0
|
|
|
- new_list.append({
|
|
|
- 'startTime': item[0],
|
|
|
- 'electricity': round(electricity, 1)
|
|
|
- })
|
|
|
-
|
|
|
- if unit == 'year':
|
|
|
- # 结束月
|
|
|
- socket_qs = socket_power_qs.filter(created_time__gte=diction['endMonth_time'],
|
|
|
- created_time__lt=endTime).aggregate(
|
|
|
- electricity=Sum('electricity'))
|
|
|
- electricity = socket_qs['electricity'] if socket_qs['electricity'] else 0.0
|
|
|
- new_list.append({
|
|
|
- 'startTime': int(endTime),
|
|
|
- 'electricity': round(electricity, 1)
|
|
|
- })
|
|
|
-
|
|
|
- data['week_or_month_or_year'] = new_list
|
|
|
return response.json(0, data)
|
|
|
except Exception as e:
|
|
|
return response.json(500, repr(e))
|
|
@@ -658,3 +616,104 @@ class SmartSocketView(View):
|
|
|
except Exception as e:
|
|
|
LOGGER.info('插座排程删除数据异常,errLine:{}, errMsg:{}'.format(e.__traceback__.tb_lineno, repr(e)))
|
|
|
return response.json(177)
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_unit_scene(cls, request_dict, response):
|
|
|
+ """
|
|
|
+ 查詢設備每日/月用電量
|
|
|
+ @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, startTime, endTime]):
|
|
|
+ return response.json(500, {'errno': 'unit or startTime or endTime or serialNumber'})
|
|
|
+
|
|
|
+ try:
|
|
|
+ socket_power_qs = SocketPowerStatistics.objects.filter(serial_number=serial_number).values('electricity',
|
|
|
+ 'accumulated_time',
|
|
|
+ 'power',
|
|
|
+ 'created_time')
|
|
|
+ # 时间和功耗
|
|
|
+ data = {}
|
|
|
+ new_list = []
|
|
|
+ socket_qs = socket_power_qs.filter(created_time__gte=startTime, created_time__lt=endTime).aggregate(
|
|
|
+ electricity=Sum('electricity'), accumulatedTime=Sum('accumulated_time'))
|
|
|
+
|
|
|
+ data['electricityTimeAll'] = socket_qs['electricity'] if socket_qs['electricity'] else 0
|
|
|
+ data['accumulatedTimeAll'] = socket_qs['accumulatedTime'] if socket_qs['accumulatedTime'] else 0
|
|
|
+
|
|
|
+ # 分割时间
|
|
|
+ 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'))
|
|
|
+ electricity = socket_qs['electricity'] if socket_qs['electricity'] else 0
|
|
|
+ # 標記月日
|
|
|
+ subscript = cls.get_subscript(unit, startTime)
|
|
|
+ new_list.append({
|
|
|
+ 'subscript': subscript,
|
|
|
+ 'startTime': int(startTime),
|
|
|
+ 'electricity': round(electricity, 1)
|
|
|
+ })
|
|
|
+ # 查询天月
|
|
|
+ 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'))
|
|
|
+ electricity = socket_qs['electricity'] if socket_qs['electricity'] else 0
|
|
|
+ # 標記月日
|
|
|
+ subscript = cls.get_subscript(unit, item[0])
|
|
|
+ new_list.append({
|
|
|
+ 'subscript': subscript,
|
|
|
+ 'startTime': item[0],
|
|
|
+ 'electricity': round(electricity, 1)
|
|
|
+ })
|
|
|
+
|
|
|
+ if unit == 'year':
|
|
|
+ # 结束月
|
|
|
+ socket_qs = socket_power_qs.filter(created_time__gte=diction['endMonth_time'],
|
|
|
+ created_time__lt=endTime).aggregate(
|
|
|
+ electricity=Sum('electricity'))
|
|
|
+ electricity = socket_qs['electricity'] if socket_qs['electricity'] else 0
|
|
|
+ # 標記月日
|
|
|
+ subscript = cls.get_subscript(unit, startTime)
|
|
|
+ new_list.append({
|
|
|
+ 'subscript': subscript,
|
|
|
+ 'startTime': int(endTime),
|
|
|
+ 'electricity': round(electricity, 1)
|
|
|
+ })
|
|
|
+
|
|
|
+ data['week_or_month_or_year'] = new_list
|
|
|
+ return response.json(0, data)
|
|
|
+ except Exception as e:
|
|
|
+ return response.json(500, repr(e))
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def get_subscript(cls, unit, startTime):
|
|
|
+ """標記月日"""
|
|
|
+ startTime = int(startTime)
|
|
|
+ # endTime = int(endTime)
|
|
|
+ time_tuple = time.localtime(startTime) # 把时间戳转换成时间元祖
|
|
|
+ startTime = time.strftime('%Y-%m-%d-%w', time_tuple) # 把时间元祖转换成格式化好的时间
|
|
|
+ if unit == 'week' or unit == 'year':
|
|
|
+ if unit == 'week':
|
|
|
+ subscript = int(str(startTime).split('-')[3])
|
|
|
+ return subscript
|
|
|
+ else:
|
|
|
+ startYear, startMonth, startDay = int(startTime.split('-')[0]), int(startTime.split('-')[1]), int(
|
|
|
+ startTime.split('-')[2])
|
|
|
+ subscript = datetime.date(startYear, startMonth, startDay).month
|
|
|
+ subscript -= 1
|
|
|
+ return subscript
|
|
|
+ else:
|
|
|
+ startYear, startMonth, startDay = int(startTime.split('-')[0]), int(startTime.split('-')[1]), int(
|
|
|
+ startTime.split('-')[2])
|
|
|
+ subscript = datetime.date(startYear, startMonth, startDay).day
|
|
|
+ subscript -= 1
|
|
|
+ return subscript
|