コード例 #1
0
    def get_workflow_init_state(cls, workflow_id):
        """
        获取工作的初始状态信息,包括允许的transition
        :param workflow_id:
        :return:
        """
        init_state_obj = State.objects.filter(workflow_id=workflow_id, is_deleted=False, type_id=CONSTANT_SERVICE.STATE_TYPE_START).first()
        if not init_state_obj:
            return False, '该工作流尚未配置初始状态'

        transition_queryset, msg = WorkflowTransitionService.get_state_transition_queryset(init_state_obj.id)
        transition_info_list = []
        for transition in transition_queryset:
            transition_info_list.append(dict(transition_id=transition.id, transition_name=transition.name))

        # 工单基础字段及属性
        field_list = []
        field_list.append(dict(field_key='title', field_name=u'标题', field_value=None, order_id=20,
                               field_type_id=CONSTANT_SERVICE.FIELD_TYPE_STR,
                               field_attribute=CONSTANT_SERVICE.FIELD_ATTRIBUTE_RO, description='工单的标题',
                               field_choice={}, boolean_field_display={}, default_value=None, field_template='', label={}))
        custom_field_dict, msg = WorkflowCustomFieldService.get_workflow_custom_field(workflow_id)
        for key, value in custom_field_dict.items():
            field_list.append(dict(field_key=key, field_name=custom_field_dict[key]['field_name'], field_value=None, order_id=custom_field_dict[key]['order_id'],
                                   field_type_id=custom_field_dict[key]['field_type_id'],
                                   field_attribute=CONSTANT_SERVICE.FIELD_ATTRIBUTE_RO,
                                   default_value=custom_field_dict[key]['default_value'],
                                   description=custom_field_dict[key]['description'],
                                   field_template=custom_field_dict[key]['field_template'],
                                   boolean_field_display=json.loads(custom_field_dict[key]['boolean_field_display']) if custom_field_dict[key]['boolean_field_display'] else {},  # 之前model允许为空了,为了兼容先这么写,
                                   field_choice=json.loads(custom_field_dict[key]['field_choice']),
                                   label=json.loads(custom_field_dict[key]['label'])
                                   ))

        state_field_dict = json.loads(init_state_obj.state_field_str)
        state_field_key_list = state_field_dict.keys()

        new_field_list = []
        for field0 in field_list:
            if field0['field_key'] in state_field_key_list:
                field0['field_attribute'] = state_field_dict[field0['field_key']]
                new_field_list.append(field0)

        # 字段排序
        new_field_list = sorted(new_field_list, key=lambda r: r['order_id'])
        state_info_dict = dict(id=init_state_obj.id, name=init_state_obj.name, workflow_id=init_state_obj.workflow_id,
                               sub_workflow_id=init_state_obj.sub_workflow_id, distribute_type_id=init_state_obj.distribute_type_id,
                               is_hidden=init_state_obj.is_hidden, order_id=init_state_obj.order_id, type_id=init_state_obj.type_id,
                               participant_type_id=init_state_obj.participant_type_id, participant=init_state_obj.participant,
                               field_list=new_field_list, label=json.loads(init_state_obj.label),
                               creator=init_state_obj.creator, gmt_created=str(init_state_obj.gmt_created)[:19],
                               transition=transition_info_list
                               )
        return state_info_dict, ''
コード例 #2
0
    def get_workflow_init_state(cls, workflow_id):
        """
        获取工作的初始状态信息,包括允许的transition
        :param workflow_id:
        :return:
        """
        init_state_obj = State.objects.filter(
            workflow_id=workflow_id,
            is_deleted=False,
            type_id=CONSTANT_SERVICE.STATE_TYPE_START).first()
        if not init_state_obj:
            return False, '该工作流尚未配置初始状态'

        transition_queryset, msg = WorkflowTransitionService.get_state_transition_queryset(
            init_state_obj.id)
        transition_info_list = []
        for transition in transition_queryset:
            transition_info_list.append(
                dict(transition_id=transition.id,
                     transition_name=transition.name))
        state_info_dict = dict(
            id=init_state_obj.id,
            name=init_state_obj.name,
            workflow_id=init_state_obj.workflow_id,
            sub_workflow_id=init_state_obj.sub_workflow_id,
            distribute_type_id=init_state_obj.distribute_type_id,
            is_hidden=init_state_obj.is_hidden,
            order_id=init_state_obj.order_id,
            type_id=init_state_obj.type_id,
            participant_type_id=init_state_obj.participant_type_id,
            participant=init_state_obj.participant,
            state_field=json.loads(init_state_obj.state_field_str),
            label=json.loads(init_state_obj.label),
            creator=init_state_obj.creator,
            gmt_created=str(init_state_obj.gmt_created)[:19],
            transition=transition_info_list)
        return state_info_dict, ''