gitee.com/larksuite/oapi-sdk-go/v3@v3.0.3/service/approval/v4/api.go (about)

     1  // Package approval code generated by oapi sdk gen
     2  /*
     3   * MIT License
     4   *
     5   * Copyright (c) 2022 Lark Technologies Pte. Ltd.
     6   *
     7   * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
     8   *
     9   * The above copyright notice and this permission notice, shall be included in all copies or substantial portions of the Software.
    10   *
    11   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    12   */
    13  
    14  package larkapproval
    15  
    16  import (
    17  	"context"
    18  	"net/http"
    19  
    20  	"gitee.com/larksuite/oapi-sdk-go/v3/core"
    21  )
    22  
    23  func NewService(config *larkcore.Config) *ApprovalService {
    24  	a := &ApprovalService{config: config}
    25  	a.Approval = &approval{service: a}
    26  	a.ExternalApproval = &externalApproval{service: a}
    27  	a.ExternalInstance = &externalInstance{service: a}
    28  	a.ExternalTask = &externalTask{service: a}
    29  	a.Instance = &instance{service: a}
    30  	a.InstanceComment = &instanceComment{service: a}
    31  	a.Task = &task{service: a}
    32  	return a
    33  }
    34  
    35  type ApprovalService struct {
    36  	config           *larkcore.Config
    37  	Approval         *approval         // 审批定义
    38  	ExternalApproval *externalApproval // 三方审批定义
    39  	ExternalInstance *externalInstance // 三方审批实例
    40  	ExternalTask     *externalTask     // 三方审批任务
    41  	Instance         *instance         // 审批实例
    42  	InstanceComment  *instanceComment  // 评论
    43  	Task             *task             // 审批任务
    44  }
    45  
    46  type approval struct {
    47  	service *ApprovalService
    48  }
    49  type externalApproval struct {
    50  	service *ApprovalService
    51  }
    52  type externalInstance struct {
    53  	service *ApprovalService
    54  }
    55  type externalTask struct {
    56  	service *ApprovalService
    57  }
    58  type instance struct {
    59  	service *ApprovalService
    60  }
    61  type instanceComment struct {
    62  	service *ApprovalService
    63  }
    64  type task struct {
    65  	service *ApprovalService
    66  }
    67  
    68  // 创建审批定义
    69  //
    70  // - 用于通过接口创建简单的审批定义,可以灵活指定定义的基础信息、表单和流程等。创建成功后,不支持从审批管理后台删除该定义。不推荐企业自建应用使用,如有需要尽量联系管理员在审批管理后台创建定义。
    71  //
    72  // - 接口谨慎调用,创建后的审批定义无法停用/删除
    73  //
    74  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/approval/create
    75  //
    76  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/create_approval.go
    77  func (a *approval) Create(ctx context.Context, req *CreateApprovalReq, options ...larkcore.RequestOptionFunc) (*CreateApprovalResp, error) {
    78  	// 发起请求
    79  	apiReq := req.apiReq
    80  	apiReq.ApiPath = "/open-apis/approval/v4/approvals"
    81  	apiReq.HttpMethod = http.MethodPost
    82  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
    83  	apiResp, err := larkcore.Request(ctx, apiReq, a.service.config, options...)
    84  	if err != nil {
    85  		return nil, err
    86  	}
    87  	// 反序列响应结果
    88  	resp := &CreateApprovalResp{ApiResp: apiResp}
    89  	err = apiResp.JSONUnmarshalBody(resp)
    90  	if err != nil {
    91  		return nil, err
    92  	}
    93  	return resp, err
    94  }
    95  
    96  // 查看审批定义
    97  //
    98  // - 根据 Approval Code 获取某个审批定义的详情,用于构造创建审批实例的请求。
    99  //
   100  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/approval/get
   101  //
   102  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/get_approval.go
   103  func (a *approval) Get(ctx context.Context, req *GetApprovalReq, options ...larkcore.RequestOptionFunc) (*GetApprovalResp, error) {
   104  	// 发起请求
   105  	apiReq := req.apiReq
   106  	apiReq.ApiPath = "/open-apis/approval/v4/approvals/:approval_code"
   107  	apiReq.HttpMethod = http.MethodGet
   108  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   109  	apiResp, err := larkcore.Request(ctx, apiReq, a.service.config, options...)
   110  	if err != nil {
   111  		return nil, err
   112  	}
   113  	// 反序列响应结果
   114  	resp := &GetApprovalResp{ApiResp: apiResp}
   115  	err = apiResp.JSONUnmarshalBody(resp)
   116  	if err != nil {
   117  		return nil, err
   118  	}
   119  	return resp, err
   120  }
   121  
   122  // 订阅审批事件
   123  //
   124  // - 应用订阅 approval_code 后,该应用就可以收到该审批定义对应实例的事件通知。同一应用只需要订阅一次,无需重复订阅。;;当应用不希望再收到审批事件时,可以使用取消订阅接口进行取消,取消后将不再给应用推送消息。;;订阅和取消订阅都是应用维度的,多个应用可以同时订阅同一个 approval_code,每个应用都能收到审批事件。
   125  //
   126  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/approval/subscribe
   127  //
   128  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/subscribe_approval.go
   129  func (a *approval) Subscribe(ctx context.Context, req *SubscribeApprovalReq, options ...larkcore.RequestOptionFunc) (*SubscribeApprovalResp, error) {
   130  	// 发起请求
   131  	apiReq := req.apiReq
   132  	apiReq.ApiPath = "/open-apis/approval/v4/approvals/:approval_code/subscribe"
   133  	apiReq.HttpMethod = http.MethodPost
   134  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   135  	apiResp, err := larkcore.Request(ctx, apiReq, a.service.config, options...)
   136  	if err != nil {
   137  		return nil, err
   138  	}
   139  	// 反序列响应结果
   140  	resp := &SubscribeApprovalResp{ApiResp: apiResp}
   141  	err = apiResp.JSONUnmarshalBody(resp)
   142  	if err != nil {
   143  		return nil, err
   144  	}
   145  	return resp, err
   146  }
   147  
   148  // 取消订阅审批事件
   149  //
   150  // - 取消订阅 approval_code 后,无法再收到该审批定义对应实例的事件通知
   151  //
   152  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/approval/unsubscribe
   153  //
   154  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/unsubscribe_approval.go
   155  func (a *approval) Unsubscribe(ctx context.Context, req *UnsubscribeApprovalReq, options ...larkcore.RequestOptionFunc) (*UnsubscribeApprovalResp, error) {
   156  	// 发起请求
   157  	apiReq := req.apiReq
   158  	apiReq.ApiPath = "/open-apis/approval/v4/approvals/:approval_code/unsubscribe"
   159  	apiReq.HttpMethod = http.MethodPost
   160  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   161  	apiResp, err := larkcore.Request(ctx, apiReq, a.service.config, options...)
   162  	if err != nil {
   163  		return nil, err
   164  	}
   165  	// 反序列响应结果
   166  	resp := &UnsubscribeApprovalResp{ApiResp: apiResp}
   167  	err = apiResp.JSONUnmarshalBody(resp)
   168  	if err != nil {
   169  		return nil, err
   170  	}
   171  	return resp, err
   172  }
   173  
   174  // 三方审批定义创建
   175  //
   176  // - 审批定义是审批的描述,包括审批名称、图标、描述等基础信息。创建好审批定义,用户就可以在审批应用的发起页中看到审批,如果用户点击发起,则会跳转到配置的发起三方系统地址去发起审批。;;另外,审批定义还配置了审批操作时的回调地址:审批人在待审批列表中进行【同意】【拒绝】操作时,审批中心会调用回调地址通知三方系统。
   177  //
   178  // - 注意,审批中心不负责审批流程的流转,只负责展示、操作、消息通知。因此审批定义创建时没有审批流程的信息。
   179  //
   180  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/external_approval/create
   181  //
   182  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/create_externalApproval.go
   183  func (e *externalApproval) Create(ctx context.Context, req *CreateExternalApprovalReq, options ...larkcore.RequestOptionFunc) (*CreateExternalApprovalResp, error) {
   184  	// 发起请求
   185  	apiReq := req.apiReq
   186  	apiReq.ApiPath = "/open-apis/approval/v4/external_approvals"
   187  	apiReq.HttpMethod = http.MethodPost
   188  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   189  	apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...)
   190  	if err != nil {
   191  		return nil, err
   192  	}
   193  	// 反序列响应结果
   194  	resp := &CreateExternalApprovalResp{ApiResp: apiResp}
   195  	err = apiResp.JSONUnmarshalBody(resp)
   196  	if err != nil {
   197  		return nil, err
   198  	}
   199  	return resp, err
   200  }
   201  
   202  // 三方审批实例校验
   203  //
   204  // - 校验三方审批实例数据,用于判断服务端数据是否为最新的。用户提交实例最新更新时间,如果服务端不存在该实例,或者服务端实例更新时间不是最新的,则返回对应实例 id。;;例如,用户可以每隔5分钟,将最近5分钟产生的实例使用该接口进行对比。
   205  //
   206  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/external_instance/check
   207  //
   208  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/check_externalInstance.go
   209  func (e *externalInstance) Check(ctx context.Context, req *CheckExternalInstanceReq, options ...larkcore.RequestOptionFunc) (*CheckExternalInstanceResp, error) {
   210  	// 发起请求
   211  	apiReq := req.apiReq
   212  	apiReq.ApiPath = "/open-apis/approval/v4/external_instances/check"
   213  	apiReq.HttpMethod = http.MethodPost
   214  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   215  	apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...)
   216  	if err != nil {
   217  		return nil, err
   218  	}
   219  	// 反序列响应结果
   220  	resp := &CheckExternalInstanceResp{ApiResp: apiResp}
   221  	err = apiResp.JSONUnmarshalBody(resp)
   222  	if err != nil {
   223  		return nil, err
   224  	}
   225  	return resp, err
   226  }
   227  
   228  // 三方审批实例同步
   229  //
   230  // - 审批中心不负责审批的流转,审批的流转在三方系统,三方系统在审批流转后生成的审批实例、审批任务、审批抄送数据同步到审批中心。;;用户可以在审批中心中浏览三方系统同步过来的实例、任务、抄送信息,并且可以跳转回三方系统进行更详细的查看和操作,其中实例信息在【已发起】列表,任务信息在【待审批】和【已审批】列表,抄送信息在【抄送我】列表;;:::html;<img src="//sf3-cn.feishucdn.com/obj/open-platform-opendoc/9dff4434afbeb0ef69de7f36b9a6e995_z5iwmTzEgg.png" alt="" style="zoom:17%;" />;;;<img src="//sf3-cn.feishucdn.com/obj/open-platform-opendoc/ca6e0e984a7a6d64e1b16a0bac4bf868_tfqjCiaJQM.png" alt="" style="zoom:17%;" />;;;<img src="//sf3-cn.feishucdn.com/obj/open-platform-opendoc/529377e238df78d391bbd22e962ad195_T7eefLI1GA.png" alt="" style="zoom:17%;" />;:::;;对于审批任务,三方系统也可以配置审批任务的回调接口,这样审批人可以在审批中心中直接进行审批操作,审批中心会回调三方系统,三方系统收到回调后更新任务信息,并将新的任务信息同步回审批中心,形成闭环。;;:::html;<img src="//sf3-cn.feishucdn.com/obj/open-platform-opendoc/721c35428bc1187db3318c572f9979ad_je75QpElcg.png" alt=""  style="zoom:25%;" />;:::;<br>
   231  //
   232  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/external_instance/create
   233  //
   234  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/create_externalInstance.go
   235  func (e *externalInstance) Create(ctx context.Context, req *CreateExternalInstanceReq, options ...larkcore.RequestOptionFunc) (*CreateExternalInstanceResp, error) {
   236  	// 发起请求
   237  	apiReq := req.apiReq
   238  	apiReq.ApiPath = "/open-apis/approval/v4/external_instances"
   239  	apiReq.HttpMethod = http.MethodPost
   240  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   241  	apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...)
   242  	if err != nil {
   243  		return nil, err
   244  	}
   245  	// 反序列响应结果
   246  	resp := &CreateExternalInstanceResp{ApiResp: apiResp}
   247  	err = apiResp.JSONUnmarshalBody(resp)
   248  	if err != nil {
   249  		return nil, err
   250  	}
   251  	return resp, err
   252  }
   253  
   254  // 获取三方审批任务状态
   255  //
   256  // - 该接口用于获取三方审批的状态。用户传入查询条件,接口返回满足条件的审批实例的状态。该接口支持多种参数的组合,包括如下组合:;;1.通过 instance_ids 获取指定实例的任务状态;;2.通过 user_ids 获取指定用户的任务状态;;3.通过 status 获取指定状态的所有任务;;4.通过page_token获取下一批数据
   257  //
   258  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/external_task/list
   259  //
   260  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/list_externalTask.go
   261  func (e *externalTask) List(ctx context.Context, req *ListExternalTaskReq, options ...larkcore.RequestOptionFunc) (*ListExternalTaskResp, error) {
   262  	// 发起请求
   263  	apiReq := req.apiReq
   264  	apiReq.ApiPath = "/open-apis/approval/v4/external_tasks"
   265  	apiReq.HttpMethod = http.MethodGet
   266  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   267  	apiResp, err := larkcore.Request(ctx, apiReq, e.service.config, options...)
   268  	if err != nil {
   269  		return nil, err
   270  	}
   271  	// 反序列响应结果
   272  	resp := &ListExternalTaskResp{ApiResp: apiResp}
   273  	err = apiResp.JSONUnmarshalBody(resp)
   274  	if err != nil {
   275  		return nil, err
   276  	}
   277  	return resp, err
   278  }
   279  func (e *externalTask) ListByIterator(ctx context.Context, req *ListExternalTaskReq, options ...larkcore.RequestOptionFunc) (*ListExternalTaskIterator, error) {
   280  	return &ListExternalTaskIterator{
   281  		ctx:      ctx,
   282  		req:      req,
   283  		listFunc: e.List,
   284  		options:  options,
   285  		limit:    req.Limit}, nil
   286  }
   287  
   288  //
   289  //
   290  // -
   291  //
   292  // - 官网API文档链接:https://open.feishu.cn/document/ukTMukTMukTM/ukTM5UjL5ETO14SOxkTN/approval-task-addsign
   293  //
   294  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/addSign_instance.go
   295  func (i *instance) AddSign(ctx context.Context, req *AddSignInstanceReq, options ...larkcore.RequestOptionFunc) (*AddSignInstanceResp, error) {
   296  	// 发起请求
   297  	apiReq := req.apiReq
   298  	apiReq.ApiPath = "/open-apis/approval/v4/instances/add_sign"
   299  	apiReq.HttpMethod = http.MethodPost
   300  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   301  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   302  	if err != nil {
   303  		return nil, err
   304  	}
   305  	// 反序列响应结果
   306  	resp := &AddSignInstanceResp{ApiResp: apiResp}
   307  	err = apiResp.JSONUnmarshalBody(resp)
   308  	if err != nil {
   309  		return nil, err
   310  	}
   311  	return resp, err
   312  }
   313  
   314  // 审批实例撤回
   315  //
   316  // - 对于状态为“审批中”的单个审批实例进行撤销操作,撤销后审批流程结束
   317  //
   318  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/cancel
   319  //
   320  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/cancel_instance.go
   321  func (i *instance) Cancel(ctx context.Context, req *CancelInstanceReq, options ...larkcore.RequestOptionFunc) (*CancelInstanceResp, error) {
   322  	// 发起请求
   323  	apiReq := req.apiReq
   324  	apiReq.ApiPath = "/open-apis/approval/v4/instances/cancel"
   325  	apiReq.HttpMethod = http.MethodPost
   326  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   327  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   328  	if err != nil {
   329  		return nil, err
   330  	}
   331  	// 反序列响应结果
   332  	resp := &CancelInstanceResp{ApiResp: apiResp}
   333  	err = apiResp.JSONUnmarshalBody(resp)
   334  	if err != nil {
   335  		return nil, err
   336  	}
   337  	return resp, err
   338  }
   339  
   340  // 审批实例抄送
   341  //
   342  // - 通过接口可以将当前审批实例抄送给其他人。
   343  //
   344  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/cc
   345  //
   346  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/cc_instance.go
   347  func (i *instance) Cc(ctx context.Context, req *CcInstanceReq, options ...larkcore.RequestOptionFunc) (*CcInstanceResp, error) {
   348  	// 发起请求
   349  	apiReq := req.apiReq
   350  	apiReq.ApiPath = "/open-apis/approval/v4/instances/cc"
   351  	apiReq.HttpMethod = http.MethodPost
   352  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   353  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   354  	if err != nil {
   355  		return nil, err
   356  	}
   357  	// 反序列响应结果
   358  	resp := &CcInstanceResp{ApiResp: apiResp}
   359  	err = apiResp.JSONUnmarshalBody(resp)
   360  	if err != nil {
   361  		return nil, err
   362  	}
   363  	return resp, err
   364  }
   365  
   366  // 创建审批实例
   367  //
   368  // - 创建一个审批实例,调用方需对审批定义的表单有详细了解,将按照定义的表单结构,将表单 Value 通过接口传入
   369  //
   370  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/create
   371  //
   372  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/create_instance.go
   373  func (i *instance) Create(ctx context.Context, req *CreateInstanceReq, options ...larkcore.RequestOptionFunc) (*CreateInstanceResp, error) {
   374  	// 发起请求
   375  	apiReq := req.apiReq
   376  	apiReq.ApiPath = "/open-apis/approval/v4/instances"
   377  	apiReq.HttpMethod = http.MethodPost
   378  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   379  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   380  	if err != nil {
   381  		return nil, err
   382  	}
   383  	// 反序列响应结果
   384  	resp := &CreateInstanceResp{ApiResp: apiResp}
   385  	err = apiResp.JSONUnmarshalBody(resp)
   386  	if err != nil {
   387  		return nil, err
   388  	}
   389  	return resp, err
   390  }
   391  
   392  // 获取单个审批实例详情
   393  //
   394  // - 通过审批实例 Instance Code  获取审批实例详情。Instance Code 由 [批量获取审批实例](/ssl:ttdoc/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/list) 接口获取。
   395  //
   396  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/get
   397  //
   398  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/get_instance.go
   399  func (i *instance) Get(ctx context.Context, req *GetInstanceReq, options ...larkcore.RequestOptionFunc) (*GetInstanceResp, error) {
   400  	// 发起请求
   401  	apiReq := req.apiReq
   402  	apiReq.ApiPath = "/open-apis/approval/v4/instances/:instance_id"
   403  	apiReq.HttpMethod = http.MethodGet
   404  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   405  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   406  	if err != nil {
   407  		return nil, err
   408  	}
   409  	// 反序列响应结果
   410  	resp := &GetInstanceResp{ApiResp: apiResp}
   411  	err = apiResp.JSONUnmarshalBody(resp)
   412  	if err != nil {
   413  		return nil, err
   414  	}
   415  	return resp, err
   416  }
   417  
   418  // 批量获取审批实例ID
   419  //
   420  // - 根据 approval_code 批量获取审批实例的 instance_code,用于拉取租户下某个审批定义的全部审批实例。默认以审批创建时间排序
   421  //
   422  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/list
   423  //
   424  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/list_instance.go
   425  func (i *instance) List(ctx context.Context, req *ListInstanceReq, options ...larkcore.RequestOptionFunc) (*ListInstanceResp, error) {
   426  	// 发起请求
   427  	apiReq := req.apiReq
   428  	apiReq.ApiPath = "/open-apis/approval/v4/instances"
   429  	apiReq.HttpMethod = http.MethodGet
   430  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   431  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   432  	if err != nil {
   433  		return nil, err
   434  	}
   435  	// 反序列响应结果
   436  	resp := &ListInstanceResp{ApiResp: apiResp}
   437  	err = apiResp.JSONUnmarshalBody(resp)
   438  	if err != nil {
   439  		return nil, err
   440  	}
   441  	return resp, err
   442  }
   443  func (i *instance) ListByIterator(ctx context.Context, req *ListInstanceReq, options ...larkcore.RequestOptionFunc) (*ListInstanceIterator, error) {
   444  	return &ListInstanceIterator{
   445  		ctx:      ctx,
   446  		req:      req,
   447  		listFunc: i.List,
   448  		options:  options,
   449  		limit:    req.Limit}, nil
   450  }
   451  
   452  //
   453  //
   454  // -
   455  //
   456  // - 官网API文档链接:https://open.feishu.cn/document/ukTMukTMukTM/ukTM5UjL5ETO14SOxkTN/approval-preview
   457  //
   458  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/preview_instance.go
   459  func (i *instance) Preview(ctx context.Context, req *PreviewInstanceReq, options ...larkcore.RequestOptionFunc) (*PreviewInstanceResp, error) {
   460  	// 发起请求
   461  	apiReq := req.apiReq
   462  	apiReq.ApiPath = "/open-apis/approval/v4/instances/preview"
   463  	apiReq.HttpMethod = http.MethodPost
   464  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   465  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   466  	if err != nil {
   467  		return nil, err
   468  	}
   469  	// 反序列响应结果
   470  	resp := &PreviewInstanceResp{ApiResp: apiResp}
   471  	err = apiResp.JSONUnmarshalBody(resp)
   472  	if err != nil {
   473  		return nil, err
   474  	}
   475  	return resp, err
   476  }
   477  
   478  // 实例列表查询
   479  //
   480  // - 该接口通过不同条件查询审批系统中符合条件的审批实例列表。
   481  //
   482  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/query
   483  //
   484  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/query_instance.go
   485  func (i *instance) Query(ctx context.Context, req *QueryInstanceReq, options ...larkcore.RequestOptionFunc) (*QueryInstanceResp, error) {
   486  	// 发起请求
   487  	apiReq := req.apiReq
   488  	apiReq.ApiPath = "/open-apis/approval/v4/instances/query"
   489  	apiReq.HttpMethod = http.MethodPost
   490  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   491  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   492  	if err != nil {
   493  		return nil, err
   494  	}
   495  	// 反序列响应结果
   496  	resp := &QueryInstanceResp{ApiResp: apiResp}
   497  	err = apiResp.JSONUnmarshalBody(resp)
   498  	if err != nil {
   499  		return nil, err
   500  	}
   501  	return resp, err
   502  }
   503  func (i *instance) QueryByIterator(ctx context.Context, req *QueryInstanceReq, options ...larkcore.RequestOptionFunc) (*QueryInstanceIterator, error) {
   504  	return &QueryInstanceIterator{
   505  		ctx:      ctx,
   506  		req:      req,
   507  		listFunc: i.Query,
   508  		options:  options,
   509  		limit:    req.Limit}, nil
   510  }
   511  
   512  // 抄送列表查询接口
   513  //
   514  // - 该接口通过不同条件查询审批系统中符合条件的审批抄送列表。
   515  //
   516  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/search_cc
   517  //
   518  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/searchCc_instance.go
   519  func (i *instance) SearchCc(ctx context.Context, req *SearchCcInstanceReq, options ...larkcore.RequestOptionFunc) (*SearchCcInstanceResp, error) {
   520  	// 发起请求
   521  	apiReq := req.apiReq
   522  	apiReq.ApiPath = "/open-apis/approval/v4/instances/search_cc"
   523  	apiReq.HttpMethod = http.MethodPost
   524  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   525  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   526  	if err != nil {
   527  		return nil, err
   528  	}
   529  	// 反序列响应结果
   530  	resp := &SearchCcInstanceResp{ApiResp: apiResp}
   531  	err = apiResp.JSONUnmarshalBody(resp)
   532  	if err != nil {
   533  		return nil, err
   534  	}
   535  	return resp, err
   536  }
   537  
   538  // 审批任务退回
   539  //
   540  // - 从当前审批任务,退回到已审批的一个或多个任务节点。退回后,已审批节点重新生成审批任务
   541  //
   542  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance/specified_rollback
   543  //
   544  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/specifiedRollback_instance.go
   545  func (i *instance) SpecifiedRollback(ctx context.Context, req *SpecifiedRollbackInstanceReq, options ...larkcore.RequestOptionFunc) (*SpecifiedRollbackInstanceResp, error) {
   546  	// 发起请求
   547  	apiReq := req.apiReq
   548  	apiReq.ApiPath = "/open-apis/approval/v4/instances/specified_rollback"
   549  	apiReq.HttpMethod = http.MethodPost
   550  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   551  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   552  	if err != nil {
   553  		return nil, err
   554  	}
   555  	// 反序列响应结果
   556  	resp := &SpecifiedRollbackInstanceResp{ApiResp: apiResp}
   557  	err = apiResp.JSONUnmarshalBody(resp)
   558  	if err != nil {
   559  		return nil, err
   560  	}
   561  	return resp, err
   562  }
   563  
   564  // 创建评论
   565  //
   566  // - 在某审批实例下创建、修改评论或评论回复(不包含审批同意、拒绝、转交等附加的理由或意见)。
   567  //
   568  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance-comment/create
   569  //
   570  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/create_instanceComment.go
   571  func (i *instanceComment) Create(ctx context.Context, req *CreateInstanceCommentReq, options ...larkcore.RequestOptionFunc) (*CreateInstanceCommentResp, error) {
   572  	// 发起请求
   573  	apiReq := req.apiReq
   574  	apiReq.ApiPath = "/open-apis/approval/v4/instances/:instance_id/comments"
   575  	apiReq.HttpMethod = http.MethodPost
   576  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   577  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   578  	if err != nil {
   579  		return nil, err
   580  	}
   581  	// 反序列响应结果
   582  	resp := &CreateInstanceCommentResp{ApiResp: apiResp}
   583  	err = apiResp.JSONUnmarshalBody(resp)
   584  	if err != nil {
   585  		return nil, err
   586  	}
   587  	return resp, err
   588  }
   589  
   590  // 删除评论
   591  //
   592  // - 逻辑删除某审批实例下的一条评论或评论回复(不包含审批同意、拒绝、转交等附加的理由或意见)。
   593  //
   594  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance-comment/delete
   595  //
   596  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/delete_instanceComment.go
   597  func (i *instanceComment) Delete(ctx context.Context, req *DeleteInstanceCommentReq, options ...larkcore.RequestOptionFunc) (*DeleteInstanceCommentResp, error) {
   598  	// 发起请求
   599  	apiReq := req.apiReq
   600  	apiReq.ApiPath = "/open-apis/approval/v4/instances/:instance_id/comments/:comment_id"
   601  	apiReq.HttpMethod = http.MethodDelete
   602  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   603  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   604  	if err != nil {
   605  		return nil, err
   606  	}
   607  	// 反序列响应结果
   608  	resp := &DeleteInstanceCommentResp{ApiResp: apiResp}
   609  	err = apiResp.JSONUnmarshalBody(resp)
   610  	if err != nil {
   611  		return nil, err
   612  	}
   613  	return resp, err
   614  }
   615  
   616  // 获取评论
   617  //
   618  // - 根据 Instance Code 获取某个审批实例下的全部评论与评论回复(不包含审批同意、拒绝、转交等附加的理由或意见)。
   619  //
   620  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance-comment/list
   621  //
   622  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/list_instanceComment.go
   623  func (i *instanceComment) List(ctx context.Context, req *ListInstanceCommentReq, options ...larkcore.RequestOptionFunc) (*ListInstanceCommentResp, error) {
   624  	// 发起请求
   625  	apiReq := req.apiReq
   626  	apiReq.ApiPath = "/open-apis/approval/v4/instances/:instance_id/comments"
   627  	apiReq.HttpMethod = http.MethodGet
   628  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   629  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   630  	if err != nil {
   631  		return nil, err
   632  	}
   633  	// 反序列响应结果
   634  	resp := &ListInstanceCommentResp{ApiResp: apiResp}
   635  	err = apiResp.JSONUnmarshalBody(resp)
   636  	if err != nil {
   637  		return nil, err
   638  	}
   639  	return resp, err
   640  }
   641  
   642  // 清空评论
   643  //
   644  // - 删除某审批实例下的全部评论与评论回复。
   645  //
   646  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/instance-comment/remove
   647  //
   648  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/remove_instanceComment.go
   649  func (i *instanceComment) Remove(ctx context.Context, req *RemoveInstanceCommentReq, options ...larkcore.RequestOptionFunc) (*RemoveInstanceCommentResp, error) {
   650  	// 发起请求
   651  	apiReq := req.apiReq
   652  	apiReq.ApiPath = "/open-apis/approval/v4/instances/:instance_id/comments/remove"
   653  	apiReq.HttpMethod = http.MethodPost
   654  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   655  	apiResp, err := larkcore.Request(ctx, apiReq, i.service.config, options...)
   656  	if err != nil {
   657  		return nil, err
   658  	}
   659  	// 反序列响应结果
   660  	resp := &RemoveInstanceCommentResp{ApiResp: apiResp}
   661  	err = apiResp.JSONUnmarshalBody(resp)
   662  	if err != nil {
   663  		return nil, err
   664  	}
   665  	return resp, err
   666  }
   667  
   668  // 审批任务同意
   669  //
   670  // - 对于单个审批任务进行同意操作。同意后审批流程会流转到下一个审批人。
   671  //
   672  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/approve
   673  //
   674  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/approve_task.go
   675  func (t *task) Approve(ctx context.Context, req *ApproveTaskReq, options ...larkcore.RequestOptionFunc) (*ApproveTaskResp, error) {
   676  	// 发起请求
   677  	apiReq := req.apiReq
   678  	apiReq.ApiPath = "/open-apis/approval/v4/tasks/approve"
   679  	apiReq.HttpMethod = http.MethodPost
   680  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   681  	apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...)
   682  	if err != nil {
   683  		return nil, err
   684  	}
   685  	// 反序列响应结果
   686  	resp := &ApproveTaskResp{ApiResp: apiResp}
   687  	err = apiResp.JSONUnmarshalBody(resp)
   688  	if err != nil {
   689  		return nil, err
   690  	}
   691  	return resp, err
   692  }
   693  
   694  // 用户角度列出任务
   695  //
   696  // - 根据用户和任务分组查询任务列表
   697  //
   698  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/query
   699  //
   700  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/query_task.go
   701  func (t *task) Query(ctx context.Context, req *QueryTaskReq, options ...larkcore.RequestOptionFunc) (*QueryTaskResp, error) {
   702  	// 发起请求
   703  	apiReq := req.apiReq
   704  	apiReq.ApiPath = "/open-apis/approval/v4/tasks/query"
   705  	apiReq.HttpMethod = http.MethodGet
   706  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant, larkcore.AccessTokenTypeUser}
   707  	apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...)
   708  	if err != nil {
   709  		return nil, err
   710  	}
   711  	// 反序列响应结果
   712  	resp := &QueryTaskResp{ApiResp: apiResp}
   713  	err = apiResp.JSONUnmarshalBody(resp)
   714  	if err != nil {
   715  		return nil, err
   716  	}
   717  	return resp, err
   718  }
   719  func (t *task) QueryByIterator(ctx context.Context, req *QueryTaskReq, options ...larkcore.RequestOptionFunc) (*QueryTaskIterator, error) {
   720  	return &QueryTaskIterator{
   721  		ctx:      ctx,
   722  		req:      req,
   723  		listFunc: t.Query,
   724  		options:  options,
   725  		limit:    req.Limit}, nil
   726  }
   727  
   728  // 审批任务拒绝
   729  //
   730  // - 对于单个审批任务进行拒绝操作。拒绝后审批流程结束。
   731  //
   732  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/reject
   733  //
   734  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/reject_task.go
   735  func (t *task) Reject(ctx context.Context, req *RejectTaskReq, options ...larkcore.RequestOptionFunc) (*RejectTaskResp, error) {
   736  	// 发起请求
   737  	apiReq := req.apiReq
   738  	apiReq.ApiPath = "/open-apis/approval/v4/tasks/reject"
   739  	apiReq.HttpMethod = http.MethodPost
   740  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   741  	apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...)
   742  	if err != nil {
   743  		return nil, err
   744  	}
   745  	// 反序列响应结果
   746  	resp := &RejectTaskResp{ApiResp: apiResp}
   747  	err = apiResp.JSONUnmarshalBody(resp)
   748  	if err != nil {
   749  		return nil, err
   750  	}
   751  	return resp, err
   752  }
   753  
   754  // 审批任务重新提交
   755  //
   756  // - 对于单个退回到发起人的审批任务进行重新发起操作。发起后审批流程会流转到下一个审批人。
   757  //
   758  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/resubmit
   759  //
   760  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/resubmit_task.go
   761  func (t *task) Resubmit(ctx context.Context, req *ResubmitTaskReq, options ...larkcore.RequestOptionFunc) (*ResubmitTaskResp, error) {
   762  	// 发起请求
   763  	apiReq := req.apiReq
   764  	apiReq.ApiPath = "/open-apis/approval/v4/tasks/resubmit"
   765  	apiReq.HttpMethod = http.MethodPost
   766  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   767  	apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...)
   768  	if err != nil {
   769  		return nil, err
   770  	}
   771  	// 反序列响应结果
   772  	resp := &ResubmitTaskResp{ApiResp: apiResp}
   773  	err = apiResp.JSONUnmarshalBody(resp)
   774  	if err != nil {
   775  		return nil, err
   776  	}
   777  	return resp, err
   778  }
   779  
   780  // 任务列表查询
   781  //
   782  // - 该接口通过不同条件查询审批系统中符合条件的审批任务列表
   783  //
   784  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/search
   785  //
   786  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/search_task.go
   787  func (t *task) Search(ctx context.Context, req *SearchTaskReq, options ...larkcore.RequestOptionFunc) (*SearchTaskResp, error) {
   788  	// 发起请求
   789  	apiReq := req.apiReq
   790  	apiReq.ApiPath = "/open-apis/approval/v4/tasks/search"
   791  	apiReq.HttpMethod = http.MethodPost
   792  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   793  	apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...)
   794  	if err != nil {
   795  		return nil, err
   796  	}
   797  	// 反序列响应结果
   798  	resp := &SearchTaskResp{ApiResp: apiResp}
   799  	err = apiResp.JSONUnmarshalBody(resp)
   800  	if err != nil {
   801  		return nil, err
   802  	}
   803  	return resp, err
   804  }
   805  
   806  // 审批任务转交
   807  //
   808  // - 对于单个审批任务进行转交操作。转交后审批流程流转给被转交人。
   809  //
   810  // - 官网API文档链接:https://open.feishu.cn/document/uAjLw4CM/ukTMukTMukTM/reference/approval-v4/task/transfer
   811  //
   812  // - 使用Demo链接:https://github.com/larksuite/oapi-sdk-go/tree/v3_main/sample/apiall/approvalv4/transfer_task.go
   813  func (t *task) Transfer(ctx context.Context, req *TransferTaskReq, options ...larkcore.RequestOptionFunc) (*TransferTaskResp, error) {
   814  	// 发起请求
   815  	apiReq := req.apiReq
   816  	apiReq.ApiPath = "/open-apis/approval/v4/tasks/transfer"
   817  	apiReq.HttpMethod = http.MethodPost
   818  	apiReq.SupportedAccessTokenTypes = []larkcore.AccessTokenType{larkcore.AccessTokenTypeTenant}
   819  	apiResp, err := larkcore.Request(ctx, apiReq, t.service.config, options...)
   820  	if err != nil {
   821  		return nil, err
   822  	}
   823  	// 反序列响应结果
   824  	resp := &TransferTaskResp{ApiResp: apiResp}
   825  	err = apiResp.JSONUnmarshalBody(resp)
   826  	if err != nil {
   827  		return nil, err
   828  	}
   829  	return resp, err
   830  }