:art: IsolationPoint support point_upload_period

huangqimin001 3 jaren geleden
bovenliggende
commit
b695f2a5ea
4 gewijzigde bestanden met toevoegingen van 54 en 2 verwijderingen
  1. 4 0
      api/eqpt_views.py
  2. 1 1
      equipment/admin.py
  3. 24 0
      equipment/migrations/0025_auto_20220411_1521.py
  4. 25 1
      equipment/models.py

+ 4 - 0
api/eqpt_views.py

@@ -364,6 +364,10 @@ def mqtt_upload_temperature(payload):
364 364
     except IsolationPointInfo.DoesNotExist:
365 365
         return
366 366
 
367
+    # 非配置的隔离点上报时间内
368
+    if not point.match_upload_period:
369
+        return
370
+
367 371
     ThermometerMeasureLogInfo.objects.create(point_id=eqpt.point_id, macid=macid, start_stamp=start_stamp, end_stamp=end_stamp, temperature=temperature, temperature_src=ThermometerMeasureLogInfo.MQTT, chg_sta=chg_sta, ignore_temperature=ignore_temperature, ignore_fever_temperature=ignore_fever_temperature, upload_temperature_info=payload)
368 372
 
369 373
     try:

+ 1 - 1
equipment/admin.py

@@ -12,7 +12,7 @@ class IsolationPointFieldPoolInfoAdmin(admin.ModelAdmin):
12 12
 
13 13
 
14 14
 class IsolationPointInfoAdmin(admin.ModelAdmin):
15
-    list_display = ('point_id', 'point_name', 'point_fields', 'limit_scene_qrcode_url', 'status', 'created_at', 'updated_at')
15
+    list_display = ('point_id', 'point_name', 'point_fields', 'point_upload_period', 'limit_scene_qrcode_url', 'status', 'created_at', 'updated_at')
16 16
 
17 17
 
18 18
 class IsolationPointUserInfoAdmin(admin.ModelAdmin):

+ 24 - 0
equipment/migrations/0025_auto_20220411_1521.py

@@ -0,0 +1,24 @@
1
+# Generated by Django 3.2.7 on 2022-04-11 07:21
2
+
3
+from django.db import migrations
4
+import jsonfield.fields
5
+
6
+
7
+class Migration(migrations.Migration):
8
+
9
+    dependencies = [
10
+        ('equipment', '0024_auto_20211122_1633'),
11
+    ]
12
+
13
+    operations = [
14
+        migrations.AddField(
15
+            model_name='isolationpointinfo',
16
+            name='point_upload_period',
17
+            field=jsonfield.fields.JSONField(blank=True, default=[], help_text='隔离点上传时段', null=True, verbose_name='point_upload_period'),
18
+        ),
19
+        migrations.AlterField(
20
+            model_name='isolationpointinfo',
21
+            name='point_fields',
22
+            field=jsonfield.fields.JSONField(blank=True, default=[], help_text='隔离点字段列表', null=True, verbose_name='point_fields'),
23
+        ),
24
+    ]

+ 25 - 1
equipment/models.py

@@ -57,7 +57,18 @@ class IsolationPointInfo(BaseModelMixin):
57 57
     #     "name": "",
58 58
     #     "options": ["男", "女"],  # type=select
59 59
     # }
60
-    point_fields = JSONField(_('point_fields'), default=[], blank=True, null=True, help_text='字段列表')
60
+    point_fields = JSONField(_('point_fields'), default=[], blank=True, null=True, help_text='隔离点字段列表')
61
+
62
+    # [
63
+    #     {
64
+    #         'start': '',
65
+    #         'end': '',
66
+    #     }, {
67
+    #         'start': '',
68
+    #         'end': '',
69
+    #     }
70
+    # ]
71
+    point_upload_period = JSONField(_('point_upload_period'), default=[], blank=True, null=True, help_text='隔离点上传时段')
61 72
 
62 73
     limit_scene_qrcode_url = models.CharField(_('limit_scene_qrcode_url'), max_length=255, blank=True, null=True, help_text='字段二维码')
63 74
 
@@ -69,6 +80,19 @@ class IsolationPointInfo(BaseModelMixin):
69 80
         return self.pk
70 81
 
71 82
     @property
83
+    def match_upload_period(self):
84
+        if not self.point_upload_period:
85
+            return True
86
+        for period in self.point_upload_period:
87
+            local_date_string = tc.local_date_string()
88
+            start_dt = tc.string_to_datetime(f'{local_date_string} {period["start"]}', format='%Y-%m-%d %H:%M')
89
+            end_dt = tc.string_to_datetime(f'{local_date_string} {period["end"]}', format='%Y-%m-%d %H:%M')
90
+            current_dt = tc.make_naive(tc.local_datetime())
91
+            if start_dt < current_dt < end_dt:
92
+                return True
93
+        return False
94
+
95
+    @property
72 96
     def data(self):
73 97
         qrcode_url = get_qrcode_url(self.point_id)
74 98
         return {