diff --git a/apps/mosquito/mqtt_task.py b/apps/mosquito/mqtt_task.py index 3bef639..ae7fefb 100644 --- a/apps/mosquito/mqtt_task.py +++ b/apps/mosquito/mqtt_task.py @@ -5,7 +5,7 @@ import django from typing import Dict from pathlib import Path from enum import Enum -from datetime import datetime +from datetime import datetime, timedelta import paho.mqtt.client as mqtt @@ -123,22 +123,27 @@ def create_mosq_post(device_id: str, post_data: Dict): def update_mosq_device_statistic(device_id: str, post_data: Dict): + device = DeviceInfo.objects.filter(device_id=device_id).first() datetime_format = "%Y-%m-%d %H:%M:%S" cur_date = datetime.strptime(post_data['time'], datetime_format).date() - old_record = DevicePostStatistic.objects.filter(device_id=device_id, date=cur_date).first() - org = Org.objects.get(id=1) - incr = 0 - cur_total = post_data['count'] - if old_record: - device = DeviceInfo.objects.filter(device_id=device_id).first() - if device: - org = device.org - incr = cur_total - old_record.total - DevicePostStatistic.objects.create(device_id=device_id, - date=cur_date, - total=cur_total, - increment=incr, - org=org) + cur_record = DevicePostStatistic.objects.filter(device_id=device_id, date=cur_date).first() + last_record = DevicePostStatistic.objects.filter(device_id=device_id, date=cur_date - timedelta(days=1)).first() + if last_record and cur_record: + incr = cur_record.total - last_record.total + else: + incr = 0 + + mqtt_total = post_data['count'] + if cur_record: + cur_record.total = mqtt_total + cur_record.increment = incr + cur_record.save() + else: + DevicePostStatistic.objects.create(device_id=device_id, + date=cur_date, + total=mqtt_total, + increment=incr, + org=device.org) def to_string(post_data: Dict, power_type: PowerType) -> str: