Esempio n. 1
0
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, '工单当前处理人为非脚本,不执行脚本'
Esempio n. 2
0
    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, '脚本')
Esempio n. 4
0
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'])
Esempio n. 5
0
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')
Esempio n. 6
0
    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)
Esempio n. 7
0
 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)
Esempio n. 8
0
    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)
Esempio n. 9
0
    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)
Esempio n. 10
0
    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)
Esempio n. 11
0
    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)
Esempio n. 12
0
    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)
Esempio n. 13
0
    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)
Esempio n. 14
0
    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)
Esempio n. 15
0
    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)
Esempio n. 16
0
    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)
Esempio n. 17
0
    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)
Esempio n. 18
0
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, ''
Esempio n. 19
0
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)
Esempio n. 20
0
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, ''
Esempio n. 21
0
    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)
Esempio n. 22
0
 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)
Esempio n. 23
0
 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)
Esempio n. 25
0
 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, ''
Esempio n. 26
0
    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)
Esempio n. 27
0
    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)
Esempio n. 28
0
 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)
Esempio n. 29
0
 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)
Esempio n. 30
0
    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)