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
+ }
+ }
+}