@@ -2,6 +2,9 @@ |
||
| 2 | 2 |
|
| 3 | 3 |
from __future__ import division |
| 4 | 4 |
|
| 5 |
+import json |
|
| 6 |
+ |
|
| 7 |
+import requests |
|
| 5 | 8 |
from django.db.models import Q |
| 6 | 9 |
from django_logit import logit |
| 7 | 10 |
from django_query import get_query_value |
@@ -23,15 +26,48 @@ def eqpt_bind(request): |
||
| 23 | 26 |
|
| 24 | 27 |
macidsns = macidsns or [{'macid': macid, 'sn': sn}]
|
| 25 | 28 |
|
| 29 |
+ headers = {
|
|
| 30 |
+ 'Content-Type': 'application/json', |
|
| 31 |
+ 'Partner-Identifier': 'yingduo', |
|
| 32 |
+ 'Partner-Token': '9A79C0E34C72B4D0F9B5EA0C59FFC52A', |
|
| 33 |
+ } |
|
| 34 |
+ |
|
| 26 | 35 |
for macidsn in macidsns: |
| 27 | 36 |
macid, sn = macidsn.get('macid'), macidsn.get('sn')
|
| 37 |
+ |
|
| 38 |
+ data = {
|
|
| 39 |
+ 'mac': macid, |
|
| 40 |
+ 'callback': 'http://twjc.kodo.com.cn/api/upload/temperature', |
|
| 41 |
+ } |
|
| 42 |
+ # 设备注册成功 |
|
| 43 |
+ # {
|
|
| 44 |
+ # "ret": "SUCCESS", |
|
| 45 |
+ # "data": {
|
|
| 46 |
+ # "id": 6, |
|
| 47 |
+ # "callback": "http://twjc.kodo.com.cn/api/upload/temperature", |
|
| 48 |
+ # "mac": "C4:64:E3:7A:EF:A8" |
|
| 49 |
+ # }, |
|
| 50 |
+ # "debug": "" |
|
| 51 |
+ # } |
|
| 52 |
+ # |
|
| 53 |
+ # 设备注册失败 |
|
| 54 |
+ # {
|
|
| 55 |
+ # "ret": "FAIL", |
|
| 56 |
+ # "data": "该设备已被注册!", |
|
| 57 |
+ # "debug": "" |
|
| 58 |
+ # } |
|
| 59 |
+ try: |
|
| 60 |
+ result = requests.post('http://www.protontek.com/vcare-api/open/device/register', headers=headers, data=json.dumps(data)).json()
|
|
| 61 |
+ except Exception as e: |
|
| 62 |
+ result = {'message': e.args}
|
|
| 63 |
+ |
|
| 28 | 64 |
ThermometerEquipmentInfo.objects.update_or_create(macid=macid, defaults={
|
| 29 | 65 |
'point_id': point_id, |
| 30 | 66 |
'sn': sn, |
| 67 |
+ 'eqpt_register_status': int(result.get('ret') == 'SUCCESS' or result.get('data') == '该设备已被注册!'),
|
|
| 68 |
+ 'eqpt_register_result': result, |
|
| 31 | 69 |
}) |
| 32 | 70 |
|
| 33 |
- # TODO: Call CarePatch's API, batch or single |
|
| 34 |
- |
|
| 35 | 71 |
return response() |
| 36 | 72 |
|
| 37 | 73 |
|
@@ -12,7 +12,7 @@ class IsolationPointInfoAdmin(admin.ModelAdmin): |
||
| 12 | 12 |
|
| 13 | 13 |
|
| 14 | 14 |
class ThermometerEquipmentInfoAdmin(ReadOnlyModelAdmin, admin.ModelAdmin): |
| 15 |
- list_display = ('eqpt_id', 'point_id', 'macid', 'sn', 'active_status', 'active_at', 'name', 'sex', 'age', 'phone', 'remark', 'last_submit_at', 'status', 'updated_at', 'created_at')
|
|
| 15 |
+ list_display = ('eqpt_id', 'point_id', 'macid', 'sn', 'active_status', 'active_at', 'name', 'sex', 'age', 'phone', 'remark', 'last_submit_at', 'eqpt_register_status', 'eqpt_register_result', 'status', 'updated_at', 'created_at')
|
|
| 16 | 16 |
list_filter = ('point_id', 'status')
|
| 17 | 17 |
|
| 18 | 18 |
|
@@ -0,0 +1,23 @@ |
||
| 1 |
+# Generated by Django 3.2.4 on 2021-07-10 15:58 |
|
| 2 |
+ |
|
| 3 |
+from django.db import migrations, models |
|
| 4 |
+ |
|
| 5 |
+ |
|
| 6 |
+class Migration(migrations.Migration): |
|
| 7 |
+ |
|
| 8 |
+ dependencies = [ |
|
| 9 |
+ ('equipment', '0001_initial'),
|
|
| 10 |
+ ] |
|
| 11 |
+ |
|
| 12 |
+ operations = [ |
|
| 13 |
+ migrations.AddField( |
|
| 14 |
+ model_name='thermometerequipmentinfo', |
|
| 15 |
+ name='eqpt_register_result', |
|
| 16 |
+ field=models.TextField(blank=True, help_text='设备注册结果', null=True, verbose_name='eqpt_register_result'), |
|
| 17 |
+ ), |
|
| 18 |
+ migrations.AddField( |
|
| 19 |
+ model_name='thermometerequipmentinfo', |
|
| 20 |
+ name='eqpt_register_status', |
|
| 21 |
+ field=models.IntegerField(choices=[(1, '注册成功'), (0, '注册失败')], default=0, help_text='设备注册状态', verbose_name='eqpt_register_status'), |
|
| 22 |
+ ), |
|
| 23 |
+ ] |
@@ -51,6 +51,14 @@ class ThermometerEquipmentInfo(BaseModelMixin): |
||
| 51 | 51 |
(OFFLINE, '已离线'), |
| 52 | 52 |
) |
| 53 | 53 |
|
| 54 |
+ SUCCESS = 1 |
|
| 55 |
+ FAIL = 0 |
|
| 56 |
+ |
|
| 57 |
+ REGISTER_STATUE_TUPLE = ( |
|
| 58 |
+ (SUCCESS, '注册成功'), |
|
| 59 |
+ (FAIL, '注册失败'), |
|
| 60 |
+ ) |
|
| 61 |
+ |
|
| 54 | 62 |
eqpt_id = ShortUUIDField(_('eqpt_id'), max_length=32, blank=True, null=True, help_text='设备唯一标识', db_index=True, unique=True)
|
| 55 | 63 |
|
| 56 | 64 |
point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True)
|
@@ -71,6 +79,9 @@ class ThermometerEquipmentInfo(BaseModelMixin): |
||
| 71 | 79 |
|
| 72 | 80 |
last_submit_at = models.DateTimeField(_('last_submit_at'), blank=True, null=True, help_text=_('上一次上报时间'))
|
| 73 | 81 |
|
| 82 |
+ eqpt_register_status = models.IntegerField(_('eqpt_register_status'), choices=REGISTER_STATUE_TUPLE, default=FAIL, help_text='设备注册状态')
|
|
| 83 |
+ eqpt_register_result = models.TextField(_('eqpt_register_result'), blank=True, null=True, help_text='设备注册结果')
|
|
| 84 |
+ |
|
| 74 | 85 |
class Meta: |
| 75 | 86 |
verbose_name = _('测温设备信息')
|
| 76 | 87 |
verbose_name_plural = _('测温设备信息')
|
@@ -95,6 +106,9 @@ class ThermometerEquipmentInfo(BaseModelMixin): |
||
| 95 | 106 |
'phone': self.phone or '', |
| 96 | 107 |
'remark': self.remark or '', |
| 97 | 108 |
'last_submit_at': tc.local_string(utc_dt=self.last_submit_at), |
| 109 |
+ 'eqpt_register_status': self.eqpt_register_status, |
|
| 110 |
+ 'eqpt_register_status_str': dict(self.REGISTER_STATUE_TUPLE).get(self.eqpt_register_status, ''), |
|
| 111 |
+ 'eqpt_register_result': self.eqpt_register_result, |
|
| 98 | 112 |
'created_at': tc.local_string(utc_dt=self.created_at), |
| 99 | 113 |
} |
| 100 | 114 |
|
@@ -3,6 +3,7 @@ furl==2.1.2 |
||
| 3 | 3 |
jsonfield==3.1.0 |
| 4 | 4 |
mysqlclient==2.0.3 |
| 5 | 5 |
pysnippets==1.1.4 |
| 6 |
+requests==2.25.1 |
|
| 6 | 7 |
rlog==0.3 |
| 7 | 8 |
-r requirements_dj.txt |
| 8 | 9 |
-r requirements_pywe.txt |