|
# -*- coding: utf-8 -*-
from __future__ import division
from django.conf import settings
from django_logit import logit
from django_query import get_query_value
from django_response import response
from paginator import pagination
from TimeConvert import TimeConvert as tc
from equipment.models import IsolationPointInfo, IsolationPointUserInfo, ThermometerEquipmentInfo, ThermometerMeasureLogInfo
from utils.error.errno_utils import IsolationPointStatusCode
@logit
def get_point_list(request):
page = request.POST.get('page', 1)
num = request.POST.get('num', 20)
points = IsolationPointInfo.objects.filter(status=True)
points, left = pagination(points, page, num)
points = [point.data for point in points]
return response(data={
'points': points,
'left': left,
})
@logit
def get_point_info(request):
point_id = request.POST.get('point_id', '')
try:
point = IsolationPointInfo.objects.get(point_id=point_id, status=True)
except IsolationPointInfo.DoesNotExist:
return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND)
return response(data=point.data)
@logit
def update_point_info(request):
point_id = request.POST.get('point_id', '')
upload_period = get_query_value(request, 'upload_period', val_cast_type='listjson')
IsolationPointInfo.objects.filter(point_id=point_id).update(point_upload_period=upload_period)
return response()
@logit
def get_point_fields(request):
point_id = request.POST.get('point_id', '')
user_id = request.POST.get('user_id', '')
try:
point = IsolationPointInfo.objects.get(point_id=point_id, status=True)
except IsolationPointInfo.DoesNotExist:
return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND)
try:
ipui = IsolationPointUserInfo.objects.get(user_id=user_id, point_id=point_id)
except IsolationPointUserInfo.DoesNotExist:
ipui = None
return response(data={
'point_name': point.point_name,
'fields': point.point_fields,
'user_info': ipui.fields if ipui else [],
})
@logit
def save_point_fields(request):
point_id = request.POST.get('point_id', '')
user_id = request.POST.get('user_id', '')
fields = get_query_value(request, 'fields', val_cast_type='listjson')
IsolationPointUserInfo.objects.update_or_create(point_id=point_id, user_id=user_id, defaults={
'fields': fields,
'status': True,
})
return response()
@logit
def bind_eqpt(request):
macid = request.POST.get('macid', '')
user_id = request.POST.get('user_id', '')
try:
ipui = IsolationPointUserInfo.objects.get(user_id=user_id, status=True)
except IsolationPointUserInfo.DoesNotExist:
return response(IsolationPointStatusCode.ISOLATIONPOINT_USER_NOT_FOUND)
# 清除之前绑定的设备
ThermometerEquipmentInfo.objects.filter(ipui_pk=ipui.pk).update(ipui_pk=0, active_status=ThermometerEquipmentInfo.OFFLINE)
eqpt, _ = ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={
'point_id': ipui.point_id,
'ipui_pk': ipui.pk,
'active_status': ThermometerEquipmentInfo.ONLINE,
'active_at': tc.utc_datetime()
})
eqpt.ipui_pks += [ipui.pk]
eqpt.save()
ipui.eqpts += [macid]
ipui.save()
return response()
@logit
def mp_upload_temperature(request):
macid = request.POST.get('macid', '')
userid = request.POST.get('user_id', '')
temperature = request.POST.get('temperature', '')
try:
ipui = IsolationPointUserInfo.objects.get(user_id=userid, status=True)
except IsolationPointUserInfo.DoesNotExist:
ThermometerMeasureLogInfo.objects.create(point_id='', macid=macid, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MP, chg_sta=False, ignore_temperature=False, ignore_fever_temperature=False, upload_temperature_info='')
return response()
ThermometerMeasureLogInfo.objects.create(point_id=ipui.point_id, macid=macid, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MP, chg_sta=False, ignore_temperature=False, ignore_fever_temperature=False, upload_temperature_info='')
ipui.observed_ymds = list(set(ipui.observed_ymds + [tc.local_string(format='%Y-%m-%d')]))
ipui.observed_days = len(ipui.observed_ymds)
ipui.temperature = temperature
ipui.last_submit_at = tc.utc_datetime()
ipui.save()
return response()
def admin_user_results(request):
point_id = request.POST.get('point_id', '')
kw = request.POST.get('kw', '')
page = request.POST.get('page', 1)
num = request.POST.get('num', 20)
ipuis = IsolationPointUserInfo.objects.filter(point_id=point_id, status=True)
if kw:
ipuis = ipuis.filter(fields__icontains=kw)
total_active_eqpt_num = ipuis.count()
ipuis, left = pagination(ipuis, page, num)
ipuis = [ipui.data for ipui in ipuis]
has_upload_temperature_num = len([1 for ipui in ipuis if ipui.get('temperature_has_upload', '') == IsolationPointUserInfo.HAS_YET_UPLOAD])
fever_num = len([1 for ipui in ipuis if ipui.get('temperature', 0) > settings.FEVER_TEMPERATURE])
return response(data={
'ipuis': ipuis,
'left': left,
'total_active_eqpt_num': total_active_eqpt_num,
'has_upload_temperature_num': has_upload_temperature_num,
'not_upload_temperature_num': total_active_eqpt_num - has_upload_temperature_num,
'fever_num': fever_num,
})
@logit
def admin_point_user_unbind(request):
user_id = request.POST.get('user_id', '')
active = int(request.POST.get('active', 0))
try:
ipui = IsolationPointUserInfo.objects.get(user_id=user_id, status=True)
except IsolationPointUserInfo.DoesNotExist:
return response()
ipui.leave_at = tc.utc_datetime()
ipui.status = False
ipui.remark = ''
ipui.save()
try:
eqpt = ThermometerEquipmentInfo.objects.get(ipui_pk=ipui.pk, status=True)
eqpt.active_status = active
eqpt.ipui_pk = 0
eqpt.save()
except:
return response()
return response()
@logit
def admin_point_user_remark(request):
user_id = request.POST.get('user_id', '')
remark = request.POST.get('remark', '')
# 存放历史备注记录
try:
ipui = IsolationPointUserInfo.objects.get(user_id=user_id, status=True)
except IsolationPointUserInfo.DoesNotExist:
return response()
if ipui:
ipui.remark = remark
ipui.remarks += [remark]
ipui.save()
return response()
@logit
def admin_point_user_temperature_history(request):
user_id = request.POST.get('user_id', '')
point_id = request.POST.get('point_id', '')
page = request.POST.get('page', 1)
num = request.POST.get('num', 20)
logs = ThermometerMeasureLogInfo.objects.filter(point_id=point_id, user_id=user_id, status=True)
count = ipuis.count()
logs, left = pagination(logs, page, num)
logs = [log.data for log in logs]
return response(data={
'logs': ipuis,
'left': left,
'count': count,
})
|