From 4cf01c841fabf2ef9c2bc14686b8a4ce49c17b50 Mon Sep 17 00:00:00 2001 From: Fu Diwei Date: Wed, 22 Mar 2023 23:50:20 +0800 Subject: [PATCH] =?UTF-8?q?feat(work):=20=E6=96=B0=E5=A2=9E=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E6=89=93=E5=8D=A1=E8=A7=84=E5=88=99=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...orkClientExecuteCgibinCheckinExtensions.cs | 166 ++- .../CgibinCheckinAddCheckinOptionRequest.cs | 947 ++++++++++++++++++ .../CgibinCheckinAddCheckinOptionResponse.cs | 9 + ...ckinClearCheckinOptionArrayFieldRequest.cs | 31 + ...kinClearCheckinOptionArrayFieldResponse.cs | 9 + ...CgibinCheckinDeleteCheckinOptionRequest.cs | 24 + ...gibinCheckinDeleteCheckinOptionResponse.cs | 9 + .../CgibinCheckinGetCheckinOptionRequest.cs | 0 .../CgibinCheckinGetCheckinOptionResponse.cs | 144 ++- ...gibinCheckinGetCorpCheckinOptionRequest.cs | 0 ...ibinCheckinGetCorpCheckinOptionResponse.cs | 39 +- ...CgibinCheckinUpdateCheckinOptionRequest.cs | 35 + ...gibinCheckinUpdateCheckinOptionResponse.cs | 9 + .../App/CgibinExmailAppComposeSendRequest.cs | 2 +- .../Utilities/RSAUtility.cs | 11 +- .../CgibinCheckinAddCheckinOptionRequest.json | 92 ++ ...inClearCheckinOptionArrayFieldRequest.json | 5 + ...ibinCheckinDeleteCheckinOptionRequest.json | 4 + .../CgibinCheckinGetCheckinOptionRequest.json | 0 ...CgibinCheckinGetCheckinOptionResponse.json | 0 ...inCheckinGetCorpCheckinOptionResponse.json | 0 ...ibinCheckinUpdateCheckinOptionRequest.json | 93 ++ 22 files changed, 1527 insertions(+), 102 deletions(-) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldResponse.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionResponse.cs rename src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/{ => Option}/CgibinCheckinGetCheckinOptionRequest.cs (100%) rename src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/{ => Option}/CgibinCheckinGetCheckinOptionResponse.cs (78%) rename src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/{ => Option}/CgibinCheckinGetCorpCheckinOptionRequest.cs (100%) rename src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/{ => Option}/CgibinCheckinGetCorpCheckinOptionResponse.cs (92%) create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionRequest.cs create mode 100644 src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionResponse.cs create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldRequest.json create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionRequest.json rename test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/{ => Option}/CgibinCheckinGetCheckinOptionRequest.json (100%) rename test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/{ => Option}/CgibinCheckinGetCheckinOptionResponse.json (100%) rename test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/{ => Option}/CgibinCheckinGetCorpCheckinOptionResponse.json (100%) create mode 100644 test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionRequest.json diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinCheckinExtensions.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinCheckinExtensions.cs index 510cfff1..2879fcdb 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinCheckinExtensions.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Extensions/WechatWorkClientExecuteCgibinCheckinExtensions.cs @@ -1,4 +1,4 @@ -using System; +using System; using System.Net.Http; using System.Threading; using System.Threading.Tasks; @@ -9,47 +9,6 @@ namespace SKIT.FlurlHttpClient.Wechat.Work { public static class WechatWorkClientExecuteCgibinCheckinExtensions { - /// - /// 异步调用 [POST] /cgi-bin/checkin/getcorpcheckinoption 接口。 - /// REF: https://developer.work.weixin.qq.com/document/path/93384 - /// - /// - /// - /// - /// - public static async Task ExecuteCgibinCheckinGetCorpCheckinOptionAsync(this WechatWorkClient client, Models.CgibinCheckinGetCorpCheckinOptionRequest 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", "checkin", "getcorpcheckinoption") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - - /// - /// 异步调用 [POST] /cgi-bin/checkin/getcheckinoption 接口。 - /// REF: https://developer.work.weixin.qq.com/document/path/90263 - /// REF: https://developer.work.weixin.qq.com/document/path/94204 - /// - /// - /// - /// - /// - public static async Task ExecuteCgibinCheckinGetCheckinOptionAsync(this WechatWorkClient client, Models.CgibinCheckinGetCheckinOptionRequest 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", "checkin", "getcheckinoption") - .SetQueryParam("access_token", request.AccessToken); - - return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); - } - /// /// 异步调用 [POST] /cgi-bin/checkin/getcheckindata 接口。 /// REF: https://developer.work.weixin.qq.com/document/path/90262 @@ -194,5 +153,128 @@ namespace SKIT.FlurlHttpClient.Wechat.Work return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); } + + #region Option + /// + /// 异步调用 [POST] /cgi-bin/checkin/getcorpcheckinoption 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/93384 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinCheckinGetCorpCheckinOptionAsync(this WechatWorkClient client, Models.CgibinCheckinGetCorpCheckinOptionRequest 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", "checkin", "getcorpcheckinoption") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/checkin/getcheckinoption 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/90263 + /// REF: https://developer.work.weixin.qq.com/document/path/94204 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinCheckinGetCheckinOptionAsync(this WechatWorkClient client, Models.CgibinCheckinGetCheckinOptionRequest 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", "checkin", "getcheckinoption") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/checkin/add_checkin_option 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/98041 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinCheckinAddCheckinOptionAsync(this WechatWorkClient client, Models.CgibinCheckinAddCheckinOptionRequest 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", "checkin", "add_checkin_option") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/checkin/update_checkin_option 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/98041 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinCheckinUpdateCheckinOptionAsync(this WechatWorkClient client, Models.CgibinCheckinUpdateCheckinOptionRequest 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", "checkin", "update_checkin_option") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/checkin/clear_checkin_option_array_field 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/98041 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinCheckinClearCheckinOptionArrayFieldAsync(this WechatWorkClient client, Models.CgibinCheckinClearCheckinOptionArrayFieldRequest 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", "checkin", "clear_checkin_option_array_field") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + + /// + /// 异步调用 [POST] /cgi-bin/checkin/del_checkin_option 接口。 + /// REF: https://developer.work.weixin.qq.com/document/path/98041 + /// + /// + /// + /// + /// + public static async Task ExecuteCgibinCheckinDeleteCheckinOptionAsync(this WechatWorkClient client, Models.CgibinCheckinDeleteCheckinOptionRequest 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", "checkin", "del_checkin_option") + .SetQueryParam("access_token", request.AccessToken); + + return await client.SendRequestWithJsonAsync(flurlReq, data: request, cancellationToken: cancellationToken); + } + #endregion } } diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionRequest.cs new file mode 100644 index 00000000..ab3e5b26 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionRequest.cs @@ -0,0 +1,947 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/checkin/add_checkin_option 接口的请求。 + /// + public class CgibinCheckinAddCheckinOptionRequest : WechatWorkRequest + { + public static class Types + { + public class CheckinGroup + { + public static class Types + { + public class Range + { + /// + /// 获取或设置成员账号列表。 + /// + [Newtonsoft.Json.JsonProperty("userid")] + [System.Text.Json.Serialization.JsonPropertyName("userid")] + public IList? UserIdList { get; set; } + + /// + /// 获取或设置部门 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("partyid")] + [System.Text.Json.Serialization.JsonPropertyName("partyid")] + public IList? DepartmentIdList { get; set; } + + /// + /// 获取或设置标签 ID 列表。 + /// + [Newtonsoft.Json.JsonProperty("tagid")] + [System.Text.Json.Serialization.JsonPropertyName("tagid")] + public IList? TagIdList { get; set; } + } + + public class Reporter + { + public static class Types + { + public class ReportUser + { + /// + /// 获取或设置成员账号。 + /// + [Newtonsoft.Json.JsonProperty("userid")] + [System.Text.Json.Serialization.JsonPropertyName("userid")] + public string? UserId { get; set; } + + /// + /// 获取或设置标签 ID。 + /// + [Newtonsoft.Json.JsonProperty("tagid")] + [System.Text.Json.Serialization.JsonPropertyName("tagid")] + public int? TagId { get; set; } + } + } + + /// + /// 获取或设置汇报人列表。 + /// + [Newtonsoft.Json.JsonProperty("reporters")] + [System.Text.Json.Serialization.JsonPropertyName("reporters")] + public IList? ReportUserList { get; set; } + } + + public class CheckinDate + { + public static class Types + { + public class LateRule + { + /// + /// 获取或设置是否允许超时下班。 + /// + [Newtonsoft.Json.JsonProperty("allow_offwork_after_time")] + [System.Text.Json.Serialization.JsonPropertyName("allow_offwork_after_time")] + public bool? AllowOffWorkAfterTime { get; set; } + + /// + /// 获取或设置迟到规则列表。 + /// + [Newtonsoft.Json.JsonProperty("timerules")] + [System.Text.Json.Serialization.JsonPropertyName("timerules")] + public IList TimeRuleList { get; set; } = default!; + } + + public class TimeRule + { + /// + /// 获取或设置晚走的时间距离最晚一个下班的时间(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("offwork_after_time")] + [System.Text.Json.Serialization.JsonPropertyName("offwork_after_time")] + public int? OffWorkAfterTime { get; set; } + + /// + /// 获取或设置第二天第一个班次允许迟到的弹性时间(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("onwork_flex_time")] + [System.Text.Json.Serialization.JsonPropertyName("onwork_flex_time")] + public int? OnWorkFlexTime { get; set; } + } + } + + /// + /// 获取或设置工作日序号列表。 + /// + [Newtonsoft.Json.JsonProperty("workdays")] + [System.Text.Json.Serialization.JsonPropertyName("workdays")] + public IList? WorkdayList { get; set; } + + /// + /// 获取或设置工作日上下班打卡时间列表。 + /// + [Newtonsoft.Json.JsonProperty("checkintime")] + [System.Text.Json.Serialization.JsonPropertyName("checkintime")] + public IList? CheckinTimeList { get; set; } + + /// + /// 获取或设置是否允许弹性时间。 + /// + [Newtonsoft.Json.JsonProperty("allow_flex")] + [System.Text.Json.Serialization.JsonPropertyName("allow_flex")] + public bool? AllowFlex { get; set; } + + /// + /// 获取或设置允许迟到时间(单位:毫秒)。 + /// + [Newtonsoft.Json.JsonProperty("flex_on_duty_time")] + [System.Text.Json.Serialization.JsonPropertyName("flex_on_duty_time")] + public int? FlexOnDutyTime { get; set; } + + /// + /// 获取或设置允许早退时间(单位:毫秒)。 + /// + [Newtonsoft.Json.JsonProperty("flex_off_duty_time")] + [System.Text.Json.Serialization.JsonPropertyName("flex_off_duty_time")] + public int? FlexOffDutyTime { get; set; } + + /// + /// 获取或设置最早可打卡时间限制(单位:毫秒)。 + /// + [Newtonsoft.Json.JsonProperty("max_allow_arrive_early")] + [System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_early")] + public int MaxAllowArriveEarly { get; set; } + + /// + /// 获取或设置最晚可打卡时间限制(单位:毫秒)。 + /// + [Newtonsoft.Json.JsonProperty("max_allow_arrive_late")] + [System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_late")] + public int MaxAllowArriveLate { get; set; } + + /// + /// 获取或设置晚走晚到时间规则信息。 + /// + [Newtonsoft.Json.JsonProperty("late_rule")] + [System.Text.Json.Serialization.JsonPropertyName("late_rule")] + public Types.LateRule? LateRule { get; set; } + } + + public class CheckinTime + { + /// + /// 获取或设置时段 ID。 + /// + [Newtonsoft.Json.JsonProperty("time_id")] + [System.Text.Json.Serialization.JsonPropertyName("time_id")] + public int? TimeId { get; set; } + + /// + /// 获取或设置上班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("work_sec")] + public int? OnWorkTime { get; set; } + + /// + /// 获取或设置下班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("off_work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("off_work_sec")] + public int? OffWorkTime { get; set; } + + /// + /// 获取或设置最早上班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("earliest_work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("earliest_work_sec")] + public int? EarliestOnWorkTime { get; set; } + + /// + /// 获取或设置最晚下班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("latest_work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("latest_work_sec")] + public int? LatestOnWorkTime { get; set; } + + /// + /// 获取或设置最早下班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("earliest_off_work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("earliest_off_work_sec")] + public int? EarliestOffWorkTime { get; set; } + + /// + /// 获取或设置最晚下班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("latest_off_work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("latest_off_work_sec")] + public int? LatestOffWorkTime { get; set; } + + /// + /// 获取或设置提醒上班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("remind_work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("remind_work_sec")] + public int? RemindOnWorkTime { get; set; } + + /// + /// 获取或设置提醒下班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("remind_off_work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("remind_off_work_sec")] + public int? RemindOffWorkTime { get; set; } + + /// + /// 获取或设置是否允许休息。 + /// + [Newtonsoft.Json.JsonProperty("allow_rest")] + [System.Text.Json.Serialization.JsonPropertyName("allow_rest")] + public bool? AllowRest { get; set; } + + /// + /// 获取或设置休息开始时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("rest_begin_time")] + [System.Text.Json.Serialization.JsonPropertyName("rest_begin_time")] + public int? RestBeginTime { get; set; } + + /// + /// 获取或设置休息结束时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("rest_end_time")] + [System.Text.Json.Serialization.JsonPropertyName("rest_end_time")] + public int? RestEndTime { get; set; } + + /// + /// 获取或设置是否不需要上班打卡。 + /// + [Newtonsoft.Json.JsonProperty("no_need_checkon")] + [System.Text.Json.Serialization.JsonPropertyName("no_need_checkon")] + public bool? IsNoNeedCheckOn { get; set; } + + /// + /// 获取或设置是否不需要下班打卡。 + /// + [Newtonsoft.Json.JsonProperty("no_need_checkoff")] + [System.Text.Json.Serialization.JsonPropertyName("no_need_checkoff")] + public bool? IsNoNeedCheckOff { get; set; } + } + + public class SpecialCheckinDate + { + /// + /// 获取或设置特殊日期类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public int Type { get; set; } + + /// + /// 获取或设置特殊日期时间戳。 + /// + [Newtonsoft.Json.JsonProperty("timestamp")] + [System.Text.Json.Serialization.JsonPropertyName("timestamp")] + public long? Timestamp { get; set; } + + /// + /// 获取或设置特殊日期开始时间戳。 + /// + [Newtonsoft.Json.JsonProperty("timestamp")] + [System.Text.Json.Serialization.JsonPropertyName("timestamp")] + public long? BeginTimestamp { get; set; } + + /// + /// 获取或设置特殊日期结束时间戳。 + /// + [Newtonsoft.Json.JsonProperty("endtime")] + [System.Text.Json.Serialization.JsonPropertyName("endtime")] + public long? EndTimestamp { get; set; } + + /// + /// 获取或设置特殊日期上下班打卡时间列表。 + /// + [Newtonsoft.Json.JsonProperty("checkintime")] + [System.Text.Json.Serialization.JsonPropertyName("checkintime")] + public IList CheckinTimeList { get; set; } = default!; + + /// + /// 获取或设置特殊日期备注。 + /// + [Newtonsoft.Json.JsonProperty("notes")] + [System.Text.Json.Serialization.JsonPropertyName("notes")] + public string? Notes { get; set; } + } + + public class WiFiMac + { + /// + /// 获取或设置 Wi-Fi 打卡地点名称。 + /// + [Newtonsoft.Json.JsonProperty("wifiname")] + [System.Text.Json.Serialization.JsonPropertyName("wifiname")] + public string? Name { get; set; } + + /// + /// 获取或设置 Wi-Fi 打卡地点 MAC 地址或 BSSID。 + /// + [Newtonsoft.Json.JsonProperty("wifimac")] + [System.Text.Json.Serialization.JsonPropertyName("wifimac")] + public string? Mac { get; set; } + } + + public class Location + { + /// + /// 获取或设置位置打卡地点名称。 + /// + [Newtonsoft.Json.JsonProperty("loc_title")] + [System.Text.Json.Serialization.JsonPropertyName("loc_title")] + public string? Title { get; set; } + + /// + /// 获取或设置位置打卡地点详情。 + /// + [Newtonsoft.Json.JsonProperty("loc_detail")] + [System.Text.Json.Serialization.JsonPropertyName("loc_detail")] + public string? Detail { get; set; } + + /// + /// 获取或设置位置打卡地点经度。 + /// + [Newtonsoft.Json.JsonProperty("lng")] + [System.Text.Json.Serialization.JsonPropertyName("lng")] + public double Longitude { get; set; } + + /// + /// 获取或设置位置打卡地点纬度。 + /// + [Newtonsoft.Json.JsonProperty("lat")] + [System.Text.Json.Serialization.JsonPropertyName("lat")] + public double Latitude { get; set; } + + /// + /// 获取或设置允许打卡范围(单位:米)。 + /// + [Newtonsoft.Json.JsonProperty("distance")] + [System.Text.Json.Serialization.JsonPropertyName("distance")] + public int Distance { get; set; } + } + + public class Schedule + { + public static class Types + { + public class TimeSection : CheckinTime + { + } + + public class LateRule + { + /// + /// 获取或设置是否允许超时下班。 + /// + [Newtonsoft.Json.JsonProperty("allow_offwork_after_time")] + [System.Text.Json.Serialization.JsonPropertyName("allow_offwork_after_time")] + public bool? AllowOffWorkAfterTime { get; set; } + + /// + /// 获取或设置超时下班时间(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("offwork_after_time")] + [System.Text.Json.Serialization.JsonPropertyName("offwork_after_time")] + public int? OffWorkAfterTime { get; set; } + + /// + /// 获取或设置第二天第一个班次允许迟到的弹性时间(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("onwork_flex_time")] + [System.Text.Json.Serialization.JsonPropertyName("onwork_flex_time")] + public int? OnWorkFlexTime { get; set; } + + /// + /// 获取或设置迟到规则列表。 + /// + [Newtonsoft.Json.JsonProperty("timerules")] + [System.Text.Json.Serialization.JsonPropertyName("timerules")] + public IList? TimeRuleList { get; set; } + } + + public class TimeRule + { + /// + /// 获取或设置晚走的时间距离最晚一个下班的时间(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("offwork_after_time")] + [System.Text.Json.Serialization.JsonPropertyName("offwork_after_time")] + public int? OffWorkAfterTime { get; set; } + + /// + /// 获取或设置第二天第一个班次允许迟到的弹性时间(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("onwork_flex_time")] + [System.Text.Json.Serialization.JsonPropertyName("onwork_flex_time")] + public int? OnWorkFlexTime { get; set; } + } + } + + /// + /// 获取或设置排班 ID。 + /// + [Newtonsoft.Json.JsonProperty("schedule_id")] + [System.Text.Json.Serialization.JsonPropertyName("schedule_id")] + public int ScheduleId { get; set; } + + /// + /// 获取或设置排班名称。 + /// + [Newtonsoft.Json.JsonProperty("schedule_name")] + [System.Text.Json.Serialization.JsonPropertyName("schedule_name")] + public string Name { get; set; } = default!; + + /// + /// 获取或设置班次上下班时段列表。 + /// + [Newtonsoft.Json.JsonProperty("time_section")] + [System.Text.Json.Serialization.JsonPropertyName("time_section")] + public IList TimeSectionList { get; set; } = new List(); + + /// + /// 获取或设置是否允许弹性时间。 + /// + [Newtonsoft.Json.JsonProperty("allow_flex")] + [System.Text.Json.Serialization.JsonPropertyName("allow_flex")] + public bool? AllowFlex { get; set; } + + /// + /// 获取或设置允许迟到时间(单位:毫秒)。 + /// + [Newtonsoft.Json.JsonProperty("flex_on_duty_time")] + [System.Text.Json.Serialization.JsonPropertyName("flex_on_duty_time")] + public int? FlexOnDutyTime { get; set; } + + /// + /// 获取或设置允许早退时间(单位:毫秒)。 + /// + [Newtonsoft.Json.JsonProperty("flex_off_duty_time")] + [System.Text.Json.Serialization.JsonPropertyName("flex_off_duty_time")] + public int? FlexOffDutyTime { get; set; } + + /// + /// 获取或设置最早可打卡时间限制(单位:毫秒)。 + /// + [Newtonsoft.Json.JsonProperty("max_allow_arrive_early")] + [System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_early")] + public int? MaxAllowArriveEarly { get; set; } + + /// + /// 获取或设置最晚可打卡时间限制(单位:毫秒)。 + /// + [Newtonsoft.Json.JsonProperty("max_allow_arrive_late")] + [System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_late")] + public int? MaxAllowArriveLate { get; set; } + + /// + /// 获取或设置晚走晚到时间规则信息。 + /// + [Newtonsoft.Json.JsonProperty("late_rule")] + [System.Text.Json.Serialization.JsonPropertyName("late_rule")] + public Types.LateRule? LateRule { get; set; } + } + + + public class Overtime + { + public static class Types + { + public class Configuration + { + public static class Types + { + public class Apply + { + /// + /// 获取或设置休息时间配置信息。 + /// + [Newtonsoft.Json.JsonProperty("restinfo")] + [System.Text.Json.Serialization.JsonPropertyName("restinfo")] + public Rest? Rest { get; set; } + } + + public class Checkin + { + /// + /// 获取或设置加班开始时间距最晚下班时间的秒数。 + /// + [Newtonsoft.Json.JsonProperty("ot_time_start")] + [System.Text.Json.Serialization.JsonPropertyName("ot_time_start")] + public int? OvertimeTimeStart { get; set; } + + /// + /// 获取或设置最短加班时长(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("ot_time_min")] + [System.Text.Json.Serialization.JsonPropertyName("ot_time_min")] + public int? OvertimeTimeMin { get; set; } + + /// + /// 获取或设置最长加班时长(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("ot_time_max")] + [System.Text.Json.Serialization.JsonPropertyName("ot_time_max")] + public int? OvertimeTimeMax { get; set; } + + /// + /// 获取或设置休息时间配置信息。 + /// + [Newtonsoft.Json.JsonProperty("restinfo")] + [System.Text.Json.Serialization.JsonPropertyName("restinfo")] + public Rest? Rest { get; set; } + } + + public class Rest + { + public static class Types + { + public class FixedTimeRule + { + /// + /// 获取或设置休息时间的开始时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("fix_time_begin_sec")] + [System.Text.Json.Serialization.JsonPropertyName("fix_time_begin_sec")] + public int? FixedTimeBeginTime { get; set; } + + /// + /// 获取或设置休息时间的结束时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("fix_time_end_sec")] + [System.Text.Json.Serialization.JsonPropertyName("fix_time_end_sec")] + public int? FixedTimeEndTime { get; set; } + } + + public class CalendarTimeRuleList + { + /// + /// 获取或设置按加班时长扣除配置列表。 + /// + [Newtonsoft.Json.JsonProperty("items")] + [System.Text.Json.Serialization.JsonPropertyName("items")] + public IList Items { get; set; } = new List(); + } + + public class CalendarTimeRuleItem + { + /// + /// 获取或设置加班单位时长(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("ot_time")] + [System.Text.Json.Serialization.JsonPropertyName("ot_time")] + public int? OvertimeTime { get; set; } + + /// + /// 获取或设置对应扣除时长(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("rest_time")] + [System.Text.Json.Serialization.JsonPropertyName("rest_time")] + public int? RestTime { get; set; } + } + } + + /// + /// 获取或设置休息扣除类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public int Type { get; set; } + + /// + /// 获取或设置休息时间配置列表。 + /// + [Newtonsoft.Json.JsonProperty("fix_time_rule_list")] + [System.Text.Json.Serialization.JsonPropertyName("fix_time_rule_list")] + public IList? FixedTimeRuleList { get; set; } + + /// + /// 获取或设置按加班时长扣除配置列表。 + /// + [Newtonsoft.Json.JsonProperty("cal_ottime_rule")] + [System.Text.Json.Serialization.JsonPropertyName("cal_ottime_rule")] + public Types.CalendarTimeRuleList? CalendarTimeRuleList { get; set; } + } + + public class ApplyCheckin + { + /// + /// 获取或设置休息时间配置信息。 + /// + [Newtonsoft.Json.JsonProperty("restinfo")] + [System.Text.Json.Serialization.JsonPropertyName("restinfo")] + public Rest? Rest { get; set; } + } + + public class Vacation + { + /// + /// 获取或设置调休比例。 + /// + [Newtonsoft.Json.JsonProperty("trans_ratio")] + [System.Text.Json.Serialization.JsonPropertyName("trans_ratio")] + public int? TransformRatio { get; set; } + + /// + /// 获取或设置是否自动关联假勤。 + /// + [Newtonsoft.Json.JsonProperty("sync_vacation")] + [System.Text.Json.Serialization.JsonPropertyName("sync_vacation")] + public bool? IsSyncVacation { get; set; } + } + } + + /// + /// 获取或设置是否允许加班。 + /// + [Newtonsoft.Json.JsonProperty("allow_ot")] + [System.Text.Json.Serialization.JsonPropertyName("allow_ot")] + public bool AllowOvertime { get; set; } + + /// + /// 获取或设置加班类型。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public int? Type { get; set; } + + /// + /// 获取或设置加班申请信息。 + /// + [Newtonsoft.Json.JsonProperty("apply")] + [System.Text.Json.Serialization.JsonPropertyName("apply")] + public Types.Apply? Apply { get; set; } + + /// + /// 获取或设置加班时长计算规则信息。 + /// + [Newtonsoft.Json.JsonProperty("checkin")] + [System.Text.Json.Serialization.JsonPropertyName("checkin")] + public Types.Checkin? Checkin { get; set; } + + /// + /// 获取或设置加班申请时长计算规则信息。 + /// + [Newtonsoft.Json.JsonProperty("applycheckin")] + [System.Text.Json.Serialization.JsonPropertyName("applycheckin")] + public Types.ApplyCheckin? ApplyCheckin { get; set; } + + /// + /// 获取或设置是否允许加班时长记为调休或加班费。 + /// + [Newtonsoft.Json.JsonProperty("ot_trans_enable")] + [System.Text.Json.Serialization.JsonPropertyName("ot_trans_enable")] + public bool? IsTransformEnabled { get; set; } + + /// + /// 获取或设置加班时长记为调休或加班费类型。 + /// + [Newtonsoft.Json.JsonProperty("ot_trans_type")] + [System.Text.Json.Serialization.JsonPropertyName("ot_trans_type")] + public int? TransformType { get; set; } + + /// + /// 获取或设置假期信息。 + /// + [Newtonsoft.Json.JsonProperty("vacation")] + [System.Text.Json.Serialization.JsonPropertyName("vacation")] + public Types.Vacation? Vacation { get; set; } + } + } + + /// + /// 获取或设置工作日加班配置信息。 + /// + [Newtonsoft.Json.JsonProperty("workdayconf")] + [System.Text.Json.Serialization.JsonPropertyName("workdayconf")] + public Types.Configuration? WorkDayConfiguration { get; set; } + + /// + /// 获取或设置休息日加班配置信息。 + /// + [Newtonsoft.Json.JsonProperty("restdayconf")] + [System.Text.Json.Serialization.JsonPropertyName("restdayconf")] + public Types.Configuration? RestDayConfiguration { get; set; } + + /// + /// 获取或设置节假日加班配置信息。 + /// + [Newtonsoft.Json.JsonProperty("holidayconf")] + [System.Text.Json.Serialization.JsonPropertyName("holidayconf")] + public Types.Configuration? HolidayConfiguration { get; set; } + } + + public class RecheckinReminder + { + /// + /// 获取或设置是否开启补卡提醒。 + /// + [Newtonsoft.Json.JsonProperty("open_remind")] + [System.Text.Json.Serialization.JsonPropertyName("open_remind")] + public bool IsOpen { get; set; } + + /// + /// 获取或设置补卡提醒月份。 + /// + [Newtonsoft.Json.JsonProperty("buka_remind_month")] + [System.Text.Json.Serialization.JsonPropertyName("buka_remind_month")] + public int? RemindMonth { get; set; } + + /// + /// 获取或设置补卡提醒日期。 + /// + [Newtonsoft.Json.JsonProperty("buka_remind_day")] + [System.Text.Json.Serialization.JsonPropertyName("buka_remind_day")] + public int? RemindDay { get; set; } + } + } + + /// + /// 获取或设置打卡规则类型。 + /// + [Newtonsoft.Json.JsonProperty("grouptype")] + [System.Text.Json.Serialization.JsonPropertyName("grouptype")] + public int GroupType { get; set; } + + /// + /// 获取或设置打卡规则名称。 + /// + [Newtonsoft.Json.JsonProperty("groupname")] + [System.Text.Json.Serialization.JsonPropertyName("groupname")] + public string Name { get; set; } = string.Empty; + + /// + /// 获取或设置打卡方式。 + /// + [Newtonsoft.Json.JsonProperty("type")] + [System.Text.Json.Serialization.JsonPropertyName("type")] + public int? Type { get; set; } + + /// + /// 获取或设置打卡人员信息。 + /// + [Newtonsoft.Json.JsonProperty("range")] + [System.Text.Json.Serialization.JsonPropertyName("range")] + public Types.Range? Range { get; set; } + + /// + /// 获取或设置白名单成员账号列表。 + /// + [Newtonsoft.Json.JsonProperty("white_users")] + [System.Text.Json.Serialization.JsonPropertyName("white_users")] + public IList? UserIdWhiteList { get; set; } + + /// + /// 获取或设置汇报对象信息。 + /// + [Newtonsoft.Json.JsonProperty("reporterinfo")] + [System.Text.Json.Serialization.JsonPropertyName("reporterinfo")] + public Types.Reporter? Reporter { get; set; } + + /// + /// 获取或设置是否同步法定节假日。 + /// + [Newtonsoft.Json.JsonProperty("sync_holidays")] + [System.Text.Json.Serialization.JsonPropertyName("sync_holidays")] + public bool? IsSyncHolidays { get; set; } + + /// + /// 获取或设置是否打卡必须拍照。 + /// + [Newtonsoft.Json.JsonProperty("need_photo")] + [System.Text.Json.Serialization.JsonPropertyName("need_photo")] + public bool? RequirePhoto { get; set; } + + /// + /// 获取或设置是否备注时允许上传本地图片。 + /// + [Newtonsoft.Json.JsonProperty("note_can_use_local_pic")] + [System.Text.Json.Serialization.JsonPropertyName("note_can_use_local_pic")] + public bool? AllowNotesUseLocalPicture { get; set; } + + /// + /// 获取或设置是否非工作日允许打卡。 + /// + [Newtonsoft.Json.JsonProperty("allow_checkin_offworkday")] + [System.Text.Json.Serialization.JsonPropertyName("allow_checkin_offworkday")] + public bool? AllowCheckinNonWorkday { get; set; } + + /// + /// 获取或设置是否允许提交补卡申请。 + /// + [Newtonsoft.Json.JsonProperty("allow_apply_offworkday")] + [System.Text.Json.Serialization.JsonPropertyName("allow_apply_offworkday")] + public bool? AllowApplyOffWorkday { get; set; } + + /// + /// 获取或设置每月最多补卡次数。 + /// + [Newtonsoft.Json.JsonProperty("allow_apply_bk_cnt")] + [System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_cnt")] + public int? LimitApplyRecheckinCount { get; set; } + + /// + /// 获取或设置补卡时限(单位:天)。 + /// + [Newtonsoft.Json.JsonProperty("allow_apply_bk_day_limit")] + [System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_day_limit")] + public int? LimitApplyRecheckinDay { get; set; } + + /// + /// 获取或设置补卡时限(单位:天)。 + /// + [Newtonsoft.Json.JsonProperty("buka_limit_next_month")] + [System.Text.Json.Serialization.JsonPropertyName("buka_limit_next_month")] + public int? LimitApplyRecheckinNextMonth { get; set; } + + /// + /// 获取或设置范围外打卡处理方式。 + /// + [Newtonsoft.Json.JsonProperty("option_out_range")] + [System.Text.Json.Serialization.JsonPropertyName("option_out_range")] + public int? OutRangeOption { get; set; } + + /// + /// 获取或设置打卡时间配置列表。 + /// + [Newtonsoft.Json.JsonProperty("checkindate")] + [System.Text.Json.Serialization.JsonPropertyName("checkindate")] + public IList? CheckinDateList { get; set; } + + /// + /// 获取或设置特殊日期必须打卡日期列表。 + /// + [Newtonsoft.Json.JsonProperty("spe_workdays")] + [System.Text.Json.Serialization.JsonPropertyName("spe_workdays")] + public IList? SpecialCheckinDateList { get; set; } + + /// + /// 获取或设置特殊日期不用打卡日期列表。 + /// + [Newtonsoft.Json.JsonProperty("spe_offdays")] + [System.Text.Json.Serialization.JsonPropertyName("spe_offdays")] + public IList? SpecialNonCheckinDateList { get; set; } + + /// + /// 获取或设置 Wi-Fi 打卡地点列表。 + /// + [Newtonsoft.Json.JsonProperty("wifimac_infos")] + [System.Text.Json.Serialization.JsonPropertyName("wifimac_infos")] + public IList? WiFiMacList { get; set; } + + /// + /// 获取或设置位置打卡地点列表。 + /// + [Newtonsoft.Json.JsonProperty("loc_infos")] + [System.Text.Json.Serialization.JsonPropertyName("loc_infos")] + public IList? LocationList { get; set; } + + /// + /// 获取或设置排班列表。 + /// + [Newtonsoft.Json.JsonProperty("schedulelist")] + [System.Text.Json.Serialization.JsonPropertyName("schedulelist")] + public IList? ScheduleList { get; set; } + + /// + /// 获取或设置加班信息。 + /// + [Newtonsoft.Json.JsonProperty("ot_info_v2")] + [System.Text.Json.Serialization.JsonPropertyName("ot_info_v2")] + public Types.Overtime? Overtime { get; set; } + + /// + /// 获取或设置是否开启人脸识别。 + /// + [Newtonsoft.Json.JsonProperty("use_face_detect")] + [System.Text.Json.Serialization.JsonPropertyName("use_face_detect")] + public bool? IsUseFaceDetect { get; set; } + + /// + /// 获取或设置是否开启人脸活体识别。 + /// + [Newtonsoft.Json.JsonProperty("open_face_live_detect")] + [System.Text.Json.Serialization.JsonPropertyName("open_face_live_detect")] + public bool? IsOpenFaceLiveDetect { get; set; } + + /// + /// 获取或设置自由签到时间(单位:秒)。 + /// + [Newtonsoft.Json.JsonProperty("offwork_interval_time")] + [System.Text.Json.Serialization.JsonPropertyName("offwork_interval_time")] + public int? OffWorkIntervalTime { get; set; } + + /// + /// 获取或设置是否外出打卡同步至上下班。 + /// + [Newtonsoft.Json.JsonProperty("sync_out_checkin")] + [System.Text.Json.Serialization.JsonPropertyName("sync_out_checkin")] + public bool? IsSyncOutCheckin { get; set; } + + /// + /// 获取或设置补卡提醒信息。 + /// + [Newtonsoft.Json.JsonProperty("buka_remind")] + [System.Text.Json.Serialization.JsonPropertyName("buka_remind")] + public Types.RecheckinReminder? RecheckinReminder { get; set; } + } + } + + /// + /// 获取或设置是否立即生效。 + /// + [Newtonsoft.Json.JsonProperty("effective_now")] + [System.Text.Json.Serialization.JsonPropertyName("effective_now")] + public bool? IsEffectiveNow { get; set; } + + /// + /// 获取或设置打卡规则信息。 + /// + [Newtonsoft.Json.JsonProperty("group")] + [System.Text.Json.Serialization.JsonPropertyName("group")] + public Types.CheckinGroup CheckinGroup { get; set; } = new Types.CheckinGroup(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionResponse.cs new file mode 100644 index 00000000..8c7d3835 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/checkin/add_checkin_option 接口的响应。 + /// + public class CgibinCheckinAddCheckinOptionResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldRequest.cs new file mode 100644 index 00000000..41607a3b --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldRequest.cs @@ -0,0 +1,31 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/checkin/clear_checkin_option_array_field 接口的请求。 + /// + public class CgibinCheckinClearCheckinOptionArrayFieldRequest : WechatWorkRequest + { + /// + /// 获取或设置打卡规则 ID。 + /// + [Newtonsoft.Json.JsonProperty("groupid")] + [System.Text.Json.Serialization.JsonPropertyName("groupid")] + public int GroupId { get; set; } + + /// + /// 获取或设置清空的字段标识列表。 + /// + [Newtonsoft.Json.JsonProperty("clear_field")] + [System.Text.Json.Serialization.JsonPropertyName("clear_field")] + public IList ClearFieldKeyList { get; set; } = new List(); + + /// + /// 获取或设置是否立即生效。 + /// + [Newtonsoft.Json.JsonProperty("effective_now")] + [System.Text.Json.Serialization.JsonPropertyName("effective_now")] + public bool? IsEffectiveNow { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldResponse.cs new file mode 100644 index 00000000..fc4da771 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/checkin/clear_checkin_option_array_field 接口的响应。 + /// + public class CgibinCheckinClearCheckinOptionArrayFieldResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionRequest.cs new file mode 100644 index 00000000..0e024150 --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionRequest.cs @@ -0,0 +1,24 @@ +using System.Collections.Generic; + +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/checkin/del_checkin_option 接口的请求。 + /// + public class CgibinCheckinDeleteCheckinOptionRequest : WechatWorkRequest + { + /// + /// 获取或设置打卡规则 ID。 + /// + [Newtonsoft.Json.JsonProperty("groupid")] + [System.Text.Json.Serialization.JsonPropertyName("groupid")] + public int GroupId { get; set; } + + /// + /// 获取或设置是否立即生效。 + /// + [Newtonsoft.Json.JsonProperty("effective_now")] + [System.Text.Json.Serialization.JsonPropertyName("effective_now")] + public bool? IsEffectiveNow { get; set; } + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionResponse.cs new file mode 100644 index 00000000..b2d74b8c --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/checkin/del_checkin_option 接口的响应。 + /// + public class CgibinCheckinDeleteCheckinOptionResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/CgibinCheckinGetCheckinOptionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinGetCheckinOptionRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/CgibinCheckinGetCheckinOptionRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinGetCheckinOptionRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/CgibinCheckinGetCheckinOptionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinGetCheckinOptionResponse.cs similarity index 78% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/CgibinCheckinGetCheckinOptionResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinGetCheckinOptionResponse.cs index b82347e3..a5a44781 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/CgibinCheckinGetCheckinOptionResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinGetCheckinOptionResponse.cs @@ -1,4 +1,4 @@ -namespace SKIT.FlurlHttpClient.Wechat.Work.Models +namespace SKIT.FlurlHttpClient.Wechat.Work.Models { /// /// 表示 [POST] /cgi-bin/checkin/getcheckinoption 接口的响应。 @@ -43,59 +43,129 @@ /// [Newtonsoft.Json.JsonProperty("flex_time")] [System.Text.Json.Serialization.JsonPropertyName("flex_time")] - public int FlexTime { get; set; } + public int? FlexTime { get; set; } /// /// 获取或设置允许迟到时间(单位:毫秒)。 /// [Newtonsoft.Json.JsonProperty("flex_on_duty_time")] [System.Text.Json.Serialization.JsonPropertyName("flex_on_duty_time")] - public int FlexOnDutyTime { get; set; } + public int? FlexOnDutyTime { get; set; } /// /// 获取或设置允许早退时间(单位:毫秒)。 /// [Newtonsoft.Json.JsonProperty("flex_off_duty_time")] [System.Text.Json.Serialization.JsonPropertyName("flex_off_duty_time")] - public int FlexOffDutyTime { get; set; } + public int? FlexOffDutyTime { get; set; } /// /// 获取或设置提前打卡时间限制(单位:毫秒)。 /// [Newtonsoft.Json.JsonProperty("limit_aheadtime")] [System.Text.Json.Serialization.JsonPropertyName("limit_aheadtime")] - public int LimitAheadTime { get; set; } + public int? LimitAheadTime { get; set; } } public class CheckinTime { + /// + /// 获取或设置时段 ID。 + /// + [Newtonsoft.Json.JsonProperty("time_id")] + [System.Text.Json.Serialization.JsonPropertyName("time_id")] + public int? TimeId { get; set; } + /// /// 获取或设置上班时间距当天零点的秒数。 /// [Newtonsoft.Json.JsonProperty("work_sec")] [System.Text.Json.Serialization.JsonPropertyName("work_sec")] - public int OnWorkTime { get; set; } + public int? OnWorkTime { get; set; } /// /// 获取或设置下班时间距当天零点的秒数。 /// [Newtonsoft.Json.JsonProperty("off_work_sec")] [System.Text.Json.Serialization.JsonPropertyName("off_work_sec")] - public int OffWorkTime { get; set; } + public int? OffWorkTime { get; set; } + + /// + /// 获取或设置最早上班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("earliest_work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("earliest_work_sec")] + public int? EarliestOnWorkTime { get; set; } + + /// + /// 获取或设置最晚下班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("latest_work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("latest_work_sec")] + public int? LatestOnWorkTime { get; set; } + + /// + /// 获取或设置最早下班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("earliest_off_work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("earliest_off_work_sec")] + public int? EarliestOffWorkTime { get; set; } + + /// + /// 获取或设置最晚下班时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("latest_off_work_sec")] + [System.Text.Json.Serialization.JsonPropertyName("latest_off_work_sec")] + public int? LatestOffWorkTime { get; set; } /// /// 获取或设置提醒上班时间距当天零点的秒数。 /// [Newtonsoft.Json.JsonProperty("remind_work_sec")] [System.Text.Json.Serialization.JsonPropertyName("remind_work_sec")] - public int RemindOnWorkTime { get; set; } + public int? RemindOnWorkTime { get; set; } /// /// 获取或设置提醒下班时间距当天零点的秒数。 /// [Newtonsoft.Json.JsonProperty("remind_off_work_sec")] [System.Text.Json.Serialization.JsonPropertyName("remind_off_work_sec")] - public int RemindOffWorkTime { get; set; } + public int? RemindOffWorkTime { get; set; } + + /// + /// 获取或设置是否允许休息。 + /// + [Newtonsoft.Json.JsonProperty("allow_rest")] + [System.Text.Json.Serialization.JsonPropertyName("allow_rest")] + public bool AllowRest { get; set; } + + /// + /// 获取或设置休息开始时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("rest_begin_time")] + [System.Text.Json.Serialization.JsonPropertyName("rest_begin_time")] + public int? RestBeginTime { get; set; } + + /// + /// 获取或设置休息结束时间距当天零点的秒数。 + /// + [Newtonsoft.Json.JsonProperty("rest_end_time")] + [System.Text.Json.Serialization.JsonPropertyName("rest_end_time")] + public int? RestEndTime { get; set; } + + /// + /// 获取或设置是否不需要上班打卡。 + /// + [Newtonsoft.Json.JsonProperty("no_need_checkon")] + [System.Text.Json.Serialization.JsonPropertyName("no_need_checkon")] + public bool? IsNoNeedCheckOn { get; set; } + + /// + /// 获取或设置是否不需要下班打卡。 + /// + [Newtonsoft.Json.JsonProperty("no_need_checkoff")] + [System.Text.Json.Serialization.JsonPropertyName("no_need_checkoff")] + public bool? IsNoNeedCheckOff { get; set; } } public class SpecialCheckinDate @@ -183,33 +253,6 @@ { public class TimeSection : CheckinTime { - /// - /// 获取或设置时段 ID。 - /// - [Newtonsoft.Json.JsonProperty("time_id")] - [System.Text.Json.Serialization.JsonPropertyName("time_id")] - public int TimeSectionId { get; set; } - - /// - /// 获取或设置是否允许休息。 - /// - [Newtonsoft.Json.JsonProperty("allow_rest")] - [System.Text.Json.Serialization.JsonPropertyName("allow_rest")] - public bool AllowRest { get; set; } - - /// - /// 获取或设置休息开始时间距当天零点的秒数。 - /// - [Newtonsoft.Json.JsonProperty("rest_begin_time")] - [System.Text.Json.Serialization.JsonPropertyName("rest_begin_time")] - public int RestBeginTime { get; set; } - - /// - /// 获取或设置休息结束时间距当天零点的秒数。 - /// - [Newtonsoft.Json.JsonProperty("rest_end_time")] - [System.Text.Json.Serialization.JsonPropertyName("rest_end_time")] - public int RestEndTime { get; set; } } public class LateRule @@ -301,28 +344,28 @@ /// [Newtonsoft.Json.JsonProperty("flex_on_duty_time")] [System.Text.Json.Serialization.JsonPropertyName("flex_on_duty_time")] - public int FlexOnDutyTime { get; set; } + public int? FlexOnDutyTime { get; set; } /// /// 获取或设置允许早退时间(单位:毫秒)。 /// [Newtonsoft.Json.JsonProperty("flex_off_duty_time")] [System.Text.Json.Serialization.JsonPropertyName("flex_off_duty_time")] - public int FlexOffDutyTime { get; set; } + public int? FlexOffDutyTime { get; set; } /// /// 获取或设置最早可打卡时间限制(单位:毫秒)。 /// [Newtonsoft.Json.JsonProperty("max_allow_arrive_early")] [System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_early")] - public int MaxAllowArriveEarly { get; set; } + public int? MaxAllowArriveEarly { get; set; } /// /// 获取或设置最晚可打卡时间限制(单位:毫秒)。 /// [Newtonsoft.Json.JsonProperty("max_allow_arrive_late")] [System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_late")] - public int MaxAllowArriveLate { get; set; } + public int? MaxAllowArriveLate { get; set; } /// /// 获取或设置晚走晚到时间规则信息。 @@ -389,6 +432,27 @@ [System.Text.Json.Serialization.JsonPropertyName("allow_apply_offworkday")] public bool AllowApplyOffWorkday { get; set; } + /// + /// 获取或设置每月最多补卡次数。 + /// + [Newtonsoft.Json.JsonProperty("allow_apply_bk_cnt")] + [System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_cnt")] + public int? LimitApplyRecheckinCount { get; set; } + + /// + /// 获取或设置补卡时限(单位:天)。 + /// + [Newtonsoft.Json.JsonProperty("allow_apply_bk_day_limit")] + [System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_day_limit")] + public int? LimitApplyRecheckinDay { get; set; } + + /// + /// 获取或设置补卡时限(单位:天)。 + /// + [Newtonsoft.Json.JsonProperty("buka_limit_next_month")] + [System.Text.Json.Serialization.JsonPropertyName("buka_limit_next_month")] + public int? LimitApplyRecheckinNextMonth { get; set; } + /// /// 获取或设置打卡时间配置列表。 /// diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/CgibinCheckinGetCorpCheckinOptionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinGetCorpCheckinOptionRequest.cs similarity index 100% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/CgibinCheckinGetCorpCheckinOptionRequest.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinGetCorpCheckinOptionRequest.cs diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/CgibinCheckinGetCorpCheckinOptionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinGetCorpCheckinOptionResponse.cs similarity index 92% rename from src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/CgibinCheckinGetCorpCheckinOptionResponse.cs rename to src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinGetCorpCheckinOptionResponse.cs index dd3882ae..4e00ea03 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/CgibinCheckinGetCorpCheckinOptionResponse.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinGetCorpCheckinOptionResponse.cs @@ -1,4 +1,4 @@ -namespace SKIT.FlurlHttpClient.Wechat.Work.Models +namespace SKIT.FlurlHttpClient.Wechat.Work.Models { /// /// 表示 [POST] /cgi-bin/checkin/getcorpcheckinoption 接口的响应。 @@ -46,7 +46,14 @@ /// [Newtonsoft.Json.JsonProperty("userid")] [System.Text.Json.Serialization.JsonPropertyName("userid")] - public string UserId { get; set; } = default!; + public string? UserId { get; set; } + + /// + /// 获取或设置标签 ID。 + /// + [Newtonsoft.Json.JsonProperty("tagid")] + [System.Text.Json.Serialization.JsonPropertyName("tagid")] + public int? TagId { get; set; } } } @@ -202,14 +209,14 @@ public class OvertimeApply { /// - /// 获取或设置允许工作日加班。 + /// 获取或设置是否允许工作日加班。 /// [Newtonsoft.Json.JsonProperty("allow_ot_workingday")] [System.Text.Json.Serialization.JsonPropertyName("allow_ot_workingday")] public bool AllowOvertimeWorkday { get; set; } /// - /// 获取或设置允许非工作日加班。 + /// 获取或设置是否允许非工作日加班。 /// [Newtonsoft.Json.JsonProperty("allow_ot_nonworkingday")] [System.Text.Json.Serialization.JsonPropertyName("allow_ot_nonworkingday")] @@ -304,11 +311,11 @@ public Types.Range Range { get; set; } = default!; /// - /// 获取或设置打卡人员白名单。 + /// 获取或设置白名单成员账号列表。 /// [Newtonsoft.Json.JsonProperty("white_users")] [System.Text.Json.Serialization.JsonPropertyName("white_users")] - public string[] UserIdWhiteList { get; set; } = default!; + public string[]? UserIdWhiteList { get; set; } /// /// 获取或设置汇报对象信息。 @@ -329,14 +336,21 @@ /// [Newtonsoft.Json.JsonProperty("allow_apply_bk_cnt")] [System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_cnt")] - public int LimitApplyCount { get; set; } + public int LimitApplyRecheckinCount { get; set; } /// /// 获取或设置补卡时限(单位:天)。 /// [Newtonsoft.Json.JsonProperty("allow_apply_bk_day_limit")] [System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_day_limit")] - public int LimitApplyDay { get; set; } + public int LimitApplyRecheckinDay { get; set; } + + /// + /// 获取或设置补卡时限(单位:天)。 + /// + [Newtonsoft.Json.JsonProperty("buka_limit_next_month")] + [System.Text.Json.Serialization.JsonPropertyName("buka_limit_next_month")] + public int LimitApplyRecheckinNextMonth { get; set; } /// /// 获取或设置范围外打卡处理方式。 @@ -350,7 +364,14 @@ /// [Newtonsoft.Json.JsonProperty("use_face_detect")] [System.Text.Json.Serialization.JsonPropertyName("use_face_detect")] - public bool UseFaceDetect { get; set; } + public bool IsUseFaceDetect { get; set; } + + /// + /// 获取或设置是否开启人脸活体识别。 + /// + [Newtonsoft.Json.JsonProperty("open_face_live_detect")] + [System.Text.Json.Serialization.JsonPropertyName("open_face_live_detect")] + public bool IsOpenFaceLiveDetect { get; set; } /// /// 获取或设置自由签到时间(单位:秒)。 diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionRequest.cs new file mode 100644 index 00000000..15cc924f --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionRequest.cs @@ -0,0 +1,35 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/checkin/update_checkin_option 接口的请求。 + /// + public class CgibinCheckinUpdateCheckinOptionRequest : WechatWorkRequest + { + public static class Types + { + public class CheckinGroup : CgibinCheckinAddCheckinOptionRequest.Types.CheckinGroup + { + /// + /// 获取或设置打卡规则 ID。 + /// + [Newtonsoft.Json.JsonProperty("groupid")] + [System.Text.Json.Serialization.JsonPropertyName("groupid")] + public int GroupId { get; set; } + } + } + + /// + /// 获取或设置是否立即生效。 + /// + [Newtonsoft.Json.JsonProperty("effective_now")] + [System.Text.Json.Serialization.JsonPropertyName("effective_now")] + public bool? IsEffectiveNow { get; set; } + + /// + /// 获取或设置打卡规则信息。 + /// + [Newtonsoft.Json.JsonProperty("group")] + [System.Text.Json.Serialization.JsonPropertyName("group")] + public Types.CheckinGroup CheckinGroup { get; set; } = new Types.CheckinGroup(); + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionResponse.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionResponse.cs new file mode 100644 index 00000000..44af7c5d --- /dev/null +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionResponse.cs @@ -0,0 +1,9 @@ +namespace SKIT.FlurlHttpClient.Wechat.Work.Models +{ + /// + /// 表示 [POST] /cgi-bin/checkin/update_checkin_option 接口的响应。 + /// + public class CgibinCheckinUpdateCheckinOptionResponse : WechatWorkResponse + { + } +} diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExmail/App/CgibinExmailAppComposeSendRequest.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExmail/App/CgibinExmailAppComposeSendRequest.cs index dce02861..411996c2 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExmail/App/CgibinExmailAppComposeSendRequest.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Models/CgibinExmail/App/CgibinExmailAppComposeSendRequest.cs @@ -1,4 +1,4 @@ -using System.Collections.Generic; +using System.Collections.Generic; namespace SKIT.FlurlHttpClient.Wechat.Work.Models { diff --git a/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/RSAUtility.cs b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/RSAUtility.cs index 9e672516..644ced19 100644 --- a/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/RSAUtility.cs +++ b/src/SKIT.FlurlHttpClient.Wechat.Work/Utilities/RSAUtility.cs @@ -4,17 +4,8 @@ using System.Text; using System.Text.RegularExpressions; using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto.Parameters; -using Org.BouncyCastle.Math; using Org.BouncyCastle.OpenSsl; -using Org.BouncyCastle.Pkcs; using Org.BouncyCastle.Security; -using Org.BouncyCastle.Crypto; -using Org.BouncyCastle.Crypto.Parameters; -using Org.BouncyCastle.Security; -using Org.BouncyCastle.Utilities.IO; -using Org.BouncyCastle.Utilities; -using System.Security.Cryptography.X509Certificates; -using System.Xml.Linq; namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities { @@ -39,7 +30,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities pemWriter.WriteObject(pkcs8); pemWriter.Writer.Close(); - privateKey = textWriter.ToString(); + privateKey = textWriter.ToString()!; privateKey = privateKey .Replace("-----BEGIN PRIVATE KEY-----", string.Empty) .Replace("-----END PRIVATE KEY-----", string.Empty); diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionRequest.json new file mode 100644 index 00000000..2c92247a --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinAddCheckinOptionRequest.json @@ -0,0 +1,92 @@ +{ + "effective_now": true, + "group": { + "grouptype": 1, + "groupname": "打卡规则1", + "checkindate": [ + { + "workdays": [ + 1, + 2, + 3, + 4, + 5 + ], + "checkintime": [ + { + "time_id": 1, + "work_sec": 36000, + "off_work_sec": 43200, + "remind_work_sec": 35400, + "remind_off_work_sec": 43200, + "earliest_work_sec": 35000, + "latest_work_sec": 37000, + "earliest_off_work_sec": 43000, + "latest_off_work_sec": 43400 + } + ], + "flex_on_duty_time": 0, + "flex_off_duty_time": 0 + } + ], + "sync_holidays": true, + "need_photo": true, + "note_can_use_local_pic": false, + "wifimac_infos": [ + { + "wifiname": "Tencent-WiFi-1", + "wifimac": "c0:7b:bc:37:f8:d3" + } + ], + "allow_checkin_offworkday": true, + "allow_apply_offworkday": true, + "loc_infos": [ + { + "lat": 30547030, + "lng": 104062890, + "loc_title": "腾讯成都大厦", + "loc_detail": "四川省成都市武侯区高新南区天府三街", + "distance": 300 + } + ], + "range": { + "partyid": [], + "userid": [ + "gongjuren", + "tester" + ], + "tagid": [ + 2 + ] + }, + "white_users": [ + "canno" + ], + "type": 0, + "reporterinfo": { + "reporters": [ + { + "userid": "brant" + } + ] + }, + "ot_info_v2": { + "workdayconf": { + "allow_ot": true, + "type": 0 + } + }, + "allow_apply_bk_cnt": -1, + "option_out_range": 0, + "use_face_detect": false, + "allow_apply_bk_day_limit": -1, + "open_face_live_detect": true, + "buka_limit_next_month": -1, + "sync_out_checkin": true, + "buka_remind": { + "open_remind": true, + "buka_remind_day": 28, + "buka_remind_month": 0 + } + } +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldRequest.json new file mode 100644 index 00000000..7abcb73b --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinClearCheckinOptionArrayFieldRequest.json @@ -0,0 +1,5 @@ +{ + "groupid": 1, + "clear_field": [ 1, 2, 3 ], + "effective_now": true +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionRequest.json new file mode 100644 index 00000000..47c79a5f --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinDeleteCheckinOptionRequest.json @@ -0,0 +1,4 @@ +{ + "groupid": 1, + "effective_now": true +} diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/CgibinCheckinGetCheckinOptionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinGetCheckinOptionRequest.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/CgibinCheckinGetCheckinOptionRequest.json rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinGetCheckinOptionRequest.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/CgibinCheckinGetCheckinOptionResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinGetCheckinOptionResponse.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/CgibinCheckinGetCheckinOptionResponse.json rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinGetCheckinOptionResponse.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/CgibinCheckinGetCorpCheckinOptionResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinGetCorpCheckinOptionResponse.json similarity index 100% rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/CgibinCheckinGetCorpCheckinOptionResponse.json rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinGetCorpCheckinOptionResponse.json diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionRequest.json new file mode 100644 index 00000000..a2e411f5 --- /dev/null +++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinCheckin/Option/CgibinCheckinUpdateCheckinOptionRequest.json @@ -0,0 +1,93 @@ +{ + "effective_now": true, + "group": { + "groupid": 1, + "grouptype": 1, + "groupname": "打卡规则1", + "checkindate": [ + { + "workdays": [ + 1, + 2, + 3, + 4, + 5 + ], + "checkintime": [ + { + "time_id": 1, + "work_sec": 36000, + "off_work_sec": 43200, + "remind_work_sec": 35400, + "remind_off_work_sec": 43200, + "earliest_work_sec": 35000, + "latest_work_sec": 37000, + "earliest_off_work_sec": 43000, + "latest_off_work_sec": 43400 + } + ], + "flex_on_duty_time": 0, + "flex_off_duty_time": 0 + } + ], + "sync_holidays": true, + "need_photo": true, + "note_can_use_local_pic": false, + "wifimac_infos": [ + { + "wifiname": "Tencent-WiFi-1", + "wifimac": "c0:7b:bc:37:f8:d3" + } + ], + "allow_checkin_offworkday": true, + "allow_apply_offworkday": true, + "loc_infos": [ + { + "lat": 30547030, + "lng": 104062890, + "loc_title": "腾讯成都大厦", + "loc_detail": "四川省成都市武侯区高新南区天府三街", + "distance": 300 + } + ], + "range": { + "partyid": [], + "userid": [ + "gongjuren", + "tester" + ], + "tagid": [ + 2 + ] + }, + "white_users": [ + "canno" + ], + "type": 0, + "reporterinfo": { + "reporters": [ + { + "userid": "brant" + } + ] + }, + "ot_info_v2": { + "workdayconf": { + "allow_ot": true, + "type": 0 + } + }, + "allow_apply_bk_cnt": -1, + "option_out_range": 0, + "use_face_detect": false, + "allow_apply_bk_day_limit": -1, + "open_face_live_detect": true, + "buka_limit_next_month": -1, + "sync_out_checkin": true, + "buka_remind": { + "open_remind": true, + "buka_remind_day": 28, + "buka_remind_month": 0 + } + } +}