@@ -4,7 +4,9 @@ from __future__ import division |
||
| 4 | 4 |
|
| 5 | 5 |
from django.db.models import Q |
| 6 | 6 |
from django_logit import logit |
| 7 |
+from django_query import get_query_value |
|
| 7 | 8 |
from django_response import response |
| 9 |
+from paginator import pagination |
|
| 8 | 10 |
from TimeConvert import TimeConvert as tc |
| 9 | 11 |
|
| 10 | 12 |
from equipment.models import (IsolationPointInfo, ThermometerEquipmentInfo, ThermometerMeasureInfo, |
@@ -17,11 +19,16 @@ def eqpt_bind(request): |
||
| 17 | 19 |
point_id = request.POST.get('point_id', '')
|
| 18 | 20 |
macid = request.POST.get('macid', '')
|
| 19 | 21 |
sn = request.POST.get('sn', '')
|
| 22 |
+ macidsns = get_query_value(request, 'macidsns', val_cast_type='listjson') |
|
| 20 | 23 |
|
| 21 |
- ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={
|
|
| 22 |
- 'point_id': point_id, |
|
| 23 |
- 'sn': sn, |
|
| 24 |
- }) |
|
| 24 |
+ macidsns = macidsns or [{'macid': macid, 'sn': sn}]
|
|
| 25 |
+ |
|
| 26 |
+ for macidsn in macidsns: |
|
| 27 |
+ macid, sn = macidsn.get('macid'), macidsn.get('sn')
|
|
| 28 |
+ ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={
|
|
| 29 |
+ 'point_id': point_id, |
|
| 30 |
+ 'sn': sn, |
|
| 31 |
+ }) |
|
| 25 | 32 |
|
| 26 | 33 |
return response() |
| 27 | 34 |
|
@@ -43,17 +50,22 @@ def eqpt_onoff(request): |
||
| 43 | 50 |
def eqpt_list(request): |
| 44 | 51 |
point_id = request.POST.get('point_id', '')
|
| 45 | 52 |
macid = request.POST.get('macid', '')
|
| 53 |
+ page = request.POST.get('page', 1)
|
|
| 54 |
+ num = request.POST.get('num', 20)
|
|
| 46 | 55 |
|
| 47 | 56 |
eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point_id, status=True) |
| 48 | 57 |
if macid: |
| 49 | 58 |
eqpts = eqpts.filter(macid=macid) |
| 50 |
- eqpts = [eqpt.data for eqpt in eqpts] |
|
| 51 | 59 |
|
| 52 |
- total_num = len(eqpts) |
|
| 53 |
- active_num = len([1 for eqpt in eqpts if eqpt.get('active_status') == ThermometerEquipmentInfo.ONLINE])
|
|
| 60 |
+ total_num = eqpts.count() |
|
| 61 |
+ active_num = eqpts.filter(active_status=ThermometerEquipmentInfo.ONLINE).count() |
|
| 62 |
+ |
|
| 63 |
+ eqpts, left = pagination(eqpts, page, num) |
|
| 64 |
+ eqpts = [eqpt.data for eqpt in eqpts] |
|
| 54 | 65 |
|
| 55 | 66 |
return response(data={
|
| 56 | 67 |
'eqpts': eqpts, |
| 68 |
+ 'left': left, |
|
| 57 | 69 |
'total_num': total_num, |
| 58 | 70 |
'active_num': active_num, |
| 59 | 71 |
'unactive_num': total_num - active_num, |
@@ -64,21 +76,42 @@ def eqpt_list(request): |
||
| 64 | 76 |
def eqpt_result(request): |
| 65 | 77 |
point_id = request.POST.get('point_id', '')
|
| 66 | 78 |
kw = request.POST.get('kw', '')
|
| 79 |
+ page = request.POST.get('page', 1)
|
|
| 80 |
+ num = request.POST.get('num', 20)
|
|
| 67 | 81 |
|
| 68 | 82 |
try: |
| 69 | 83 |
point = IsolationPointInfo.objects.get(point_id=point_id, status=True) |
| 70 | 84 |
except IsolationPointInfo.DoesNotExist: |
| 71 | 85 |
return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND) |
| 72 | 86 |
|
| 73 |
- logs = ThermometerMeasureInfo.objects.filter(point_id=point_id, point_measure_ymd=tc.local_string(format='%Y-%m-%d'), point_measure_window=point.point_measure_window, status=True).order_by('-pk')
|
|
| 74 |
- |
|
| 75 | 87 |
eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point_id, active_status=ThermometerEquipmentInfo.ONLINE, status=True) |
| 88 |
+ macids = eqpts.values_list('macid', flat=True)
|
|
| 89 |
+ |
|
| 90 |
+ logs = ThermometerMeasureInfo.objects.filter( |
|
| 91 |
+ point_id=point_id, |
|
| 92 |
+ point_measure_ymd=tc.local_string(format='%Y-%m-%d'), |
|
| 93 |
+ point_measure_window=point.point_measure_window, |
|
| 94 |
+ macid__in=macids, |
|
| 95 |
+ status=True, |
|
| 96 |
+ ).values('macid', 'temperature')
|
|
| 97 |
+ logs = {log.get('macid'): log.get('temperature') for log in logs}
|
|
| 98 |
+ |
|
| 99 |
+ total_active_eqpt_num = eqpts.count() |
|
| 100 |
+ has_upload_temperature_num = len(logs) |
|
| 101 |
+ temperature_over_375 = len([1 for temperature in logs.values() if temperature > 37.5]) |
|
| 102 |
+ |
|
| 76 | 103 |
if kw: |
| 77 | 104 |
eqpts = eqpts.filter(Q(name__icontains=kw) | Q(phone__icontains=kw)) |
| 78 |
- eqpts = [eqpt.data for eqpt in eqpts] |
|
| 105 |
+ eqpts, left = pagination(eqpts, page, num) |
|
| 106 |
+ eqpts = [{**eqpt.data, **{'has_upload': eqpt.macid in logs, 'temperature': logs.get(eqpt.macid, 0)}} for eqpt in eqpts]
|
|
| 79 | 107 |
|
| 80 | 108 |
return response(data={
|
| 81 | 109 |
'eqpts': eqpts, |
| 110 |
+ 'left': left, |
|
| 111 |
+ 'total_active_eqpt_num': total_active_eqpt_num, |
|
| 112 |
+ 'has_upload_temperature_num': has_upload_temperature_num, |
|
| 113 |
+ 'not_upload_temperature_num': total_active_eqpt_num - has_upload_temperature_num, |
|
| 114 |
+ 'temperature_over_375': temperature_over_375, |
|
| 82 | 115 |
}) |
| 83 | 116 |
|
| 84 | 117 |
|
@@ -37,7 +37,7 @@ class IsolationPointInfo(BaseModelMixin): |
||
| 37 | 37 |
start_t, end_t = window.get('start'), window.get('end')
|
| 38 | 38 |
start_dt = tc.string_to_utc_datetime(f'{current_ymd} {start_t}:00')
|
| 39 | 39 |
end_dt = tc.string_to_utc_datetime(f'{current_ymd} {end_t}:00')
|
| 40 |
- if start_dt < current_dt < end_dt: |
|
| 40 |
+ if tc.utc_datetime(start_dt, minutes=-30) < current_dt < tc.utc_datetime(end_dt, minutes=30): |
|
| 41 | 41 |
return f'{start_t}-{end_t}'
|
| 42 | 42 |
return '' |
| 43 | 43 |
|