Merge branch 'master' of https://e.coding.net/ctcdevteam/ehs/ehs_server
This commit is contained in:
commit
ceb86617e2
|
@ -8,6 +8,7 @@ import uuid
|
||||||
import requests
|
import requests
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from rest_framework.exceptions import APIException, ParseError
|
from rest_framework.exceptions import APIException, ParseError
|
||||||
|
from requests.exceptions import RequestException
|
||||||
|
|
||||||
from apps.third.errors import DH_REQUEST_ERROR
|
from apps.third.errors import DH_REQUEST_ERROR
|
||||||
from apps.third.models import Tlog
|
from apps.third.models import Tlog
|
||||||
|
@ -84,7 +85,7 @@ class DhClient:
|
||||||
return 'fail', err_detail
|
return 'fail', err_detail
|
||||||
# self.handle_log(result='success', response=ret) # 成功的日志就不记录了
|
# self.handle_log(result='success', response=ret) # 成功的日志就不记录了
|
||||||
return 'success', ret['data'] if 'data' in ret else None
|
return 'success', ret['data'] if 'data' in ret else None
|
||||||
except Exception:
|
except RequestException:
|
||||||
self.handle_log(result='error', response=None)
|
self.handle_log(result='error', response=None)
|
||||||
if raise_exception:
|
if raise_exception:
|
||||||
raise APIException(**DH_REQUEST_ERROR)
|
raise APIException(**DH_REQUEST_ERROR)
|
||||||
|
|
|
@ -7,6 +7,7 @@ import logging
|
||||||
import requests
|
import requests
|
||||||
from rest_framework.exceptions import APIException, ParseError
|
from rest_framework.exceptions import APIException, ParseError
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
from requests.exceptions import RequestException
|
||||||
|
|
||||||
from apps.third.errors import SP_REQUEST_ERROR
|
from apps.third.errors import SP_REQUEST_ERROR
|
||||||
from apps.third.models import Tlog
|
from apps.third.models import Tlog
|
||||||
|
@ -61,27 +62,29 @@ class SpClient:
|
||||||
files = {'file': open(settings.BASE_DIR + file_path_rela, 'rb')}
|
files = {'file': open(settings.BASE_DIR + file_path_rela, 'rb')}
|
||||||
if params:
|
if params:
|
||||||
url = url.format(**params)
|
url = url.format(**params)
|
||||||
r = getattr(requests, method)('{}{}'.format(settings.SP_BASE_URL, url),
|
try:
|
||||||
headers=self.headers, params=params, json=json,
|
r = getattr(requests, method)('{}{}'.format(settings.SP_BASE_URL, url),
|
||||||
timeout=timeout, files=files, verify=False)
|
headers=self.headers, params=params, json=json,
|
||||||
# if settings.DEBUG:
|
timeout=timeout, files=files, verify=False)
|
||||||
# print_roundtrip(r)
|
# if settings.DEBUG:
|
||||||
ret = r.text
|
# print_roundtrip(r)
|
||||||
if 300 > r.status_code >= 200:
|
ret = r.text
|
||||||
ret = r.json()
|
if 300 > r.status_code >= 200:
|
||||||
if 'code' in ret and ret['code'] not in ['0', '100', '00000', '1000', 0, 100, 1000]:
|
ret = r.json()
|
||||||
detail = '音响错误:{}'.format(str(ret.get('msg', '')))
|
if 'code' in ret and ret['code'] not in ['0', '100', '00000', '1000', 0, 100, 1000]:
|
||||||
err_detail = dict(detail=detail, code='sp_'+str(ret['code']))
|
detail = '音响错误:{}'.format(str(ret.get('msg', '')))
|
||||||
self.handle_log(result='fail', response=ret)
|
err_detail = dict(detail=detail, code='sp_'+str(ret['code']))
|
||||||
if raise_exception:
|
self.handle_log(result='fail', response=ret)
|
||||||
raise ParseError(**err_detail)
|
if raise_exception:
|
||||||
return 'fail', err_detail
|
raise ParseError(**err_detail)
|
||||||
# self.handle_log(result='success', response=ret)
|
return 'fail', err_detail
|
||||||
return 'success', ret
|
# self.handle_log(result='success', response=ret)
|
||||||
self.handle_log(result='error', response=ret)
|
return 'success', ret
|
||||||
if raise_exception:
|
except RequestException:
|
||||||
raise APIException(**SP_REQUEST_ERROR)
|
self.handle_log(result='error', response=ret)
|
||||||
return 'error', SP_REQUEST_ERROR
|
if raise_exception:
|
||||||
|
raise APIException(**SP_REQUEST_ERROR)
|
||||||
|
return 'error', SP_REQUEST_ERROR
|
||||||
|
|
||||||
def speak(self, path: str, sns: list, v_num: int):
|
def speak(self, path: str, sns: list, v_num: int):
|
||||||
"""播放报警声
|
"""播放报警声
|
||||||
|
|
|
@ -6,6 +6,7 @@ import uuid
|
||||||
import requests
|
import requests
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from rest_framework.exceptions import APIException, ParseError
|
from rest_framework.exceptions import APIException, ParseError
|
||||||
|
from requests.exceptions import RequestException
|
||||||
|
|
||||||
from apps.third.errors import XX_REQUEST_ERROR
|
from apps.third.errors import XX_REQUEST_ERROR
|
||||||
from apps.third.models import Tlog
|
from apps.third.models import Tlog
|
||||||
|
@ -72,7 +73,7 @@ class XxClient:
|
||||||
raise ParseError(**err_detail)
|
raise ParseError(**err_detail)
|
||||||
return 'fail', err_detail
|
return 'fail', err_detail
|
||||||
return 'success', ret['data']
|
return 'success', ret['data']
|
||||||
except Exception:
|
except RequestException:
|
||||||
self.handle_log(result='error', response=None)
|
self.handle_log(result='error', response=None)
|
||||||
if raise_exception:
|
if raise_exception:
|
||||||
raise APIException(**XX_REQUEST_ERROR)
|
raise APIException(**XX_REQUEST_ERROR)
|
||||||
|
|
|
@ -12,6 +12,12 @@ class WorkflowSerializer(CustomModelSerializer):
|
||||||
fields = '__all__'
|
fields = '__all__'
|
||||||
|
|
||||||
|
|
||||||
|
class WorkflowCloneSerializer(CustomModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Workflow
|
||||||
|
fields = ['name', 'key']
|
||||||
|
|
||||||
|
|
||||||
class StateSerializer(CustomModelSerializer):
|
class StateSerializer(CustomModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = State
|
model = State
|
||||||
|
|
|
@ -12,7 +12,7 @@ from apps.wf.serializers import CustomFieldCreateUpdateSerializer, CustomFieldSe
|
||||||
TicketCreateSerializer, TicketDeliverSerializer, TicketDestorySerializer, TicketFlowSerializer, \
|
TicketCreateSerializer, TicketDeliverSerializer, TicketDestorySerializer, TicketFlowSerializer, \
|
||||||
TicketHandleSerializer, TicketRetreatSerializer, \
|
TicketHandleSerializer, TicketRetreatSerializer, \
|
||||||
TicketSerializer, TransitionSerializer, WorkflowSerializer, \
|
TicketSerializer, TransitionSerializer, WorkflowSerializer, \
|
||||||
TicketListSerializer, TicketDetailSerializer
|
TicketListSerializer, TicketDetailSerializer, WorkflowCloneSerializer
|
||||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from apps.wf.models import CustomField, Ticket, Workflow, State, Transition, TicketFlow
|
from apps.wf.models import CustomField, Ticket, Workflow, State, Transition, TicketFlow
|
||||||
|
@ -22,6 +22,7 @@ from rest_framework.exceptions import ParseError, NotFound
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from django.db.models import Count
|
from django.db.models import Count
|
||||||
from rest_framework.serializers import Serializer
|
from rest_framework.serializers import Serializer
|
||||||
|
from apps.utils.snowflake import idWorker
|
||||||
|
|
||||||
from apps.wf.tasks import run_task
|
from apps.wf.tasks import run_task
|
||||||
|
|
||||||
|
@ -118,14 +119,59 @@ class WorkflowViewSet(CustomModelViewSet):
|
||||||
return Response(ret)
|
return Response(ret)
|
||||||
|
|
||||||
@action(methods=['post'], detail=True, perms_map={'post': 'workflow.clone'},
|
@action(methods=['post'], detail=True, perms_map={'post': 'workflow.clone'},
|
||||||
pagination_class=None, serializer_class=Serializer)
|
pagination_class=None, serializer_class=WorkflowCloneSerializer)
|
||||||
|
@transaction.atomic
|
||||||
def clone(self, request, pk=None):
|
def clone(self, request, pk=None):
|
||||||
"""工作流复制
|
"""工作流复制
|
||||||
|
|
||||||
工作流复制
|
工作流复制
|
||||||
"""
|
"""
|
||||||
pass
|
wf = self.get_object()
|
||||||
|
sr = WorkflowCloneSerializer(data=request.data)
|
||||||
|
sr.is_valid(raise_exception=True)
|
||||||
|
vdata = sr.validated_data
|
||||||
|
wf_new = Workflow()
|
||||||
|
for f in Workflow._meta.fields:
|
||||||
|
if f.name not in ['id', 'create_by', 'update_by', 'key', 'name', 'create_time', 'update_time']:
|
||||||
|
setattr(wf_new, f.name, getattr(wf, f.name, None))
|
||||||
|
wf_new.id = idWorker.get_id()
|
||||||
|
wf_new.key = vdata['key']
|
||||||
|
wf_new.name = vdata['name']
|
||||||
|
wf_new.create_by = request.user
|
||||||
|
wf_new.save()
|
||||||
|
stas_dict = {}
|
||||||
|
for s in State.objects.filter(workflow=wf):
|
||||||
|
sta = State()
|
||||||
|
sta.id = idWorker.get_id()
|
||||||
|
sta.workflow = wf_new
|
||||||
|
for f in State._meta.fields:
|
||||||
|
if f.name not in ['workflow', 'create_time', 'update_time', 'id']:
|
||||||
|
setattr(sta, f.name, getattr(s, f.name))
|
||||||
|
sta.save()
|
||||||
|
stas_dict[s.id] = sta # 保存一下, 后续备用
|
||||||
|
for c in CustomField.objects.filter(workflow=wf):
|
||||||
|
cf = CustomField()
|
||||||
|
cf.id = idWorker.get_id()
|
||||||
|
cf.workflow = wf_new
|
||||||
|
for f in CustomField._meta.fields:
|
||||||
|
if f.name not in ['workflow', 'create_time', 'update_time', 'id']:
|
||||||
|
setattr(sta, f.name, getattr(s, f.name))
|
||||||
|
cf.save()
|
||||||
|
for t in Transition.objects.filter(workflow=wf):
|
||||||
|
tr = Transition()
|
||||||
|
tr.id = idWorker.get_id()
|
||||||
|
tr.workflow = wf_new
|
||||||
|
for f in Transition._meta.fields:
|
||||||
|
if f.name not in ['workflow', 'create_time', 'update_time', 'id']:
|
||||||
|
setattr(tr, f.name, getattr(t, f.name))
|
||||||
|
tr.source_state = stas_dict[t.source_state.id]
|
||||||
|
tr.destination_state = stas_dict[t.destination_state.id]
|
||||||
|
ce = tr.condition_expression
|
||||||
|
for i in ce:
|
||||||
|
i['target_state'] = stas_dict[i['target_state']].id
|
||||||
|
tr.condition_expression = ce
|
||||||
|
tr.save()
|
||||||
|
return Response()
|
||||||
|
|
||||||
class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, CustomGenericViewSet):
|
class StateViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, CustomGenericViewSet):
|
||||||
perms_map = {'get': '*', 'post': 'workflow.update',
|
perms_map = {'get': '*', 'post': 'workflow.update',
|
||||||
|
|
Loading…
Reference in New Issue