区域绑定功能

This commit is contained in:
曹前明 2022-06-25 09:47:28 +08:00
parent 16c46902c1
commit 18344bd121
4 changed files with 31 additions and 3 deletions

View File

@ -0,0 +1,18 @@
# Generated by Django 3.2.12 on 2022-06-25 01:47
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('am', '0002_auto_20220625_0819'),
]
operations = [
migrations.AddField(
model_name='area',
name='count_people',
field=models.PositiveIntegerField(default=0, verbose_name='当前人数'),
),
]

View File

@ -34,6 +34,7 @@ class Area(CommonBModel):
posts_access = models.ManyToManyField(Post, through='am.access')
count_people_min = models.PositiveIntegerField('最小人员数', default=0)
count_people_max = models.PositiveIntegerField('最大人员数', default=1000)
count_people = models.PositiveIntegerField('当前人数', default=0)
third_info = models.JSONField('三方信息', default=dict,
null=False, blank=True)

View File

@ -28,14 +28,14 @@ class AreaViewSet(CustomModelViewSet):
obj = self.get_object()
third_info = obj.third_info
if 'xx_rail' in third_info:
data['uuid'] = third_info['xx_rail']['uuid']
data['id'] = third_info['xx_rail']['id']
_, res = xxClient.request(**xxapis['rail_update'], json=data)
third_info['xx_rail']['detail'] = data
obj.third_info = third_info
obj.save()
else:
_, res = xxClient.request(**xxapis['rail_create'], json=data)
rail_info = {'uuid': res, 'detail': data}
rail_info = {'id': res, 'detail': data}
third_info['xx_rail'] = rail_info
obj.third_info = third_info
obj.save()

View File

@ -4,10 +4,17 @@ from apps.am.models import Area
from apps.third.clients import xxClient
from apps.third.tapis import xxapis
class EcmService:
"""事件处理服务
"""
def create_remind(cls):
"""
创建事件提醒并发送通知
"""
pass
@classmethod
def dispatch_dahua_event(cls, data: dict):
"""分发大华事件进行处理
@ -51,10 +58,12 @@ class EcmService:
"""围栏进入事件
"""
# 判断区域是否超员
area = Area.objects.filter(third_info__xx_railId=data['railId']).first()
area = Area.objects.filter(third_info__xx_rail__id=data['railId']).first()
if area:
json = {"railId": data['railId'], "type": ""}
_, res = xxClient.request(**xxapis['rail_ibeacon_list'], json=json)
if res['totalCount'] >= area.count_people_max:
# 触发超员事件
area.count_people = res['totalCount']
area.save()
pass