From 2580119416b355bea09099d4555870fa7e779567 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Thu, 23 Jun 2022 11:37:33 +0800 Subject: [PATCH] =?UTF-8?q?feat(work):=20=E6=96=B0=E5=A2=9E=E8=8E=B7?= =?UTF-8?q?=E5=8F=96=E8=A7=82=E7=9C=8B=E3=80=81=E6=9C=AA=E8=A7=82=E7=9C=8B?= =?UTF-8?q?=E7=9B=B4=E6=92=AD=E7=BB=9F=E8=AE=A1=20V2=20=E7=89=88=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...WorkClientExecuteCgibinSchoolExtensions.cs | 42 +++++ ...hoolLivingGetUnwatchStatisticsV2Request.cs | 9 + ...oolLivingGetUnwatchStatisticsV2Response.cs | 81 +++++++++ ...SchoolLivingGetWatchStatisticsV2Request.cs | 22 +++ ...choolLivingGetWatchStatisticsV2Response.cs | 158 ++++++++++++++++++ ...olLivingGetUnwatchStatisticsV2Request.json | 4 + ...lLivingGetUnwatchStatisticsV2Response.json | 30 ++++ ...hoolLivingGetWatchStatisticsV2Request.json | 4 + ...oolLivingGetWatchStatisticsV2Response.json | 62 +++++++ 9 files changed, 412 insertions(+) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Request.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Response.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Request.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Response.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Request.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Response.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Request.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Response.json diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinSchoolExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinSchoolExtensions.cs index 233e50dc..3a3d4039 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinSchoolExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinSchoolExtensions.cs @@ -656,6 +656,48 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + + /// + /// 异步调用 [POST] /cgi-bin/school/living/get_watch_stat_v2 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/95793 + /// REF: https://developer.work.weixin.qq.com/document/path/95799 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinSchoolLivingGetWatchStatisticsV2Async(this WechatWorkClient client, Models.CgibinSchoolLivingGetWatchStatisticsV2Request 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 + .CreateRequest(request, HttpMethod.Post, "cgi-bin", "school", "living", "get_watch_stat_v2") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/school/living/get_unwatch_stat_v2 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/95795 + /// REF: https://developer.work.weixin.qq.com/document/path/95799 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinSchoolLivingGetUnwatchStatisticsV2Async(this WechatWorkClient client, Models.CgibinSchoolLivingGetUnwatchStatisticsV2Request 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 + .CreateRequest(request, HttpMethod.Post, "cgi-bin", "school", "living", "get_unwatch_stat_v2") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } #endregion #region Payment diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Request.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Request.cs new file mode 100644 index 00000000..7cae0666 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Request.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/school/living/get_unwatch_stat_v2 接口的请求。 + /// + public class CgibinSchoolLivingGetUnwatchStatisticsV2Request : CgibinSchoolLivingGetWatchStatisticsV2Request + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Response.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Response.cs new file mode 100644 index 00000000..8bb2db17 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Response.cs @@ -0,0 +1,81 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/school/living/get_unwatch_stat_v2 接口的响应。 + /// + public class CgibinSchoolLivingGetUnwatchStatisticsV2Response : WechatWorkResponse + { + public static class Types + { + public class Statistics + { + public static class Types + { + public class Student + { + /// + /// 获取或设置学生账号。 + /// + [Newtonsoft.Json.JsonProperty("student_userid")] + [System.Text.Json.Serialization.JsonPropertyName("student_userid")] + public string StudentUserId { get; set; } = default!; + + /// + /// 获取或设置学生所在的部门 ID(即班级)列表。 + /// + [Newtonsoft.Json.JsonProperty("partyids")] + [System.Text.Json.Serialization.JsonPropertyName("partyids")] + public long[] DepartmentIdList { get; set; } = default!; + } + + public class Parent : Student + { + /// + /// 获取或设置家长账号。 + /// + [Newtonsoft.Json.JsonProperty("parent_userid")] + [System.Text.Json.Serialization.JsonPropertyName("parent_userid")] + public string ParentUserId { get; set; } = default!; + } + } + + /// + /// 获取或设置学生列表。 + /// + [Newtonsoft.Json.JsonProperty("students")] + [System.Text.Json.Serialization.JsonPropertyName("students")] + public Types.Student[] StudentList { get; set; } = default!; + + /// + /// 获取或设置家长列表。 + /// + [Newtonsoft.Json.JsonProperty("parents")] + [System.Text.Json.Serialization.JsonPropertyName("parents")] + public Types.Parent[] ParentList { get; set; } = default!; + } + } + + /// + /// 获取或设置统计信息。 + /// + [Newtonsoft.Json.JsonProperty("stat_info")] + [System.Text.Json.Serialization.JsonPropertyName("stat_info")] + public Types.Statistics Statistics { get; set; } = default!; + + /// + /// 获取或设置是否还有更多。 + /// + [Newtonsoft.Json.JsonProperty("has_more")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))] + [System.Text.Json.Serialization.JsonPropertyName("has_more")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))] + public bool HasMore { get; set; } + + /// + /// 获取或设置翻页标记。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? NextCursor { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Request.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Request.cs new file mode 100644 index 00000000..7f8221a1 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Request.cs @@ -0,0 +1,22 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/school/living/get_watch_stat_v2 接口的请求。 + /// + public class CgibinSchoolLivingGetWatchStatisticsV2Request : WechatWorkRequest + { + /// + /// 获取或设置直播 ID。 + /// + [Newtonsoft.Json.JsonProperty("livingid")] + [System.Text.Json.Serialization.JsonPropertyName("livingid")] + public string LivingId { get; set; } = string.Empty; + + /// + /// 获取或设置翻页标记。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? Cursor { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Response.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Response.cs new file mode 100644 index 00000000..1d3b8164 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Response.cs @@ -0,0 +1,158 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/school/living/get_watch_stat_v2 接口的响应。 + /// + public class CgibinSchoolLivingGetWatchStatisticsV2Response : WechatWorkResponse + { + public static class Types + { + public class Statistics + { + public static class Types + { + public class Student + { + /// + /// 获取或设置学生账号。 + /// + [Newtonsoft.Json.JsonProperty("student_userid")] + [System.Text.Json.Serialization.JsonPropertyName("student_userid")] + public string StudentUserId { get; set; } = default!; + + /// + /// 获取或设置学生所在的部门 ID(即班级)列表。 + /// + [Newtonsoft.Json.JsonProperty("partyids")] + [System.Text.Json.Serialization.JsonPropertyName("partyids")] + public long[] DepartmentIdList { get; set; } = default!; + + /// + /// 获取或设置观看时长(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("watch_time")] + [System.Text.Json.Serialization.JsonPropertyName("watch_time")] + public int WatchTime { get; set; } + + /// + /// 获取或设置首次进入直播时间戳。 + /// + [Newtonsoft.Json.JsonProperty("enter_time")] + [System.Text.Json.Serialization.JsonPropertyName("enter_time")] + public long EnterTimestamp { get; set; } + + /// + /// 获取或设置最后离开直播时间戳。 + /// + [Newtonsoft.Json.JsonProperty("leave_time")] + [System.Text.Json.Serialization.JsonPropertyName("leave_time")] + public long LeaveTimestamp { get; set; } + + /// + /// 获取或设置是否评论。 + /// + [Newtonsoft.Json.JsonProperty("is_comment")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))] + [System.Text.Json.Serialization.JsonPropertyName("is_comment")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))] + public bool IsComment { get; set; } + } + + public class Parent : Student + { + /// + /// 获取或设置家长账号。 + /// + [Newtonsoft.Json.JsonProperty("parent_userid")] + [System.Text.Json.Serialization.JsonPropertyName("parent_userid")] + public string ParentUserId { get; set; } = default!; + } + + public class Visitor + { + /// + /// 获取或设置微信昵称。 + /// + [Newtonsoft.Json.JsonProperty("nickname")] + [System.Text.Json.Serialization.JsonPropertyName("nickname")] + public string? Nickname { get; set; } + + /// + /// 获取或设置观看时长(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("watch_time")] + [System.Text.Json.Serialization.JsonPropertyName("watch_time")] + public int WatchTime { get; set; } + + /// + /// 获取或设置首次进入直播时间戳。 + /// + [Newtonsoft.Json.JsonProperty("enter_time")] + [System.Text.Json.Serialization.JsonPropertyName("enter_time")] + public long EnterTimestamp { get; set; } + + /// + /// 获取或设置最后离开直播时间戳。 + /// + [Newtonsoft.Json.JsonProperty("leave_time")] + [System.Text.Json.Serialization.JsonPropertyName("leave_time")] + public long LeaveTimestamp { get; set; } + + /// + /// 获取或设置是否评论。 + /// + [Newtonsoft.Json.JsonProperty("is_comment")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))] + [System.Text.Json.Serialization.JsonPropertyName("is_comment")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))] + public bool IsComment { get; set; } + } + } + + /// + /// 获取或设置学生列表。 + /// + [Newtonsoft.Json.JsonProperty("students")] + [System.Text.Json.Serialization.JsonPropertyName("students")] + public Types.Student[] StudentList { get; set; } = default!; + + /// + /// 获取或设置家长列表。 + /// + [Newtonsoft.Json.JsonProperty("parents")] + [System.Text.Json.Serialization.JsonPropertyName("parents")] + public Types.Parent[] ParentList { get; set; } = default!; + + /// + /// 获取或设置观众列表。 + /// + [Newtonsoft.Json.JsonProperty("visitors")] + [System.Text.Json.Serialization.JsonPropertyName("visitors")] + public Types.Visitor[] VisitorList { get; set; } = default!; + } + } + + /// + /// 获取或设置统计信息。 + /// + [Newtonsoft.Json.JsonProperty("stat_info")] + [System.Text.Json.Serialization.JsonPropertyName("stat_info")] + public Types.Statistics Statistics { get; set; } = default!; + + /// + /// 获取或设置是否还有更多。 + /// + [Newtonsoft.Json.JsonProperty("has_more")] + [Newtonsoft.Json.JsonConverter(typeof(Newtonsoft.Json.Converters.NumericalBooleanConverter))] + [System.Text.Json.Serialization.JsonPropertyName("has_more")] + [System.Text.Json.Serialization.JsonConverter(typeof(System.Text.Json.Converters.NumericalBooleanConverter))] + public bool HasMore { get; set; } + + /// + /// 获取或设置翻页标记。 + /// + [Newtonsoft.Json.JsonProperty("next_cursor")] + [System.Text.Json.Serialization.JsonPropertyName("next_cursor")] + public string? NextCursor { get; set; } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Request.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Request.json new file mode 100644 index 00000000..ee7a6098 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Request.json @@ -0,0 +1,4 @@ +{ + "livingid": "livingid1", + "next_cursor": "NEXT_CURSOR" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Response.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Response.json new file mode 100644 index 00000000..9f3f5c47 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetUnwatchStatisticsV2Response.json @@ -0,0 +1,30 @@ +{ + "errcode": 0, + "errmsg": "ok", + "has_more": 1, + "next_cursor": "NEXT_CURSOR", + "stat_info": { + "students": [ + { + "student_userid": "zhansan_child", + "partyids": [10, 11] + }, + { + "student_userid": "lisi_child", + "partyids": [5] + } + ], + "parents": [ + { + "parent_userid": "zhangsan", + "student_userid": "zhansan_child", + "partyids": [10, 11] + }, + { + "parent_userid": "lisi", + "student_userid": "lisi_child", + "partyids": [5] + } + ] + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Request.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Request.json new file mode 100644 index 00000000..ee7a6098 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Request.json @@ -0,0 +1,4 @@ +{ + "livingid": "livingid1", + "next_cursor": "NEXT_CURSOR" +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Response.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Response.json new file mode 100644 index 00000000..50e483d4 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinSchool/Living/CgibinSchoolLivingGetWatchStatisticsV2Response.json @@ -0,0 +1,62 @@ +{ + "errcode": 0, + "errmsg": "ok", + "has_more": 1, + "next_cursor": "NEXT_CURSOR", + "stat_info": { + "students": [ + { + "student_userid": "zhansan_child", + "partyids": [10, 11], + "watch_time": 30, + "enter_time": 1586433904, + "leave_time": 1586434000, + "is_comment": 1 + }, + { + "student_userid": "lisi_child", + "partyids": [10, 11], + "watch_time": 30, + "enter_time": 1586433904, + "leave_time": 1586434000, + "is_comment": 0 + } + ], + "parents": [ + { + "parent_userid": "zhangsan", + "student_userid": "zhansan_child", + "partyids": [10, 11], + "watch_time": 30, + "enter_time": 1586433904, + "leave_time": 1586434000, + "is_comment": 1 + }, + { + "parent_userid": "lisi", + "student_userid": "lisi_child", + "partyids": [10, 11], + "watch_time": 30, + "enter_time": 1586433904, + "leave_time": 1586434000, + "is_comment": 0 + } + ], + "visitors": [ + { + "nickname": "wx_nickname1", + "watch_time": 30, + "enter_time": 1586433904, + "leave_time": 1586434000, + "is_comment": 1 + }, + { + "nickname": "wx_nickname2", + "watch_time": 30, + "enter_time": 1586433904, + "leave_time": 1586434000, + "is_comment": 0 + } + ] + } +}