feat(work): 新增高级功能申请审批相关接口

This commit is contained in:
Fu Diwei
2024-06-01 15:43:01 +08:00
parent 5ef5fad1a2
commit 4809c8fe31
17 changed files with 520 additions and 0 deletions

View File

@@ -62,6 +62,7 @@
| √ | 办公:汇报 | 企业 | |
| √ | 办公:人事助手 | 企业 | |
| √ | 办公:会议室 | 企业 | |
| √ | 办公:高级功能 | 企业 | |
| √ | 办公:紧急通知 | 企业 | |
| √ | 智慧硬件 | 第三方 | |
| √ | 硬件云端接入 | 智慧硬件 | |

View File

@@ -0,0 +1,36 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Events
{
/// <summary>
/// <para>表示 EVENT.finish_vip_account_approval 事件的数据。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developer.work.weixin.qq.com/document/path/99877 ]]>
/// </para>
/// </summary>
public class FinishVipAccountApprovalEvent : WechatWorkEvent
{
/// <summary>
/// 获取或设置应用 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("AgentID")]
[System.Text.Json.Serialization.JsonPropertyName("AgentID")]
[System.Xml.Serialization.XmlElement("AgentID")]
public int AgentId { get; set; }
/// <summary>
/// 获取或设置状态改变类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("FinishType")]
[System.Text.Json.Serialization.JsonPropertyName("FinishType")]
[System.Xml.Serialization.XmlElement("FinishType")]
public int FinishType { get; set; }
/// <summary>
/// 获取或设置申请 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("ApplyId")]
[System.Text.Json.Serialization.JsonPropertyName("ApplyId")]
[System.Xml.Serialization.XmlElement("ApplyId")]
public string ApplyId { get; set; } = default!;
}
}

View File

@@ -0,0 +1,44 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Events
{
/// <summary>
/// <para>表示 EVENT.submit_vip_account_approval 事件的数据。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developer.work.weixin.qq.com/document/path/99876 ]]>
/// </para>
/// </summary>
public class SubmitVipAccountApprovalEvent : WechatWorkEvent
{
/// <summary>
/// 获取或设置应用 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("AgentID")]
[System.Text.Json.Serialization.JsonPropertyName("AgentID")]
[System.Xml.Serialization.XmlElement("AgentID")]
public int AgentId { get; set; }
/// <summary>
/// 获取或设置申请的高级账号类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("BusinessType")]
[System.Text.Json.Serialization.JsonPropertyName("BusinessType")]
[System.Xml.Serialization.XmlElement("BusinessType")]
public int BusinessType { get; set; }
/// <summary>
/// 获取或设置申请 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("ApplyId")]
[System.Text.Json.Serialization.JsonPropertyName("ApplyId")]
[System.Xml.Serialization.XmlElement("ApplyId")]
public string ApplyId { get; set; } = default!;
/// <summary>
/// 获取或设置申请原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("ApplyReason")]
[System.Text.Json.Serialization.JsonPropertyName("ApplyReason")]
[System.Xml.Serialization.XmlElement("ApplyReason")]
public string ApplyReason { get; set; } = default!;
}
}

View File

@@ -0,0 +1,81 @@
using System;
using System.Net.Http;
using System.Threading;
using System.Threading.Tasks;
using Flurl;
using Flurl.Http;
namespace SKIT.FlurlHttpClient.Wechat.Work
{
public static class WechatWorkClientExecuteCgibinAdvancedFeatureExtensions
{
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/advanced_feature/set_approval_detail 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developer.work.weixin.qq.com/document/path/99880 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinAdvancedFeatureSetApprovalDetailResponse> ExecuteCgibinAdvancedFeatureSetApprovalDetailAsync(this WechatWorkClient client, Models.CgibinAdvancedFeatureSetApprovalDetailRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "advanced_feature", "set_approval_detail")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.CgibinAdvancedFeatureSetApprovalDetailResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/advanced_feature/get_apply_id_list 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developer.work.weixin.qq.com/document/path/99883 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinAdvancedFeatureGetApplyIdListResponse> ExecuteCgibinAdvancedFeatureGetApplyIdListAsync(this WechatWorkClient client, Models.CgibinAdvancedFeatureGetApplyIdListRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "advanced_feature", "get_apply_id_list")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.CgibinAdvancedFeatureGetApplyIdListResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/advanced_feature/get_approval_info 接口。</para>
/// <para>
/// REF: <br/>
/// <![CDATA[ https://developer.work.weixin.qq.com/document/path/99885 ]]>
/// </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinAdvancedFeatureGetApprovalInfoResponse> ExecuteCgibinAdvancedFeatureGetApprovalInfoAsync(this WechatWorkClient client, Models.CgibinAdvancedFeatureGetApprovalInfoRequest request, CancellationToken cancellationToken = default)
{
if (client is null) throw new ArgumentNullException(nameof(client));
if (request is null) throw new ArgumentNullException(nameof(request));
IFlurlRequest flurlReq = client
.CreateFlurlRequest(request, HttpMethod.Post, "cgi-bin", "advanced_feature", "get_approval_info")
.SetQueryParam("access_token", request.AccessToken);
return await client.SendFlurlRequestAsJsonAsync<Models.CgibinAdvancedFeatureGetApprovalInfoResponse>(flurlReq, data: request, cancellationToken: cancellationToken).ConfigureAwait(false);
}
}
}

View File

@@ -0,0 +1,43 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/advanced_feature/get_apply_id_list 接口的请求。</para>
/// </summary>
public class CgibinAdvancedFeatureGetApplyIdListRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置申请的高级账号类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("business_type")]
[System.Text.Json.Serialization.JsonPropertyName("business_type")]
public int BusinessType { get; set; }
/// <summary>
/// 获取或设置申请的成员账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("userid")]
[System.Text.Json.Serialization.JsonPropertyName("userid")]
public string UserId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置申请类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("req_type")]
[System.Text.Json.Serialization.JsonPropertyName("req_type")]
public int? RequestType { get; set; }
/// <summary>
/// 获取或设置分页游标。
/// </summary>
[Newtonsoft.Json.JsonProperty("cursor")]
[System.Text.Json.Serialization.JsonPropertyName("cursor")]
public string? Cursor { get; set; }
/// <summary>
/// 获取或设置分页每页数量。
/// </summary>
[Newtonsoft.Json.JsonProperty("limit")]
[System.Text.Json.Serialization.JsonPropertyName("limit")]
public int? Limit { get; set; }
}
}

View File

@@ -0,0 +1,29 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/advanced_feature/get_apply_id_list 接口的响应。</para>
/// </summary>
public class CgibinAdvancedFeatureGetApplyIdListResponse : WechatWorkResponse
{
/// <summary>
/// 获取或设置申请 ID 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("apply_id_list")]
[System.Text.Json.Serialization.JsonPropertyName("apply_id_list")]
public string[] ApplyIdList { get; set; } = default!;
/// <summary>
/// 获取或设置分页游标。
/// </summary>
[Newtonsoft.Json.JsonProperty("next_cursor")]
[System.Text.Json.Serialization.JsonPropertyName("next_cursor")]
public string? NextCursor { get; set; }
/// <summary>
/// 获取或设置是否还有更多数据。
/// </summary>
[Newtonsoft.Json.JsonProperty("has_more")]
[System.Text.Json.Serialization.JsonPropertyName("has_more")]
public bool HasMore { get; set; }
}
}

View File

@@ -0,0 +1,15 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/advanced_feature/get_approval_info 接口的请求。</para>
/// </summary>
public class CgibinAdvancedFeatureGetApprovalInfoRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置申请 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("apply_id")]
[System.Text.Json.Serialization.JsonPropertyName("apply_id")]
public string ApplyId { get; set; } = string.Empty;
}
}

View File

@@ -0,0 +1,84 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/advanced_feature/get_approval_info 接口的响应。</para>
/// </summary>
public class CgibinAdvancedFeatureGetApprovalInfoResponse : WechatWorkResponse
{
public static class Types
{
public class Approval
{
/// <summary>
/// 获取或设置申请的高级账号类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("business_type")]
[System.Text.Json.Serialization.JsonPropertyName("business_type")]
public int BusinessType { get; set; }
/// <summary>
/// 获取或设置申请 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("apply_id")]
[System.Text.Json.Serialization.JsonPropertyName("apply_id")]
public string ApplyId { get; set; } = default!;
/// <summary>
/// 获取或设置审批 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("approval_id")]
[System.Text.Json.Serialization.JsonPropertyName("approval_id")]
public string ApprovalId { get; set; } = default!;
/// <summary>
/// 获取或设置审批类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("approval_type")]
[System.Text.Json.Serialization.JsonPropertyName("approval_type")]
public int ApprovalType { get; set; }
/// <summary>
/// 获取或设置审批单状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("approval_status")]
[System.Text.Json.Serialization.JsonPropertyName("approval_status")]
public int ApprovalStatus { get; set; }
/// <summary>
/// 获取或设置审批跳转链接。
/// </summary>
[Newtonsoft.Json.JsonProperty("approval_url")]
[System.Text.Json.Serialization.JsonPropertyName("approval_url")]
public string ApprovalUrl { get; set; } = default!;
/// <summary>
/// 获取或设置申请人成员账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("applicant")]
[System.Text.Json.Serialization.JsonPropertyName("applicant")]
public string ApplicantUserId { get; set; } = default!;
/// <summary>
/// 获取或设置申请原因。
/// </summary>
[Newtonsoft.Json.JsonProperty("request_reason")]
[System.Text.Json.Serialization.JsonPropertyName("request_reason")]
public string ApplyReason { get; set; } = default!;
/// <summary>
/// 获取或设置创建时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("create_time")]
[System.Text.Json.Serialization.JsonPropertyName("create_time")]
public long CreateTimestamp { get; set; }
}
}
/// <summary>
/// 获取或设置审批信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("approval_info")]
[System.Text.Json.Serialization.JsonPropertyName("approval_info")]
public Types.Approval Approval { get; set; } = default!;
}
}

View File

@@ -0,0 +1,99 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/advanced_feature/set_approval_detail 接口的请求。</para>
/// </summary>
public class CgibinAdvancedFeatureSetApprovalDetailRequest : WechatWorkRequest
{
public static class Types
{
public class Process
{
public static class Types
{
public class Node
{
/// <summary>
/// 获取或设置审批节点状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("node_apv_status")]
[System.Text.Json.Serialization.JsonPropertyName("node_apv_status")]
public int NodeApproveStatus { get; set; }
/// <summary>
/// 获取或设置多人审批方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("node_apv_rel")]
[System.Text.Json.Serialization.JsonPropertyName("node_apv_rel")]
public int NodeApproversRelation { get; set; }
/// <summary>
/// 获取或设置待处理人成员账号列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("current_approvers")]
[System.Text.Json.Serialization.JsonPropertyName("current_approvers")]
public IList<string>? CurrentApproversUserIdList { get; set; }
/// <summary>
/// 获取或设置已处理人成员账号列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("completed_approvers")]
[System.Text.Json.Serialization.JsonPropertyName("completed_approvers")]
public IList<string>? CompletedApproversUserIdList { get; set; }
/// <summary>
/// 获取或设置更新时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("apv_update_time")]
[System.Text.Json.Serialization.JsonPropertyName("apv_update_time")]
public long UpdateTimestamp { get; set; }
}
}
/// <summary>
/// 获取或设置节点列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("node_list")]
[System.Text.Json.Serialization.JsonPropertyName("node_list")]
public IList<Types.Node> NodeList { get; set; } = new List<Types.Node>();
}
}
/// <summary>
/// 获取或设置申请 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("apply_id")]
[System.Text.Json.Serialization.JsonPropertyName("apply_id")]
public string ApplyId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置审批 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("approval_id")]
[System.Text.Json.Serialization.JsonPropertyName("approval_id")]
public string ApprovalId { get; set; } = string.Empty;
/// <summary>
/// 获取或设置审批单状态。
/// </summary>
[Newtonsoft.Json.JsonProperty("approval_status")]
[System.Text.Json.Serialization.JsonPropertyName("approval_status")]
public int ApprovalStatus { get; set; }
/// <summary>
/// 获取或设置审批跳转链接。
/// </summary>
[Newtonsoft.Json.JsonProperty("approval_url")]
[System.Text.Json.Serialization.JsonPropertyName("approval_url")]
public string ApprovalUrl { get; set; } = string.Empty;
/// <summary>
/// 获取或设置审批流程信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("process_list")]
[System.Text.Json.Serialization.JsonPropertyName("process_list")]
public Types.Process Process { get; set; } = new Types.Process();
}
}

View File

@@ -0,0 +1,9 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/advanced_feature/set_approval_detail 接口的响应。</para>
/// </summary>
public class CgibinAdvancedFeatureSetApprovalDetailResponse : WechatWorkResponse
{
}
}

View File

@@ -0,0 +1,10 @@
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[sys]]></FromUserName>
<CreateTime>1715681559</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[finish_vip_account_approval]]></Event>
<FinishType>1</FinishType>
<ApplyId><![CDATA[ApplyId]]></ApplyId>
<AgentID>1</AgentID>
</xml>

View File

@@ -0,0 +1,11 @@
<xml>
<ToUserName><![CDATA[toUser]]></ToUserName>
<FromUserName><![CDATA[fromUser]]></FromUserName>
<CreateTime>1715681559</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[submit_vip_account_approval]]></Event>
<ApplyReason><![CDATA[我有很多客户资料,微盘空间不足]]></ApplyReason>
<BusinessType>1</BusinessType>
<ApplyId><![CDATA[ApplyId]]></ApplyId>
<AgentID>1</AgentID>
</xml>

View File

@@ -0,0 +1,6 @@
{
"business_type": 1,
"limit": 10,
"cursor": "CURSOR",
"req_type": 1
}

View File

@@ -0,0 +1,10 @@
{
"errcode": 0,
"errmsg": "ok",
"next_cursor": "CURSOR",
"apply_id_list": [
"APPLY_ID1",
"APPLY_ID2"
],
"has_more": true
}

View File

@@ -0,0 +1,15 @@
{
"errcode": 0,
"errmsg": "ok",
"approval_info": {
"applicant": "USERID",
"create_time": 1715681559,
"business_type": 1,
"approval_id": "APPROVAL_ID",
"apply_id": "ApplyId",
"approval_url": "APPROVAL_URL",
"approval_status": 0,
"approval_type": 1,
"request_reason": "我有很多客户资料要管理,需要更多微盘空间"
}
}

View File

@@ -0,0 +1,24 @@
{
"approval_id": "APPROVALID",
"approval_status": 1,
"apply_id": "ApplyId",
"approval_url": "www.qq.com",
"process_list": {
"node_list": [
{
"current_approvers": [ "LEADER1", "LEADER2" ],
"completed_approvers": [ "LEADER0" ],
"node_apv_status": 1,
"node_apv_rel": 1,
"apv_update_time": 1715741759
},
{
"current_approvers": [ "LEADER3", "LEADER4" ],
"completed_approvers": [ "LEADER5" ],
"node_apv_status": 1,
"node_apv_rel": 1,
"apv_update_time": 1715741759
}
]
}
}