@@ -85,6 +85,18 @@ def eqpt_onoff(request): |
||
| 85 | 85 |
return response() |
| 86 | 86 |
|
| 87 | 87 |
|
| 88 |
+@logit |
|
| 89 |
+def eqpt_remark(request): |
|
| 90 |
+ macid = request.POST.get('macid', '')
|
|
| 91 |
+ remark = request.POST.get('remark', '')
|
|
| 92 |
+ |
|
| 93 |
+ ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={
|
|
| 94 |
+ 'remark': remark, |
|
| 95 |
+ }) |
|
| 96 |
+ |
|
| 97 |
+ return response() |
|
| 98 |
+ |
|
| 99 |
+ |
|
| 88 | 100 |
@logit(body=True) |
| 89 | 101 |
def eqpt_list(request): |
| 90 | 102 |
point_id = request.POST.get('point_id', '')
|
@@ -162,6 +174,83 @@ def eqpt_result(request): |
||
| 162 | 174 |
|
| 163 | 175 |
|
| 164 | 176 |
@logit |
| 177 |
+def screen_eqpt_result(request): |
|
| 178 |
+ point_id = request.POST.get('point_id', '')
|
|
| 179 |
+ kw = request.POST.get('kw', '')
|
|
| 180 |
+ page = request.POST.get('page', 1)
|
|
| 181 |
+ num = request.POST.get('num', 20)
|
|
| 182 |
+ |
|
| 183 |
+ try: |
|
| 184 |
+ point = IsolationPointInfo.objects.get(point_id=point_id, status=True) |
|
| 185 |
+ except IsolationPointInfo.DoesNotExist: |
|
| 186 |
+ return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND) |
|
| 187 |
+ |
|
| 188 |
+ eqpts = ThermometerEquipmentInfo.objects.filter(point_id=point_id, active_status=ThermometerEquipmentInfo.ONLINE, status=True) |
|
| 189 |
+ macids = eqpts.values_list('macid', flat=True)
|
|
| 190 |
+ |
|
| 191 |
+ logs = ThermometerMeasureInfo.objects.filter( |
|
| 192 |
+ point_id=point_id, |
|
| 193 |
+ point_measure_ymd=tc.local_string(format='%Y-%m-%d'), |
|
| 194 |
+ point_measure_window=point.point_measure_window, |
|
| 195 |
+ macid__in=macids, |
|
| 196 |
+ status=True, |
|
| 197 |
+ ).values('macid', 'temperature')
|
|
| 198 |
+ logs = {log.get('macid'): log.get('temperature') for log in logs}
|
|
| 199 |
+ |
|
| 200 |
+ infos = IsolationPointUserInfo.objects.filter(point_id=point_id, status=True).values('pk', 'fields')
|
|
| 201 |
+ infos = {info.get('pk'): info.get('fields') for info in infos}
|
|
| 202 |
+ |
|
| 203 |
+ total_active_eqpt_num = eqpts.count() |
|
| 204 |
+ has_upload_temperature_num = len(logs) |
|
| 205 |
+ temperature_over_375 = len([1 for temperature in logs.values() if temperature > 37.5]) |
|
| 206 |
+ |
|
| 207 |
+ if kw: |
|
| 208 |
+ eqpts = eqpts.filter(Q(name__icontains=kw) | Q(phone__icontains=kw)) |
|
| 209 |
+ eqpts = [{**eqpt.screen_data, **{
|
|
| 210 |
+ 'has_upload': eqpt.macid in logs, |
|
| 211 |
+ 'temperature': logs.get(eqpt.macid, 0), |
|
| 212 |
+ }, **{field.get('key', ''): field.get('value', '') for field in infos.get(eqpt.ipui_pk, {})}} for eqpt in eqpts]
|
|
| 213 |
+ reminds = [{
|
|
| 214 |
+ 'name': eqpt.get('name'),
|
|
| 215 |
+ 'room': eqpt.get('room'),
|
|
| 216 |
+ 'content': eqpt.get('remark'),
|
|
| 217 |
+ } for eqpt in eqpts if eqpt.get('remark')]
|
|
| 218 |
+ eqpts, left = pagination(eqpts, page, num) |
|
| 219 |
+ |
|
| 220 |
+ # var name: String = "" |
|
| 221 |
+ # var room: String = "" |
|
| 222 |
+ # var phone: String = "" |
|
| 223 |
+ # var sex: String = "" |
|
| 224 |
+ # var age: String = "" |
|
| 225 |
+ # var temperature: String = "" |
|
| 226 |
+ # var status: String = "" |
|
| 227 |
+ # var remind: String = "" |
|
| 228 |
+ # var last_report_time: String = "" |
|
| 229 |
+ # var observed_days: String = "" |
|
| 230 |
+ eqpts = [{
|
|
| 231 |
+ 'name': eqpt.get('name', ''),
|
|
| 232 |
+ 'room': eqpt.get('room', ''),
|
|
| 233 |
+ 'phone': eqpt.get('phone', ''),
|
|
| 234 |
+ 'sex': eqpt.get('sex', ''),
|
|
| 235 |
+ 'age': eqpt.get('age', ''),
|
|
| 236 |
+ 'temperature': eqpt.get('temperature', ''),
|
|
| 237 |
+ 'status': ThermometerEquipmentInfo.final_temperature_status(eqpt.get('temperature', 0)),
|
|
| 238 |
+ 'last_report_time': eqpt.get('last_submit_at', ''),
|
|
| 239 |
+ 'observed_days': 1, |
|
| 240 |
+ } for eqpt in eqpts] |
|
| 241 |
+ |
|
| 242 |
+ return response(data={
|
|
| 243 |
+ 'eqpts': eqpts, |
|
| 244 |
+ 'left': left, |
|
| 245 |
+ 'reminds': reminds, |
|
| 246 |
+ 'total_active_eqpt_num': total_active_eqpt_num, |
|
| 247 |
+ 'has_upload_temperature_num': has_upload_temperature_num, |
|
| 248 |
+ 'not_upload_temperature_num': total_active_eqpt_num - has_upload_temperature_num, |
|
| 249 |
+ 'temperature_over_375': temperature_over_375, |
|
| 250 |
+ }) |
|
| 251 |
+ |
|
| 252 |
+ |
|
| 253 |
+@logit |
|
| 165 | 254 |
def upload_temperature(request): |
| 166 | 255 |
request.POST = request.POST or json.loads(request.body) |
| 167 | 256 |
macid = request.POST.get('mac', '')
|
@@ -38,6 +38,7 @@ urlpatterns += [ |
||
| 38 | 38 |
urlpatterns += [ |
| 39 | 39 |
url(r'^eqpt/bind$', eqpt_views.eqpt_bind, name='eqpt_bind'), |
| 40 | 40 |
url(r'^eqpt/onoff$', eqpt_views.eqpt_onoff, name='eqpt_onoff'), |
| 41 |
+ url(r'^eqpt/remark$', eqpt_views.eqpt_remark, name='eqpt_remark'), |
|
| 41 | 42 |
url(r'^eqpt/list$', eqpt_views.eqpt_list, name='eqpt_list'), |
| 42 | 43 |
url(r'^eqpt/result$', eqpt_views.eqpt_result, name='eqpt_result'), |
| 43 | 44 |
] |
@@ -65,4 +66,6 @@ urlpatterns += [ |
||
| 65 | 66 |
url(r'^screen/login$', screen_views.screen_login, name='screen_login'), |
| 66 | 67 |
url(r'^screen/info/set$', screen_views.screen_info_set, name='screen_info_set'), |
| 67 | 68 |
url(r'^screen/info$', screen_views.screen_info, name='screen_info'), |
| 69 |
+ |
|
| 70 |
+ url(r'^screen/eqpt/result$', eqpt_views.screen_eqpt_result, name='screen_eqpt_result'), |
|
| 68 | 71 |
] |
@@ -172,6 +172,13 @@ class ThermometerEquipmentInfo(BaseModelMixin): |
||
| 172 | 172 |
def __unicode__(self): |
| 173 | 173 |
return self.pk |
| 174 | 174 |
|
| 175 |
+ def final_temperature_status(temperature): |
|
| 176 |
+ if not temperature: |
|
| 177 |
+ return '-' |
|
| 178 |
+ if temperature > 37.5: |
|
| 179 |
+ return '异常' |
|
| 180 |
+ return '正常' |
|
| 181 |
+ |
|
| 175 | 182 |
@property |
| 176 | 183 |
def data(self): |
| 177 | 184 |
return {
|
@@ -195,6 +202,13 @@ class ThermometerEquipmentInfo(BaseModelMixin): |
||
| 195 | 202 |
'created_at': tc.local_string(utc_dt=self.created_at), |
| 196 | 203 |
} |
| 197 | 204 |
|
| 205 |
+ @property |
|
| 206 |
+ def screen_data(self): |
|
| 207 |
+ return {
|
|
| 208 |
+ 'remark': self.remark, |
|
| 209 |
+ 'last_submit_at': tc.local_string(utc_dt=self.last_submit_at), |
|
| 210 |
+ } |
|
| 211 |
+ |
|
| 198 | 212 |
|
| 199 | 213 |
class ThermometerMeasureInfo(BaseModelMixin): |
| 200 | 214 |
point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True)
|
@@ -4,7 +4,7 @@ jsonfield==3.1.0 |
||
| 4 | 4 |
mysqlclient==2.0.3 |
| 5 | 5 |
paho-mqtt==1.5.1 |
| 6 | 6 |
pysnippets==1.1.4 |
| 7 |
-requests==2.25.1 |
|
| 7 |
+requests==2.26.0 |
|
| 8 | 8 |
rlog==0.3 |
| 9 | 9 |
-r requirements_dj.txt |
| 10 | 10 |
-r requirements_pywe.txt |