feat(work): 新增管理打卡规则相关接口

This commit is contained in:
Fu Diwei 2023-03-22 23:50:20 +08:00
parent b3706b35e0
commit 4cf01c841f
22 changed files with 1527 additions and 102 deletions

View File

@ -1,4 +1,4 @@
using System; using System;
using System.Net.Http; using System.Net.Http;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -9,47 +9,6 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
{ {
public static class WechatWorkClientExecuteCgibinCheckinExtensions public static class WechatWorkClientExecuteCgibinCheckinExtensions
{ {
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/checkin/getcorpcheckinoption 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/93384 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinCheckinGetCorpCheckinOptionResponse> 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<Models.CgibinCheckinGetCorpCheckinOptionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/checkin/getcheckinoption 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/90263 </para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/94204 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinCheckinGetCheckinOptionResponse> 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<Models.CgibinCheckinGetCheckinOptionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary> /// <summary>
/// <para>异步调用 [POST] /cgi-bin/checkin/getcheckindata 接口。</para> /// <para>异步调用 [POST] /cgi-bin/checkin/getcheckindata 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/90262 </para> /// <para>REF: https://developer.work.weixin.qq.com/document/path/90262 </para>
@ -194,5 +153,128 @@ namespace SKIT.FlurlHttpClient.Wechat.Work
return await client.SendRequestWithJsonAsync<Models.CgibinCheckinPunchCorrectionResponse>(flurlReq, data: request, cancellationToken: cancellationToken); return await client.SendRequestWithJsonAsync<Models.CgibinCheckinPunchCorrectionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
} }
#region Option
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/checkin/getcorpcheckinoption 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/93384 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinCheckinGetCorpCheckinOptionResponse> 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<Models.CgibinCheckinGetCorpCheckinOptionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/checkin/getcheckinoption 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/90263 </para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/94204 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinCheckinGetCheckinOptionResponse> 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<Models.CgibinCheckinGetCheckinOptionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/checkin/add_checkin_option 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/98041 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinCheckinAddCheckinOptionResponse> 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<Models.CgibinCheckinAddCheckinOptionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/checkin/update_checkin_option 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/98041 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinCheckinUpdateCheckinOptionResponse> 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<Models.CgibinCheckinUpdateCheckinOptionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/checkin/clear_checkin_option_array_field 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/98041 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinCheckinClearCheckinOptionArrayFieldResponse> 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<Models.CgibinCheckinClearCheckinOptionArrayFieldResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
/// <summary>
/// <para>异步调用 [POST] /cgi-bin/checkin/del_checkin_option 接口。</para>
/// <para>REF: https://developer.work.weixin.qq.com/document/path/98041 </para>
/// </summary>
/// <param name="client"></param>
/// <param name="request"></param>
/// <param name="cancellationToken"></param>
/// <returns></returns>
public static async Task<Models.CgibinCheckinDeleteCheckinOptionResponse> 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<Models.CgibinCheckinDeleteCheckinOptionResponse>(flurlReq, data: request, cancellationToken: cancellationToken);
}
#endregion
} }
} }

View File

@ -0,0 +1,947 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/checkin/add_checkin_option 接口的请求。</para>
/// </summary>
public class CgibinCheckinAddCheckinOptionRequest : WechatWorkRequest
{
public static class Types
{
public class CheckinGroup
{
public static class Types
{
public class Range
{
/// <summary>
/// 获取或设置成员账号列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("userid")]
[System.Text.Json.Serialization.JsonPropertyName("userid")]
public IList<string>? UserIdList { get; set; }
/// <summary>
/// 获取或设置部门 ID 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("partyid")]
[System.Text.Json.Serialization.JsonPropertyName("partyid")]
public IList<long>? DepartmentIdList { get; set; }
/// <summary>
/// 获取或设置标签 ID 列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("tagid")]
[System.Text.Json.Serialization.JsonPropertyName("tagid")]
public IList<int>? TagIdList { get; set; }
}
public class Reporter
{
public static class Types
{
public class ReportUser
{
/// <summary>
/// 获取或设置成员账号。
/// </summary>
[Newtonsoft.Json.JsonProperty("userid")]
[System.Text.Json.Serialization.JsonPropertyName("userid")]
public string? UserId { get; set; }
/// <summary>
/// 获取或设置标签 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("tagid")]
[System.Text.Json.Serialization.JsonPropertyName("tagid")]
public int? TagId { get; set; }
}
}
/// <summary>
/// 获取或设置汇报人列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("reporters")]
[System.Text.Json.Serialization.JsonPropertyName("reporters")]
public IList<Types.ReportUser>? ReportUserList { get; set; }
}
public class CheckinDate
{
public static class Types
{
public class LateRule
{
/// <summary>
/// 获取或设置是否允许超时下班。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_offwork_after_time")]
[System.Text.Json.Serialization.JsonPropertyName("allow_offwork_after_time")]
public bool? AllowOffWorkAfterTime { get; set; }
/// <summary>
/// 获取或设置迟到规则列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("timerules")]
[System.Text.Json.Serialization.JsonPropertyName("timerules")]
public IList<TimeRule> TimeRuleList { get; set; } = default!;
}
public class TimeRule
{
/// <summary>
/// 获取或设置晚走的时间距离最晚一个下班的时间(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("offwork_after_time")]
[System.Text.Json.Serialization.JsonPropertyName("offwork_after_time")]
public int? OffWorkAfterTime { get; set; }
/// <summary>
/// 获取或设置第二天第一个班次允许迟到的弹性时间(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("onwork_flex_time")]
[System.Text.Json.Serialization.JsonPropertyName("onwork_flex_time")]
public int? OnWorkFlexTime { get; set; }
}
}
/// <summary>
/// 获取或设置工作日序号列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("workdays")]
[System.Text.Json.Serialization.JsonPropertyName("workdays")]
public IList<int>? WorkdayList { get; set; }
/// <summary>
/// 获取或设置工作日上下班打卡时间列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("checkintime")]
[System.Text.Json.Serialization.JsonPropertyName("checkintime")]
public IList<CheckinTime>? CheckinTimeList { get; set; }
/// <summary>
/// 获取或设置是否允许弹性时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_flex")]
[System.Text.Json.Serialization.JsonPropertyName("allow_flex")]
public bool? AllowFlex { get; set; }
/// <summary>
/// 获取或设置允许迟到时间(单位:毫秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("flex_on_duty_time")]
[System.Text.Json.Serialization.JsonPropertyName("flex_on_duty_time")]
public int? FlexOnDutyTime { get; set; }
/// <summary>
/// 获取或设置允许早退时间(单位:毫秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("flex_off_duty_time")]
[System.Text.Json.Serialization.JsonPropertyName("flex_off_duty_time")]
public int? FlexOffDutyTime { get; set; }
/// <summary>
/// 获取或设置最早可打卡时间限制(单位:毫秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("max_allow_arrive_early")]
[System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_early")]
public int MaxAllowArriveEarly { get; set; }
/// <summary>
/// 获取或设置最晚可打卡时间限制(单位:毫秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("max_allow_arrive_late")]
[System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_late")]
public int MaxAllowArriveLate { get; set; }
/// <summary>
/// 获取或设置晚走晚到时间规则信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("late_rule")]
[System.Text.Json.Serialization.JsonPropertyName("late_rule")]
public Types.LateRule? LateRule { get; set; }
}
public class CheckinTime
{
/// <summary>
/// 获取或设置时段 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("time_id")]
[System.Text.Json.Serialization.JsonPropertyName("time_id")]
public int? TimeId { get; set; }
/// <summary>
/// 获取或设置上班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("work_sec")]
public int? OnWorkTime { get; set; }
/// <summary>
/// 获取或设置下班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("off_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("off_work_sec")]
public int? OffWorkTime { get; set; }
/// <summary>
/// 获取或设置最早上班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("earliest_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("earliest_work_sec")]
public int? EarliestOnWorkTime { get; set; }
/// <summary>
/// 获取或设置最晚下班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("latest_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("latest_work_sec")]
public int? LatestOnWorkTime { get; set; }
/// <summary>
/// 获取或设置最早下班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("earliest_off_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("earliest_off_work_sec")]
public int? EarliestOffWorkTime { get; set; }
/// <summary>
/// 获取或设置最晚下班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("latest_off_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("latest_off_work_sec")]
public int? LatestOffWorkTime { get; set; }
/// <summary>
/// 获取或设置提醒上班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("remind_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("remind_work_sec")]
public int? RemindOnWorkTime { get; set; }
/// <summary>
/// 获取或设置提醒下班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("remind_off_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("remind_off_work_sec")]
public int? RemindOffWorkTime { get; set; }
/// <summary>
/// 获取或设置是否允许休息。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_rest")]
[System.Text.Json.Serialization.JsonPropertyName("allow_rest")]
public bool? AllowRest { get; set; }
/// <summary>
/// 获取或设置休息开始时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("rest_begin_time")]
[System.Text.Json.Serialization.JsonPropertyName("rest_begin_time")]
public int? RestBeginTime { get; set; }
/// <summary>
/// 获取或设置休息结束时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("rest_end_time")]
[System.Text.Json.Serialization.JsonPropertyName("rest_end_time")]
public int? RestEndTime { get; set; }
/// <summary>
/// 获取或设置是否不需要上班打卡。
/// </summary>
[Newtonsoft.Json.JsonProperty("no_need_checkon")]
[System.Text.Json.Serialization.JsonPropertyName("no_need_checkon")]
public bool? IsNoNeedCheckOn { get; set; }
/// <summary>
/// 获取或设置是否不需要下班打卡。
/// </summary>
[Newtonsoft.Json.JsonProperty("no_need_checkoff")]
[System.Text.Json.Serialization.JsonPropertyName("no_need_checkoff")]
public bool? IsNoNeedCheckOff { get; set; }
}
public class SpecialCheckinDate
{
/// <summary>
/// 获取或设置特殊日期类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("type")]
[System.Text.Json.Serialization.JsonPropertyName("type")]
public int Type { get; set; }
/// <summary>
/// 获取或设置特殊日期时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("timestamp")]
[System.Text.Json.Serialization.JsonPropertyName("timestamp")]
public long? Timestamp { get; set; }
/// <summary>
/// 获取或设置特殊日期开始时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("timestamp")]
[System.Text.Json.Serialization.JsonPropertyName("timestamp")]
public long? BeginTimestamp { get; set; }
/// <summary>
/// 获取或设置特殊日期结束时间戳。
/// </summary>
[Newtonsoft.Json.JsonProperty("endtime")]
[System.Text.Json.Serialization.JsonPropertyName("endtime")]
public long? EndTimestamp { get; set; }
/// <summary>
/// 获取或设置特殊日期上下班打卡时间列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("checkintime")]
[System.Text.Json.Serialization.JsonPropertyName("checkintime")]
public IList<CheckinTime> CheckinTimeList { get; set; } = default!;
/// <summary>
/// 获取或设置特殊日期备注。
/// </summary>
[Newtonsoft.Json.JsonProperty("notes")]
[System.Text.Json.Serialization.JsonPropertyName("notes")]
public string? Notes { get; set; }
}
public class WiFiMac
{
/// <summary>
/// 获取或设置 Wi-Fi 打卡地点名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("wifiname")]
[System.Text.Json.Serialization.JsonPropertyName("wifiname")]
public string? Name { get; set; }
/// <summary>
/// 获取或设置 Wi-Fi 打卡地点 MAC 地址或 BSSID。
/// </summary>
[Newtonsoft.Json.JsonProperty("wifimac")]
[System.Text.Json.Serialization.JsonPropertyName("wifimac")]
public string? Mac { get; set; }
}
public class Location
{
/// <summary>
/// 获取或设置位置打卡地点名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("loc_title")]
[System.Text.Json.Serialization.JsonPropertyName("loc_title")]
public string? Title { get; set; }
/// <summary>
/// 获取或设置位置打卡地点详情。
/// </summary>
[Newtonsoft.Json.JsonProperty("loc_detail")]
[System.Text.Json.Serialization.JsonPropertyName("loc_detail")]
public string? Detail { get; set; }
/// <summary>
/// 获取或设置位置打卡地点经度。
/// </summary>
[Newtonsoft.Json.JsonProperty("lng")]
[System.Text.Json.Serialization.JsonPropertyName("lng")]
public double Longitude { get; set; }
/// <summary>
/// 获取或设置位置打卡地点纬度。
/// </summary>
[Newtonsoft.Json.JsonProperty("lat")]
[System.Text.Json.Serialization.JsonPropertyName("lat")]
public double Latitude { get; set; }
/// <summary>
/// 获取或设置允许打卡范围(单位:米)。
/// </summary>
[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
{
/// <summary>
/// 获取或设置是否允许超时下班。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_offwork_after_time")]
[System.Text.Json.Serialization.JsonPropertyName("allow_offwork_after_time")]
public bool? AllowOffWorkAfterTime { get; set; }
/// <summary>
/// 获取或设置超时下班时间(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("offwork_after_time")]
[System.Text.Json.Serialization.JsonPropertyName("offwork_after_time")]
public int? OffWorkAfterTime { get; set; }
/// <summary>
/// 获取或设置第二天第一个班次允许迟到的弹性时间(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("onwork_flex_time")]
[System.Text.Json.Serialization.JsonPropertyName("onwork_flex_time")]
public int? OnWorkFlexTime { get; set; }
/// <summary>
/// 获取或设置迟到规则列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("timerules")]
[System.Text.Json.Serialization.JsonPropertyName("timerules")]
public IList<TimeRule>? TimeRuleList { get; set; }
}
public class TimeRule
{
/// <summary>
/// 获取或设置晚走的时间距离最晚一个下班的时间(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("offwork_after_time")]
[System.Text.Json.Serialization.JsonPropertyName("offwork_after_time")]
public int? OffWorkAfterTime { get; set; }
/// <summary>
/// 获取或设置第二天第一个班次允许迟到的弹性时间(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("onwork_flex_time")]
[System.Text.Json.Serialization.JsonPropertyName("onwork_flex_time")]
public int? OnWorkFlexTime { get; set; }
}
}
/// <summary>
/// 获取或设置排班 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("schedule_id")]
[System.Text.Json.Serialization.JsonPropertyName("schedule_id")]
public int ScheduleId { get; set; }
/// <summary>
/// 获取或设置排班名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("schedule_name")]
[System.Text.Json.Serialization.JsonPropertyName("schedule_name")]
public string Name { get; set; } = default!;
/// <summary>
/// 获取或设置班次上下班时段列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("time_section")]
[System.Text.Json.Serialization.JsonPropertyName("time_section")]
public IList<Types.TimeSection> TimeSectionList { get; set; } = new List<Types.TimeSection>();
/// <summary>
/// 获取或设置是否允许弹性时间。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_flex")]
[System.Text.Json.Serialization.JsonPropertyName("allow_flex")]
public bool? AllowFlex { get; set; }
/// <summary>
/// 获取或设置允许迟到时间(单位:毫秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("flex_on_duty_time")]
[System.Text.Json.Serialization.JsonPropertyName("flex_on_duty_time")]
public int? FlexOnDutyTime { get; set; }
/// <summary>
/// 获取或设置允许早退时间(单位:毫秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("flex_off_duty_time")]
[System.Text.Json.Serialization.JsonPropertyName("flex_off_duty_time")]
public int? FlexOffDutyTime { get; set; }
/// <summary>
/// 获取或设置最早可打卡时间限制(单位:毫秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("max_allow_arrive_early")]
[System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_early")]
public int? MaxAllowArriveEarly { get; set; }
/// <summary>
/// 获取或设置最晚可打卡时间限制(单位:毫秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("max_allow_arrive_late")]
[System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_late")]
public int? MaxAllowArriveLate { get; set; }
/// <summary>
/// 获取或设置晚走晚到时间规则信息。
/// </summary>
[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
{
/// <summary>
/// 获取或设置休息时间配置信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("restinfo")]
[System.Text.Json.Serialization.JsonPropertyName("restinfo")]
public Rest? Rest { get; set; }
}
public class Checkin
{
/// <summary>
/// 获取或设置加班开始时间距最晚下班时间的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("ot_time_start")]
[System.Text.Json.Serialization.JsonPropertyName("ot_time_start")]
public int? OvertimeTimeStart { get; set; }
/// <summary>
/// 获取或设置最短加班时长(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("ot_time_min")]
[System.Text.Json.Serialization.JsonPropertyName("ot_time_min")]
public int? OvertimeTimeMin { get; set; }
/// <summary>
/// 获取或设置最长加班时长(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("ot_time_max")]
[System.Text.Json.Serialization.JsonPropertyName("ot_time_max")]
public int? OvertimeTimeMax { get; set; }
/// <summary>
/// 获取或设置休息时间配置信息。
/// </summary>
[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
{
/// <summary>
/// 获取或设置休息时间的开始时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("fix_time_begin_sec")]
[System.Text.Json.Serialization.JsonPropertyName("fix_time_begin_sec")]
public int? FixedTimeBeginTime { get; set; }
/// <summary>
/// 获取或设置休息时间的结束时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("fix_time_end_sec")]
[System.Text.Json.Serialization.JsonPropertyName("fix_time_end_sec")]
public int? FixedTimeEndTime { get; set; }
}
public class CalendarTimeRuleList
{
/// <summary>
/// 获取或设置按加班时长扣除配置列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("items")]
[System.Text.Json.Serialization.JsonPropertyName("items")]
public IList<CalendarTimeRuleItem> Items { get; set; } = new List<CalendarTimeRuleItem>();
}
public class CalendarTimeRuleItem
{
/// <summary>
/// 获取或设置加班单位时长(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("ot_time")]
[System.Text.Json.Serialization.JsonPropertyName("ot_time")]
public int? OvertimeTime { get; set; }
/// <summary>
/// 获取或设置对应扣除时长(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("rest_time")]
[System.Text.Json.Serialization.JsonPropertyName("rest_time")]
public int? RestTime { get; set; }
}
}
/// <summary>
/// 获取或设置休息扣除类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("type")]
[System.Text.Json.Serialization.JsonPropertyName("type")]
public int Type { get; set; }
/// <summary>
/// 获取或设置休息时间配置列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("fix_time_rule_list")]
[System.Text.Json.Serialization.JsonPropertyName("fix_time_rule_list")]
public IList<Types.FixedTimeRule>? FixedTimeRuleList { get; set; }
/// <summary>
/// 获取或设置按加班时长扣除配置列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("cal_ottime_rule")]
[System.Text.Json.Serialization.JsonPropertyName("cal_ottime_rule")]
public Types.CalendarTimeRuleList? CalendarTimeRuleList { get; set; }
}
public class ApplyCheckin
{
/// <summary>
/// 获取或设置休息时间配置信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("restinfo")]
[System.Text.Json.Serialization.JsonPropertyName("restinfo")]
public Rest? Rest { get; set; }
}
public class Vacation
{
/// <summary>
/// 获取或设置调休比例。
/// </summary>
[Newtonsoft.Json.JsonProperty("trans_ratio")]
[System.Text.Json.Serialization.JsonPropertyName("trans_ratio")]
public int? TransformRatio { get; set; }
/// <summary>
/// 获取或设置是否自动关联假勤。
/// </summary>
[Newtonsoft.Json.JsonProperty("sync_vacation")]
[System.Text.Json.Serialization.JsonPropertyName("sync_vacation")]
public bool? IsSyncVacation { get; set; }
}
}
/// <summary>
/// 获取或设置是否允许加班。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_ot")]
[System.Text.Json.Serialization.JsonPropertyName("allow_ot")]
public bool AllowOvertime { get; set; }
/// <summary>
/// 获取或设置加班类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("type")]
[System.Text.Json.Serialization.JsonPropertyName("type")]
public int? Type { get; set; }
/// <summary>
/// 获取或设置加班申请信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("apply")]
[System.Text.Json.Serialization.JsonPropertyName("apply")]
public Types.Apply? Apply { get; set; }
/// <summary>
/// 获取或设置加班时长计算规则信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("checkin")]
[System.Text.Json.Serialization.JsonPropertyName("checkin")]
public Types.Checkin? Checkin { get; set; }
/// <summary>
/// 获取或设置加班申请时长计算规则信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("applycheckin")]
[System.Text.Json.Serialization.JsonPropertyName("applycheckin")]
public Types.ApplyCheckin? ApplyCheckin { get; set; }
/// <summary>
/// 获取或设置是否允许加班时长记为调休或加班费。
/// </summary>
[Newtonsoft.Json.JsonProperty("ot_trans_enable")]
[System.Text.Json.Serialization.JsonPropertyName("ot_trans_enable")]
public bool? IsTransformEnabled { get; set; }
/// <summary>
/// 获取或设置加班时长记为调休或加班费类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("ot_trans_type")]
[System.Text.Json.Serialization.JsonPropertyName("ot_trans_type")]
public int? TransformType { get; set; }
/// <summary>
/// 获取或设置假期信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("vacation")]
[System.Text.Json.Serialization.JsonPropertyName("vacation")]
public Types.Vacation? Vacation { get; set; }
}
}
/// <summary>
/// 获取或设置工作日加班配置信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("workdayconf")]
[System.Text.Json.Serialization.JsonPropertyName("workdayconf")]
public Types.Configuration? WorkDayConfiguration { get; set; }
/// <summary>
/// 获取或设置休息日加班配置信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("restdayconf")]
[System.Text.Json.Serialization.JsonPropertyName("restdayconf")]
public Types.Configuration? RestDayConfiguration { get; set; }
/// <summary>
/// 获取或设置节假日加班配置信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("holidayconf")]
[System.Text.Json.Serialization.JsonPropertyName("holidayconf")]
public Types.Configuration? HolidayConfiguration { get; set; }
}
public class RecheckinReminder
{
/// <summary>
/// 获取或设置是否开启补卡提醒。
/// </summary>
[Newtonsoft.Json.JsonProperty("open_remind")]
[System.Text.Json.Serialization.JsonPropertyName("open_remind")]
public bool IsOpen { get; set; }
/// <summary>
/// 获取或设置补卡提醒月份。
/// </summary>
[Newtonsoft.Json.JsonProperty("buka_remind_month")]
[System.Text.Json.Serialization.JsonPropertyName("buka_remind_month")]
public int? RemindMonth { get; set; }
/// <summary>
/// 获取或设置补卡提醒日期。
/// </summary>
[Newtonsoft.Json.JsonProperty("buka_remind_day")]
[System.Text.Json.Serialization.JsonPropertyName("buka_remind_day")]
public int? RemindDay { get; set; }
}
}
/// <summary>
/// 获取或设置打卡规则类型。
/// </summary>
[Newtonsoft.Json.JsonProperty("grouptype")]
[System.Text.Json.Serialization.JsonPropertyName("grouptype")]
public int GroupType { get; set; }
/// <summary>
/// 获取或设置打卡规则名称。
/// </summary>
[Newtonsoft.Json.JsonProperty("groupname")]
[System.Text.Json.Serialization.JsonPropertyName("groupname")]
public string Name { get; set; } = string.Empty;
/// <summary>
/// 获取或设置打卡方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("type")]
[System.Text.Json.Serialization.JsonPropertyName("type")]
public int? Type { get; set; }
/// <summary>
/// 获取或设置打卡人员信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("range")]
[System.Text.Json.Serialization.JsonPropertyName("range")]
public Types.Range? Range { get; set; }
/// <summary>
/// 获取或设置白名单成员账号列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("white_users")]
[System.Text.Json.Serialization.JsonPropertyName("white_users")]
public IList<string>? UserIdWhiteList { get; set; }
/// <summary>
/// 获取或设置汇报对象信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("reporterinfo")]
[System.Text.Json.Serialization.JsonPropertyName("reporterinfo")]
public Types.Reporter? Reporter { get; set; }
/// <summary>
/// 获取或设置是否同步法定节假日。
/// </summary>
[Newtonsoft.Json.JsonProperty("sync_holidays")]
[System.Text.Json.Serialization.JsonPropertyName("sync_holidays")]
public bool? IsSyncHolidays { get; set; }
/// <summary>
/// 获取或设置是否打卡必须拍照。
/// </summary>
[Newtonsoft.Json.JsonProperty("need_photo")]
[System.Text.Json.Serialization.JsonPropertyName("need_photo")]
public bool? RequirePhoto { get; set; }
/// <summary>
/// 获取或设置是否备注时允许上传本地图片。
/// </summary>
[Newtonsoft.Json.JsonProperty("note_can_use_local_pic")]
[System.Text.Json.Serialization.JsonPropertyName("note_can_use_local_pic")]
public bool? AllowNotesUseLocalPicture { get; set; }
/// <summary>
/// 获取或设置是否非工作日允许打卡。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_checkin_offworkday")]
[System.Text.Json.Serialization.JsonPropertyName("allow_checkin_offworkday")]
public bool? AllowCheckinNonWorkday { get; set; }
/// <summary>
/// 获取或设置是否允许提交补卡申请。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_apply_offworkday")]
[System.Text.Json.Serialization.JsonPropertyName("allow_apply_offworkday")]
public bool? AllowApplyOffWorkday { get; set; }
/// <summary>
/// 获取或设置每月最多补卡次数。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_apply_bk_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_cnt")]
public int? LimitApplyRecheckinCount { get; set; }
/// <summary>
/// 获取或设置补卡时限(单位:天)。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_apply_bk_day_limit")]
[System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_day_limit")]
public int? LimitApplyRecheckinDay { get; set; }
/// <summary>
/// 获取或设置补卡时限(单位:天)。
/// </summary>
[Newtonsoft.Json.JsonProperty("buka_limit_next_month")]
[System.Text.Json.Serialization.JsonPropertyName("buka_limit_next_month")]
public int? LimitApplyRecheckinNextMonth { get; set; }
/// <summary>
/// 获取或设置范围外打卡处理方式。
/// </summary>
[Newtonsoft.Json.JsonProperty("option_out_range")]
[System.Text.Json.Serialization.JsonPropertyName("option_out_range")]
public int? OutRangeOption { get; set; }
/// <summary>
/// 获取或设置打卡时间配置列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("checkindate")]
[System.Text.Json.Serialization.JsonPropertyName("checkindate")]
public IList<Types.CheckinDate>? CheckinDateList { get; set; }
/// <summary>
/// 获取或设置特殊日期必须打卡日期列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("spe_workdays")]
[System.Text.Json.Serialization.JsonPropertyName("spe_workdays")]
public IList<Types.SpecialCheckinDate>? SpecialCheckinDateList { get; set; }
/// <summary>
/// 获取或设置特殊日期不用打卡日期列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("spe_offdays")]
[System.Text.Json.Serialization.JsonPropertyName("spe_offdays")]
public IList<Types.SpecialCheckinDate>? SpecialNonCheckinDateList { get; set; }
/// <summary>
/// 获取或设置 Wi-Fi 打卡地点列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("wifimac_infos")]
[System.Text.Json.Serialization.JsonPropertyName("wifimac_infos")]
public IList<Types.WiFiMac>? WiFiMacList { get; set; }
/// <summary>
/// 获取或设置位置打卡地点列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("loc_infos")]
[System.Text.Json.Serialization.JsonPropertyName("loc_infos")]
public IList<Types.Location>? LocationList { get; set; }
/// <summary>
/// 获取或设置排班列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("schedulelist")]
[System.Text.Json.Serialization.JsonPropertyName("schedulelist")]
public IList<Types.Schedule>? ScheduleList { get; set; }
/// <summary>
/// 获取或设置加班信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("ot_info_v2")]
[System.Text.Json.Serialization.JsonPropertyName("ot_info_v2")]
public Types.Overtime? Overtime { get; set; }
/// <summary>
/// 获取或设置是否开启人脸识别。
/// </summary>
[Newtonsoft.Json.JsonProperty("use_face_detect")]
[System.Text.Json.Serialization.JsonPropertyName("use_face_detect")]
public bool? IsUseFaceDetect { get; set; }
/// <summary>
/// 获取或设置是否开启人脸活体识别。
/// </summary>
[Newtonsoft.Json.JsonProperty("open_face_live_detect")]
[System.Text.Json.Serialization.JsonPropertyName("open_face_live_detect")]
public bool? IsOpenFaceLiveDetect { get; set; }
/// <summary>
/// 获取或设置自由签到时间(单位:秒)。
/// </summary>
[Newtonsoft.Json.JsonProperty("offwork_interval_time")]
[System.Text.Json.Serialization.JsonPropertyName("offwork_interval_time")]
public int? OffWorkIntervalTime { get; set; }
/// <summary>
/// 获取或设置是否外出打卡同步至上下班。
/// </summary>
[Newtonsoft.Json.JsonProperty("sync_out_checkin")]
[System.Text.Json.Serialization.JsonPropertyName("sync_out_checkin")]
public bool? IsSyncOutCheckin { get; set; }
/// <summary>
/// 获取或设置补卡提醒信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("buka_remind")]
[System.Text.Json.Serialization.JsonPropertyName("buka_remind")]
public Types.RecheckinReminder? RecheckinReminder { get; set; }
}
}
/// <summary>
/// 获取或设置是否立即生效。
/// </summary>
[Newtonsoft.Json.JsonProperty("effective_now")]
[System.Text.Json.Serialization.JsonPropertyName("effective_now")]
public bool? IsEffectiveNow { get; set; }
/// <summary>
/// 获取或设置打卡规则信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("group")]
[System.Text.Json.Serialization.JsonPropertyName("group")]
public Types.CheckinGroup CheckinGroup { get; set; } = new Types.CheckinGroup();
}
}

View File

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

View File

@ -0,0 +1,31 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/checkin/clear_checkin_option_array_field 接口的请求。</para>
/// </summary>
public class CgibinCheckinClearCheckinOptionArrayFieldRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置打卡规则 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("groupid")]
[System.Text.Json.Serialization.JsonPropertyName("groupid")]
public int GroupId { get; set; }
/// <summary>
/// 获取或设置清空的字段标识列表。
/// </summary>
[Newtonsoft.Json.JsonProperty("clear_field")]
[System.Text.Json.Serialization.JsonPropertyName("clear_field")]
public IList<int> ClearFieldKeyList { get; set; } = new List<int>();
/// <summary>
/// 获取或设置是否立即生效。
/// </summary>
[Newtonsoft.Json.JsonProperty("effective_now")]
[System.Text.Json.Serialization.JsonPropertyName("effective_now")]
public bool? IsEffectiveNow { get; set; }
}
}

View File

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

View File

@ -0,0 +1,24 @@
using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/checkin/del_checkin_option 接口的请求。</para>
/// </summary>
public class CgibinCheckinDeleteCheckinOptionRequest : WechatWorkRequest
{
/// <summary>
/// 获取或设置打卡规则 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("groupid")]
[System.Text.Json.Serialization.JsonPropertyName("groupid")]
public int GroupId { get; set; }
/// <summary>
/// 获取或设置是否立即生效。
/// </summary>
[Newtonsoft.Json.JsonProperty("effective_now")]
[System.Text.Json.Serialization.JsonPropertyName("effective_now")]
public bool? IsEffectiveNow { get; set; }
}
}

View File

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

View File

@ -1,4 +1,4 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{ {
/// <summary> /// <summary>
/// <para>表示 [POST] /cgi-bin/checkin/getcheckinoption 接口的响应。</para> /// <para>表示 [POST] /cgi-bin/checkin/getcheckinoption 接口的响应。</para>
@ -43,59 +43,129 @@
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("flex_time")] [Newtonsoft.Json.JsonProperty("flex_time")]
[System.Text.Json.Serialization.JsonPropertyName("flex_time")] [System.Text.Json.Serialization.JsonPropertyName("flex_time")]
public int FlexTime { get; set; } public int? FlexTime { get; set; }
/// <summary> /// <summary>
/// 获取或设置允许迟到时间(单位:毫秒)。 /// 获取或设置允许迟到时间(单位:毫秒)。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("flex_on_duty_time")] [Newtonsoft.Json.JsonProperty("flex_on_duty_time")]
[System.Text.Json.Serialization.JsonPropertyName("flex_on_duty_time")] [System.Text.Json.Serialization.JsonPropertyName("flex_on_duty_time")]
public int FlexOnDutyTime { get; set; } public int? FlexOnDutyTime { get; set; }
/// <summary> /// <summary>
/// 获取或设置允许早退时间(单位:毫秒)。 /// 获取或设置允许早退时间(单位:毫秒)。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("flex_off_duty_time")] [Newtonsoft.Json.JsonProperty("flex_off_duty_time")]
[System.Text.Json.Serialization.JsonPropertyName("flex_off_duty_time")] [System.Text.Json.Serialization.JsonPropertyName("flex_off_duty_time")]
public int FlexOffDutyTime { get; set; } public int? FlexOffDutyTime { get; set; }
/// <summary> /// <summary>
/// 获取或设置提前打卡时间限制(单位:毫秒)。 /// 获取或设置提前打卡时间限制(单位:毫秒)。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("limit_aheadtime")] [Newtonsoft.Json.JsonProperty("limit_aheadtime")]
[System.Text.Json.Serialization.JsonPropertyName("limit_aheadtime")] [System.Text.Json.Serialization.JsonPropertyName("limit_aheadtime")]
public int LimitAheadTime { get; set; } public int? LimitAheadTime { get; set; }
} }
public class CheckinTime public class CheckinTime
{ {
/// <summary>
/// 获取或设置时段 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("time_id")]
[System.Text.Json.Serialization.JsonPropertyName("time_id")]
public int? TimeId { get; set; }
/// <summary> /// <summary>
/// 获取或设置上班时间距当天零点的秒数。 /// 获取或设置上班时间距当天零点的秒数。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("work_sec")] [Newtonsoft.Json.JsonProperty("work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("work_sec")] [System.Text.Json.Serialization.JsonPropertyName("work_sec")]
public int OnWorkTime { get; set; } public int? OnWorkTime { get; set; }
/// <summary> /// <summary>
/// 获取或设置下班时间距当天零点的秒数。 /// 获取或设置下班时间距当天零点的秒数。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("off_work_sec")] [Newtonsoft.Json.JsonProperty("off_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("off_work_sec")] [System.Text.Json.Serialization.JsonPropertyName("off_work_sec")]
public int OffWorkTime { get; set; } public int? OffWorkTime { get; set; }
/// <summary>
/// 获取或设置最早上班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("earliest_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("earliest_work_sec")]
public int? EarliestOnWorkTime { get; set; }
/// <summary>
/// 获取或设置最晚下班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("latest_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("latest_work_sec")]
public int? LatestOnWorkTime { get; set; }
/// <summary>
/// 获取或设置最早下班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("earliest_off_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("earliest_off_work_sec")]
public int? EarliestOffWorkTime { get; set; }
/// <summary>
/// 获取或设置最晚下班时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("latest_off_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("latest_off_work_sec")]
public int? LatestOffWorkTime { get; set; }
/// <summary> /// <summary>
/// 获取或设置提醒上班时间距当天零点的秒数。 /// 获取或设置提醒上班时间距当天零点的秒数。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("remind_work_sec")] [Newtonsoft.Json.JsonProperty("remind_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("remind_work_sec")] [System.Text.Json.Serialization.JsonPropertyName("remind_work_sec")]
public int RemindOnWorkTime { get; set; } public int? RemindOnWorkTime { get; set; }
/// <summary> /// <summary>
/// 获取或设置提醒下班时间距当天零点的秒数。 /// 获取或设置提醒下班时间距当天零点的秒数。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("remind_off_work_sec")] [Newtonsoft.Json.JsonProperty("remind_off_work_sec")]
[System.Text.Json.Serialization.JsonPropertyName("remind_off_work_sec")] [System.Text.Json.Serialization.JsonPropertyName("remind_off_work_sec")]
public int RemindOffWorkTime { get; set; } public int? RemindOffWorkTime { get; set; }
/// <summary>
/// 获取或设置是否允许休息。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_rest")]
[System.Text.Json.Serialization.JsonPropertyName("allow_rest")]
public bool AllowRest { get; set; }
/// <summary>
/// 获取或设置休息开始时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("rest_begin_time")]
[System.Text.Json.Serialization.JsonPropertyName("rest_begin_time")]
public int? RestBeginTime { get; set; }
/// <summary>
/// 获取或设置休息结束时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("rest_end_time")]
[System.Text.Json.Serialization.JsonPropertyName("rest_end_time")]
public int? RestEndTime { get; set; }
/// <summary>
/// 获取或设置是否不需要上班打卡。
/// </summary>
[Newtonsoft.Json.JsonProperty("no_need_checkon")]
[System.Text.Json.Serialization.JsonPropertyName("no_need_checkon")]
public bool? IsNoNeedCheckOn { get; set; }
/// <summary>
/// 获取或设置是否不需要下班打卡。
/// </summary>
[Newtonsoft.Json.JsonProperty("no_need_checkoff")]
[System.Text.Json.Serialization.JsonPropertyName("no_need_checkoff")]
public bool? IsNoNeedCheckOff { get; set; }
} }
public class SpecialCheckinDate public class SpecialCheckinDate
@ -183,33 +253,6 @@
{ {
public class TimeSection : CheckinTime public class TimeSection : CheckinTime
{ {
/// <summary>
/// 获取或设置时段 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("time_id")]
[System.Text.Json.Serialization.JsonPropertyName("time_id")]
public int TimeSectionId { get; set; }
/// <summary>
/// 获取或设置是否允许休息。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_rest")]
[System.Text.Json.Serialization.JsonPropertyName("allow_rest")]
public bool AllowRest { get; set; }
/// <summary>
/// 获取或设置休息开始时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("rest_begin_time")]
[System.Text.Json.Serialization.JsonPropertyName("rest_begin_time")]
public int RestBeginTime { get; set; }
/// <summary>
/// 获取或设置休息结束时间距当天零点的秒数。
/// </summary>
[Newtonsoft.Json.JsonProperty("rest_end_time")]
[System.Text.Json.Serialization.JsonPropertyName("rest_end_time")]
public int RestEndTime { get; set; }
} }
public class LateRule public class LateRule
@ -301,28 +344,28 @@
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("flex_on_duty_time")] [Newtonsoft.Json.JsonProperty("flex_on_duty_time")]
[System.Text.Json.Serialization.JsonPropertyName("flex_on_duty_time")] [System.Text.Json.Serialization.JsonPropertyName("flex_on_duty_time")]
public int FlexOnDutyTime { get; set; } public int? FlexOnDutyTime { get; set; }
/// <summary> /// <summary>
/// 获取或设置允许早退时间(单位:毫秒)。 /// 获取或设置允许早退时间(单位:毫秒)。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("flex_off_duty_time")] [Newtonsoft.Json.JsonProperty("flex_off_duty_time")]
[System.Text.Json.Serialization.JsonPropertyName("flex_off_duty_time")] [System.Text.Json.Serialization.JsonPropertyName("flex_off_duty_time")]
public int FlexOffDutyTime { get; set; } public int? FlexOffDutyTime { get; set; }
/// <summary> /// <summary>
/// 获取或设置最早可打卡时间限制(单位:毫秒)。 /// 获取或设置最早可打卡时间限制(单位:毫秒)。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("max_allow_arrive_early")] [Newtonsoft.Json.JsonProperty("max_allow_arrive_early")]
[System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_early")] [System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_early")]
public int MaxAllowArriveEarly { get; set; } public int? MaxAllowArriveEarly { get; set; }
/// <summary> /// <summary>
/// 获取或设置最晚可打卡时间限制(单位:毫秒)。 /// 获取或设置最晚可打卡时间限制(单位:毫秒)。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("max_allow_arrive_late")] [Newtonsoft.Json.JsonProperty("max_allow_arrive_late")]
[System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_late")] [System.Text.Json.Serialization.JsonPropertyName("max_allow_arrive_late")]
public int MaxAllowArriveLate { get; set; } public int? MaxAllowArriveLate { get; set; }
/// <summary> /// <summary>
/// 获取或设置晚走晚到时间规则信息。 /// 获取或设置晚走晚到时间规则信息。
@ -389,6 +432,27 @@
[System.Text.Json.Serialization.JsonPropertyName("allow_apply_offworkday")] [System.Text.Json.Serialization.JsonPropertyName("allow_apply_offworkday")]
public bool AllowApplyOffWorkday { get; set; } public bool AllowApplyOffWorkday { get; set; }
/// <summary>
/// 获取或设置每月最多补卡次数。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_apply_bk_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_cnt")]
public int? LimitApplyRecheckinCount { get; set; }
/// <summary>
/// 获取或设置补卡时限(单位:天)。
/// </summary>
[Newtonsoft.Json.JsonProperty("allow_apply_bk_day_limit")]
[System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_day_limit")]
public int? LimitApplyRecheckinDay { get; set; }
/// <summary>
/// 获取或设置补卡时限(单位:天)。
/// </summary>
[Newtonsoft.Json.JsonProperty("buka_limit_next_month")]
[System.Text.Json.Serialization.JsonPropertyName("buka_limit_next_month")]
public int? LimitApplyRecheckinNextMonth { get; set; }
/// <summary> /// <summary>
/// 获取或设置打卡时间配置列表。 /// 获取或设置打卡时间配置列表。
/// </summary> /// </summary>

View File

@ -1,4 +1,4 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{ {
/// <summary> /// <summary>
/// <para>表示 [POST] /cgi-bin/checkin/getcorpcheckinoption 接口的响应。</para> /// <para>表示 [POST] /cgi-bin/checkin/getcorpcheckinoption 接口的响应。</para>
@ -46,7 +46,14 @@
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("userid")] [Newtonsoft.Json.JsonProperty("userid")]
[System.Text.Json.Serialization.JsonPropertyName("userid")] [System.Text.Json.Serialization.JsonPropertyName("userid")]
public string UserId { get; set; } = default!; public string? UserId { get; set; }
/// <summary>
/// 获取或设置标签 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("tagid")]
[System.Text.Json.Serialization.JsonPropertyName("tagid")]
public int? TagId { get; set; }
} }
} }
@ -202,14 +209,14 @@
public class OvertimeApply public class OvertimeApply
{ {
/// <summary> /// <summary>
/// 获取或设置允许工作日加班。 /// 获取或设置是否允许工作日加班。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("allow_ot_workingday")] [Newtonsoft.Json.JsonProperty("allow_ot_workingday")]
[System.Text.Json.Serialization.JsonPropertyName("allow_ot_workingday")] [System.Text.Json.Serialization.JsonPropertyName("allow_ot_workingday")]
public bool AllowOvertimeWorkday { get; set; } public bool AllowOvertimeWorkday { get; set; }
/// <summary> /// <summary>
/// 获取或设置允许非工作日加班。 /// 获取或设置是否允许非工作日加班。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("allow_ot_nonworkingday")] [Newtonsoft.Json.JsonProperty("allow_ot_nonworkingday")]
[System.Text.Json.Serialization.JsonPropertyName("allow_ot_nonworkingday")] [System.Text.Json.Serialization.JsonPropertyName("allow_ot_nonworkingday")]
@ -304,11 +311,11 @@
public Types.Range Range { get; set; } = default!; public Types.Range Range { get; set; } = default!;
/// <summary> /// <summary>
/// 获取或设置打卡人员白名单。 /// 获取或设置白名单成员账号列表
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("white_users")] [Newtonsoft.Json.JsonProperty("white_users")]
[System.Text.Json.Serialization.JsonPropertyName("white_users")] [System.Text.Json.Serialization.JsonPropertyName("white_users")]
public string[] UserIdWhiteList { get; set; } = default!; public string[]? UserIdWhiteList { get; set; }
/// <summary> /// <summary>
/// 获取或设置汇报对象信息。 /// 获取或设置汇报对象信息。
@ -329,14 +336,21 @@
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("allow_apply_bk_cnt")] [Newtonsoft.Json.JsonProperty("allow_apply_bk_cnt")]
[System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_cnt")] [System.Text.Json.Serialization.JsonPropertyName("allow_apply_bk_cnt")]
public int LimitApplyCount { get; set; } public int LimitApplyRecheckinCount { get; set; }
/// <summary> /// <summary>
/// 获取或设置补卡时限(单位:天)。 /// 获取或设置补卡时限(单位:天)。
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("allow_apply_bk_day_limit")] [Newtonsoft.Json.JsonProperty("allow_apply_bk_day_limit")]
[System.Text.Json.Serialization.JsonPropertyName("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; }
/// <summary>
/// 获取或设置补卡时限(单位:天)。
/// </summary>
[Newtonsoft.Json.JsonProperty("buka_limit_next_month")]
[System.Text.Json.Serialization.JsonPropertyName("buka_limit_next_month")]
public int LimitApplyRecheckinNextMonth { get; set; }
/// <summary> /// <summary>
/// 获取或设置范围外打卡处理方式。 /// 获取或设置范围外打卡处理方式。
@ -350,7 +364,14 @@
/// </summary> /// </summary>
[Newtonsoft.Json.JsonProperty("use_face_detect")] [Newtonsoft.Json.JsonProperty("use_face_detect")]
[System.Text.Json.Serialization.JsonPropertyName("use_face_detect")] [System.Text.Json.Serialization.JsonPropertyName("use_face_detect")]
public bool UseFaceDetect { get; set; } public bool IsUseFaceDetect { get; set; }
/// <summary>
/// 获取或设置是否开启人脸活体识别。
/// </summary>
[Newtonsoft.Json.JsonProperty("open_face_live_detect")]
[System.Text.Json.Serialization.JsonPropertyName("open_face_live_detect")]
public bool IsOpenFaceLiveDetect { get; set; }
/// <summary> /// <summary>
/// 获取或设置自由签到时间(单位:秒)。 /// 获取或设置自由签到时间(单位:秒)。

View File

@ -0,0 +1,35 @@
namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{
/// <summary>
/// <para>表示 [POST] /cgi-bin/checkin/update_checkin_option 接口的请求。</para>
/// </summary>
public class CgibinCheckinUpdateCheckinOptionRequest : WechatWorkRequest
{
public static class Types
{
public class CheckinGroup : CgibinCheckinAddCheckinOptionRequest.Types.CheckinGroup
{
/// <summary>
/// 获取或设置打卡规则 ID。
/// </summary>
[Newtonsoft.Json.JsonProperty("groupid")]
[System.Text.Json.Serialization.JsonPropertyName("groupid")]
public int GroupId { get; set; }
}
}
/// <summary>
/// 获取或设置是否立即生效。
/// </summary>
[Newtonsoft.Json.JsonProperty("effective_now")]
[System.Text.Json.Serialization.JsonPropertyName("effective_now")]
public bool? IsEffectiveNow { get; set; }
/// <summary>
/// 获取或设置打卡规则信息。
/// </summary>
[Newtonsoft.Json.JsonProperty("group")]
[System.Text.Json.Serialization.JsonPropertyName("group")]
public Types.CheckinGroup CheckinGroup { get; set; } = new Types.CheckinGroup();
}
}

View File

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

View File

@ -1,4 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
namespace SKIT.FlurlHttpClient.Wechat.Work.Models namespace SKIT.FlurlHttpClient.Wechat.Work.Models
{ {

View File

@ -4,17 +4,8 @@ using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using Org.BouncyCastle.Crypto; using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters; using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.OpenSsl; using Org.BouncyCastle.OpenSsl;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.Security; 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 namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities
{ {
@ -39,7 +30,7 @@ namespace SKIT.FlurlHttpClient.Wechat.Work.Utilities
pemWriter.WriteObject(pkcs8); pemWriter.WriteObject(pkcs8);
pemWriter.Writer.Close(); pemWriter.Writer.Close();
privateKey = textWriter.ToString(); privateKey = textWriter.ToString()!;
privateKey = privateKey privateKey = privateKey
.Replace("-----BEGIN PRIVATE KEY-----", string.Empty) .Replace("-----BEGIN PRIVATE KEY-----", string.Empty)
.Replace("-----END PRIVATE KEY-----", string.Empty); .Replace("-----END PRIVATE KEY-----", string.Empty);

View File

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

View File

@ -0,0 +1,5 @@
{
"groupid": 1,
"clear_field": [ 1, 2, 3 ],
"effective_now": true
}

View File

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