No Description

eqpt_views.py 5.1KB

    # -*- coding: utf-8 -*- from __future__ import division from django.db.models import Q 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, ThermometerEquipmentInfo, ThermometerMeasureInfo, ThermometerMeasureLogInfo) from utils.error.errno_utils import IsolationPointStatusCode, ThermometerEquipmentStatusCode @logit def eqpt_bind(request): point_id = request.POST.get('point_id', '') macid = request.POST.get('macid', '') sn = request.POST.get('sn', '') macidsns = get_query_value(request, 'macidsns', val_cast_type='listjson') macidsns = macidsns or [{'macid': macid, 'sn': sn}] for macidsn in macidsns: macid, sn = macidsn.get('macid'), macidsn.get('sn') ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={ 'point_id': point_id, 'sn': sn, }) return response() @logit def eqpt_onoff(request): macid = request.POST.get('macid', '') active = request.POST.get('active', 0) ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={ 'active_status': active, 'active_at': tc.utc_datetime(), }) return response() @logit def eqpt_list(request): point_id = request.POST.get('point_id', '') macid = request.POST.get('macid', '') page = request.POST.get('page', 1) num = request.POST.get('num', 20) eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point_id, status=True) if macid: eqpts = eqpts.filter(macid=macid) total_num = eqpts.count() active_num = eqpts.filter(active_status=ThermometerEquipmentInfo.ONLINE).count() eqpts, left = pagination(eqpts, page, num) eqpts = [eqpt.data for eqpt in eqpts] return response(data={ 'eqpts': eqpts, 'left': left, 'total_num': total_num, 'active_num': active_num, 'unactive_num': total_num - active_num, }) @logit def eqpt_result(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) try: point = IsolationPointInfo.objects.get(point_id=point_id, status=True) except IsolationPointInfo.DoesNotExist: return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND) eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point_id, active_status=ThermometerEquipmentInfo.ONLINE, status=True) macids = eqpts.values_list('macid', flat=True) 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, macid__in=macids, status=True, ).values('macid', 'temperature') logs = {log.get('macid'): log.get('temperature') for log in logs} total_active_eqpt_num = eqpts.count() has_upload_temperature_num = len(logs) temperature_over_375 = len([1 for temperature in logs.values() if temperature > 37.5]) if kw: eqpts = eqpts.filter(Q(name__icontains=kw) | Q(phone__icontains=kw)) eqpts, left = pagination(eqpts, page, num) eqpts = [{**eqpt.data, **{'has_upload': eqpt.macid in logs, 'temperature': logs.get(eqpt.macid, 0)}} for eqpt in eqpts] return response(data={ 'eqpts': eqpts, '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, 'temperature_over_375': temperature_over_375, }) @logit def upload_temperature(request): macid = request.POST.get('macid', '') name = request.POST.get('name', '') sex = request.POST.get('sex', 0) age = request.POST.get('age', 0) phone = request.POST.get('phone', '') temperature = request.POST.get('temperature', 0) try: eqpt = ThermometerEquipmentInfo.objects.get(macid=macid, status=True) except ThermometerEquipmentInfo.DoesNotExist: return response(ThermometerEquipmentStatusCode.THERMOMETER_EQUIPMENT_NOT_FOUND) try: point = IsolationPointInfo.objects.get(point_id=eqpt.point_id, status=True) except IsolationPointInfo.DoesNotExist: return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND) point_measure_ymd = tc.local_string(format='%Y-%m-%d') point_measure_window = point.current_measure_window eqpt.name = name eqpt.sex = sex eqpt.age = age eqpt.phone = phone eqpt.last_submit_at = tc.utc_datetime() eqpt.save() ThermometerMeasureLogInfo.objects.create(point_id=eqpt.point_id, macid=macid, temperature=temperature) if point_measure_window: ThermometerMeasureInfo.objects.update_or_create(point_id=eqpt.point_id, point_measure_ymd=point_measure_ymd, point_measure_window=point_measure_window, macid=macid, defaults={ 'temperature': temperature, }) return response()