def run_flow_task(ticket_id, script_id_str, state_id, action_from='loonrobot'): """ 执行工作流脚本 :param script_id_star:通过脚本id来执行, 保存的是字符串 :param ticket_id: :param state_id: :param action_from: :return: """ script_id = int(script_id_str) ticket_obj = TicketRecord.objects.filter(id=ticket_id, is_deleted=False).first() if ticket_obj.participant == script_id_str and ticket_obj.participant_type_id == CONSTANT_SERVICE.PARTICIPANT_TYPE_ROBOT: ## 校验脚本是否合法 # 获取脚本名称 script_obj = WorkflowScript.objects.filter(id=script_id, is_deleted=False, is_active=True).first() if not script_obj: return False, '脚本未注册或非激活状态' script_file = os.path.join(settings.MEDIA_ROOT, script_obj.saved_name.name) globals = {'ticket_id': ticket_id, 'action_from': action_from} # 如果需要脚本执行完成后,工单不往下流转(也就脚本执行失败或调用其他接口失败的情况),需要在脚本中抛出异常 try: with stdoutIO() as s: # execfile(script_file, globals) # for python 2 exec(open(script_file, encoding='utf-8').read(), globals) script_result = True # script_result_msg = ''.join(s.buflist) script_result_msg = ''.join(s.getvalue()) except Exception as e: logger.error(traceback.format_exc()) script_result = False script_result_msg = e.__str__() logger.info('*' * 20 + '工作流脚本回调,ticket_id:[%s]' % ticket_id + '*' * 20) logger.info('*******工作流脚本回调,ticket_id:{}*****'.format(ticket_id)) # 因为上面的脚本执行时间可能会比较长,为了避免db session失效,重新获取ticket对象 ticket_obj = TicketRecord.objects.filter(id=ticket_id, is_deleted=False).first() # 新增处理记录,脚本后只允许只有一个后续直连状态 transition_obj = Transition.objects.filter(source_state_id=state_id, is_deleted=False).first() new_ticket_flow_dict = dict(ticket_id=ticket_id, transition_id=transition_obj.id, suggestion=script_result_msg, participant_type_id=CONSTANT_SERVICE.PARTICIPANT_TYPE_ROBOT, participant='脚本:(id:{}, name:{})'.format(script_obj.id, script_obj.name), state_id=state_id, creator='loonrobot') TicketBaseService.add_ticket_flow_log(new_ticket_flow_dict) if not script_result: # 脚本执行失败,状态不更新,标记任务执行结果 ticket_obj.script_run_last_result = False ticket_obj.save() return False, script_result_msg # 自动执行流转 flag, msg = TicketBaseService.handle_ticket(ticket_id, dict(username='******', suggestion='脚本执行完成后自行流转', transition_id=transition_obj.id), False, True) if flag: logger.info('******脚本执行成功,工单基础信息更新完成, ticket_id:{}******'.format(ticket_id)) return flag, msg else: return False, '工单当前处理人为非脚本,不执行脚本'
def check_new_permission(cls, username, workflow_id): """ 判断用户是否有新建工单的权限 :param username: :param workflow_id: :return: """ # 获取workflow的限制表达式 workflow_obj, msg = cls.get_by_id(workflow_id) if not workflow_obj: return False, msg limit_expression = workflow_obj.limit_expression if not limit_expression: return True, 'no limit_expression set' #'限制周期({"period":24} 24小时), 限制次数({"count":1}在限制周期内只允许提交1次), 限制级别({"level":1} 针对(1单个用户 2全局)限制周期限制次数,默认特定用户);允许特定人员提交({"allow_persons":"zhangsan,lisi"}只允许张三提交工单,{"allow_depts":"1,2"}只允许部门id为1和2的用户提交工单,{"allow_roles":"1,2"}只允许角色id为1和2的用户提交工单) limit_expression_dict = json.loads(limit_expression) limit_period = limit_expression_dict.get('period') limit_count = limit_expression_dict.get('limit_count') limit_allow_persons = limit_expression_dict.get('allow_persons') limit_allow_depts = limit_expression_dict.get('allow_depts') limit_allow_roles = limit_expression_dict.get('allow_roles') if limit_period: from service.ticket.ticket_base_service import TicketBaseService if limit_expression_dict.get('level') == 1: count_result, msg = TicketBaseService.get_ticket_count_by_args(workflow_id=workflow_id, username=username, period=limit_period) elif limit_expression_dict.get('level') == 2: count_result, msg = TicketBaseService.get_ticket_count_by_args(workflow_id=workflow_id, period=limit_period) if count_result is False: return False, msg if count_result > limit_expression_dict.get('count'): return False, '{} tickets can be created in {}hours when workflow_id is {}'.format(limit_count, limit_period, workflow_id) if limit_allow_persons: if username not in limit_allow_persons.split(','): return False, '{} can not create ticket base on workflow_id:{}'.format(workflow_id) if limit_allow_depts: # 获取用户所属部门,包含上级部门 user_all_dept_id_list, msg = AccountBaseService.get_user_up_dept_id_list() if user_all_dept_id_list is False: return False, msg # 只要user_all_dept_id_list中的某个部门包含在允许范围内即可 limit_allow_dept_str_list = limit_allow_depts.split(',') limit_allow_dept_id_list = [int(limit_allow_dept_str) for limit_allow_dept_str in limit_allow_dept_str_list] limit_allow_dept_id_list = list(set(limit_allow_dept_id_list)) #去重 total_list = user_all_dept_id_list + limit_allow_dept_id_list if len(total_list) == len(set(total_list)): return False, 'user is not in allow dept' if limit_allow_roles: # 获取用户所有的角色 user_role_list, msg = AccountBaseService.get_user_role_id_list(username) if user_role_list is False: return False, msg limit_allow_role_str_list = limit_allow_roles.split(',') limit_allow_role_id_list = [int(limit_allow_role_str) for limit_allow_role_str in limit_allow_role_str_list] limit_allow_role_id_list = list(set(limit_allow_role_id_list)) total_list = limit_allow_role_id_list + user_role_list if len(total_list) == len(set(total_list)): return False, 'user is not in allow role' return True, ''
def update_slides_make_ticket_field(): topic_index, msg = TicketBaseService.get_ticket_field_value( ticket_id, 'topic_index') db = pymongo.MongoClient(MONGO_URI)[MONGO_DB_NAME] topic_doc = db['topics'].find({'index': int(topic_index)})[0] topic_name = topic_doc.get('title') topic_id = topic_doc.get('_id') TicketBaseService.update_ticket_field_value( ticket_id, { 'topic_name': topic_name, 'topic_id': topic_id, 'title': '课件制作:' + topic_index + '-' + topic_name }) # 有参考视频的时候提供截图链接 count = db['lessons'].count_documents({ 'topic': topic_id, 'internalOnly': True }) TicketBaseService.update_ticket_field_value(ticket_id, {'ref_lesson_count': count}) if count > 0: lessons_doc = db['lessons'].find({ 'topic': topic_id, 'internalOnly': True })[0] lesson_id = lessons_doc.get('_id') edit_slides_url = LOONFLOW_YEE_URL + 'yee/#/pcHome/editSlides/' + lesson_id TicketBaseService.update_ticket_field_value( ticket_id, {'edit_slides_url': edit_slides_url}) else: TicketBaseService.update_ticket_state(ticket_id, 16, '脚本')
def update_topic_doc(): user_name, msg = TicketBaseService.get_ticket_field_value( ticket_id, 'make_slides_assignee') topic_id, msg = TicketBaseService.get_ticket_field_value( ticket_id, 'topic_id') slides_file, msg = TicketBaseService.get_ticket_field_value( ticket_id, 'slides_file') slides_object = json.loads(slides_file) update_doc(user_name, topic_id, slides_object[0]['url'], slides_object[0]['name'])
def create_lessons_make_sub_ticket(): last_user, msg = TicketBaseService.get_ticket_state_last_man(ticket_id, 19) # workflow_id-子工单的对应的workflow transition_id-子工单对应的流转id # parent_ticket_state_id-父工单对应的状态id ticket_dict = dict(workflow_id=8, transition_id=21, username=last_user, parent_ticket_id=ticket_id, parent_ticket_state_id=21, title='create by script - sub workflow demo1') TicketBaseService.new_ticket(ticket_dict, 'shutongflow') ticket_dict = dict(workflow_id=9, transition_id=23, username=last_user, parent_ticket_id=ticket_id, parent_ticket_state_id=21, title='create by script - sub workflow demo2') TicketBaseService.new_ticket(ticket_dict, 'shutongflow')
def patch(self, request, *args, **kwargs): """ 修改工单字段 :param request: :param args: :param kwargs: :return: """ json_str = request.body.decode('utf-8') if not json_str: return api_response(-1, 'post参数为空', {}) request_data_dict = json.loads(json_str) ticket_id = kwargs.get('ticket_id') username = request_data_dict.get('username', '') from service.account.account_base_service import AccountBaseService app_name = request.META.get('HTTP_APPNAME') app_permission_check, msg = AccountBaseService.app_ticket_permission_check(app_name, ticket_id) if not app_permission_check: return api_response(-1, msg, '') result, msg = TicketBaseService.update_ticket_field_value(ticket_id, request_data_dict) if result: code, msg, data = 0, msg, result else: code, msg, data = -1, msg, '' return api_response(code, msg, data)
def put(self, request, *args, **kwargs): """ 修改工单状态 :param request: :param args: :param kwargs: :return: """ json_str = request.body.decode('utf-8') if not json_str: return api_response(-1, 'patch参数为空', {}) request_data_dict = json.loads(json_str) ticket_id = kwargs.get('ticket_id') username = request_data_dict.get('username', '') # 可用于权限控制 state_id = request_data_dict.get('state_id') if not state_id: code = -1 msg = '请提供新的状态id' data = '' else: result, msg = TicketBaseService.update_ticket_state( ticket_id, state_id, username) if result: code, msg, data = 0, msg, '' else: code, msg, data = -1, msg, '' return api_response(code, msg, data)
def post(self, request, *args, **kwargs): """ 重新执行工单脚本(用于脚本执行出错的情况) :return: """ json_str = request.body.decode('utf-8') if not json_str: return api_response(-1, 'post参数为空', {}) request_data_dict = json.loads(json_str) ticket_id = kwargs.get('ticket_id') username = request_data_dict.get('username', '') from service.account.account_base_service import AccountBaseService app_name = request.META.get('HTTP_APPNAME') app_permission_check, msg = AccountBaseService.app_ticket_permission_check(app_name, ticket_id) if not app_permission_check: return api_response(-1, msg, '') if not username: api_response(-1, 'need arg username', '') result, msg = TicketBaseService.retry_ticket_script(ticket_id, username) if result: code, msg, data = 0, 'Ticket script retry start successful', '' else: code, msg, data = -1, msg, '' return api_response(code, msg, data)
def put(self, request, *args, **kwargs): """ 修改工单状态 :param request: :param args: :param kwargs: :return: """ json_str = request.body.decode('utf-8') if not json_str: return api_response(-1, 'patch参数为空', {}) request_data_dict = json.loads(json_str) ticket_id = kwargs.get('ticket_id') username = request_data_dict.get('username', '') # 可用于权限控制 state_id = request_data_dict.get('state_id') from service.account.account_base_service import AccountBaseService app_name = request.META.get('HTTP_APPNAME') app_permission_check, msg = AccountBaseService.app_ticket_permission_check(app_name, ticket_id) if not app_permission_check: return api_response(-1, msg, '') if not state_id: code = -1 msg = '请提供新的状态id' data = '' else: result, msg = TicketBaseService.update_ticket_state(ticket_id, state_id, username) if result: code, msg, data = 0, msg, '' else: code, msg, data = -1, msg, '' return api_response(code, msg, data)
def post(self, request, *args, **kwargs): """ 新建工单,需要根据不同类型工单传的参数不一样 :param request: :param args: :param kwargs: :return: """ json_str = request.body.decode('utf-8') if not json_str: return api_response(-1, 'post参数为空', {}) request_data_dict = json.loads(json_str) app_name = request.META.get('HTTP_APPNAME') from service.account.account_base_service import AccountBaseService # 判断是否有创建某工单的权限 app_permission, msg = AccountBaseService.app_workflow_permission_check(app_name, request_data_dict.get('workflow_id')) if not app_permission: return api_response(-1, 'APP:{} have no permission to create this workflow ticket'.format(app_name), '') new_ticket_result, msg = TicketBaseService.new_ticket(request_data_dict, app_name) if new_ticket_result: code, data = 0, {'ticket_id': new_ticket_result} else: code, data = -1, {} return api_response(code, msg, data)
def get(self, request, *args, **kwargs): """ 获取工单详情,根据用户返回不同的内容(是否有工单表单的编辑权限) :param request: :param args: :param kwargs: :return: """ request_data = request.GET ticket_id = kwargs.get('ticket_id') from service.account.account_base_service import AccountBaseService app_name = request.META.get('HTTP_APPNAME') app_permission_check, msg = AccountBaseService.app_ticket_permission_check(app_name, ticket_id) if not app_permission_check: return api_response(-1, msg, '') username = request_data.get('username', '') if not username: return api_response(-1, '参数不全,请提供username', '') result, msg = TicketBaseService.get_ticket_detail(ticket_id, username) if result: code, data = 0, dict(value=result) else: code, data = -1, {} return api_response(code, msg, data)
def post(self, request, *args, **kwargs): """ 加签处理完成,加签完成操作后工单处理人回回到之前加签发起人 :param request: :param args: :param kwargs: :return: """ json_str = request.body.decode('utf-8') if not json_str: return api_response(-1, 'post参数为空', {}) request_data_dict = json.loads(json_str) ticket_id = kwargs.get('ticket_id') username = request_data_dict.get('username', '') suggestion = request_data_dict.get('suggestion', '') from service.account.account_base_service import AccountBaseService app_name = request.META.get('HTTP_APPNAME') app_permission_check, msg = AccountBaseService.app_ticket_permission_check(app_name, ticket_id) if not app_permission_check: return api_response(-1, msg, '') result, msg = TicketBaseService.add_node_ticket_end(ticket_id, username, suggestion) if result: code, msg, data = 0, msg, result else: code, msg, data = -1, msg, '' return api_response(code, msg, data)
def post(self, request, *args, **kwargs): """ 接单,当工单当前处理人实际为多个人时(角色、部门、多人都有可能, 注意角色和部门有可能实际只有一人) :param request: :param args: :param kwargs: :return: """ json_str = request.body.decode('utf-8') if not json_str: return api_response(-1, 'post参数为空', {}) request_data_dict = json.loads(json_str) ticket_id = kwargs.get('ticket_id') username = request_data_dict.get('username', '') from service.account.account_base_service import AccountBaseService app_name = request.META.get('HTTP_APPNAME') app_permission_check, msg = AccountBaseService.app_ticket_permission_check(app_name, ticket_id) if not app_permission_check: return api_response(-1, msg, '') result, msg = TicketBaseService.accept_ticket(ticket_id, username) if result: code, msg, data = 0, msg, result else: code, msg, data = -1, msg, '' return api_response(code, msg, data)
def get(self, request, *args, **kwargs): request_data = request.GET ticket_id = kwargs.get('ticket_id') # username = request_data.get('username', '') # 可用于权限控制 username = request.META.get('HTTP_USERNAME') per_page = int(request_data.get('per_page', 10)) page = int(request_data.get('page', 1)) from service.account.account_base_service import AccountBaseService app_name = request.META.get('HTTP_APPNAME') app_permission_check, msg = AccountBaseService.app_ticket_permission_check( app_name, ticket_id) if not app_permission_check: return api_response(-1, msg, '') if not username: return api_response(-1, '参数不全,请提供username', '') result, msg = TicketBaseService.get_ticket_flow_log( ticket_id, username, per_page, page) if result is not False: data = dict(value=result, per_page=msg['per_page'], page=msg['page'], total=msg['total']) code, msg, = 0, '' else: code, data = -1, '' return api_response(code, msg, data)
def patch(self, request, *args, **kwargs): """ 处理工单 :param request: :param args: :param kwargs: :return: """ json_str = request.body.decode('utf-8') if not json_str: return api_response(-1, 'patch参数为空', {}) request_data_dict = json.loads(json_str) ticket_id = kwargs.get('ticket_id') from service.account.account_base_service import AccountBaseService app_name = request.META.get('HTTP_APPNAME') app_permission_check, msg = AccountBaseService.app_ticket_permission_check(app_name, ticket_id) if not app_permission_check: return api_response(-1, msg, '') result, msg = TicketBaseService.handle_ticket(ticket_id, request_data_dict) if result or result is not False: code, data = 0, dict(value=result) else: code, data = -1, {} return api_response(code, msg, data)
def post(self, request, *args, **kwargs): """ 新建工单,需要根据不同类型工单传的参数不一样 :param request: :param args: :param kwargs: :return: """ json_str = request.body.decode('utf-8') if not json_str: return api_response(-1, 'post参数为空', {}) request_data_dict = json.loads(json_str) if not(isinstance(request_data_dict.get('workflow_id', None), int) and isinstance(request_data_dict.get('transition_id', None), int)): # 临时先这么判断,后续针对所有view统一使用更优雅的方式来处理 return api_response(-1, 'workflow_id或transition_id类型不合法', {}) app_name = request.META.get('HTTP_APPNAME') request_data_dict.update(dict(username=request.META.get('HTTP_USERNAME'))) from service.account.account_base_service import AccountBaseService # 判断是否有创建某工单的权限 app_permission, msg = AccountBaseService.app_workflow_permission_check(app_name, request_data_dict.get('workflow_id')) if not app_permission: return api_response(-1, 'APP:{} have no permission to create this workflow ticket'.format(app_name), '') new_ticket_result, msg = TicketBaseService.new_ticket(request_data_dict, app_name) if new_ticket_result: code, data = 0, {'ticket_id': new_ticket_result} else: code, data = -1, {} return api_response(code, msg, data)
def post(self, request, *args, **kwargs): """ 转交操作会直接修改工单处理人,且工单状态不变,所以在使用的时候可以在前端做些提醒 避免用户把工单直接转交给下个人,从而干扰了工单的正常流转( 如用户提交了一个请假单,部门TL审批状态下,tl本来应该点击"同意",工单会自动流转到财务人员审批状态。 应该避免tl直接将工单转交给了某个财务)。这个地方后续会考虑怎么优化下,目前先在前端做提醒 :param request: :param args: :param kwargs: :return: """ json_str = request.body.decode('utf-8') if not json_str: return api_response(-1, 'post参数为空', {}) request_data_dict = json.loads(json_str) ticket_id = kwargs.get('ticket_id') username = request_data_dict.get('username', '') target_username = request_data_dict.get('target_username', '') suggestion = request_data_dict.get('suggestion', '') from service.account.account_base_service import AccountBaseService app_name = request.META.get('HTTP_APPNAME') app_permission_check, msg = AccountBaseService.app_ticket_permission_check(app_name, ticket_id) if not app_permission_check: return api_response(-1, msg, '') result, msg = TicketBaseService.deliver_ticket(ticket_id, username, target_username, suggestion) if result: code, msg, data = 0, msg, result else: code, msg, data = -1, msg, '' return api_response(code, msg, data)
def demo_script_call(): # 获取工单信息ip地址信息 username, msg = TicketBaseService.get_ticket_field_value( ticket_id, 'creator') # ticket_id会通过exec传过来 # 你也可以获取工单的其他字段信息,包括自定义字段的值。根据获取的值做后续处理 print(username) print(action_from) return True, ''
def timer_transition(ticket_id, state_id, date_time, transition_id): """ 定时器流转 :param ticket_id: :param state_id: :param date_time: :param transition_id: :return: """ # 需要满足工单此状态后续无其他操作才自动流转 # 查询该工单此状态所有操作 flow_log_set, msg = TicketBaseService().get_ticket_flow_log(ticket_id, 'loonrobot', per_page=1000) for flow_log in flow_log_set: if flow_log.get('state').get('state_id') == state_id and flow_log.get('gmt_created') > date_time: return True, '后续有操作,定时器失效' # 执行流转 handle_ticket_data = dict(transition_id=transition_id, username='******', suggestion='定时器流转') TicketBaseService().handle_ticket(ticket_id, handle_ticket_data, True)
def demo_script_call(): # ticket_id will passed by globals, you can get ticket info by TicketBaseService.get_ticket_field_value with 'ticket_id' arg username, msg = TicketBaseService.get_ticket_field_value(ticket_id, 'creator') # ticket_id会通过exec传过来 host_name, msg2 = TicketBaseService.get_ticket_field_value(ticket_id, 'host_name') if (username and host_name): # then you can call your own api to create vm post_data = dict(username=username, host_name=host_name) resp = requests.post('http://xxxx.com/api/v1.0/vms', json=post_data).json() if resp.code == 0: host_ip = resp.data.get('host_ip', '') # print msg will saved by loonflow in ticket_flow_log record print('host_ip is {}'.format(host_ip)) return True, '' else: raise Exception('create vm fail: {}'.format(resp.msg)) else: raise Exception('get ticket info fail, username:{}, host_name:{}'.format(msg, msg2)) return True, ''
def get(self, request, *args, **kwargs): """ 获取工单列表 :param request: :param args: :param kwargs: :return: """ request_data = request.GET sn = request_data.get('sn', '') title = request_data.get('title', '') # username = request_data.get('username', '') username = request.META.get('HTTP_USERNAME') create_start = request_data.get('create_start', '') create_end = request_data.get('create_end', '') workflow_ids = request_data.get('workflow_ids', '') state_ids = request_data.get('state_ids', '') ticket_ids = request_data.get('ticket_ids', '') reverse = int(request_data.get('reverse', 1)) per_page = int(request_data.get('per_page', 10)) page = int(request_data.get('page', 1)) is_end = request_data.get('is_end', '') is_rejected = request_data.get('is_rejected', '') # 待办,关联的,创建 category = request_data.get('category') # app_name app_name = request.META.get('HTTP_APPNAME') ticket_result_restful_list, msg = TicketBaseService.get_ticket_list( sn=sn, title=title, username=username, create_start=create_start, create_end=create_end, workflow_ids=workflow_ids, state_ids=state_ids, ticket_ids=ticket_ids, category=category, reverse=reverse, per_page=per_page, page=page, app_name=app_name, is_end=is_end, is_rejected=is_rejected) if ticket_result_restful_list is not False: data = dict(value=ticket_result_restful_list, per_page=msg['per_page'], page=msg['page'], total=msg['total']) code, msg, = 0, '' else: code, data = -1, '' return api_response(code, msg, data)
def get(self, request, *args, **kwargs): request_data = request.GET ticket_id = kwargs.get('ticket_id') username = request_data.get('username', '') # 可用于权限控制 result, msg = TicketBaseService.get_ticket_flow_step( ticket_id, username) if result is not False: data = dict(value=result) code, msg, = 0, '' else: code, data = -1, '' return api_response(code, msg, data)
def get(self, request, *args, **kwargs): request_data = request.GET ticket_id = kwargs.get('ticket_id') username = request_data.get('username', '') if not username: return api_response(-1, '参数不全,请提供username', '') result, msg = TicketBaseService.get_ticket_transition( ticket_id, username) if result or result is not False: code, data = 0, dict(value=result) else: code, data = -1, {} return api_response(code, msg, data)
def get(self, request, *args, **kwargs): """ 工单当前处理人详情,调用方后端可用获取处理人信息后提供催办等功能 :param request: :param args: :param kwargs: :return: """ ticket_id = kwargs.get('ticket_id') flag, msg = TicketBaseService.get_ticket_participant_info(ticket_id) if flag: code, msg, data = 0, '', msg else: code, msg, data = -1, msg, {} return api_response(code, msg, data)
def app_ticket_permission_check(cls, app_name, ticket_id): """ 获取调用app是否有某个工单的权限 :param app_name: :param ticket_id: :return: """ from service.ticket.ticket_base_service import TicketBaseService ticket_obj, msg = TicketBaseService.get_ticket_by_id(ticket_id) if not ticket_obj: return False, msg workflow_id = ticket_obj.workflow_id permission_check, msg = cls.app_workflow_permission_check(app_name, workflow_id) if not permission_check: return False, msg return True, ''
def get(self, request, *args, **kwargs): request_data = request.GET ticket_id = kwargs.get('ticket_id') username = request_data.get('username', '') # 可用于权限控制 per_page = int(request_data.get('per_page', 10)) page = int(request_data.get('page', 1)) result, msg = TicketBaseService.get_ticket_flow_log( ticket_id, username, per_page, page) if result is not False: data = dict(value=result, per_page=msg['per_page'], page=msg['page'], total=msg['total']) code, msg, = 0, '' else: code, data = -1, '' return api_response(code, msg, data)
def get(self, request, *args, **kwargs): request_data = request.GET ticket_id = kwargs.get('ticket_id') username = request_data.get('username', '') from service.account.account_base_service import AccountBaseService app_name = request.META.get('HTTP_APPNAME') app_permission_check, msg = AccountBaseService.app_ticket_permission_check(app_name, ticket_id) if not app_permission_check: return api_response(-1, msg, '') if not username: return api_response(-1, '参数不全,请提供username', '') result, msg = TicketBaseService.get_ticket_transition(ticket_id, username) if result or result is not False: code, data = 0, dict(value=result) else: code, data = -1, {} return api_response(code, msg, data)
def post(self, request, *args, **kwargs): """ 新建工单,需要根据不同类型工单传的参数不一样 :param request: :param args: :param kwargs: :return: """ json_str = request.body.decode('utf-8') if not json_str: return api_response(-1, 'post参数为空', {}) request_data_dict = json.loads(json_str) new_ticket_result, msg = TicketBaseService.new_ticket( request_data_dict) if new_ticket_result: code, data = 0, {'ticket_id': new_ticket_result} else: code, data = -1, {} return api_response(code, msg, data)
def get(self, request, *args, **kwargs): """ 获取工单详情,根据用户返回不同的内容(是否有工单表单的编辑权限) :param request: :param args: :param kwargs: :return: """ request_data = request.GET ticket_id = kwargs.get('ticket_id') username = request_data.get('username', '') if not username: return api_response(-1, '参数不全,请提供username', '') result, msg = TicketBaseService.get_ticket_detail(ticket_id, username) if result: code, data = 0, dict(value=result) else: code, data = -1, {} return api_response(code, msg, data)
def get(self, request, *args, **kwargs): """ 批量获取工单状态 :param request: :param args: :param kwargs: :return: """ request_data = request.GET username = request_data.get('username', '') # 可用于权限控制 ticket_ids = request_data.get('ticket_ids') # 逗号隔开 ticket_id_list = ticket_ids.split(',') ticket_id_list = [int(ticket_id) for ticket_id in ticket_id_list] result, msg = TicketBaseService.get_tickets_states_by_ticket_id_list(ticket_id_list, username) if result: code, msg, data = 0, msg, result else: code, msg, data = -1, msg, '' return api_response(code, msg, data)