blt employee 带照片
This commit is contained in:
parent
f4b467dced
commit
026d860900
|
@ -0,0 +1,38 @@
|
||||||
|
//python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./BeiHangGrpc.proto
|
||||||
|
syntax = "proto3";
|
||||||
|
|
||||||
|
option java_generic_services = true;
|
||||||
|
option java_multiple_files = true;
|
||||||
|
option java_package = "com.lyzh.aiservice.grpc";
|
||||||
|
option java_outer_classname = "BeiHangProto";
|
||||||
|
|
||||||
|
service Helmet_Reg {
|
||||||
|
rpc sendHelmet_Info(JinYu_Request) returns (BHhelmet_Response){}
|
||||||
|
}
|
||||||
|
|
||||||
|
message JinYu_Request {
|
||||||
|
int64 zzid = 1; //业务唯一ID
|
||||||
|
string imgsbase64 = 2 ; //图像Base64字符串
|
||||||
|
string imgUrl = 3 ; //图像oss链接Url
|
||||||
|
}
|
||||||
|
|
||||||
|
message BHhelmet_Response {
|
||||||
|
int64 zzid = 1; //业务唯一ID
|
||||||
|
repeated HelmetInfo helmetinfoList = 2; //0:带安全帽 1:未带安全帽
|
||||||
|
}
|
||||||
|
|
||||||
|
message Point {
|
||||||
|
double x = 1; //x坐标
|
||||||
|
double y = 2; //y坐标
|
||||||
|
}
|
||||||
|
|
||||||
|
message Rectangle {
|
||||||
|
Point uleft = 1; //左上
|
||||||
|
Point lright = 2; //右下
|
||||||
|
}
|
||||||
|
|
||||||
|
message HelmetInfo {
|
||||||
|
int64 head_helmet = 1; //戴头盔
|
||||||
|
double conf = 2; //置信度
|
||||||
|
Rectangle coord = 3; //矩形坐标
|
||||||
|
}
|
|
@ -0,0 +1,75 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# Generated by the protocol buffer compiler. DO NOT EDIT!
|
||||||
|
# source: BeiHangGrpc.proto
|
||||||
|
"""Generated protocol buffer code."""
|
||||||
|
from google.protobuf import descriptor as _descriptor
|
||||||
|
from google.protobuf import descriptor_pool as _descriptor_pool
|
||||||
|
from google.protobuf import message as _message
|
||||||
|
from google.protobuf import reflection as _reflection
|
||||||
|
from google.protobuf import symbol_database as _symbol_database
|
||||||
|
# @@protoc_insertion_point(imports)
|
||||||
|
|
||||||
|
_sym_db = _symbol_database.Default()
|
||||||
|
|
||||||
|
|
||||||
|
DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x11\x42\x65iHangGrpc.proto\"A\n\rJinYu_Request\x12\x0c\n\x04zzid\x18\x01 \x01(\x03\x12\x12\n\nimgsbase64\x18\x02 \x01(\t\x12\x0e\n\x06imgUrl\x18\x03 \x01(\t\"F\n\x11\x42Hhelmet_Response\x12\x0c\n\x04zzid\x18\x01 \x01(\x03\x12#\n\x0ehelmetinfoList\x18\x02 \x03(\x0b\x32\x0b.HelmetInfo\"\x1d\n\x05Point\x12\t\n\x01x\x18\x01 \x01(\x01\x12\t\n\x01y\x18\x02 \x01(\x01\":\n\tRectangle\x12\x15\n\x05uleft\x18\x01 \x01(\x0b\x32\x06.Point\x12\x16\n\x06lright\x18\x02 \x01(\x0b\x32\x06.Point\"J\n\nHelmetInfo\x12\x13\n\x0bhead_helmet\x18\x01 \x01(\x03\x12\x0c\n\x04\x63onf\x18\x02 \x01(\x01\x12\x19\n\x05\x63oord\x18\x03 \x01(\x0b\x32\n.Rectangle2E\n\nHelmet_Reg\x12\x37\n\x0fsendHelmet_Info\x12\x0e.JinYu_Request\x1a\x12.BHhelmet_Response\"\x00\x42,\n\x17\x63om.lyzh.aiservice.grpcB\x0c\x42\x65iHangProtoP\x01\x88\x01\x01\x62\x06proto3')
|
||||||
|
|
||||||
|
|
||||||
|
_JINYU_REQUEST = DESCRIPTOR.message_types_by_name['JinYu_Request']
|
||||||
|
_BHHELMET_RESPONSE = DESCRIPTOR.message_types_by_name['BHhelmet_Response']
|
||||||
|
_POINT = DESCRIPTOR.message_types_by_name['Point']
|
||||||
|
_RECTANGLE = DESCRIPTOR.message_types_by_name['Rectangle']
|
||||||
|
_HELMETINFO = DESCRIPTOR.message_types_by_name['HelmetInfo']
|
||||||
|
JinYu_Request = _reflection.GeneratedProtocolMessageType('JinYu_Request', (_message.Message,), {
|
||||||
|
'DESCRIPTOR': _JINYU_REQUEST,
|
||||||
|
'__module__': 'BeiHangGrpc_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:JinYu_Request)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(JinYu_Request)
|
||||||
|
|
||||||
|
BHhelmet_Response = _reflection.GeneratedProtocolMessageType('BHhelmet_Response', (_message.Message,), {
|
||||||
|
'DESCRIPTOR': _BHHELMET_RESPONSE,
|
||||||
|
'__module__': 'BeiHangGrpc_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:BHhelmet_Response)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(BHhelmet_Response)
|
||||||
|
|
||||||
|
Point = _reflection.GeneratedProtocolMessageType('Point', (_message.Message,), {
|
||||||
|
'DESCRIPTOR': _POINT,
|
||||||
|
'__module__': 'BeiHangGrpc_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:Point)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(Point)
|
||||||
|
|
||||||
|
Rectangle = _reflection.GeneratedProtocolMessageType('Rectangle', (_message.Message,), {
|
||||||
|
'DESCRIPTOR': _RECTANGLE,
|
||||||
|
'__module__': 'BeiHangGrpc_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:Rectangle)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(Rectangle)
|
||||||
|
|
||||||
|
HelmetInfo = _reflection.GeneratedProtocolMessageType('HelmetInfo', (_message.Message,), {
|
||||||
|
'DESCRIPTOR': _HELMETINFO,
|
||||||
|
'__module__': 'BeiHangGrpc_pb2'
|
||||||
|
# @@protoc_insertion_point(class_scope:HelmetInfo)
|
||||||
|
})
|
||||||
|
_sym_db.RegisterMessage(HelmetInfo)
|
||||||
|
|
||||||
|
_HELMET_REG = DESCRIPTOR.services_by_name['Helmet_Reg']
|
||||||
|
if _descriptor._USE_C_DESCRIPTORS == False:
|
||||||
|
|
||||||
|
DESCRIPTOR._options = None
|
||||||
|
DESCRIPTOR._serialized_options = b'\n\027com.lyzh.aiservice.grpcB\014BeiHangProtoP\001\210\001\001'
|
||||||
|
_JINYU_REQUEST._serialized_start = 21
|
||||||
|
_JINYU_REQUEST._serialized_end = 86
|
||||||
|
_BHHELMET_RESPONSE._serialized_start = 88
|
||||||
|
_BHHELMET_RESPONSE._serialized_end = 158
|
||||||
|
_POINT._serialized_start = 160
|
||||||
|
_POINT._serialized_end = 189
|
||||||
|
_RECTANGLE._serialized_start = 191
|
||||||
|
_RECTANGLE._serialized_end = 249
|
||||||
|
_HELMETINFO._serialized_start = 251
|
||||||
|
_HELMETINFO._serialized_end = 325
|
||||||
|
_HELMET_REG._serialized_start = 327
|
||||||
|
_HELMET_REG._serialized_end = 396
|
||||||
|
# @@protoc_insertion_point(module_scope)
|
|
@ -0,0 +1,67 @@
|
||||||
|
# Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
|
||||||
|
"""Client and server classes corresponding to protobuf-defined services."""
|
||||||
|
import grpc
|
||||||
|
|
||||||
|
import BeiHangGrpc_pb2 as BeiHangGrpc__pb2
|
||||||
|
|
||||||
|
|
||||||
|
class Helmet_RegStub(object):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
|
||||||
|
def __init__(self, channel):
|
||||||
|
"""Constructor.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
channel: A grpc.Channel.
|
||||||
|
"""
|
||||||
|
self.sendHelmet_Info = channel.unary_unary(
|
||||||
|
'/Helmet_Reg/sendHelmet_Info',
|
||||||
|
request_serializer=BeiHangGrpc__pb2.JinYu_Request.SerializeToString,
|
||||||
|
response_deserializer=BeiHangGrpc__pb2.BHhelmet_Response.FromString,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Helmet_RegServicer(object):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
|
||||||
|
def sendHelmet_Info(self, request, context):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
context.set_code(grpc.StatusCode.UNIMPLEMENTED)
|
||||||
|
context.set_details('Method not implemented!')
|
||||||
|
raise NotImplementedError('Method not implemented!')
|
||||||
|
|
||||||
|
|
||||||
|
def add_Helmet_RegServicer_to_server(servicer, server):
|
||||||
|
rpc_method_handlers = {
|
||||||
|
'sendHelmet_Info': grpc.unary_unary_rpc_method_handler(
|
||||||
|
servicer.sendHelmet_Info,
|
||||||
|
request_deserializer=BeiHangGrpc__pb2.JinYu_Request.FromString,
|
||||||
|
response_serializer=BeiHangGrpc__pb2.BHhelmet_Response.SerializeToString,
|
||||||
|
),
|
||||||
|
}
|
||||||
|
generic_handler = grpc.method_handlers_generic_handler(
|
||||||
|
'Helmet_Reg', rpc_method_handlers)
|
||||||
|
server.add_generic_rpc_handlers((generic_handler,))
|
||||||
|
|
||||||
|
# This class is part of an EXPERIMENTAL API.
|
||||||
|
|
||||||
|
|
||||||
|
class Helmet_Reg(object):
|
||||||
|
"""Missing associated documentation comment in .proto file."""
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def sendHelmet_Info(request,
|
||||||
|
target,
|
||||||
|
options=(),
|
||||||
|
channel_credentials=None,
|
||||||
|
call_credentials=None,
|
||||||
|
insecure=False,
|
||||||
|
compression=None,
|
||||||
|
wait_for_ready=None,
|
||||||
|
timeout=None,
|
||||||
|
metadata=None):
|
||||||
|
return grpc.experimental.unary_unary(request, target, '/Helmet_Reg/sendHelmet_Info',
|
||||||
|
BeiHangGrpc__pb2.JinYu_Request.SerializeToString,
|
||||||
|
BeiHangGrpc__pb2.BHhelmet_Response.FromString,
|
||||||
|
options, channel_credentials,
|
||||||
|
insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
|
|
@ -0,0 +1,31 @@
|
||||||
|
|
||||||
|
import grpc
|
||||||
|
|
||||||
|
# import base64
|
||||||
|
|
||||||
|
from . import BeiHangGrpc_pb2_grpc
|
||||||
|
from . import BeiHangGrpc_pb2
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
IP = '127.0.0.1:9000'
|
||||||
|
|
||||||
|
channel = grpc.insecure_channel(IP) # 监听频道
|
||||||
|
stub = BeiHangGrpc_pb2_grpc.Helmet_RegStub(channel) # 客户端使用Stub类发送请求,参数为频道,为了绑定链接
|
||||||
|
image_id = 3
|
||||||
|
|
||||||
|
# 本地图像输入
|
||||||
|
# image_path = "./onnx/image/single3.jpg"
|
||||||
|
# with open(image_path, 'rb') as f:
|
||||||
|
# image_base64 = str(base64.b64encode(f.read()), encoding='utf-8')
|
||||||
|
# request = BeiHangGrpc_pb2.JinYu_Request(zzid=image_id,imgsbase64=image_base64)
|
||||||
|
|
||||||
|
# URL输入
|
||||||
|
imgUrl = "XXXXX.jpg"
|
||||||
|
request = BeiHangGrpc_pb2.JinYu_Request(zzid=image_id, imgUrl=imgUrl)
|
||||||
|
try:
|
||||||
|
response = stub.sendHelmet_Info(request)
|
||||||
|
print("network success! \n")
|
||||||
|
print(response)
|
||||||
|
except Exception:
|
||||||
|
print("network error! \n")
|
|
@ -1,30 +1,38 @@
|
||||||
from __future__ import absolute_import, unicode_literals
|
from __future__ import absolute_import, unicode_literals
|
||||||
|
from threading import Thread
|
||||||
|
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
|
|
||||||
from apps.am.models import Area
|
from apps.am.models import Area
|
||||||
from apps.third.clients import xxClient
|
from apps.third.clients import xxClient
|
||||||
|
from apps.third.models import TDevice
|
||||||
from apps.third.tapis import xxapis
|
from apps.third.tapis import xxapis
|
||||||
|
|
||||||
|
|
||||||
|
def update_count_people(i: Area):
|
||||||
|
if i.third_info.get('xx_rail', None):
|
||||||
|
railId = i.third_info['xx_rail']['id']
|
||||||
|
json = {"railId": railId, "type": ""}
|
||||||
|
_, res = xxClient.request(**xxapis['rail_ibeacon_list'], json=json)
|
||||||
|
blt_list = res['recordList']
|
||||||
|
macs = []
|
||||||
|
for i in blt_list:
|
||||||
|
macs.append(i['mac'])
|
||||||
|
i.count_people = TDevice.objects.filter(
|
||||||
|
type=TDevice.DEVICE_BLT, obj_cate='people', code__in=macs).exclude(employee=None).count()
|
||||||
|
i.save()
|
||||||
|
if i.count_people >= i.count_people_max:
|
||||||
|
# 触发超员事件
|
||||||
|
pass
|
||||||
|
elif i.count_people < i.count_people_min:
|
||||||
|
# 触发缺员事件
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
@shared_task
|
@shared_task
|
||||||
def cal_area_count():
|
def cal_area_count():
|
||||||
"""
|
"""
|
||||||
计算区域内人员数量
|
计算区域内人员数量
|
||||||
"""
|
"""
|
||||||
for i in Area.objects.filter(type=Area.AREA_TYPE_FIX):
|
for i in Area.objects.filter(type=Area.AREA_TYPE_FIX):
|
||||||
if i.third_info.get('xx_rail', None):
|
Thread(target=update_count_people, args=(i,)).start()
|
||||||
railId = i.third_info['xx_rail']['id']
|
|
||||||
json = {"railId": railId, "type": ""}
|
|
||||||
_, res = xxClient.request(**xxapis['rail_ibeacon_list'], json=json)
|
|
||||||
total_count = res['totalCount']
|
|
||||||
if total_count >= i.count_people_max:
|
|
||||||
# 触发超员事件
|
|
||||||
i.count_people = total_count
|
|
||||||
i.save()
|
|
||||||
pass
|
|
||||||
elif total_count < i.count_people_min:
|
|
||||||
# 触发缺员事件
|
|
||||||
i.count_people_min = total_count
|
|
||||||
i.save()
|
|
||||||
pass
|
|
||||||
|
|
|
@ -22,7 +22,7 @@ class EmployeeSimpleSerializer(CustomModelSerializer):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Employee
|
model = Employee
|
||||||
fields = ['id', 'type', 'name', 'belong_dept', 'belong_dept_name', 'post', 'post_name']
|
fields = ['id', 'type', 'name', 'belong_dept', 'belong_dept_name', 'post', 'post_name', 'photo']
|
||||||
|
|
||||||
|
|
||||||
class EmployeeBaseSerializer(CustomModelSerializer):
|
class EmployeeBaseSerializer(CustomModelSerializer):
|
||||||
|
@ -58,6 +58,10 @@ class EmployeeCreateUpdateSerializer(EmployeeBaseSerializer):
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def create(self, validated_data):
|
def create(self, validated_data):
|
||||||
instance = super().create(validated_data)
|
instance = super().create(validated_data)
|
||||||
|
if instance.user: # 同步更新账户里的手机号
|
||||||
|
user = instance.user
|
||||||
|
user.phone = instance.phone
|
||||||
|
user.save()
|
||||||
if settings.DAHUA_ENABLED and dhClient:
|
if settings.DAHUA_ENABLED and dhClient:
|
||||||
dahua_data = HrmService.sync_dahua_employee(ep=instance)
|
dahua_data = HrmService.sync_dahua_employee(ep=instance)
|
||||||
third_info = instance.third_info
|
third_info = instance.third_info
|
||||||
|
@ -69,6 +73,10 @@ class EmployeeCreateUpdateSerializer(EmployeeBaseSerializer):
|
||||||
def update(self, instance, validated_data):
|
def update(self, instance, validated_data):
|
||||||
old_photo = instance.photo
|
old_photo = instance.photo
|
||||||
instance = super().update(instance, validated_data)
|
instance = super().update(instance, validated_data)
|
||||||
|
if instance.user: # 同步更新账户里的手机号
|
||||||
|
user = instance.user
|
||||||
|
user.phone = instance.phone
|
||||||
|
user.save()
|
||||||
if settings.DAHUA_ENABLED and dhClient:
|
if settings.DAHUA_ENABLED and dhClient:
|
||||||
dahua_data = HrmService.sync_dahua_employee(ep=instance, old_photo=old_photo)
|
dahua_data = HrmService.sync_dahua_employee(ep=instance, old_photo=old_photo)
|
||||||
third_info = instance.third_info
|
third_info = instance.third_info
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
from django.contrib.auth.models import UserManager
|
||||||
import enum
|
import enum
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.contrib.auth.models import AbstractUser
|
from django.contrib.auth.models import AbstractUser
|
||||||
|
@ -111,11 +112,10 @@ class PostRole(BaseModel):
|
||||||
on_delete=models.CASCADE, null=True, blank=True)
|
on_delete=models.CASCADE, null=True, blank=True)
|
||||||
|
|
||||||
|
|
||||||
from django.contrib.auth.models import UserManager
|
|
||||||
|
|
||||||
class SoftDeletableUserManager(SoftDeletableManagerMixin, UserManager):
|
class SoftDeletableUserManager(SoftDeletableManagerMixin, UserManager):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
class User(AbstractUser, CommonBModel):
|
class User(AbstractUser, CommonBModel):
|
||||||
"""
|
"""
|
||||||
用户
|
用户
|
||||||
|
|
|
@ -305,7 +305,7 @@ class DeptViewSet(CustomModelViewSet):
|
||||||
|
|
||||||
部门-增删改查
|
部门-增删改查
|
||||||
"""
|
"""
|
||||||
queryset = Dept.objects.filter(type__in=['dept', 'company'])
|
queryset = Dept.objects.all()
|
||||||
serializer_class = DeptSerializer
|
serializer_class = DeptSerializer
|
||||||
create_serializer_class = DeptCreateUpdateSerializer
|
create_serializer_class = DeptCreateUpdateSerializer
|
||||||
update_serializer_class = DeptCreateUpdateSerializer
|
update_serializer_class = DeptCreateUpdateSerializer
|
||||||
|
@ -313,6 +313,14 @@ class DeptViewSet(CustomModelViewSet):
|
||||||
filterset_fields = ['type']
|
filterset_fields = ['type']
|
||||||
search_fields = ['name']
|
search_fields = ['name']
|
||||||
|
|
||||||
|
def get_queryset(self):
|
||||||
|
type = self.request.query_params.get('type', None)
|
||||||
|
if type:
|
||||||
|
queryset = Dept.objects.filter(type='rparty')
|
||||||
|
else:
|
||||||
|
queryset = Dept.objects.filter(type__in=['dept', 'company'])
|
||||||
|
return queryset
|
||||||
|
|
||||||
|
|
||||||
class RoleViewSet(CustomModelViewSet):
|
class RoleViewSet(CustomModelViewSet):
|
||||||
"""角色-增删改查
|
"""角色-增删改查
|
||||||
|
|
|
@ -11,6 +11,8 @@ class PicSerializer(serializers.Serializer):
|
||||||
|
|
||||||
|
|
||||||
class TDeviceSerializer(CustomModelSerializer):
|
class TDeviceSerializer(CustomModelSerializer):
|
||||||
|
area_name = serializers.CharField(source='area.name', read_only=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = TDevice
|
model = TDevice
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
|
@ -52,7 +52,7 @@ class BltViewSet(CustomGenericViewSet):
|
||||||
macs = []
|
macs = []
|
||||||
for i in blt_list:
|
for i in blt_list:
|
||||||
macs.append(i['mac'])
|
macs.append(i['mac'])
|
||||||
qs = self.queryset.filter().exclude(employee=None, code__in=macs)
|
qs = self.queryset.filter(code__in=macs).exclude(employee=None)
|
||||||
ret['total'] = qs.count()
|
ret['total'] = qs.count()
|
||||||
ret['count_employee'] = qs.filter(employee__type='employee').count()
|
ret['count_employee'] = qs.filter(employee__type='employee').count()
|
||||||
ret['count_remployee'] = qs.filter(employee__type='remployee').count()
|
ret['count_remployee'] = qs.filter(employee__type='remployee').count()
|
||||||
|
@ -86,12 +86,13 @@ class BltViewSet(CustomGenericViewSet):
|
||||||
"online": "online"
|
"online": "online"
|
||||||
}
|
}
|
||||||
_, res = xxClient.request(**xxapis['blt_list'], json=json)
|
_, res = xxClient.request(**xxapis['blt_list'], json=json)
|
||||||
|
count_people = 0
|
||||||
blt_list = res['recordList']
|
blt_list = res['recordList']
|
||||||
macs = []
|
macs = []
|
||||||
for i in blt_list:
|
for i in blt_list:
|
||||||
macs.append(i['mac'])
|
macs.append(i['mac'])
|
||||||
qs = self.queryset.filter(code__in=macs).exclude(employee=None)
|
qs = self.queryset.filter(code__in=macs).exclude(employee=None)
|
||||||
qs_data = list(BltSerializer(instance=qs, many=True).data)
|
qs_data = BltSerializer(instance=qs, many=True).data
|
||||||
qs_dict = {}
|
qs_dict = {}
|
||||||
for i in qs_data:
|
for i in qs_data:
|
||||||
qs_dict[i['code']] = i
|
qs_dict[i['code']] = i
|
||||||
|
@ -99,6 +100,11 @@ class BltViewSet(CustomGenericViewSet):
|
||||||
i['my_info'] = {}
|
i['my_info'] = {}
|
||||||
if i['mac'] in qs_dict:
|
if i['mac'] in qs_dict:
|
||||||
i['my_info'] = qs_dict[i['mac']]
|
i['my_info'] = qs_dict[i['mac']]
|
||||||
|
if area:
|
||||||
|
# 更新区域下的总人数
|
||||||
|
count_people = qs.filter(obj_cate='people').count()
|
||||||
|
area.count_people = count_people
|
||||||
|
area.save()
|
||||||
return Response(blt_list)
|
return Response(blt_list)
|
||||||
|
|
||||||
|
|
||||||
|
@ -123,7 +129,7 @@ class TDeviceViewSet(ListModelMixin, CustomGenericViewSet):
|
||||||
for i in res['recordList']:
|
for i in res['recordList']:
|
||||||
macs.append(i['mac'])
|
macs.append(i['mac'])
|
||||||
qs = self.queryset.filter(code__in=macs).exclude(employee=None)
|
qs = self.queryset.filter(code__in=macs).exclude(employee=None)
|
||||||
qs_data = list(BltSerializer(instance=qs, many=True).data)
|
qs_data = BltSerializer(instance=qs, many=True).data
|
||||||
qs_dict = {}
|
qs_dict = {}
|
||||||
for i in qs_data:
|
for i in qs_data:
|
||||||
qs_dict[i['code']] = i
|
qs_dict[i['code']] = i
|
||||||
|
@ -148,10 +154,12 @@ class TDeviceViewSet(ListModelMixin, CustomGenericViewSet):
|
||||||
for i in res['pageData']:
|
for i in res['pageData']:
|
||||||
codes.append(i['channelCode'])
|
codes.append(i['channelCode'])
|
||||||
tds_info = TDeviceSerializer(instance=TDevice.objects.filter(code__in=codes), many=True).data
|
tds_info = TDeviceSerializer(instance=TDevice.objects.filter(code__in=codes), many=True).data
|
||||||
for x in res['pageData']:
|
tds_dict = {}
|
||||||
for y in tds_info:
|
for i in tds_info:
|
||||||
if x['channelCode'] == y['code']:
|
tds_dict[i['code']] = i
|
||||||
x['my_info'] = y
|
for i in res['pageData']:
|
||||||
|
if i['channelCode'] in tds_dict:
|
||||||
|
i['my_info'] = tds_dict[i['channelCode']]
|
||||||
return Response(res)
|
return Response(res)
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': '*'},
|
@action(methods=['post'], detail=False, perms_map={'post': '*'},
|
||||||
|
@ -163,6 +171,16 @@ class TDeviceViewSet(ListModelMixin, CustomGenericViewSet):
|
||||||
喇叭列表
|
喇叭列表
|
||||||
"""
|
"""
|
||||||
_, res = spClient.request(**spapis['device_list'], params=request.data)
|
_, res = spClient.request(**spapis['device_list'], params=request.data)
|
||||||
|
codes = []
|
||||||
|
for i in res['rows']:
|
||||||
|
codes.append(i['sn'])
|
||||||
|
tds_info = TDeviceSerializer(instance=TDevice.objects.filter(code__in=codes), many=True).data
|
||||||
|
tds_dict = {}
|
||||||
|
for i in tds_info:
|
||||||
|
tds_dict[i['code']] = i
|
||||||
|
for i in res['rows']:
|
||||||
|
if i['sn'] in tds_dict:
|
||||||
|
i['my_info'] = tds_dict[i['sn']]
|
||||||
return Response(res)
|
return Response(res)
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': '*'},
|
@action(methods=['post'], detail=False, perms_map={'post': '*'},
|
||||||
|
@ -175,6 +193,17 @@ class TDeviceViewSet(ListModelMixin, CustomGenericViewSet):
|
||||||
"""
|
"""
|
||||||
request.data.update({'channelTypeList': ["7"]})
|
request.data.update({'channelTypeList': ["7"]})
|
||||||
_, res = dhClient.request(**dhapis['channel_list'], json=request.data)
|
_, res = dhClient.request(**dhapis['channel_list'], json=request.data)
|
||||||
|
codes = []
|
||||||
|
if res.get('pageData', None):
|
||||||
|
for i in res['pageData']:
|
||||||
|
codes.append(i['channelCode'])
|
||||||
|
tds_info = TDeviceSerializer(instance=TDevice.objects.filter(code__in=codes), many=True).data
|
||||||
|
tds_dict = {}
|
||||||
|
for i in tds_info:
|
||||||
|
tds_dict[i['code']] = i
|
||||||
|
for i in res['pageData']:
|
||||||
|
if i['channelCode'] in tds_dict:
|
||||||
|
i['my_info'] = tds_dict[i['channelCode']]
|
||||||
return Response(res)
|
return Response(res)
|
||||||
|
|
||||||
@action(methods=['post'], detail=False, perms_map={'post': 'tdevice:label_location'},
|
@action(methods=['post'], detail=False, perms_map={'post': 'tdevice:label_location'},
|
||||||
|
|
|
@ -24,3 +24,6 @@ aliyun-python-sdk-core==2.13.36
|
||||||
baidu-aip==4.16.6
|
baidu-aip==4.16.6
|
||||||
chardet==5.0.0
|
chardet==5.0.0
|
||||||
requests==2.28.1
|
requests==2.28.1
|
||||||
|
grpcio==1.47.0
|
||||||
|
grpcio-tools==1.47.0
|
||||||
|
protobuf==3.20.1
|
||||||
|
|
Loading…
Reference in New Issue