from rest_framework.views import APIView 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.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.utils.sms import send_sms from apps.utils.speech import generate_voice from apps.utils.viewsets import CustomGenericViewSet from apps.utils.wx import wxClient # Create your views here. class ReloadServerGit(APIView): authentication_classes = [] permission_classes = [] def post(self, request): """ 拉取后端代码并重启服务 拉取后端代码并重启服务 """ reload_server_git.delay() return Response() # if completed.returncode == 0: # return Response() # else: # from server.settings import myLogger # myLogger.error(completed) # raise ParseError(completed.stderr) class ReloadClientGit(APIView): authentication_classes = [] permission_classes = [] def post(self, request): """ 拉取前端代码并打包 拉取前端代码并打包 """ reload_web_git.delay() return Response() # completed = reload_web_git() # if completed.returncode == 0: # return Response() # else: # raise APIException(completed.stdout) class ReloadServerOnly(APIView): permission_classes = [IsAdminUser] def post(self, request): """ 仅重启服务 仅重启服务 """ completed = reload_server_only() if completed.returncode == 0: return Response() else: raise APIException(completed.stdout) class BackupDatabase(APIView): permission_classes = [IsAdminUser] def post(self, request): """ 备份数据库到指定位置 备份数据库到指定位置 """ err_str = backup_database() if err_str: raise APIException(err_str) return Response() class BackupMedia(APIView): permission_classes = [IsAdminUser] def post(self, request): """ 备份资源到指定位置 备份资源到指定位置 """ err_str = backup_media() if err_str: raise APIException(err_str) return Response() class TestViewSet(CustomGenericViewSet): authentication_classes = () permission_classes = () @action(methods=['post'], detail=False, serializer_class=SendSmsSerializer) def send_sms(self, request, pk=None): """发送短信测试 发送短信测试 """ serializer = SendSmsSerializer(data=request.data) serializer.is_valid(raise_exception=True) vdata = serializer.validated_data res = send_sms(**vdata) return Response(res) @action(methods=['post'], detail=False, serializer_class=GenerateVoiceSerializer) def generate_voice(self, request, pk=None): """文字转语音测试 文字转语音测试 """ serializer = GenerateVoiceSerializer(data=request.data) serializer.is_valid(raise_exception=True) vdata = serializer.validated_data res = generate_voice(**vdata) return Response(res) @action(methods=['post'], detail=False, serializer_class=TestTaskSerializer) def task(self, request, pk=None): """任务派发测试 任务派发测试 """ serializer = TestTaskSerializer(data=request.data) serializer.is_valid(raise_exception=True) vdata = serializer.validated_data ret = {} task = show.delay(*vdata.get('args', []), **vdata.get('kwargs', {})) ret['task_id'] = task.task_id # from celery.app.control import Control # from server.celery import app # celery_control = Control(app=app) # # 关闭作业监控任务 # res = celery_control.revoke(task.task_id, terminate=True) return Response(ret) @action(methods=['post'], detail=False, serializer_class=Serializer) def remind_event(self, request, pk=None): """测试事件推送 测试事件推送 """ from apps.ecm.models import Event event = Event.objects.get(id='1562718567894487040') create_remind(event, params={'area': '生产车间', 'employee': '访客石非凡', 'event': '未带安全帽'}) return Response() @action(methods=['post'], detail=False, serializer_class=Serializer) def test_algo(self, request, pk=None): """测试算法 测试算法 """ # 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} dispatch_dahua_event(data=data) return Response() @action(methods=['post'], detail=False, serializer_class=Serializer) def send_wx_msg(self, request, pk=None): """微信模板消息发送测试 微信模板消息发送测试 """ data = { "touser": "ocAnm5vab6QGOnf2dqpuUZGJ0xyw", "template_id": "wczl-hB_bs8CpxwO8_KZuogSTPFXqhBxf8C5HjKl2M4", "url": "http://weixin.qq.com/download", # "miniprogram":{ # "appid":"xiaochengxuappid12345", # "pagepath":"index?foo=bar" # }, "client_msg_id": "MSG_000001", "data": { "first": { "value": "恭喜你购买成功!", "color": "#173177" }, } } # url = 'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token'+wxClient.token # print(url) # rt = requests.post(url=url, json=data).text res = wxClient.send_tem_msg(data=data) return Response(res) @action(methods=['post'], detail=False, serializer_class=CleanDataSerializer) def clean_data(self, request, pk=None): """清空数据 清空数据 """ datas = request.data['datas'] from apps.wf.models import Ticket from apps.hrm.models import Employee from apps.system.models import User, Dept if 'visit' in datas: # 访客 from apps.vm.models import Visit, Visitor Visit.objects.get_queryset(all=True).delete(soft=False) Visitor.objects.get_queryset(all=True).delete(soft=False) Ticket.objects.get_queryset(all=True).filter(workflow__key='visit').delete(soft=False) Employee.objects.get_queryset(all=True).filter(type='visitor').delete(soft=False) User.objects.get_queryset(all=True).filter(type='visitor').delete(soft=False) if 'rpm' in datas: from apps.rpm.models import Rparty Rparty.objects.get_queryset(all=True).delete(soft=False) Ticket.objects.get_queryset(all=True).filter(workflow__key='rpj').delete(soft=False) Employee.objects.get_queryset(all=True).filter(type='remployee').delete(soft=False) User.objects.get_queryset(all=True).filter(type='remployee').delete(soft=False) 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() if 'opm' in datas: from apps.opm.models import Operation Operation.objects.all().delete() Ticket.objects.get_queryset(all=True).filter(workflow__key__contains='opl_').delete(soft=False) if 'ptask' in datas: from django_celery_results.models import TaskResult TaskResult.objects.filter(task_name__in=['apps.vm.tasks.close_visit_by_leave_time', 'apps.rpm.tasks.close_rpj_by_leave_time']).delete() return Response()