@@ -52,7 +52,7 @@ class UserInfo(BaseModelMixin): |
||
| 52 | 52 |
@property |
| 53 | 53 |
def data(self): |
| 54 | 54 |
try: |
| 55 |
- user = IsolationPointUserInfo.objects.get(user_id=self.user_id, status=True).userdata |
|
| 55 |
+ user = IsolationPointUserInfo.objects.get(user_id=self.user_id, member_id='', status=True).userdata |
|
| 56 | 56 |
except IsolationPointUserInfo.DoesNotExist: |
| 57 | 57 |
user = {}
|
| 58 | 58 |
|
@@ -18,17 +18,17 @@ def upload_antigen(request): |
||
| 18 | 18 |
detect_at = tc.string_to_datetime(detect_at, format='%Y-%m-%d %H:%M:%S') |
| 19 | 19 |
|
| 20 | 20 |
try: |
| 21 |
- user = IsolationPointUserInfo.objects.get(fields__icontains=phone, status=True) |
|
| 21 |
+ user = IsolationPointUserInfo.objects.get(fields__icontains=phone, member_id='', status=True) |
|
| 22 |
+ user.detect_at = detect_at |
|
| 23 |
+ user.antigen_result = result |
|
| 24 |
+ user.save() |
|
| 22 | 25 |
except IsolationPointUserInfo.DoesNotExist: |
| 23 | 26 |
user = None |
| 24 | 27 |
|
| 25 |
- user.detect_at = detect_at |
|
| 26 |
- user.antigen_result = result |
|
| 27 |
- user.save() |
|
| 28 |
- |
|
| 29 | 28 |
AntigenMeasureLogInfo.objects.create( |
| 30 | 29 |
point_id=user.point_id if user else '', |
| 31 | 30 |
user_id=user.user_id if user else '', |
| 31 |
+ member_id=user.member_id if user else '', |
|
| 32 | 32 |
macid=macid, |
| 33 | 33 |
user_name=user_name, |
| 34 | 34 |
phone=phone, |
@@ -0,0 +1,45 @@ |
||
| 1 |
+# -*- coding: utf-8 -*- |
|
| 2 |
+ |
|
| 3 |
+from __future__ import division |
|
| 4 |
+ |
|
| 5 |
+from django_logit import logit |
|
| 6 |
+from django.conf import settings |
|
| 7 |
+from django_response import response |
|
| 8 |
+ |
|
| 9 |
+from equipment.models import FamilyMemberInfo |
|
| 10 |
+ |
|
| 11 |
+ |
|
| 12 |
+@logit |
|
| 13 |
+def mp_bind_family_member(request): |
|
| 14 |
+ user_id = request.POST.get('user_id', '')
|
|
| 15 |
+ identity_card_name = request.POST.get('identity_card_name', '')
|
|
| 16 |
+ identity_card_number = request.POST.get('identity_card_number', '')
|
|
| 17 |
+ relation = request.POST.get('relation', '')
|
|
| 18 |
+ |
|
| 19 |
+ FamilyMemberInfo.objects.create( |
|
| 20 |
+ user_id=user_id, |
|
| 21 |
+ identity_card_name=identity_card_name, |
|
| 22 |
+ identity_card_number=identity_card_number, |
|
| 23 |
+ relation=relation |
|
| 24 |
+ ) |
|
| 25 |
+ |
|
| 26 |
+ return response() |
|
| 27 |
+ |
|
| 28 |
+@logit |
|
| 29 |
+def mp_family_member_list(request): |
|
| 30 |
+ user_id = request.POST.get('user_id', '')
|
|
| 31 |
+ members = FamilyMemberInfo.objects.filter(user_id=user_id, status=True) |
|
| 32 |
+ |
|
| 33 |
+ members = [member.data for member in members] |
|
| 34 |
+ return response(data={
|
|
| 35 |
+ 'members': members |
|
| 36 |
+ }) |
|
| 37 |
+ |
|
| 38 |
+@logit |
|
| 39 |
+def mp_delete_family_member(request): |
|
| 40 |
+ user_id = request.POST.get('user_id', '')
|
|
| 41 |
+ member_id = request.POST.get('member_id', '')
|
|
| 42 |
+ |
|
| 43 |
+ FamilyMemberInfo.objects.filter(user_id=user_id, member_id=member_id).update(status=False) |
|
| 44 |
+ |
|
| 45 |
+ return response() |
@@ -55,6 +55,7 @@ def update_point_info(request): |
||
| 55 | 55 |
def get_point_fields(request): |
| 56 | 56 |
point_id = request.POST.get('point_id', '')
|
| 57 | 57 |
user_id = request.POST.get('user_id', '')
|
| 58 |
+ member_id = request.POST.get('member_id', '')
|
|
| 58 | 59 |
|
| 59 | 60 |
try: |
| 60 | 61 |
point = IsolationPointInfo.objects.get(point_id=point_id, status=True) |
@@ -62,7 +63,7 @@ def get_point_fields(request): |
||
| 62 | 63 |
return response(IsolationPointStatusCode.ISOLATIONPOINT_NOT_FOUND) |
| 63 | 64 |
|
| 64 | 65 |
try: |
| 65 |
- ipui = IsolationPointUserInfo.objects.get(user_id=user_id, point_id=point_id) |
|
| 66 |
+ ipui = IsolationPointUserInfo.objects.get(user_id=user_id, member_id=member_id, point_id=point_id) |
|
| 66 | 67 |
except IsolationPointUserInfo.DoesNotExist: |
| 67 | 68 |
ipui = None |
| 68 | 69 |
|
@@ -77,11 +78,12 @@ def get_point_fields(request): |
||
| 77 | 78 |
def save_point_fields(request): |
| 78 | 79 |
point_id = request.POST.get('point_id', '')
|
| 79 | 80 |
user_id = request.POST.get('user_id', '')
|
| 81 |
+ member_id = request.POST.get('member_id', '')
|
|
| 80 | 82 |
fields = get_query_value(request, 'fields', val_cast_type='listjson') |
| 81 | 83 |
|
| 82 |
- IsolationPointUserInfo.objects.exclude(point_id=point_id).update(status=False) |
|
| 84 |
+ IsolationPointUserInfo.objects.filter(user_id=user_id, member_id=member_id).exclude(point_id=point_id).update(status=False) |
|
| 83 | 85 |
|
| 84 |
- IsolationPointUserInfo.objects.update_or_create(point_id=point_id, user_id=user_id, defaults={
|
|
| 86 |
+ IsolationPointUserInfo.objects.update_or_create(point_id=point_id, user_id=user_id, member_id=member_id, defaults={
|
|
| 85 | 87 |
'fields': fields, |
| 86 | 88 |
'status': True, |
| 87 | 89 |
}) |
@@ -93,9 +95,10 @@ def save_point_fields(request): |
||
| 93 | 95 |
def bind_eqpt(request): |
| 94 | 96 |
macid = request.POST.get('macid', '')
|
| 95 | 97 |
user_id = request.POST.get('user_id', '')
|
| 98 |
+ member_id = request.POST.get('member_id', '')
|
|
| 96 | 99 |
|
| 97 | 100 |
try: |
| 98 |
- ipui = IsolationPointUserInfo.objects.get(user_id=user_id, status=True) |
|
| 101 |
+ ipui = IsolationPointUserInfo.objects.get(user_id=user_id, member_id=member_id, status=True) |
|
| 99 | 102 |
except IsolationPointUserInfo.DoesNotExist: |
| 100 | 103 |
return response(IsolationPointStatusCode.ISOLATIONPOINT_USER_NOT_FOUND) |
| 101 | 104 |
|
@@ -122,6 +125,7 @@ def bind_eqpt(request): |
||
| 122 | 125 |
def mp_upload_temperature(request): |
| 123 | 126 |
macid = request.POST.get('macid', '')
|
| 124 | 127 |
userid = request.POST.get('user_id', '')
|
| 128 |
+ member_id = request.POST.get('member_id', '')
|
|
| 125 | 129 |
temperature = request.POST.get('temperature', '')
|
| 126 | 130 |
dry_cough_status = request.POST.get('dry_cough_status', False)
|
| 127 | 131 |
weak_status = request.POST.get('weak_status', False)
|
@@ -132,13 +136,13 @@ def mp_upload_temperature(request): |
||
| 132 | 136 |
is_filled = request.POST.get('is_filled', False)
|
| 133 | 137 |
|
| 134 | 138 |
try: |
| 135 |
- ipui = IsolationPointUserInfo.objects.get(user_id=userid, status=True) |
|
| 139 |
+ ipui = IsolationPointUserInfo.objects.get(user_id=userid, member_id=member_id, status=True) |
|
| 136 | 140 |
except IsolationPointUserInfo.DoesNotExist: |
| 137 |
- ThermometerMeasureLogInfo.objects.create(point_id='', macid=macid, user_id=userid, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MP, chg_sta=False, ignore_temperature=False, ignore_fever_temperature=False, upload_temperature_info='', dry_cough_status=dry_cough_status, weak_status=weak_status, sore_throat_status=sore_throat_status, smell_taste_loss_status=smell_taste_loss_status, diarrhea_status=diarrhea_status, |
|
| 141 |
+ ThermometerMeasureLogInfo.objects.create(point_id='', macid=macid, user_id=userid, member_id=member_id, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MP, chg_sta=False, ignore_temperature=False, ignore_fever_temperature=False, upload_temperature_info='', dry_cough_status=dry_cough_status, weak_status=weak_status, sore_throat_status=sore_throat_status, smell_taste_loss_status=smell_taste_loss_status, diarrhea_status=diarrhea_status, |
|
| 138 | 142 |
blood_oxygen_saturation=blood_oxygen_saturation, is_filled=is_filled) |
| 139 | 143 |
return response() |
| 140 | 144 |
|
| 141 |
- ThermometerMeasureLogInfo.objects.create(point_id=ipui.point_id, macid=macid, user_id=userid, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MP, chg_sta=False, ignore_temperature=False, ignore_fever_temperature=False, upload_temperature_info='', dry_cough_status=dry_cough_status, weak_status=weak_status, sore_throat_status=sore_throat_status, smell_taste_loss_status=smell_taste_loss_status, diarrhea_status=diarrhea_status, blood_oxygen_saturation=blood_oxygen_saturation, is_filled=is_filled) |
|
| 145 |
+ ThermometerMeasureLogInfo.objects.create(point_id=ipui.point_id, macid=macid, user_id=userid, member_id=member_id,temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MP, chg_sta=False, ignore_temperature=False, ignore_fever_temperature=False, upload_temperature_info='', dry_cough_status=dry_cough_status, weak_status=weak_status, sore_throat_status=sore_throat_status, smell_taste_loss_status=smell_taste_loss_status, diarrhea_status=diarrhea_status, blood_oxygen_saturation=blood_oxygen_saturation, is_filled=is_filled) |
|
| 142 | 146 |
|
| 143 | 147 |
ipui.observed_ymds = list(set(ipui.observed_ymds + [tc.local_string(format='%Y-%m-%d')])) |
| 144 | 148 |
ipui.observed_days = len(ipui.observed_ymds) |
@@ -159,11 +163,12 @@ def mp_upload_temperature(request): |
||
| 159 | 163 |
@logit |
| 160 | 164 |
def mp_temperature_list(request): |
| 161 | 165 |
user_id = request.POST.get('user_id', '')
|
| 166 |
+ member_id = request.POST.get('member_id', '')
|
|
| 162 | 167 |
point_id = request.POST.get('point_id', '')
|
| 163 | 168 |
page = request.POST.get('page', 1)
|
| 164 | 169 |
num = request.POST.get('num', 20)
|
| 165 | 170 |
|
| 166 |
- logs = ThermometerMeasureLogInfo.objects.filter(point_id=point_id, user_id=user_id, status=True).order_by('-created_at')
|
|
| 171 |
+ logs = ThermometerMeasureLogInfo.objects.filter(point_id=point_id, user_id=user_id, member_id=member_id, status=True).order_by('-created_at')
|
|
| 167 | 172 |
count = logs.count() |
| 168 | 173 |
logs, left = pagination(logs, page, num) |
| 169 | 174 |
|
@@ -208,10 +213,11 @@ def admin_user_results(request): |
||
| 208 | 213 |
@logit |
| 209 | 214 |
def admin_point_user_unbind(request): |
| 210 | 215 |
user_id = request.POST.get('user_id', '')
|
| 216 |
+ member_id = request.POST.get('member_id', '')
|
|
| 211 | 217 |
active = int(request.POST.get('active', 0))
|
| 212 | 218 |
|
| 213 | 219 |
try: |
| 214 |
- ipui = IsolationPointUserInfo.objects.get(user_id=user_id, status=True) |
|
| 220 |
+ ipui = IsolationPointUserInfo.objects.get(user_id=user_id, member_id=member_id, status=True) |
|
| 215 | 221 |
except IsolationPointUserInfo.DoesNotExist: |
| 216 | 222 |
return response() |
| 217 | 223 |
|
@@ -235,11 +241,12 @@ def admin_point_user_unbind(request): |
||
| 235 | 241 |
@logit |
| 236 | 242 |
def admin_point_user_remark(request): |
| 237 | 243 |
user_id = request.POST.get('user_id', '')
|
| 244 |
+ member_id = request.POST.get('member_id', '')
|
|
| 238 | 245 |
remark = request.POST.get('remark', '')
|
| 239 | 246 |
|
| 240 | 247 |
# 存放历史备注记录 |
| 241 | 248 |
try: |
| 242 |
- ipui = IsolationPointUserInfo.objects.get(user_id=user_id, status=True) |
|
| 249 |
+ ipui = IsolationPointUserInfo.objects.get(user_id=user_id, member_id=member_id, status=True) |
|
| 243 | 250 |
except IsolationPointUserInfo.DoesNotExist: |
| 244 | 251 |
return response() |
| 245 | 252 |
|
@@ -253,11 +260,12 @@ def admin_point_user_remark(request): |
||
| 253 | 260 |
@logit |
| 254 | 261 |
def admin_point_user_temperature_history(request): |
| 255 | 262 |
user_id = request.POST.get('user_id', '')
|
| 263 |
+ member_id = request.POST.get('member_id', '')
|
|
| 256 | 264 |
point_id = request.POST.get('point_id', '')
|
| 257 | 265 |
page = request.POST.get('page', 1)
|
| 258 | 266 |
num = request.POST.get('num', 20)
|
| 259 | 267 |
|
| 260 |
- logs = ThermometerMeasureLogInfo.objects.filter(point_id=point_id, user_id=user_id, status=True) |
|
| 268 |
+ logs = ThermometerMeasureLogInfo.objects.filter(point_id=point_id, user_id=user_id, member_id=member_id, status=True) |
|
| 261 | 269 |
count = logs.count() |
| 262 | 270 |
logs, left = pagination(logs, page, num) |
| 263 | 271 |
|
@@ -5,7 +5,7 @@ from django_admin import ReadOnlyModelAdmin |
||
| 5 | 5 |
|
| 6 | 6 |
from equipment.models import (AepThermometerMeasureLogInfo, AntigenMeasureLogInfo, IsolationPointFieldPoolInfo, |
| 7 | 7 |
IsolationPointInfo, IsolationPointUserInfo, ThermometerEquipmentInfo, |
| 8 |
- ThermometerMeasureLogInfo) |
|
| 8 |
+ ThermometerMeasureLogInfo, FamilyMemberInfo) |
|
| 9 | 9 |
|
| 10 | 10 |
|
| 11 | 11 |
class IsolationPointFieldPoolInfoAdmin(admin.ModelAdmin): |
@@ -20,6 +20,10 @@ class IsolationPointUserInfoAdmin(admin.ModelAdmin): |
||
| 20 | 20 |
list_display = ('point_id', 'user_id', 'fields', 'observed_days', 'chg_sta', 'temperature', 'last_submit_at', 'leave_at', 'status', 'created_at', 'updated_at')
|
| 21 | 21 |
|
| 22 | 22 |
|
| 23 |
+class FamilyMemberInfoAdmin(admin.ModelAdmin): |
|
| 24 |
+ list_display = ('member_id', 'user_id', 'identity_card_number', 'identity_card_name', 'relation', 'status', 'created_at', 'updated_at')
|
|
| 25 |
+ |
|
| 26 |
+ |
|
| 23 | 27 |
class ThermometerEquipmentInfoAdmin(admin.ModelAdmin): |
| 24 | 28 |
list_display = ('eqpt_id', 'point_id', 'macid', 'sn', 'active_status', 'active_at', 'ipui_pk', 'status', 'created_at', 'updated_at')
|
| 25 | 29 |
list_filter = ('point_id', 'status')
|
@@ -45,3 +49,5 @@ admin.site.register(ThermometerEquipmentInfo, ThermometerEquipmentInfoAdmin) |
||
| 45 | 49 |
admin.site.register(ThermometerMeasureLogInfo, ThermometerMeasureLogInfoAdmin) |
| 46 | 50 |
admin.site.register(AepThermometerMeasureLogInfo, AepThermometerMeasureLogInfoAdmin) |
| 47 | 51 |
admin.site.register(AntigenMeasureLogInfo, AntigenMeasureLogInfoAdmin) |
| 52 |
+admin.site.register(FamilyMemberInfo, FamilyMemberInfoAdmin) |
|
| 53 |
+ |
@@ -0,0 +1,42 @@ |
||
| 1 |
+# Generated by Django 3.2.16 on 2022-12-02 06:15 |
|
| 2 |
+ |
|
| 3 |
+from django.db import migrations, models |
|
| 4 |
+import shortuuidfield.fields |
|
| 5 |
+ |
|
| 6 |
+ |
|
| 7 |
+class Migration(migrations.Migration): |
|
| 8 |
+ |
|
| 9 |
+ dependencies = [ |
|
| 10 |
+ ('equipment', '0031_auto_20221128_1653'),
|
|
| 11 |
+ ] |
|
| 12 |
+ |
|
| 13 |
+ operations = [ |
|
| 14 |
+ migrations.CreateModel( |
|
| 15 |
+ name='FamilyMemberInfo', |
|
| 16 |
+ fields=[ |
|
| 17 |
+ ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
|
| 18 |
+ ('status', models.BooleanField(default=True, help_text='Status', verbose_name='status')),
|
|
| 19 |
+ ('created_at', models.DateTimeField(auto_now_add=True, help_text='Create Time', verbose_name='created_at')),
|
|
| 20 |
+ ('updated_at', models.DateTimeField(auto_now=True, help_text='Update Time', verbose_name='updated_at')),
|
|
| 21 |
+ ('member_id', shortuuidfield.fields.ShortUUIDField(blank=True, db_index=True, editable=False, help_text='家庭成员唯一标识', max_length=22, null=True, unique=True)),
|
|
| 22 |
+ ('user_id', models.CharField(blank=True, db_index=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='user_id')),
|
|
| 23 |
+ ('identity_card_number', models.CharField(blank=True, help_text='身份证号', max_length=32, null=True, verbose_name='identity_card_number')),
|
|
| 24 |
+ ('identity_card_name', models.CharField(blank=True, help_text='身份证姓名', max_length=32, null=True, verbose_name='identity_card_name')),
|
|
| 25 |
+ ('relation', models.CharField(choices=[('parent', '父母'), ('child', '子女'), ('spouse', '配偶')], db_index=True, default='child', help_text='家庭关系', max_length=32, verbose_name='relative')),
|
|
| 26 |
+ ], |
|
| 27 |
+ options={
|
|
| 28 |
+ 'verbose_name': '家庭成员信息', |
|
| 29 |
+ 'verbose_name_plural': '家庭成员信息', |
|
| 30 |
+ }, |
|
| 31 |
+ ), |
|
| 32 |
+ migrations.AddField( |
|
| 33 |
+ model_name='isolationpointuserinfo', |
|
| 34 |
+ name='member_id', |
|
| 35 |
+ field=models.CharField(blank=True, db_index=True, help_text='家庭成员唯一标识', max_length=32, null=True, verbose_name='member_id'), |
|
| 36 |
+ ), |
|
| 37 |
+ migrations.AddField( |
|
| 38 |
+ model_name='thermometermeasureloginfo', |
|
| 39 |
+ name='member_id', |
|
| 40 |
+ field=models.CharField(blank=True, help_text='用户唯一标识', max_length=32, null=True, verbose_name='member_id'), |
|
| 41 |
+ ), |
|
| 42 |
+ ] |
@@ -112,6 +112,34 @@ class IsolationPointInfo(BaseModelMixin): |
||
| 112 | 112 |
'qrcode_url': qrcode_url, |
| 113 | 113 |
} |
| 114 | 114 |
|
| 115 |
+class FamilyMemberInfo(BaseModelMixin): |
|
| 116 |
+ RELATION_TUPLE = ( |
|
| 117 |
+ ('parent', '父母'),
|
|
| 118 |
+ ('child', '子女'),
|
|
| 119 |
+ ('spouse', '配偶'),
|
|
| 120 |
+ ) |
|
| 121 |
+ member_id = ShortUUIDField(_('member_id'), max_length=32, blank=True, null=True, help_text='家庭成员唯一标识', db_index=True, unique=True)
|
|
| 122 |
+ user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识', db_index=True)
|
|
| 123 |
+ identity_card_number = models.CharField(_(u'identity_card_number'), max_length=32, blank=True, null=True, help_text=u'身份证号') |
|
| 124 |
+ identity_card_name = models.CharField(_(u'identity_card_name'), max_length=32, blank=True, null=True, help_text=u'身份证姓名') |
|
| 125 |
+ relation = models.CharField(_('relative'), choices=RELATION_TUPLE, default='child', max_length=32, help_text='家庭关系', db_index=True)
|
|
| 126 |
+ |
|
| 127 |
+ class Meta: |
|
| 128 |
+ verbose_name = _('家庭成员信息')
|
|
| 129 |
+ verbose_name_plural = _('家庭成员信息')
|
|
| 130 |
+ |
|
| 131 |
+ def __unicode__(self): |
|
| 132 |
+ return '%d' % self.pk |
|
| 133 |
+ |
|
| 134 |
+ @property |
|
| 135 |
+ def data(self): |
|
| 136 |
+ return {
|
|
| 137 |
+ 'member_id': self.member_id, |
|
| 138 |
+ 'user_id': self.user_id, |
|
| 139 |
+ 'identity_card_number': self.identity_card_number, |
|
| 140 |
+ 'identity_card_name': self.identity_card_name, |
|
| 141 |
+ 'relation': self.relation, |
|
| 142 |
+ } |
|
| 115 | 143 |
|
| 116 | 144 |
class IsolationPointUserInfo(BaseModelMixin): |
| 117 | 145 |
HAS_NOT_UPLOAD = '未上报' |
@@ -134,6 +162,7 @@ class IsolationPointUserInfo(BaseModelMixin): |
||
| 134 | 162 |
point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True)
|
| 135 | 163 |
|
| 136 | 164 |
user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识', db_index=True)
|
| 165 |
+ member_id = models.CharField(_('member_id'), max_length=32, blank=True, null=True, help_text='家庭成员唯一标识', db_index=True)
|
|
| 137 | 166 |
|
| 138 | 167 |
fields = JSONField(_('fields'), default=[], blank=True, null=True, help_text='字段信息')
|
| 139 | 168 |
|
@@ -313,6 +342,7 @@ class ThermometerMeasureLogInfo(BaseModelMixin): |
||
| 313 | 342 |
point_id = models.CharField(_('point_id'), max_length=32, blank=True, null=True, help_text='隔离点唯一标识', db_index=True)
|
| 314 | 343 |
|
| 315 | 344 |
user_id = models.CharField(_('user_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识')
|
| 345 |
+ member_id = models.CharField(_('member_id'), max_length=32, blank=True, null=True, help_text='用户唯一标识')
|
|
| 316 | 346 |
|
| 317 | 347 |
macid = models.CharField(_('macid'), max_length=32, blank=True, null=True, help_text='设备号')
|
| 318 | 348 |
sn = models.CharField(_('sn'), max_length=32, blank=True, null=True, help_text='序列号')
|