diff --git a/apps/ecm/service.py b/apps/ecm/service.py index 761d1686..46e3e2e0 100644 --- a/apps/ecm/service.py +++ b/apps/ecm/service.py @@ -20,7 +20,10 @@ import os from apps.utils.speech import generate_voice from threading import Thread from apps.utils.tools import timestamp_to_time - +from apps.third.clients import xxClient +from apps.third.tapis import xxapis +import logging +myLogger = logging.getLogger('log') from apps.vm.models import Visit requests.packages.urllib3.disable_warnings() @@ -210,6 +213,28 @@ def create_remind(event: Event, params: dict): event.save() +def check_miss_lcard(ep: Employee, area: Area): + # 获取当前区域下的定位卡列表 + try: + railId = area.third_info['xx_rail']['id'] + json = { + "railId": railId, + "type": "" + } + is_ok, res = xxClient.request(**xxapis['rail_ibeacon_list'], json=json, raise_exception=False) + if is_ok: + blt_list = res['recordList'] + macs = [] # 所有该区域在线标签 + for i in blt_list: + macs.append(i['mac']) + td = TDevice.objects.filter(type=TDevice.DEVICE_BLT, employee=ep).first() + if td: + if td.code not in macs: + return True + except Exception: + myLogger.error('检查未带定位卡失败', exc_info=True) + + def dispatch_dahua_event(data: dict): """分发大华事件进行处理 """ @@ -227,9 +252,16 @@ def dispatch_dahua_event(data: dict): global_img_o = dhClient.get_full_pic(data['info']['extend']['globalScenePicUrl']) obj_cate = 'people' ep = None # 对应人员 + ec_codes_origin = {} if alarm_type == 1001003: # 内部人员 ep = Employee.objects.filter(id_number=data['info']['extend']['candidateInfo'][0]['id']).first() + # 检查是否携带定位卡只针对内部员工和相关方 + if 'miss_lcard' in algo_codes and ep: + is_happend = check_miss_lcard(ep=ep, area=area) + if is_happend: + ec_codes_origin.update({'miss_lcard': None}) ec_codes = ai_analyse(codes=algo_codes, global_img=global_img_o, face_img=face_img_o) # 算法处理 + ec_codes.update(ec_codes_origin) if ec_codes: # 如果触发事件 # 获取本次所有发生事件种类 ecs = EventCate.objects.filter(code__in=ec_codes.keys()) diff --git a/apps/opm/models.py b/apps/opm/models.py index 5fdd9de3..56bdec04 100644 --- a/apps/opm/models.py +++ b/apps/opm/models.py @@ -32,13 +32,13 @@ class Operation(CommonBDModel): OP_AUDIT = 20 OP_WAIT = 30 OP_WORK = 40 - OP_CLOSE = 50 + OP_DONE = 50 OP_STATE_CHOICES = ( (OP_CREATE, '创建中'), (OP_AUDIT, '审批中'), (OP_WAIT, '待作业'), (OP_WORK, '作业中'), - (OP_CLOSE, '已关闭') + (OP_DONE, '已结束') ) number = models.CharField('作业编号', max_length=20, null=True, blank=True) name = models.CharField('作业简述', max_length=200) diff --git a/apps/opm/serializers.py b/apps/opm/serializers.py index 6396bc28..e0fe6464 100644 --- a/apps/opm/serializers.py +++ b/apps/opm/serializers.py @@ -179,7 +179,7 @@ class OplCreateUpdateSerializer(CustomModelSerializer): def create(self, validated_data): operation = validated_data['operation'] - if operation.state == Operation.OP_CLOSE: + if operation.state == Operation.OP_DONE: raise ParseError('作业已关闭不可创建许可') return super().create(validated_data) diff --git a/apps/opm/services.py b/apps/opm/services.py index 97c2dcbf..6b310323 100644 --- a/apps/opm/services.py +++ b/apps/opm/services.py @@ -88,7 +88,8 @@ def opl_start(ticket: Ticket): if op.vchannels: vc_codes = list(op.vchannels.all().values_list('code', flat=True)) else: - vc_codes = list(TDevice.objects.filter(type=TDevice.DEVICE_VCHANNEL, area=op.area).values_list('code', flat=True)) + vc_codes = list(TDevice.objects.filter(type=TDevice.DEVICE_VCHANNEL, + area=op.area).values_list('code', flat=True)) opl_id = opl.id task = opl_task.delay(vc_codes, opl_id) opl.mtask_id = task.task_id @@ -115,5 +116,5 @@ def opl_end(ticket: Ticket): if 0 in states or 1 in states: # 查看工单状态 pass else: - operation.state = Operation.OP_CLOSE - operation.save() \ No newline at end of file + operation.state = Operation.OP_DONE + operation.save() diff --git a/apps/third/views.py b/apps/third/views.py index 8740b9d8..ed5e3170 100755 --- a/apps/third/views.py +++ b/apps/third/views.py @@ -61,14 +61,20 @@ class XxTestView(APIView): permission_classes = [IsAuthenticated] def get(self, request, *args, **kwargs): - ok, res = xxClient.request( - url='/api/application/build/buildListV2', json={}) - if ok == 'success': - return Response(res) - elif ok == 'fail': - raise ParseError(**res) - else: - raise APIException(**res) + json = { + "railId": "bc0ed1151524490589a9a519685f188f", + "type": "" + } + _, res = xxClient.request(**xxapis['rail_ibeacon_list'], json=json) + return Response(res) + # ok, res = xxClient.request( + # url='/api/application/build/buildListV2', json={}) + # if ok == 'success': + # return Response(res) + # elif ok == 'fail': + # raise ParseError(**res) + # else: + # raise APIException(**res) # 寻息事件订阅