123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388 |
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- import time
- import oss2
- from django.views import View
- from Ansjer.config import OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET
- from Model.models import VoicePromptModel, UidChannelSetModel, Device_Info
- from Object.ResponseObject import ResponseObject
- from Object.TokenObject import TokenObject
- from Service.CommonService import CommonService
- from Service.ModelService import ModelService
- class VoicePromptView(View):
- def get(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- request_dict = request.GET
- operation = kwargs.get('operation', None)
- return self.validate(request_dict, operation)
- def post(self, request, *args, **kwargs):
- request.encoding = 'utf-8'
- request_dict = request.POST
- operation = kwargs.get('operation', None)
- return self.validate(request_dict, operation)
- def validate(self, request_dict, operation):
- token = request_dict.get('token', None)
- print(token)
- lang = request_dict.get('lang', None)
- response = ResponseObject(lang=lang)
- token = TokenObject(token)
- if token.code != 0:
- return response.json(token.code)
- if operation == 'getUploadUrl':
- return self.get_upload_url(request_dict, response)
- elif operation == 'add':
- return self.do_add(request_dict, response)
- elif operation == 'delete':
- return self.do_delete(token.userID, request_dict, response)
- elif operation == 'query':
- return self.do_query(request_dict, response)
- elif operation == 'update':
- return self.do_update(token.userID, request_dict, response)
- elif operation == 'adminGetUploadUrl':
- return self.admin_get_upload_url(token.userID, request_dict, response)
- elif operation == 'adminAdd':
- return self.do_admin_add(token.userID, request_dict, response)
- elif operation == 'adminQuery':
- return self.do_admin_query(token.userID, request_dict, response)
- elif operation == 'adminUpdate':
- return self.do_admin_update(token.userID, request_dict, response)
- elif operation == 'adminDelete':
- return self.do_admin_delete(token.userID, request_dict, response)
- else:
- return response.json(404)
- def get_upload_url(self, request_dict, response):
- upload_type = request_dict.get('upload_type', None)
- uid = request_dict.get('uid', None)
- channel = request_dict.get('channel', None)
- type = request_dict.get('type', None)
- algorithm_type = int(request_dict.get('algorithmType', 99))
- if upload_type and uid and channel:
- vp_qs = VoicePromptModel.objects.filter(uid=uid, channel=channel, type=type)
- vp_qs = vp_qs.filter(algorithm_type=algorithm_type)
- count = vp_qs.count()
- if count >= 3:
- return response.json(201)
- auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
- bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
- name = CommonService.createOrderID()
- filename = str(name) + '.' + upload_type
- obj = 'voice_prompt/{uid}/{channel}/'.format(uid=uid, channel=channel) + filename
- url = bucket.sign_url('PUT', obj, 7200)
- return response.json(0, {'put_url': url, 'filename': filename})
- else:
- return response.json(444)
- def do_add(self, request_dict, response):
- filename = request_dict.get('filename', None)
- title = request_dict.get('title', None)
- type = request_dict.get('type', None)
- lang = request_dict.get('lang', '')
- uid = request_dict.get('uid', None)
- channel = request_dict.get('channel', None)
- algorithm_type = request_dict.get('algorithmType', None)
- if filename and title and type and uid and channel:
- voice_prompt = VoicePromptModel()
- voice_prompt.filename = filename
- voice_prompt.title = title
- voice_prompt.type = type
- voice_prompt.language = lang
- voice_prompt.classification = 1
- voice_prompt.uid = uid
- voice_prompt.channel = channel
- voice_prompt.add_time = int(time.time())
- if algorithm_type:
- voice_prompt.algorithm_type = int(algorithm_type)
- voice_prompt.save()
- res = {
- 'id': voice_prompt.id,
- 'filename': filename,
- 'title': title,
- 'type': type,
- }
- auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
- bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
- filename = res['filename']
- obj = 'voice_prompt/{uid}/{channel}/'.format(uid=uid, channel=channel) + filename
- url = bucket.sign_url('GET', obj, 3600)
- res['url'] = url
- del res['filename']
- return response.json(0, res)
- else:
- return response.json(444)
- def do_update(self, userID, request_dict, response):
- id = request_dict.get('id', None)
- title = request_dict.get('title', None)
- if id and title:
- voice_qs = VoicePromptModel.objects.filter(id=id)
- if voice_qs.exists():
- uid = voice_qs[0].uid
- device_qs = Device_Info.objects.filter(UID=uid, userID=userID)
- if device_qs.exists():
- voice_qs.update(title=title)
- return response.json(0)
- else:
- return response.json(404)
- else:
- return response.json(173)
- else:
- return response.json(444)
- def do_delete(self, userID, request_dict, response):
- id = request_dict.get('id', None)
- ids = request_dict.get('ids', None)
- if id:
- voice_qs = VoicePromptModel.objects.filter(id=id)
- elif ids:
- voice_qs = VoicePromptModel.objects.filter(id__in=ids.split(','))
- if not voice_qs.exists():
- return response.json(14)
- for voice in voice_qs:
- uid = voice.uid
- device_qs = Device_Info.objects.filter(UID=uid, userID=userID)
- if device_qs.exists():
- channel = voice.channel
- filename = voice.filename
- voice_qs.delete()
- auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
- bucket = oss2.Bucket(auth, 'http://oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
- obj = 'voice_prompt/{uid}/{channel}/'.format(uid=uid, channel=channel) + filename
- bucket.delete_object(obj)
- return response.json(0)
- else:
- return response.json(404)
- else:
- return response.json(444)
- def do_query(self, request_dict, response):
- lang = request_dict.get('lang', 'en')
- uid = request_dict.get('uid', None)
- channel = request_dict.get('channel', None)
- # 个性语音增加算法类型区分默认0兼容老版本
- algorithm_type = int(request_dict.get('algorithmType', 99))
- if uid and channel and lang:
- voice_qs = VoicePromptModel.objects.filter(uid=uid, channel=channel, classification=1,
- algorithm_type=algorithm_type)
- system_qs = VoicePromptModel.objects.filter(classification=0, language=lang, status=1,
- algorithm_type=algorithm_type)
- if not system_qs.exists() and lang != 'en':
- system_qs = VoicePromptModel.objects.filter(classification=0, language='en', status=1,
- algorithm_type=algorithm_type)
- channel_qs = UidChannelSetModel.objects.filter(uid__uid=uid, channel=channel,
- algorithm_type=algorithm_type)
- res = {
- 'enter_voice': {},
- 'leave_voice': {},
- 'voice_status': 0,
- 'voice_mute': 0
- }
- enter_voice_id = 0
- leave_voice_id = 0
- if channel_qs.exists():
- channel_qs = channel_qs.values('voice_prompt_enter', 'voice_prompt_leave', 'voice_prompt_status',
- 'voice_prompt_intelligent_mute', 'voice_start_x', 'voice_start_y',
- 'voice_end_x', 'voice_end_y', 'voice_start_time', 'voice_end_time',
- 'voice_repeat_day', 'voice_direction')
- print(channel_qs)
- enter_voice_id = int(channel_qs[0]['voice_prompt_enter'])
- leave_voice_id = int(channel_qs[0]['voice_prompt_leave'])
- res['voice_status'] = channel_qs[0]['voice_prompt_status']
- res['voice_mute'] = channel_qs[0]['voice_prompt_intelligent_mute']
- res['start_x'] = channel_qs[0]['voice_start_x']
- res['start_y'] = channel_qs[0]['voice_start_y']
- res['end_x'] = channel_qs[0]['voice_end_x']
- res['end_y'] = channel_qs[0]['voice_end_y']
- res['start_time'] = channel_qs[0]['voice_start_time']
- res['end_time'] = channel_qs[0]['voice_end_time']
- res['repeat_day'] = channel_qs[0]['voice_repeat_day']
- res['direction'] = channel_qs[0]['voice_direction']
- enter_systems = []
- leave_systems = []
- enter_customs = []
- leave_customs = []
- res['system'] = {}
- res['custom'] = {}
- auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
- bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
- if system_qs.exists():
- system_qs = system_qs.values('id', 'title', 'filename', 'type')
- for system in system_qs:
- filename = system['filename']
- obj = 'voice_prompt/system/' + filename
- url = bucket.sign_url('GET', obj, 3600)
- system['url'] = url
- del system['filename']
- if system['type'] == 0:
- enter_systems.append(system)
- if enter_voice_id == system['id']:
- res['enter_voice'] = system
- elif system['type'] == 1:
- leave_systems.append(system)
- if leave_voice_id == system['id']:
- res['leave_voice'] = system
- if voice_qs.exists():
- voice_qs = voice_qs.values('id', 'title', 'filename', 'type')
- for voice in voice_qs:
- filename = voice['filename']
- obj = 'voice_prompt/' + uid + '/' + channel + '/' + filename
- url = bucket.sign_url('GET', obj, 3600)
- voice['url'] = url
- del voice['filename']
- if voice['type'] == 0:
- enter_customs.append(voice)
- if enter_voice_id == voice['id']:
- res['enter_voice'] = voice
- elif voice['type'] == 1:
- leave_customs.append(voice)
- if leave_voice_id == voice['id']:
- res['leave_voice'] = voice
- res['system']['enter'] = enter_systems
- res['system']['leave'] = leave_systems
- res['custom']['enter'] = enter_customs
- res['custom']['leave'] = leave_customs
- return response.json(0, res)
- else:
- return response.json(444)
- def admin_get_upload_url(self, userID, request_dict, response):
- own_perm = ModelService.check_perm(userID, 10)
- if not own_perm:
- return response.json(404)
- upload_type = request_dict.get('upload_type', None)
- if upload_type:
- auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
- bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
- name = CommonService.createOrderID()
- filename = str(name) + '.' + upload_type
- obj = 'voice_prompt/system/' + filename
- url = bucket.sign_url('PUT', obj, 7200)
- return response.json(0, {'put_url': url, 'filename': filename})
- else:
- return response.json(444)
- def do_admin_add(self, userID, request_dict, response):
- own_perm = ModelService.check_perm(userID, 10)
- if not own_perm:
- return response.json(404)
- filename = request_dict.get('filename', None)
- title = request_dict.get('title', None)
- type = request_dict.get('type', None)
- lang = request_dict.get('lang', '')
- if filename and title and type:
- voice_prompt = VoicePromptModel()
- voice_prompt.filename = filename
- voice_prompt.title = title
- voice_prompt.type = type
- voice_prompt.language = lang
- voice_prompt.classification = 0
- voice_prompt.add_time = int(time.time())
- voice_prompt.status = 0
- voice_prompt.save()
- return response.json(0)
- else:
- return response.json(444)
- def do_admin_query(self, userID, request_dict, response):
- own_perm = ModelService.check_perm(userID, 10)
- if not own_perm:
- return response.json(404)
- type = request_dict.get('type', 0)
- page = request_dict.get('page', None)
- line = request_dict.get('line', None)
- if page is None or line is None:
- return response.json(444)
- voice_qs = VoicePromptModel.objects.filter(classification=0, type=type)
- print(voice_qs)
- res = {
- 'count': 0
- }
- if voice_qs.exists():
- page = int(page)
- line = int(line)
- start = (page - 1) * line
- end = start + line
- count = voice_qs.count()
- res['count'] = count
- voice_qs = voice_qs.values('id', 'title', 'type', 'language', 'status', 'filename')[start:end]
- auth = oss2.Auth(OSS_STS_ACCESS_KEY, OSS_STS_ACCESS_SECRET)
- bucket = oss2.Bucket(auth, 'oss-cn-shenzhen.aliyuncs.com', 'ansjer-static-resources')
- for item in voice_qs:
- filename = item['filename']
- obj = 'voice_prompt/system/' + filename
- url = bucket.sign_url('GET', obj, 3600)
- item['url'] = url
- del item['filename']
- res['data'] = list(voice_qs)
- return response.json(0, res)
- else:
- res['data'] = []
- return response.json(0, res)
- def do_admin_update(self, userID, request_dict, response):
- own_perm = ModelService.check_perm(userID, 10)
- if not own_perm:
- return response.json(404)
- id = request_dict.get('id', None)
- status = request_dict.get('status', None)
- title = request_dict.get('title', None)
- if id and status and title:
- VoicePromptModel.objects.filter(id=id, classification=0).update(status=status, title=title)
- return response.json(0)
- else:
- return response.json(444)
- def do_admin_delete(self, userID, request_dict, response):
- own_perm = ModelService.check_perm(userID, 10)
- if not own_perm:
- return response.json(404)
- id = request_dict.get('id', None)
- if id:
- VoicePromptModel.objects.filter(id=id, classification=0).delete()
- return response.json(0)
- else:
- return response.json(444)
|