diff --git a/apps/develop/serializers.py b/apps/develop/serializers.py index ad29065b..54421ee1 100755 --- a/apps/develop/serializers.py +++ b/apps/develop/serializers.py @@ -18,3 +18,8 @@ class TestTaskSerializer(serializers.Serializer): class CleanDataSerializer(serializers.Serializer): datas = serializers.ListField(child=serializers.CharField(), label='数据分类列表', required=False, allow_null=True) + + +class TestAlgoSerializer(serializers.Serializer): + face_img = serializers.CharField() + global_img = serializers.CharField() diff --git a/apps/develop/views.py b/apps/develop/views.py index 80fd7984..19ff5066 100755 --- a/apps/develop/views.py +++ b/apps/develop/views.py @@ -5,11 +5,13 @@ from rest_framework.permissions import IsAdminUser from rest_framework.response import Response from rest_framework.serializers import Serializer from rest_framework.decorators import action -from apps.develop.serializers import CleanDataSerializer, GenerateVoiceSerializer, SendSmsSerializer, TestTaskSerializer +from apps.develop.serializers import CleanDataSerializer, GenerateVoiceSerializer, SendSmsSerializer, \ + TestTaskSerializer, TestAlgoSerializer from apps.develop.tasks import backup_database, backup_media, reload_web_git, reload_server_git, reload_server_only from rest_framework.exceptions import APIException from apps.ecm.service import create_remind, notify_event from apps.system.tasks import show +from apps.third.clients import dhClient from apps.utils.sms import send_sms from apps.utils.speech import generate_voice @@ -161,17 +163,26 @@ class TestViewSet(CustomGenericViewSet): create_remind(event, params={'area': '生产车间', 'employee': '访客石非凡', 'event': '未带安全帽'}) return Response() - @action(methods=['post'], detail=False, serializer_class=Serializer) + @action(methods=['post'], detail=False, serializer_class=TestAlgoSerializer) def test_algo(self, request, pk=None): - """测试算法 + """测试算法1 - 测试算法 + 测试算法1 + """ + from apps.ai.main import ai_analyse + face_img = dhClient.get_full_pic(path=request.data['face_img']) + global_img = dhClient.get_full_pic(path=request.data['global_img']) + ret = ai_analyse(codes=['helmet'], + face_img=face_img, + global_img=global_img) + return Response({'result':ret.keys(), 'face_img': face_img, 'global_img': global_img}) + + @action(methods=['post'], detail=False, serializer_class=Serializer) + def test_algo_full(self, request, pk=None): + """测试算法2 + + 测试算法2 """ - # from apps.ai.main import ai_analyse - # ret = ai_analyse(codes=['helmet'], - # face_img='https://10.99.5.24/evo-apigw/evo-oss/6ad010cf-ce45-11ec-9715-e4246c7d1635/20220826/1/dsf_caa9c522-24e2-11ed-884a-e4246c7d1635_62687586_62696295.jpg?token=0ff8bb53-c99e-4291-a587-272aa1f3f5eb', - # global_img='https://10.99.5.24/evo-apigw/evo-oss/6ad010cf-ce45-11ec-9715-e4246c7d1635/20220826/1/dsf_caa9c522-24e2-11ed-884a-e4246c7d1635_62413404_62687586.jpg?token=0ff8bb53-c99e-4291-a587-272aa1f3f5eb') - # return Response(ret.keys()) from apps.ecm.service import dispatch_dahua_event data = {'id': 1661506561753, 'category': 'alarm', 'method': 'alarm.msg', 'info': {'orgName': '曲阳县金隅水泥厂', 'nodeCode': '1000038$1$0$23', 'deviceCode': '1000038', 'alarmCode': '30789599-b82b-45ba-9d3d-2de2bc1f1d00', 'alarmPicture': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220826/1/dsf_3de82501-2521-11ed-884a-e4246c7d1635_2088390_2096301.jpg', 'nodeType': 2, 'alarmDate': '1661506557', 'alarmGrade': 2, 'isSave': True, 'extend': {'faceImageUrl': ['6ad010cf-ce45-11ec-9715-e4246c7d1635/20220826/1/dsf_3de82501-2521-11ed-884a-e4246c7d1635_2088390_2096301.jpg'], 'glass': 0, 'beard': 0, 'candidateInfo': [{'birthday': '2022-8-24', 'faceImageUrl': [ '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220826/1/dsf_3de82501-2521-11ed-884a-e4246c7d1635_2096301_2173187.jpg'], 'groupName': '全体人员', 'similarity': 96, 'sex': 1, 'cardType': 1, 'name': '石非凡', 'devPersonId': '46', 'id': '371324199803243658', 'type': 0}], 'sex': 0, 'occurrenceCount': 0, 'deviceCode': '1000038', 'globalScenePicUrl': '6ad010cf-ce45-11ec-9715-e4246c7d1635/20220826/1/dsf_3de82501-2521-11ed-884a-e4246c7d1635_1825520_2088390.jpg', 'eye': 0, 'alarmType': 1001003, 'perFlag': -1, 'mouth': 0, 'feature': [], 'isHit': True, 'channelSeq': 23, 'szSerialUUID': '', 'channelName': '窑头平台进料口', 'beginTime': 1661506557, 'endTime': 1661506557, 'age': -1, 'mask': 0}, 'unitType': 1, 'alarmType': 1001003, 'channelSeq': 23, 'orgCode': '001001001', 'channelName': '窑头平台进料口', 'alarmStat': 1, 'isEvent': True}, 'subsystem': 'evo-face', 'userIds': None, 'sid': None, 'domainId': None, 'infoArray': None, 'protocol': None} @@ -236,7 +247,7 @@ class TestViewSet(CustomGenericViewSet): Dept.objects.get_queryset(all=True).filter(type='rparty').delete(soft=False) if 'event' in datas: from apps.ecm.models import Event - Event.objects.get_queryset(all=True).delete() + Event.objects.all().delete() if 'opm' in datas: from apps.opm.models import Operation Operation.objects.all().delete() diff --git a/apps/ecm/tasks.py b/apps/ecm/tasks.py index 2ded1b86..d999f2f0 100644 --- a/apps/ecm/tasks.py +++ b/apps/ecm/tasks.py @@ -87,4 +87,4 @@ def opl_task(vc_codes: list, opl_id: str): while True: for i in vchannels: Thread(target=snap_and_analyse, args=(i, algo_codes, opl)).start() - time.sleep(2) + time.sleep(4) diff --git a/apps/opm/services.py b/apps/opm/services.py index f5227770..97c2dcbf 100644 --- a/apps/opm/services.py +++ b/apps/opm/services.py @@ -93,3 +93,27 @@ def opl_start(ticket: Ticket): task = opl_task.delay(vc_codes, opl_id) opl.mtask_id = task.task_id opl.save() + + +def opl_end(ticket: Ticket): + """ + 作业许可证关闭时执行 + """ + opl = ticket.opl + if opl.mtask_id: + from celery.app.control import Control + from server.celery import app + celery_control = Control(app=app) + # 关闭作业视频监控任务 + celery_control.revoke(opl.mtask_id, terminate=True) + opl.mtask_id = None + opl.save() + operation = opl.operation + opls = Opl.objects.filter(operation=operation) + opls.filter(ticket=None).delete() # 删除无用许可证 + states = opls.values_list('ticket__state__type', flat=True) + if 0 in states or 1 in states: # 查看工单状态 + pass + else: + operation.state = Operation.OP_CLOSE + operation.save() \ No newline at end of file diff --git a/apps/opm/tasks.py b/apps/opm/tasks.py index d4828442..a2e681ba 100644 --- a/apps/opm/tasks.py +++ b/apps/opm/tasks.py @@ -7,30 +7,7 @@ from celery import shared_task from apps.wf.models import Ticket -@shared_task(base=CustomTask) -def opl_end(ticket_id): - """ - 作业许可证关闭时执行 - """ - ticket = Ticket.objects.get(id=ticket_id) - opl = ticket.opl - if opl.mtask_id: - from celery.app.control import Control - from server.celery import app - celery_control = Control(app=app) - # 关闭作业视频监控任务 - celery_control.revoke(opl.mtask_id, terminate=True) - opl.mtask_id = None - opl.save() - operation = opl.operation - opls = Opl.objects.filter(operation=operation) - opls.filter(ticket=None).delete() # 删除无用许可证 - states = opls.values_list('ticket__state__type', flat=True) - if 0 in states or 1 in states: # 查看工单状态 - pass - else: - operation.state = Operation.OP_CLOSE - operation.save() + # @shared_task(base=CustomTask) diff --git a/apps/third/views.py b/apps/third/views.py index e05563b1..8740b9d8 100755 --- a/apps/third/views.py +++ b/apps/third/views.py @@ -210,9 +210,9 @@ class DhCommonViewSet(CreateModelMixin, CustomGenericViewSet): { "category": "alarm", }, - { - "category": "state", - } + # { + # "category": "state", + # } ] } ], diff --git a/apps/wf/serializers.py b/apps/wf/serializers.py index dc55b622..e1744ba1 100755 --- a/apps/wf/serializers.py +++ b/apps/wf/serializers.py @@ -112,11 +112,19 @@ class TicketSerializer(CustomModelSerializer): class TicketListSerializer(CustomModelSerializer): workflow_ = WorkflowSimpleSerializer(source='workflow', read_only=True) state_ = StateSimpleSerializer(source='state', read_only=True) - + participant_ = serializers.SerializerMethodField() class Meta: model = Ticket fields = ['id', 'title', 'sn', 'workflow', 'workflow_', 'state', 'state_', - 'act_state', 'create_time', 'update_time', 'participant_type', 'create_by', 'ticket_data'] + 'act_state', 'create_time', 'update_time', 'participant_type', 'create_by', 'ticket_data', + 'participant_'] + + def get_participant_(self, obj): + if obj.participant_type == 1: + return UserSimpleSerializer(instance=User.objects.get(id=obj.participant)).data + elif obj.participant_type == 2: + return UserSimpleSerializer(instance=User.objects.filter(id__in=obj.participant), many=True).data + return None @staticmethod def setup_eager_loading(queryset): @@ -181,6 +189,7 @@ class TicketDetailSerializer(CustomModelSerializer): class TicketFlowSerializer(CustomModelSerializer): participant_ = UserSimpleSerializer(source='participant', read_only=True) state_ = StateSimpleSerializer(source='state', read_only=True) + transition_attribute = serializers.CharField(source='transition.attribute_type', read_only=True) class Meta: model = TicketFlow @@ -190,6 +199,7 @@ class TicketFlowSerializer(CustomModelSerializer): class TicketFlowSimpleSerializer(CustomModelSerializer): participant_ = UserSimpleSerializer(source='participant', read_only=True) state_ = StateSimpleSerializer(source='state', read_only=True) + transition_attribute = serializers.CharField(source='transition.attribute_type', read_only=True) class Meta: model = TicketFlow