@@ -5,7 +5,7 @@ from __future__ import division |
||
| 5 | 5 |
import json |
| 6 | 6 |
|
| 7 | 7 |
from django.conf import settings |
| 8 |
-from django.db.models import Q |
|
| 8 |
+from django.db.models import Max, Q |
|
| 9 | 9 |
from django_logit import logit |
| 10 | 10 |
from django_query import get_query_value |
| 11 | 11 |
from django_response import response |
@@ -16,7 +16,6 @@ from equipment.models import (IsolationPointInfo, IsolationPointUserInfo, Thermo |
||
| 16 | 16 |
ThermometerMeasureInfo, ThermometerMeasureLogInfo) |
| 17 | 17 |
from utils.error.errno_utils import IsolationPointStatusCode, ThermometerEquipmentStatusCode |
| 18 | 18 |
from utils.redis.rscreen import get_screen_info, set_screen_info |
| 19 |
-from utils.redis.rtemperature import get_old_temperature, set_old_temperature |
|
| 20 | 19 |
|
| 21 | 20 |
|
| 22 | 21 |
@logit |
@@ -209,36 +208,43 @@ def get_screen_data(point=None, point_id=None): |
||
| 209 | 208 |
return {}
|
| 210 | 209 |
|
| 211 | 210 |
eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point.point_id, active_status=ThermometerEquipmentInfo.ONLINE, status=True) |
| 212 |
- macids = eqpts.values_list('macid', flat=True)
|
|
| 213 |
- |
|
| 214 |
- logs = ThermometerMeasureInfo.objects.filter( |
|
| 215 |
- point_id=point.point_id, |
|
| 216 |
- point_measure_ymd=tc.local_string(format='%Y-%m-%d'), |
|
| 217 |
- point_measure_window=point.previous_measure_window, |
|
| 218 |
- macid__in=macids, |
|
| 219 |
- status=True, |
|
| 220 |
- ).values('macid', 'temperature', 'updated_at')
|
|
| 221 |
- temperature_logs = {log.get('macid'): log.get('temperature') for log in logs}
|
|
| 222 |
- time_logs = {log.get('macid'): tc.local_string(utc_dt=log.get('updated_at'), format='%m-%d %H:%M') for log in logs}
|
|
| 211 |
+ # macids = eqpts.values_list('macid', flat=True)
|
|
| 212 |
+ # |
|
| 213 |
+ # logs = ThermometerMeasureInfo.objects.filter( |
|
| 214 |
+ # point_id=point.point_id, |
|
| 215 |
+ # point_measure_ymd=tc.local_string(format='%Y-%m-%d'), |
|
| 216 |
+ # point_measure_window=point.previous_measure_window, |
|
| 217 |
+ # macid__in=macids, |
|
| 218 |
+ # status=True, |
|
| 219 |
+ # ).values('macid', 'temperature', 'updated_at')
|
|
| 220 |
+ # temperature_logs = {log.get('macid'): log.get('temperature') for log in logs}
|
|
| 221 |
+ # time_logs = {log.get('macid'): tc.local_string(utc_dt=log.get('updated_at'), format='%m-%d %H:%M') for log in logs}
|
|
| 223 | 222 |
|
| 224 | 223 |
ipuis = IsolationPointUserInfo.objects.filter(point_id=point.point_id, status=True) |
| 225 | 224 |
ipuis = [ipui.data for ipui in ipuis] |
| 225 |
+ |
|
| 226 |
+ total_active_eqpt_num = eqpts.count() |
|
| 227 |
+ # has_upload_temperature_num = len(temperature_logs) |
|
| 228 |
+ # fever_num = len([1 for temperature in temperature_logs.values() if temperature > settings.FEVER_TEMPERATURE]) |
|
| 229 |
+ has_upload_temperature_num = len([1 for ipui in ipuis if ipui.get('temperature_has_upload', '') == '已上报'])
|
|
| 230 |
+ fever_num = len([1 for ipui in ipuis if ipui.get('temperature', 0) > settings.FEVER_TEMPERATURE])
|
|
| 231 |
+ |
|
| 226 | 232 |
# ipuis_fields = {info.get('pk'): info.get('fields') for info in ipuis}
|
| 227 | 233 |
# ipuis_observed_days = {info.get('pk'): info.get('observed_days') for info in ipuis}
|
| 228 | 234 |
ipuis = {ipui.get('pk'): {
|
| 229 | 235 |
'fields': ipui.get('fields'),
|
| 230 | 236 |
'observed_days': ipui.get('observed_days'),
|
| 237 |
+ 'temperature_has_upload': ipui.get('temperature_has_upload'),
|
|
| 238 |
+ 'temperature': ipui.get('temperature'),
|
|
| 231 | 239 |
'last_submit_at': ipui.get('last_submit_at'),
|
| 232 | 240 |
'remark': ipui.get('remark'),
|
| 233 | 241 |
} for ipui in ipuis} |
| 234 | 242 |
|
| 235 |
- total_active_eqpt_num = eqpts.count() |
|
| 236 |
- has_upload_temperature_num = len(temperature_logs) |
|
| 237 |
- fever_num = len([1 for temperature in temperature_logs.values() if temperature > settings.FEVER_TEMPERATURE]) |
|
| 238 |
- |
|
| 239 | 243 |
eqpts = [{**eqpt.screen_data, **{
|
| 240 |
- 'has_upload': eqpt.macid in temperature_logs, |
|
| 241 |
- 'temperature': temperature_logs.get(eqpt.macid, 0), |
|
| 244 |
+ # 'has_upload': eqpt.macid in temperature_logs, |
|
| 245 |
+ # 'temperature': temperature_logs.get(eqpt.macid, 0), |
|
| 246 |
+ 'has_upload': ipuis.get(eqpt.ipui_pk, {}).get('temperature_has_upload', 0),
|
|
| 247 |
+ 'temperature': ipuis.get(eqpt.ipui_pk, {}).get('temperature', 0),
|
|
| 242 | 248 |
'observed_days': ipuis.get(eqpt.ipui_pk, {}).get('observed_days', 0),
|
| 243 | 249 |
'last_submit_at': ipuis.get(eqpt.ipui_pk, {}).get('last_submit_at', ''),
|
| 244 | 250 |
'remark': ipuis.get(eqpt.ipui_pk, {}).get('remark', ''),
|
@@ -251,25 +257,18 @@ def get_screen_data(point=None, point_id=None): |
||
| 251 | 257 |
'content': eqpt.get('remark'),
|
| 252 | 258 |
} for eqpt in eqpts if eqpt.get('remark')]
|
| 253 | 259 |
|
| 254 |
- # var name: String = "" |
|
| 255 |
- # var room: String = "" |
|
| 256 |
- # var phone: String = "" |
|
| 257 |
- # var sex: String = "" |
|
| 258 |
- # var age: String = "" |
|
| 259 |
- # var temperature: String = "" |
|
| 260 |
- # var status: String = "" |
|
| 261 |
- # var remind: String = "" |
|
| 262 |
- # var last_report_time: String = "" |
|
| 263 |
- # var observed_days: String = "" |
|
| 264 | 260 |
eqpts = [{
|
| 265 | 261 |
'name': eqpt.get('name', ''),
|
| 266 | 262 |
'room': eqpt.get('room', ''),
|
| 267 | 263 |
'phone': eqpt.get('phone', ''),
|
| 268 | 264 |
'sex': eqpt.get('sex', ''),
|
| 269 | 265 |
'age': eqpt.get('age', ''),
|
| 270 |
- 'status': '已上报' if eqpt.get('temperature') else '未上报',
|
|
| 271 |
- 'last_report_time': time_logs.get(eqpt.get('macid', ''), '') if eqpt.get('temperature') else eqpt.get('last_submit_at', ''),
|
|
| 272 |
- 'temperature': eqpt.get('temperature', '') or get_old_temperature(eqpt.get('point_id', ''), eqpt.get('macid', '')),
|
|
| 266 |
+ 'status': eqpt.get('has_upload'),
|
|
| 267 |
+ # 'status': '已上报' if eqpt.get('temperature') else '未上报',
|
|
| 268 |
+ 'last_report_time': eqpt.get('last_submit_at', ''),
|
|
| 269 |
+ # 'last_report_time': time_logs.get(eqpt.get('macid', ''), '') if eqpt.get('temperature') else eqpt.get('last_submit_at', ''),
|
|
| 270 |
+ 'temperature': eqpt.get('temperature', 0),
|
|
| 271 |
+ # 'temperature': eqpt.get('temperature', '') or get_old_temperature(eqpt.get('point_id', ''), eqpt.get('macid', '')),
|
|
| 273 | 272 |
'observed_days': eqpt.get('observed_days', 0),
|
| 274 | 273 |
} for eqpt in eqpts] |
| 275 | 274 |
|
@@ -400,32 +399,44 @@ def mqtt_upload_temperature(payload): |
||
| 400 | 399 |
except IsolationPointInfo.DoesNotExist: |
| 401 | 400 |
return |
| 402 | 401 |
|
| 403 |
- point_measure_ymd = tc.local_string(format='%Y-%m-%d') |
|
| 402 |
+ # point_measure_ymd = tc.local_string(format='%Y-%m-%d') |
|
| 404 | 403 |
|
| 405 |
- point_measure_window = point.current_measure_window |
|
| 406 |
- eqpt.last_submit_at = tc.utc_datetime() |
|
| 407 |
- eqpt.save() |
|
| 404 |
+ # point_measure_window = point.current_measure_window |
|
| 405 |
+ # eqpt.last_submit_at = tc.utc_datetime() |
|
| 406 |
+ # eqpt.save() |
|
| 408 | 407 |
|
| 409 | 408 |
ThermometerMeasureLogInfo.objects.create(point_id=eqpt.point_id, macid=macid, start_stamp=start_stamp, end_stamp=end_stamp, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MQTT, upload_temperature_info=payload) |
| 410 | 409 |
|
| 411 |
- if point_measure_window: |
|
| 412 |
- measure_info, _ = ThermometerMeasureInfo.objects.get_or_create(point_id=eqpt.point_id, point_measure_ymd=point_measure_ymd, point_measure_window=point_measure_window, macid=macid, defaults={
|
|
| 413 |
- 'temperature': temperature, |
|
| 414 |
- }) |
|
| 415 |
- if temperature > measure_info.temperature: |
|
| 416 |
- measure_info.temperature = temperature |
|
| 417 |
- measure_info.save() |
|
| 418 |
- |
|
| 419 |
- set_old_temperature(eqpt.point_id, macid, temperature) |
|
| 410 |
+ # if point_measure_window: |
|
| 411 |
+ # measure_info, _ = ThermometerMeasureInfo.objects.get_or_create(point_id=eqpt.point_id, point_measure_ymd=point_measure_ymd, point_measure_window=point_measure_window, macid=macid, defaults={
|
|
| 412 |
+ # 'temperature': temperature, |
|
| 413 |
+ # }) |
|
| 414 |
+ # if temperature > measure_info.temperature: |
|
| 415 |
+ # measure_info.temperature = temperature |
|
| 416 |
+ # measure_info.save() |
|
| 417 |
+ # |
|
| 418 |
+ # set_old_temperature(eqpt.point_id, macid, temperature) |
|
| 419 |
+ # |
|
| 420 |
+ # try: |
|
| 421 |
+ # ipui = IsolationPointUserInfo.objects.get(pk=eqpt.ipui_pk) |
|
| 422 |
+ # except IsolationPointUserInfo.DoesNotExist: |
|
| 423 |
+ # ipui = None |
|
| 424 |
+ # if ipui: |
|
| 425 |
+ # ipui.observed_ymds = list(set(ipui.observed_ymds + [point_measure_ymd])) |
|
| 426 |
+ # ipui.observed_days = len(ipui.observed_ymds) |
|
| 427 |
+ # ipui.last_submit_at = tc.utc_datetime() |
|
| 428 |
+ # ipui.save() |
|
| 420 | 429 |
|
| 421 |
- try: |
|
| 422 |
- ipui = IsolationPointUserInfo.objects.get(pk=eqpt.ipui_pk) |
|
| 423 |
- except IsolationPointUserInfo.DoesNotExist: |
|
| 424 |
- ipui = None |
|
| 425 |
- if ipui: |
|
| 426 |
- ipui.observed_ymds = list(set(ipui.observed_ymds + [point_measure_ymd])) |
|
| 427 |
- ipui.observed_days = len(ipui.observed_ymds) |
|
| 428 |
- ipui.last_submit_at = tc.utc_datetime() |
|
| 429 |
- ipui.save() |
|
| 430 |
+ try: |
|
| 431 |
+ ipui = IsolationPointUserInfo.objects.get(pk=eqpt.ipui_pk) |
|
| 432 |
+ except IsolationPointUserInfo.DoesNotExist: |
|
| 433 |
+ ipui = None |
|
| 434 |
+ if ipui: |
|
| 435 |
+ temperature__max = ThermometerMeasureLogInfo.objects.filter(point_id=eqpt.point_id, macid=macid).aggregate(Max('temperature')).get('temperature__max') or 0
|
|
| 436 |
+ ipui.observed_ymds = list(set(ipui.observed_ymds + [tc.local_string(format='%Y-%m-%d')])) |
|
| 437 |
+ ipui.observed_days = len(ipui.observed_ymds) |
|
| 438 |
+ ipui.temperature = temperature__max |
|
| 439 |
+ ipui.last_submit_at = tc.utc_datetime() |
|
| 440 |
+ ipui.save() |
|
| 430 | 441 |
|
| 431 | 442 |
set_screen_info(point.point_id, get_screen_data(point)) |
@@ -16,7 +16,7 @@ class IsolationPointInfoAdmin(admin.ModelAdmin): |
||
| 16 | 16 |
|
| 17 | 17 |
|
| 18 | 18 |
class IsolationPointUserInfoAdmin(admin.ModelAdmin): |
| 19 |
- list_display = ('point_id', 'user_id', 'fields', 'observed_days', 'last_submit_at', 'leave_at', 'status', 'updated_at', 'created_at')
|
|
| 19 |
+ list_display = ('point_id', 'user_id', 'fields', 'observed_days', 'temperature', 'last_submit_at', 'leave_at', 'status', 'updated_at', 'created_at')
|
|
| 20 | 20 |
|
| 21 | 21 |
|
| 22 | 22 |
class ThermometerEquipmentInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin): |
@@ -0,0 +1,18 @@ |
||
| 1 |
+# Generated by Django 3.2.6 on 2021-08-17 09:56 |
|
| 2 |
+ |
|
| 3 |
+from django.db import migrations, models |
|
| 4 |
+ |
|
| 5 |
+ |
|
| 6 |
+class Migration(migrations.Migration): |
|
| 7 |
+ |
|
| 8 |
+ dependencies = [ |
|
| 9 |
+ ('equipment', '0012_auto_20210817_1727'),
|
|
| 10 |
+ ] |
|
| 11 |
+ |
|
| 12 |
+ operations = [ |
|
| 13 |
+ migrations.AddField( |
|
| 14 |
+ model_name='isolationpointuserinfo', |
|
| 15 |
+ name='temperature', |
|
| 16 |
+ field=models.FloatField(default=0, help_text='用户体温', verbose_name='temperature'), |
|
| 17 |
+ ), |
|
| 18 |
+ ] |
@@ -145,6 +145,7 @@ class IsolationPointUserInfo(BaseModelMixin): |
||
| 145 | 145 |
observed_ymds = JSONField(_('observed_ymds'), default=[], blank=True, null=True, help_text='已测温日期')
|
| 146 | 146 |
observed_days = models.IntegerField(_('observed_days'), default=0, help_text='已测温天数')
|
| 147 | 147 |
|
| 148 |
+ temperature = models.FloatField(_('temperature'), default=0, help_text='用户体温')
|
|
| 148 | 149 |
last_submit_at = models.DateTimeField(_('last_submit_at'), blank=True, null=True, help_text='上一次上报时间')
|
| 149 | 150 |
leave_at = models.DateTimeField(_('leave_at'), blank=True, null=True, help_text='离开时间')
|
| 150 | 151 |
|
@@ -163,6 +164,14 @@ class IsolationPointUserInfo(BaseModelMixin): |
||
| 163 | 164 |
return self.pk |
| 164 | 165 |
|
| 165 | 166 |
@property |
| 167 |
+ def temperature_has_upload(self): |
|
| 168 |
+ if not self.last_submit_at: |
|
| 169 |
+ return '未上报' |
|
| 170 |
+ if self.last_submit_at > tc.utc_datetime(hours=-1): |
|
| 171 |
+ return '已上报' |
|
| 172 |
+ return '未上报' |
|
| 173 |
+ |
|
| 174 |
+ @property |
|
| 166 | 175 |
def data(self): |
| 167 | 176 |
return {
|
| 168 | 177 |
'pk': self.pk, |
@@ -170,6 +179,8 @@ class IsolationPointUserInfo(BaseModelMixin): |
||
| 170 | 179 |
'user_id': self.user_id, |
| 171 | 180 |
'fields': self.fields, |
| 172 | 181 |
'observed_days': self.observed_days, |
| 182 |
+ 'temperature_has_upload': self.temperature_has_upload, |
|
| 183 |
+ 'temperature': self.temperature, |
|
| 173 | 184 |
'last_submit_at': tc.local_string(utc_dt=self.last_submit_at, format='%m-%d %H:%M') if self.last_submit_at else '', |
| 174 | 185 |
'remark': self.remark, |
| 175 | 186 |
} |