Przeglądaj źródła

!1621 清洗钉钉API代码
Merge pull request !1621 from johnec/next

zuohuaijun 1 rok temu
rodzic
commit
16bfd59e38
71 zmienionych plików z 1031 dodań i 533 usunięć
  1. 15 11
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/AliTripRequest.cs
  2. 70 0
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/Enums.cs
  3. 29 12
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripAddressRequest.cs
  4. 8 4
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripAddressResponse.cs
  5. 6 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripFlightOrdersRequest.cs
  6. 60 26
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripFlightOrdersResponse.cs
  7. 7 3
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripTrainOrdersRequest.cs
  8. 28 20
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripTrainOrdersResponse.cs
  9. 5 6
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/IAliTripRequestProxy.cs
  10. 20 10
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/AttendanceRequest.cs
  11. 2 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/AttdendanceApprovalsFinishRequest.cs
  12. 10 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/AttendanceApprovalsFinishResponse.cs
  13. 4 3
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/AttendanceApprovelsCancelRequest.cs
  14. 5 4
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/AttendanceApprovelsCancelResponse.cs
  15. 16 4
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/Enums.cs
  16. 9 17
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/GetLeaveStatusRequest.cs
  17. 10 3
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/GetLeaveStatusResponse.cs
  18. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/ListRecordRequest.cs
  19. 87 3
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/ListRecordResponse.cs
  20. 3 5
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/IAttendanceRequestProxy.cs
  21. 13 6
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkRequestOffsetSize.cs
  22. 6 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseError.cs
  23. 1 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseErrorRequestId.cs
  24. 3 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseErrorResult.cs
  25. 1 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseErrorResultRequestId.cs
  26. 3 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseErrorSuccess.cs
  27. 3 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseHasMoreList.cs
  28. 5 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseSuccess.cs
  29. 5 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseSuccessResult.cs
  30. 3 3
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/CheckinRequest.cs
  31. 0 52
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/DTO/GetDeptRecordRequest.cs
  32. 27 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/DTO/GetDeptRecordResponse.cs
  33. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/DTO/GetUserRecordRequest.cs
  34. 15 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/DTO/GetUserRecordResponse.cs
  35. 1 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/ICheckinRequestProxy.cs
  36. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/GetDeptInfoRequest.cs
  37. 11 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/GetDeptInfoResponse.cs
  38. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/ListSubIdRequest.cs
  39. 5 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/ListSubIdResponse.cs
  40. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/ListSubRequest.cs
  41. 7 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/ListSubResponse.cs
  42. 4 4
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DepartmentRequest.cs
  43. 1 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/IDepartmentRequestProxy.cs
  44. 6 11
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/HRM/DTO/EmployeeQueryOnJobRequest.cs
  45. 12 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/HRM/DTO/EmployeeQueryOnJobResponse.cs
  46. 5 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/HRM/DTO/RosterListsQueryRequest.cs
  47. 82 53
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/HRM/DTO/RosterListsQueryResponse.cs
  48. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/HRM/HrmRequest.cs
  49. 157 145
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Message/DTO/SendCorpConversationRequest.cs
  50. 5 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Message/DTO/SendCorpConversationResponse.cs
  51. 2 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Message/IMessageRequestProxy.cs
  52. 31 7
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Message/MessageRequest.cs
  53. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/DTO/GetAccessTokenRequest.cs
  54. 8 4
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/DTO/GetAccessTokenResponse.cs
  55. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/DTO/GetApiTicketResponse.cs
  56. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/DTO/GetUserInfoRequest.cs
  57. 12 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/DTO/GetUserInfoResponse.cs
  58. 1 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/ITopRequestProxy.cs
  59. 2 4
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/TopRequest.cs
  60. 8 17
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/RoleListRequest.cs
  61. 49 32
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/RoleListResponse.cs
  62. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserDetailRequest.cs
  63. 33 3
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserDetailResponse.cs
  64. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListIdRequest.cs
  65. 5 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListIdResponse.cs
  66. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListRequest.cs
  67. 33 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListResponse.cs
  68. 4 1
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListSimpleRequest.cs
  69. 9 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListSimpleResponse.cs
  70. 1 2
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/IUserRequestProxy.cs
  71. 10 3
      Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/UserRequest.cs

+ 15 - 11
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/AliTripRequest.cs

@@ -4,10 +4,11 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+using Admin.NET.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.AliTrip;
-public class AliTripRequest
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.AliTrip;
+
+public class AliTripRequest : IScoped
 {
     private readonly IAliTripRequestProxy _request;
 
@@ -22,14 +23,13 @@ public class AliTripRequest
     /// <param name="accessToken"></param>
     /// <param name="req"></param>
     /// <returns></returns>
-    public async Task<GetAliTripAddressResponse> GetAliTripAddress(string accessToken, OpenApiJumpInfoRq req)
+    public async Task<GetAliTripAddressResponse> GetAliTripAddress(string accessToken, AliTripAddressRequestDomain req)
     {
         var resStr = await _request.GetAliTripAddress(accessToken, new GetAliTripAddressRequest
         {
             Request = req
         });
-        var res = resStr.ToObject<GetAliTripAddressResponse>();
-        return res;
+        return resStr.ToObject<GetAliTripAddressResponse>();
     }
 
     /// <summary>
@@ -41,14 +41,18 @@ public class AliTripRequest
     public async Task<GetAliTripFlightOrdersResponse> GetAliTripFlightOrders(string accessToken, GetAliTripFlightOrdersRequest rq)
     {
         var resStr = await _request.GetAliTripFlightOrders(accessToken, rq);
-        var res = resStr.ToObject<GetAliTripFlightOrdersResponse>();
-        return res;
+        return resStr.ToObject<GetAliTripFlightOrdersResponse>();
     }
 
+    /// <summary>
+    /// 获取企业火车票订单数据
+    /// </summary>
+    /// <param name="accessToken"></param>
+    /// <param name="rq"></param>
+    /// <returns></returns>
     public async Task<GetAliTripTrainOrdersResponse> GetAliTripTrainOrders(string accessToken, GetAliTripTrainOrdersRequest rq)
     {
         var resStr = await _request.GetAliTripTrainOrders(accessToken, rq);
-        var res = resStr.ToObject<GetAliTripTrainOrdersResponse>();
-        return res;
+        return resStr.ToObject<GetAliTripTrainOrdersResponse>();
     }
-}
+}

+ 70 - 0
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/Enums.cs

@@ -0,0 +1,70 @@
+// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
+//
+// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
+//
+// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
+
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+
+/// <summary>
+/// 阿里商旅结算方式
+/// </summary>
+[SuppressSniffer]
+public enum AliTripPricePayTypeEnum
+{
+    个人现付 = 1,
+    企业现付 = 2,
+    企业月结 = 4,
+    企业预存 = 8
+}
+
+/// <summary>
+/// 阿里商旅资金流向
+/// </summary>
+[SuppressSniffer]
+public enum AliTripPriceTypeEnum
+{
+    支出 = 1,
+    收入 = 2
+}
+
+/// <summary>
+/// 状态
+/// </summary>
+[SuppressSniffer]
+public enum AliTripFlightOrdersInsureInfoStatusEnum
+{
+    已出保 = 1,
+    已退保 = 2
+}
+
+/// <summary>
+/// 行程类型
+/// </summary>
+[SuppressSniffer]
+public enum AliTripFlightOrdersTripTypeEnum
+{
+    单程 = 0,
+    往返 = 1,
+    中转 = 2
+}
+
+/// <summary>
+/// 订单状态
+/// </summary>
+[SuppressSniffer]
+public enum AliTripTrainOrdersStatusEnum
+{
+    待支付 = 0,
+    出票中 = 1,
+    已关闭 = 2,
+    改签成功 = 3,
+    退票成功 = 4,
+    出票完成 = 5,
+    退票申请中 = 6,
+    改签申请中 = 7,
+    已出票or已发货 = 8,
+    出票失败 = 9,
+    改签失败 = 10,
+    退票失败 = 11
+}

+ 29 - 12
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripAddressRequest.cs

@@ -6,16 +6,19 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
 
+/// <summary>
+/// 获取阿里商旅访问地址
+/// </summary>
 public class GetAliTripAddressRequest
 {
     [JsonProperty("request")]
     [JsonPropertyName("request")]
-    public OpenApiJumpInfoRq Request { get; set; }
+    public AliTripAddressRequestDomain Request { get; set; }
 }
 
-public class OpenApiJumpInfoRq
+public class AliTripAddressRequestDomain
 {
     /// <summary>
     /// 用户id
@@ -31,13 +34,20 @@ public class OpenApiJumpInfoRq
     /// <summary>
     /// 类目类型:1:机票,2:火车票,3:酒店,4:用车
     /// </summary>
-
     [JsonProperty("type")]
     [JsonPropertyName("type")]
-    public TypeEnum Type { get; set; }
-    public enum TypeEnum
+    public AliTripTypeEnum Type { get; set; }
+
+    /// <summary>
+    /// 类目类型
+    /// </summary>
+    [SuppressSniffer]
+    public enum AliTripTypeEnum
     {
-        机票 = 1, 火车票, 酒店, 用车
+        机票 = 1,
+        火车票 = 2,
+        酒店 = 3,
+        用车 = 4
     }
 
     /// <summary>
@@ -45,10 +55,18 @@ public class OpenApiJumpInfoRq
     /// </summary>
     [JsonProperty("action_type")]
     [JsonPropertyName("action_type")]
-    public ActionTypeEnum ActionType { get; set; }
-    public enum ActionTypeEnum
+    public AliTripActionTypeEnum ActionType { get; set; }
+
+    /// <summary>
+    /// 操作类型
+    /// </summary>
+    [SuppressSniffer]
+    public enum AliTripActionTypeEnum
     {
-        预订 = 1, 我的订单列表, 商旅管理后台, 商旅h5主页
+        预订 = 1,
+        我的订单列表 = 2,
+        商旅管理后台 = 3,
+        商旅h5主页 = 4
     }
 
     /// <summary>
@@ -64,5 +82,4 @@ public class OpenApiJumpInfoRq
     [JsonProperty("phone")]
     [JsonPropertyName("phone")]
     public string Phone { get; set; }
-}
-
+}

+ 8 - 4
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripAddressResponse.cs

@@ -4,16 +4,20 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
-public class GetAliTripAddressResponse : DingtalkResponseErrorResult<OpenApiJumpInfoRs>
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+
+/// <summary>
+/// 获取阿里商旅访问地址
+/// </summary>
+public class GetAliTripAddressResponse : DingtalkResponseErrorResult<AliTripAddressResponseResultDomain>
 {
 }
 
-public class OpenApiJumpInfoRs
+public class AliTripAddressResponseResultDomain
 {
     [JsonProperty("url")]
     [JsonPropertyName("url")]

+ 6 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripFlightOrdersRequest.cs

@@ -6,7 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+
+/// <summary>
+/// 获取企业机票订单数据
+/// </summary>
 public class GetAliTripFlightOrdersRequest
 {
     public GetAliTripFlightOrdersRequestDomain rq;
@@ -97,4 +101,4 @@ public class GetAliTripFlightOrdersRequestDomain
     [JsonProperty("thirdpart_apply_id")]
     [JsonPropertyName("thirdpart_apply_id")]
     public string? ThirdpartApplyId { get; set; }
-}
+}

+ 60 - 26
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripFlightOrdersResponse.cs

@@ -4,12 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
 
+/// <summary>
+/// 获取企业机票订单数据
+/// </summary>
 public class GetAliTripFlightOrdersResponse : DingtalkResponseErrorSuccess
 {
     /// <summary>
@@ -32,6 +35,8 @@ public class FlightOrderDomain
     /// <summary>
     /// 机票订单id
     /// </summary>
+    [JsonProperty("id")]
+    [JsonPropertyName("id")]
     public long Id { get; set; }
 
     /// <summary>
@@ -44,6 +49,8 @@ public class FlightOrderDomain
     /// <summary>
     /// 用户id
     /// </summary>
+    [JsonProperty("userid")]
+    [JsonPropertyName("userid")]
     public string UserId { get; set; }
 
     /// <summary>
@@ -56,6 +63,8 @@ public class FlightOrderDomain
     /// <summary>
     /// 企业id
     /// </summary>
+    [JsonProperty("corpid")]
+    [JsonPropertyName("corpid")]
     public string CorpId { get; set; }
 
     /// <summary>
@@ -75,6 +84,8 @@ public class FlightOrderDomain
     /// <summary>
     /// 部门id
     /// </summary>
+    [JsonProperty("deptid")]
+    [JsonPropertyName("deptid")]
     public string DeptId { get; set; }
 
     /// <summary>
@@ -131,12 +142,7 @@ public class FlightOrderDomain
     /// </summary>
     [JsonProperty("trip_type")]
     [JsonPropertyName("trip_type")]
-    public TripTypeEnum TripType { get; set; }
-
-    public enum TripTypeEnum
-    {
-        单程 = 0, 往返 = 1, 中转 = 2
-    }
+    public AliTripFlightOrdersTripTypeEnum TripType { get; set; }
 
     /// <summary>
     /// 乘机人数量
@@ -155,11 +161,15 @@ public class FlightOrderDomain
     /// <summary>
     /// 订单状态:0待支付,1出票中,2已关闭,3有改签单,4有退票单,5出票成功,6退票申请中,7改签申请中
     /// </summary>
+    [JsonProperty("status")]
+    [JsonPropertyName("status")]
     public int Status { get; set; }
 
     /// <summary>
     /// 折扣
     /// </summary>
+    [JsonProperty("discount")]
+    [JsonPropertyName("discount")]
     public string Discount { get; set; }
 
     /// <summary>
@@ -193,6 +203,8 @@ public class FlightOrderDomain
     /// <summary>
     /// 发票信息对象
     /// </summary>
+    [JsonProperty("invoice")]
+    [JsonPropertyName("invoice")]
     public InvoiceDomain Invoice { get; set; }
 
     /// <summary>
@@ -281,11 +293,15 @@ public class InvoiceDomain
     /// <summary>
     /// 商旅发票id
     /// </summary>
+    [JsonProperty("id")]
+    [JsonPropertyName("id")]
     public long Id { get; set; }
 
     /// <summary>
     /// 发票抬头
     /// </summary>
+    [JsonProperty("title")]
+    [JsonPropertyName("title")]
     public string Title { get; set; }
 }
 
@@ -297,21 +313,29 @@ public class CostCenterDomain
     /// <summary>
     /// 商旅成本中心id
     /// </summary>
+    [JsonProperty("id")]
+    [JsonPropertyName("id")]
     public long Id { get; set; }
 
     /// <summary>
     /// 企业id
     /// </summary>
+    [JsonProperty("corpid")]
+    [JsonPropertyName("corpid")]
     public string CorpId { get; set; }
 
     /// <summary>
     /// 成本中心编号
     /// </summary>
+    [JsonProperty("number")]
+    [JsonPropertyName("number")]
     public string Number { get; set; }
 
     /// <summary>
     /// 成本中心名称
     /// </summary>
+    [JsonProperty("name")]
+    [JsonPropertyName("name")]
     public string Name { get; set; }
 }
 
@@ -323,21 +347,22 @@ public class PriceInfoDomain
     /// <summary>
     /// 价格
     /// </summary>
+    [JsonProperty("price")]
+    [JsonPropertyName("price")]
     public decimal Price { get; set; }
 
     /// <summary>
     /// 资金流向:1:支出,2:收入
     /// </summary>
-    public TypeEnum Type { get; set; }
-
-    public enum TypeEnum
-    {
-        支出 = 1, 收入 = 2
-    }
+    [JsonProperty("type")]
+    [JsonPropertyName("type")]
+    public AliTripPriceTypeEnum Type { get; set; }
 
     /// <summary>
     /// 交易类目
     /// </summary>
+    [JsonProperty("category")]
+    [JsonPropertyName("category")]
     public string Category { get; set; }
 
     /// <summary>
@@ -345,12 +370,7 @@ public class PriceInfoDomain
     /// </summary>
     [JsonProperty("pay_type")]
     [JsonPropertyName("pay_type")]
-    public PayTypeEnum PayType { get; set; }
-
-    public enum PayTypeEnum
-    {
-        个人现付 = 1, 企业现付 = 2, 企业月结 = 4, 企业预存 = 8
-    }
+    public AliTripPricePayTypeEnum PayType { get; set; }
 
     /// <summary>
     /// 流水创建时间
@@ -369,6 +389,8 @@ public class PriceInfoDomain
     /// <summary>
     /// 流水单号
     /// </summary>
+    [JsonProperty("tradeId")]
+    [JsonPropertyName("tradeId")]
     public string TradeId { get; set; }
 
     /// <summary>
@@ -395,16 +417,22 @@ public class PriceInfoDomain
     /// <summary>
     /// 改签折扣
     /// </summary>
+    [JsonProperty("discount")]
+    [JsonPropertyName("discount")]
     public string Discount { get; set; }
 
     /// <summary>
     /// 改签航班起飞时间
     /// </summary>
+    [JsonProperty("startTime")]
+    [JsonPropertyName("startTime")]
     public DateTime StartTime { get; set; }
 
     /// <summary>
     /// 改签航班到达时间
     /// </summary>
+    [JsonProperty("endTime")]
+    [JsonPropertyName("endTime")]
     public DateTime EndTime { get; set; }
 }
 
@@ -423,16 +451,15 @@ public class InsureInfoDomain
     /// <summary>
     /// 状态:1已出保 2已退保
     /// </summary>
-    public StatusEnum Status { get; set; }
-
-    public enum StatusEnum
-    {
-        已出保 = 1, 已退保 = 2
-    }
+    [JsonProperty("status")]
+    [JsonPropertyName("status")]
+    public AliTripFlightOrdersInsureInfoStatusEnum Status { get; set; }
 
     /// <summary>
     /// 乘机人(保险人)姓名
     /// </summary>
+    [JsonProperty("name")]
+    [JsonPropertyName("name")]
     public string Name { get; set; }
 }
 
@@ -444,6 +471,8 @@ public class UserAffiliateDomain
     /// <summary>
     /// 出行人ID
     /// </summary>
+    [JsonProperty("userid")]
+    [JsonPropertyName("userid")]
     public string UserId { get; set; }
 
     /// <summary>
@@ -454,11 +483,16 @@ public class UserAffiliateDomain
     public string UserName { get; set; }
 }
 
+/// <summary>
+/// 分页相关信息
+/// </summary>
 public class PageInfoDomain
 {
     /// <summary>
     /// 当前页
     /// </summary>
+    [JsonProperty("page")]
+    [JsonPropertyName("page")]
     public string Page { get; set; }
 
     /// <summary>

+ 7 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripTrainOrdersRequest.cs

@@ -6,11 +6,16 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+
+/// <summary>
+/// 获取企业火车票订单数据
+/// </summary>
 public class GetAliTripTrainOrdersRequest
 {
     public GetAliTripTrainOrdersRequestDomain rq { get; set; }
 }
+
 public class GetAliTripTrainOrdersRequestDomain
 {
     /// <summary>
@@ -96,5 +101,4 @@ public class GetAliTripTrainOrdersRequestDomain
     [JsonProperty("thirdpart_apply_id")]
     [JsonPropertyName("thirdpart_apply_id")]
     public string? ThirdpartApplyId { get; set; }
-
-}
+}

+ 28 - 20
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/DTO/GetAlitripTrainOrdersResponse.cs

@@ -4,10 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
+
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+
+/// <summary>
+/// 获取企业火车票订单数据
+/// </summary>
 public class GetAliTripTrainOrdersResponse : DingtalkResponseErrorSuccess
 {
     /// <summary>
@@ -23,6 +28,8 @@ public class TrainOrder
     /// <summary>
     /// 机票订单id
     /// </summary>
+    [JsonProperty("id")]
+    [JsonPropertyName("id")]
     public long Id { get; set; }
 
     /// <summary>
@@ -42,6 +49,8 @@ public class TrainOrder
     /// <summary>
     /// 企业id
     /// </summary>
+    [JsonProperty("corpid")]
+    [JsonPropertyName("corpid")]
     public string CorpId { get; set; }
 
     /// <summary>
@@ -54,6 +63,8 @@ public class TrainOrder
     /// <summary>
     /// 用户id
     /// </summary>
+    [JsonProperty("userid")]
+    [JsonPropertyName("userid")]
     public string UserId { get; set; }
 
     /// <summary>
@@ -66,6 +77,8 @@ public class TrainOrder
     /// <summary>
     /// 部门id
     /// </summary>
+    [JsonProperty("deptid")]
+    [JsonPropertyName("deptid")]
     public string DeptId { get; set; }
 
     /// <summary>
@@ -183,16 +196,15 @@ public class TrainOrder
     /// <summary>
     /// 订单状态:0:待支付,1:出票中,2:已关闭,3:改签成功,4:退票成功,5:出票完成,6:退票申请中,7:改签申请中,8:已出票/已发货,9:出票失败,10:改签失败,11:退票失败
     /// </summary>
-    public StatusEnum Status { get; set; }
-
-    public enum StatusEnum
-    {
-        待支付 = 0, 出票中, 已关闭, 改签成功, 退票成功, 出票完成, 退票申请中, 改签申请中, 已出票or已发货, 出票失败, 改签失败, 退票失败
-    }
+    [JsonProperty("status")]
+    [JsonPropertyName("status")]
+    public AliTripTrainOrdersStatusEnum Status { get; set; }
 
     /// <summary>
     /// 发票信息对象
     /// </summary>
+    [JsonProperty("invoice")]
+    [JsonPropertyName("invoice")]
     public InvoiceDomain Invoice { get; set; }
 
     /// <summary>
@@ -246,21 +258,22 @@ public class TrainPriceInfo
     /// <summary>
     /// 价格
     /// </summary>
+    [JsonProperty("price")]
+    [JsonPropertyName("price")]
     public decimal Price { get; set; }
 
     /// <summary>
     /// 资金流向:1:支出,2:收入
     /// </summary>
-    public TrainPriceTypeEnum Type { get; set; }
-
-    public enum TrainPriceTypeEnum
-    {
-        支出 = 1, 收入
-    }
+    [JsonProperty("type")]
+    [JsonPropertyName("type")]
+    public AliTripPriceTypeEnum Type { get; set; }
 
     /// <summary>
     /// 交易类目
     /// </summary>
+    [JsonProperty("category")]
+    [JsonPropertyName("category")]
     public string Category { get; set; }
 
     /// <summary>
@@ -268,12 +281,7 @@ public class TrainPriceInfo
     /// </summary>
     [JsonProperty("pay_type")]
     [JsonPropertyName("pay_type")]
-    public int PayType { get; set; }
-
-    public enum TrainPricePayTypeEnum
-    {
-        个人现付 = 1, 企业现付 = 2, 企业月结 = 4, 企业预存 = 8
-    }
+    public AliTripPricePayTypeEnum PayType { get; set; }
 
     /// <summary>
     /// 流水创建时间

+ 5 - 6
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/AliTrip/IAliTripRequestProxy.cs

@@ -4,19 +4,18 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
+using Admin.NET.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.AliTrip;
-public interface IAliTripRequestProxy: IHttpDispatchProxy
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.AliTrip;
+
+public interface IAliTripRequestProxy : IHttpDispatchProxy
 {
     [Post("https://oapi.dingtalk.com/topapi/alitrip/btrip/address/get"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))]
     Task<string> GetAliTripAddress([QueryString("access_token")] string accessToken, [Body] GetAliTripAddressRequest request);
 
     [Post("https://oapi.dingtalk.com/topapi/alitrip/btrip/flight/order/search"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))]
-
     Task<string> GetAliTripFlightOrders([QueryString("access_token")] string accessToken, GetAliTripFlightOrdersRequest rq);
 
     [Post("https://oapi.dingtalk.com/topapi/alitrip/btrip/train/order/search"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))]
     Task<string> GetAliTripTrainOrders([QueryString("access_token")] string accessToken, GetAliTripTrainOrdersRequest rq);
-
-}
+}

+ 20 - 10
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/AttendanceRequest.cs

@@ -4,11 +4,11 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.Attendance.DTO;
+using Admin.NET.Plugin.DingTalk.RequestProxy.Attendance.DTO;
 
 using NewLife;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Attendance;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Attendance;
 
 public class AttendanceRequest : IScoped
 {
@@ -28,7 +28,7 @@ public class AttendanceRequest : IScoped
     /// <param name="to">查询考勤打卡记录的结束工作日</param>
     /// <param name="isI18N">是否为海外企业使用</param>
     /// <returns></returns>
-    public async Task<ListRecordResponse> ListRecord(string accessToken, List<string> useridList, DateTime from, DateTime to,bool isI18N=false)
+    public async Task<ListRecordResponse> ListRecord(string accessToken, List<string> useridList, DateTime from, DateTime to, bool isI18N = false)
     {
         var requestBody = new ListRecordRequest
         {
@@ -53,7 +53,7 @@ public class AttendanceRequest : IScoped
     /// <param name="bizType">审批单类型,可取值:1:加班,2:出差、外出,3:请假</param>
     /// <param name="fromTime">开始时间。开始时间不能早于当前时间前31天</param>
     /// <param name="toTime">结束时间</param>
-    /// <param name="durationUnit">时长单位,支持格式如下:day,halfDay,hour:biz_type为1时仅支持hou</param>
+    /// <param name="durationUnit">时长单位,支持格式如下:day,halfDay,hour:biz_type为1时仅支持hour</param>
     /// <param name="calculateModel">计算方法:0:按自然日计算,1:按工作日计算</param>
     /// <param name="leaveCode">假期规则唯一标识。选填。仅支持bizType=3 请假时传不为空,可以支持根据假期类型设置的取整规则进行时长取整</param>
     /// <param name="subType">子类型名称,最大长度20个字符。审批单类型biz_type=3时,该参数必传。</param>
@@ -61,28 +61,28 @@ public class AttendanceRequest : IScoped
     /// <param name="overTimeToMore">biz_type为1时必传:1:加班转调休,2:加班转工资</param>
     /// <returns></returns>
     public async Task<AttendanceApprovalsFinishResponse> ApproveFinish(string accessToken, string userid, string approveId, string tagName, string jumpUrl,
-        BizTypeEnum bizType, DateTime fromTime, DateTime toTime, DurationUnitEnum durationUnit, CalculateModelEnum calculateModel, string? leaveCode = null,
+        AttendanceBizTypeEnum bizType, DateTime fromTime, DateTime toTime, AttendanceDurationUnitEnum durationUnit, AttendanceCalculateModelEnum calculateModel, string? leaveCode = null,
         string? subType = null, string? overTimeDuration = null, long? overTimeToMore = null)
     {
-        if (bizType == BizTypeEnum.请假 && string.IsNullOrEmpty(subType))
+        if (bizType == AttendanceBizTypeEnum.请假 && string.IsNullOrEmpty(subType))
             throw Oops.Oh("审批单类型biz_type=3时,subType必传。");
-        if (bizType == BizTypeEnum.加班 && (string.IsNullOrEmpty(overTimeDuration) || !overTimeToMore.HasValue))
+        if (bizType == AttendanceBizTypeEnum.加班 && (string.IsNullOrEmpty(overTimeDuration) || !overTimeToMore.HasValue))
             throw Oops.Oh("biz_type为1时,overTimeDuration和overTimeToMore必传");
         var fromTimeStr = "";
         var toTimeStr = "";
         switch (durationUnit)
         {
-            case DurationUnitEnum.Day:
+            case AttendanceDurationUnitEnum.Day:
                 fromTimeStr = fromTime.ToString("yyyy-MM-dd");
                 toTimeStr = toTime.ToString("yyyy-MM-dd");
                 break;
 
-            case DurationUnitEnum.HalfDay:
+            case AttendanceDurationUnitEnum.HalfDay:
                 fromTimeStr = TimeToHalfDay(fromTime);
                 toTimeStr = TimeToHalfDay(toTime);
                 break;
 
-            case DurationUnitEnum.Hour:
+            case AttendanceDurationUnitEnum.Hour:
                 fromTimeStr = fromTime.ToString("yyyy-MM-dd HH:mm");
                 toTimeStr = toTime.ToString("yyyy-MM-dd HH:mm");
                 break;
@@ -134,6 +134,16 @@ public class AttendanceRequest : IScoped
         return resStr.ToObject<AttendanceApprovelsCancelResponse>();
     }
 
+    /// <summary>
+    /// 查询请假状态
+    /// </summary>
+    /// <param name="accessToken"></param>
+    /// <param name="userIdList">待查询用户的ID列表,每次最多100个</param>
+    /// <param name="startTime">开始时间 ,支持最多180天的查询</param>
+    /// <param name="endTime">结束时间,支持最多180天的查询</param>
+    /// <param name="offset">支持分页查询,与size参数同时设置时才生效,此参数代表偏移量,偏移量从0开始</param>
+    /// <param name="size">支持分页查询,与offset参数同时设置时才生效,此参数代表分页大小,最大20</param>
+    /// <returns></returns>
     public async Task<GetLeaveStatusResponse> GetLeaveStatus(string accessToken, List<string> userIdList, DateTime startTime, DateTime endTime, int offset = 0, int size = 10)
     {
         var resStr = await _request.GetLeaveStatus(accessToken, new GetLeaveStatusRequest

+ 2 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/AttdendanceApprovalsFinishRequest.cs

@@ -6,7 +6,7 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Attendance.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Attendance.DTO;
 
 /// <summary>
 /// 出勤审批完成请求入参
@@ -70,7 +70,7 @@ public class TopCalculateApproveDurationParamDomain
     /// </summary>
     [JsonProperty("bizType")]
     [JsonPropertyName("bizType")]
-    public BizTypeEnum BizType;
+    public AttendanceBizTypeEnum BizType;
 
     /// <summary>
     /// 开始时间。开始时间不能早于当前时间前31天。 支持以下格式:2019-08-15,2019-08-15 AM,2019-08-15 12:43

+ 10 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/AttendanceApprovalsFinishResponse.cs

@@ -4,11 +4,11 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Attendance.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Attendance.DTO;
 
 /// <summary>
 /// 出勤批准完成响应
@@ -25,11 +25,15 @@ public class AttendanceApprovalsFinishResponseResult
     /// <summary>
     /// 总时长,该字段的单位与本企业内对应审批单设置的单位一致
     /// </summary>
+    [JsonProperty("duration")]
+    [JsonPropertyName("duration")]
     public double Duration;
 
     /// <summary>
     /// 详细信息
     /// </summary>
+    [JsonProperty("durationDetail")]
+    [JsonPropertyName("durationDetail")]
     public List<DurationDetailDomain> DurationDetail;
 }
 
@@ -38,10 +42,14 @@ public class DurationDetailDomain
     /// <summary>
     /// 审批通过日期
     /// </summary>
+    [JsonProperty("date")]
+    [JsonPropertyName("date")]
     public string Date;
 
     /// <summary>
     /// 每日时长
     /// </summary>
+    [JsonProperty("duration")]
+    [JsonPropertyName("duration")]
     public double Duration;
 }

+ 4 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/AttendanceApprovelsCancelRequest.cs

@@ -4,12 +4,13 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
-
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Attendance.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Attendance.DTO;
 
+/// <summary>
+/// 通知审批撤销
+/// </summary>
 public class AttendanceApprovelsCancelRequest
 {
     /// <summary>

+ 5 - 4
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/AttendanceApprovelsCancelResponse.cs

@@ -4,12 +4,13 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
-using System.Text.Json.Serialization;
-
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Attendance.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Attendance.DTO;
 
+/// <summary>
+/// 通知审批撤销
+/// </summary>
 public class AttendanceApprovelsCancelResponse : DingtalkResponseError
 {
 }

+ 16 - 4
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/Enums.cs

@@ -4,23 +4,35 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Attendance.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Attendance.DTO;
 
-public enum BizTypeEnum
+/// <summary>
+/// 考勤审批单类型,可取值:1:加班,2:出差、外出,3:请假
+/// </summary>
+[SuppressSniffer]
+public enum AttendanceBizTypeEnum
 {
     加班 = 1,
     出差 = 2,
     请假 = 3
 }
 
-public enum DurationUnitEnum
+/// <summary>
+/// 考勤审批单时长单位,支持格式如下:day,halfDay,hour:biz_type为1时仅支持hour
+/// </summary>
+[SuppressSniffer]
+public enum AttendanceDurationUnitEnum
 {
     Day,
     HalfDay,
     Hour
 }
 
-public enum CalculateModelEnum
+/// <summary>
+/// 考勤审批单计算方法:0:按自然日计算,1:按工作日计算
+/// </summary>
+[SuppressSniffer]
+public enum AttendanceCalculateModelEnum
 {
     按自然日计算 = 0,
     按工作日计算 = 1

+ 9 - 17
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/GetLeaveStatusRequest.cs

@@ -4,10 +4,16 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
+
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Attendance.DTO;
-public class GetLeaveStatusRequest
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Attendance.DTO;
+
+/// <summary>
+/// 查询请假状态
+/// </summary>
+public class GetLeaveStatusRequest:DingtalkRequestOffsetSize
 {
     /// <summary>
     /// 待查询用户的ID列表,每次最多100个
@@ -29,18 +35,4 @@ public class GetLeaveStatusRequest
     [JsonProperty("end_time")]
     [JsonPropertyName("end_time")]
     public long EndTime { get; set; }
-
-    /// <summary>
-    /// 支持分页查询,与size参数同时设置时才生效,此参数代表偏移量,偏移量从0开始
-    /// </summary>
-    [JsonProperty("offset")]
-    [JsonPropertyName("offset")]
-    public int Offset {  get; set; }
-
-    /// <summary>
-    /// 支持分页查询,与offset参数同时设置时才生效,此参数代表分页大小,最大20
-    /// </summary>
-    [JsonProperty("size")]
-    [JsonPropertyName("size")]
-    public int Size {  get; set; }
-}
+}

+ 10 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/GetLeaveStatusResponse.cs

@@ -4,17 +4,22 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Attendance.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Attendance.DTO;
 
+/// <summary>
+/// 查询请假状态
+/// </summary>
 public class GetLeaveStatusResponse:DingtalkResponseErrorResultRequestId<GetLeaveStatusResult>
 {
     /// <summary>
-    /// 请求是否成功。true:成功, false:失败
+    /// 请求是否成功。
     /// </summary>
+    [JsonProperty("success")]
+    [JsonPropertyName("success")]
     public bool Success { get; set; }
 }
 
@@ -68,6 +73,8 @@ public class LeaveStatusDomain
     /// <summary>
     /// 用户ID。
     /// </summary>
+    [JsonProperty("userid")]
+    [JsonPropertyName("userid")]
     public string UserId {  get; set; }
 
 }

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/ListRecordRequest.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Attendance.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Attendance.DTO;
 
+/// <summary>
+/// 获取打卡详情
+/// </summary>
 public class ListRecordRequest
 {
     /// <summary>

+ 87 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/DTO/ListRecordResponse.cs

@@ -4,14 +4,22 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Attendance.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Attendance.DTO;
 
-public class ListRecordResponse:DingtalkResponseError
+/// <summary>
+/// 获取打卡详情
+/// </summary>
+public class ListRecordResponse : DingtalkResponseError
 {
+    /// <summary>
+    /// 打卡详情
+    /// </summary>
+    [JsonProperty("recordresult")]
+    [JsonPropertyName("recordresult")]
     public List<ListRecordResultDomain> RecordResult { get; set; }
 }
 
@@ -20,191 +28,267 @@ public class ListRecordResultDomain
     /// <summary>
     /// 关联的审批ID,当该字段非空时,表示打卡记录与请假、加班等审批有关
     /// </summary>
+    [JsonPropertyName("approveId")]
+    [JsonProperty("approveId")]
     public long ApproveId { get; set; }
 
     /// <summary>
     /// 基准定位精度
     /// </summary>
+    [JsonProperty("baseAccuracy")]
+    [JsonPropertyName("baseAccuracy")]
     public string BaseAccuracy { get; set; }
 
     /// <summary>
     /// 基准地址
     /// </summary>
+    [JsonProperty("baseAddress")]
+    [JsonPropertyName("baseAddress")]
     public string BaseAddress { get; set; }
 
     /// <summary>
     /// 计算迟到和早退,基准时间;也可作为排班打卡时间
     /// </summary>
+    [JsonProperty("baseCheckTime")]
+    [JsonPropertyName("baseCheckTime")]
     public string BaseCheckTime { get; set; }
 
     /// <summary>
     /// 基准纬度
     /// </summary>
+    [JsonProperty("baseLatitude")]
+    [JsonPropertyName("baseLatitude")]
     public string BaseLatitude { get; set; }
 
     /// <summary>
     /// 基准经度
     /// </summary>
+    [JsonProperty("baseLongitude")]
+    [JsonPropertyName("baseLongitude")]
     public string BaseLongitude { get; set; }
 
     /// <summary>
     /// 基准MAC地址
     /// </summary>
+    [JsonProperty("baseMacAddr")]
+    [JsonPropertyName("baseMacAddr")]
     public string BaseMacAddr { get; set; }
 
     /// <summary>
     /// 基准wifi ssid
     /// </summary>
+    [JsonProperty("baseSsid")]
+    [JsonPropertyName("baseSsid")]
     public string BaseSsid { get; set; }
 
     /// <summary>
     /// 关联的业务ID
     /// </summary>
+    [JsonProperty("bizId")]
+    [JsonPropertyName("bizId")]
     public string BizId { get; set; }
 
     /// <summary>
     /// 考勤类型:OnDuty:上班,OffDuty:下班
     /// </summary>
+    [JsonProperty("checkType")]
+    [JsonPropertyName("checkType")]
     public string CheckType { get; set; }
 
     /// <summary>
     /// 班次ID
     /// </summary>
+    [JsonProperty("classId")]
+    [JsonPropertyName("classId")]
     public long ClassId { get; set; }
 
     /// <summary>
     /// 打卡设备ID
     /// </summary>
+    [JsonProperty("deviceId")]
+    [JsonPropertyName("deviceId")]
     public string DeviceId { get; set; }
 
     /// <summary>
     /// 打卡设备序列号
     /// </summary>
+    [JsonProperty("deviceSN")]
+    [JsonPropertyName("deviceSN")]
     public string DeviceSN { get; set; }
 
     /// <summary>
     /// 打卡记录创建时间
     /// </summary>
+    [JsonProperty("gmtCreate")]
+    [JsonPropertyName("gmtCreate")]
     public string GmtCreate { get; set; }
 
     /// <summary>
     /// 打卡记录修改时间
     /// </summary>
+    [JsonProperty("gmtModified")]
+    [JsonPropertyName("gmtModified")]
     public string GmtModified { get; set; }
 
     /// <summary>
     /// 考勤组ID
     /// </summary>
+    [JsonProperty("groupId")]
+    [JsonPropertyName("groupId")]
     public long GroupId { get; set; }
 
     /// <summary>
     /// 考勤ID
     /// </summary>
+    [JsonProperty("id")]
+    [JsonPropertyName("id")]
     public long Id { get; set; }
 
     /// <summary>
     /// 对应的invalidRecordType异常信息的具体描述
     /// </summary>
+    [JsonProperty("invalidRecordMsg")]
+    [JsonPropertyName("invalidRecordMsg")]
     public string InvalidRecordMsg { get; set; }
 
     /// <summary>
     /// 异常信息类型: Security:安全相关原因,Other:其他原因
     /// </summary>
+    [JsonProperty("invalidRecordType")]
+    [JsonPropertyName("invalidRecordType")]
     public string InvalidRecordType { get; set; }
 
     /// <summary>
     /// 是否合法.Y:合法,N:不合法
     /// </summary>
+    [JsonProperty("isLegal")]
+    [JsonPropertyName("isLegal")]
     public string IsLegal { get; set; }
 
     /// <summary>
     /// 定位方法
     /// </summary>
+    [JsonProperty("locationMethod")]
+    [JsonPropertyName("locationMethod")]
     public string LocationMethod { get; set; }
 
     /// <summary>
     /// 位置结果:Normal:范围内,Outside:范围外,NotSigned:未打卡
     /// </summary>
+    [JsonProperty("locationResult")]
+    [JsonPropertyName("locationResult")]
     public string LocationResult { get; set; }
 
     /// <summary>
     /// 打卡备注
     /// </summary>
+    [JsonProperty("outsideRemark")]
+    [JsonPropertyName("outsideRemark")]
     public string OutsideRemark { get; set; }
 
     /// <summary>
     /// 排班打卡时间
     /// </summary>
+    [JsonProperty("planCheckTime")]
+    [JsonPropertyName("planCheckTime")]
     public string PlanCheckTime { get; set; }
 
     /// <summary>
     /// 排班ID
     /// </summary>
+    [JsonProperty("planId")]
+    [JsonPropertyName("planId")]
     public long PlanId { get; set; }
 
     /// <summary>
     /// 关联的审批实例ID,当该字段非空时,表示打卡记录与请假、加班等审批有关
     /// </summary>
+    [JsonProperty("procInstId")]
+    [JsonPropertyName("procInstId")]
     public string ProcInstId { get; set; }
 
     /// <summary>
     /// 数据来源:ATM:考勤机打卡(指纹/人脸打卡),BEACON:IBeacon,DING_ATM:钉钉考勤机(考勤机蓝牙打卡),USER:用户打卡
     ///         BOSS:老板改签,APPROVE:审批系统,SYSTEM:考勤系统,AUTO_CHECK:自动打卡
     /// </summary>
+    [JsonProperty("sourceType")]
+    [JsonPropertyName("sourceType")]
     public string SourceType { get; set; }
 
     /// <summary>
     /// 打卡结果。 Normal:正常,Early:早退,Late:迟到,SeriousLate:严重迟到,Absenteeism:旷工迟到,NotSigned:未打卡
     /// </summary>
+    [JsonProperty("timeResult")]
+    [JsonPropertyName("timeResult")]
     public string TimeResult { get; set; }
 
     /// <summary>
     /// 用户打卡定位精度
     /// </summary>
+    [JsonProperty("userAccuracy")]
+    [JsonPropertyName("userAccuracy")]
     public string UserAccuracy { get; set; }
 
     /// <summary>
     /// 用户打卡地址
     /// </summary>
+    [JsonProperty("userAddress")]
+    [JsonPropertyName("userAddress")]
     public string UserAddress { get; set; }
 
     /// <summary>
     /// 实际打卡时间
     /// </summary>
+    [JsonProperty("userCheckTime")]
+    [JsonPropertyName("userCheckTime")]
     public string UserCheckTime { get; set; }
 
     /// <summary>
     /// 打卡人的userId
     /// </summary>
+    [JsonProperty("userId")]
+    [JsonPropertyName("userId")]
     public string UserId { get; set; }
 
     /// <summary>
     /// 用户打卡纬度
     /// </summary>
+    [JsonProperty("userLatitude")]
+    [JsonPropertyName("userLatitude")]
     public string UserLatitude { get; set; }
 
     /// <summary>
     /// 用户打卡经度
     /// </summary>
+    [JsonProperty("userLongitude")]
+    [JsonPropertyName("userLongitude")]
     public string UserLongitude { get; set; }
 
     /// <summary>
     /// 用户打卡wifi Mac地址
     /// </summary>
+    [JsonProperty("userMacAddr")]
+    [JsonPropertyName("userMacAddr")]
     public string UserMacAddr { get; set; }
 
     /// <summary>
     /// 用户打卡wifi SSID
     /// </summary>
+    [JsonProperty("userSsid")]
+    [JsonPropertyName("userSsid")]
     public string UserSsid { get; set; }
 
     /// <summary>
     /// 工作日
     /// </summary>
+    [JsonProperty("workDate")]
+    [JsonPropertyName("workDate")]
     public long WorkDate { get; set; }
 
     /// <summary>
     /// 企业ID
     /// </summary>
+    [JsonProperty("corpId")]
+    [JsonPropertyName("corpId")]
     public string CorpId { get; set; }
 }

+ 3 - 5
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Attendance/IAttendanceRequestProxy.cs

@@ -4,9 +4,9 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.Attendance.DTO;
+using Admin.NET.Plugin.DingTalk.RequestProxy.Attendance.DTO;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Attendance;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Attendance;
 
 public interface IAttendanceRequestProxy : IHttpDispatchProxy
 {
@@ -21,7 +21,5 @@ public interface IAttendanceRequestProxy : IHttpDispatchProxy
     Task<string> ApprovalsCancel(string accessToken, [Body] AttendanceApprovelsCancelRequest request);
 
     [Post("https://oapi.dingtalk.com/topapi/attendance/getleavestatus?access_token={accessToken}"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))]
-    
-    Task<string> GetLeaveStatus(string accessToken, [Body]GetLeaveStatusRequest request);
-
+    Task<string> GetLeaveStatus(string accessToken, [Body] GetLeaveStatusRequest request);
 }

+ 13 - 6
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseRequestId.cs → Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkRequestOffsetSize.cs

@@ -6,13 +6,20 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
-public abstract class DingtalkResponseRequestId
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
+public abstract class DingtalkRequestOffsetSize
 {
     /// <summary>
-    /// 请求ID
+    /// 支持分页查询,与offset参数同时设置时才生效,此参数代表分页大小。
     /// </summary>
-    [JsonProperty("request_id")]
-    [JsonPropertyName("request_id")]
-    public virtual string RequestId { get; set; }
+    [JsonProperty("size")]
+    [JsonPropertyName("size")]
+    public virtual int Size { get; set; }
+
+    /// <summary>
+    /// 支持分页查询,与size参数同时设置时才生效,此参数代表偏移量,偏移量从0开始。
+    /// </summary>
+    [JsonProperty("offset")]
+    [JsonPropertyName("offset")]
+    public virtual int Offset { get; set; } = 0;
 }

+ 6 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseError.cs

@@ -6,16 +6,20 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 public abstract class DingtalkResponseError
 {
     /// <summary>
     /// 返回码描述=ok
     /// </summary>
-    public virtual string ErrMsg { get; set; }
+    [JsonProperty("errmsg")]
+    [JsonPropertyName("errmsg")]
+    public virtual string? ErrMsg { get; set; }
 
     /// <summary>
     /// 返回码=0
     /// </summary>
+    [JsonProperty("errcode")]
+    [JsonPropertyName("errcode")]
     public virtual long ErrCode { get; set; }
 }

+ 1 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseErrorRequestId.cs

@@ -6,7 +6,7 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 public abstract class DingtalkResponseErrorRequestId : DingtalkResponseError
 {
     /// <summary>

+ 3 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseErrorResult.cs

@@ -6,12 +6,14 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 public abstract class DingtalkResponseErrorResult<T> : DingtalkResponseError
 {
     /// <summary>
     /// 返回结果
     /// </summary>
+    [JsonProperty("result")]
+    [JsonPropertyName("result")]
     public virtual T Result { get; set; }
 }

+ 1 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseErrorResultRequestId.cs

@@ -6,7 +6,7 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 public class DingtalkResponseErrorResultRequestId<T> : DingtalkResponseErrorResult<T>
 {

+ 3 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseErrorSuccess.cs

@@ -6,11 +6,13 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 public abstract class DingtalkResponseErrorSuccess : DingtalkResponseError
 {
     /// <summary>
     /// 接口调用是否成功
     /// </summary>
+    [JsonProperty("success")]
+    [JsonPropertyName("success")]
     public virtual bool Success { get; set; }
 }

+ 3 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseHasMoreList.cs

@@ -6,7 +6,7 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 public abstract class DingtalkResponseHasMoreList<T>
 {
@@ -27,5 +27,7 @@ public abstract class DingtalkResponseHasMoreList<T>
     /// <summary>
     /// 数据列表
     /// </summary>
+    [JsonProperty("list")]
+    [JsonPropertyName("list")]
     public virtual List<T> List { get; set; }
 }

+ 5 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseSuccess.cs

@@ -4,11 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using System.Text.Json.Serialization;
+
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 public abstract class DingtalkResponseSuccess
 {
     /// <summary>
     /// 接口调用是否成功
     /// </summary>
+    [JsonProperty("success")]
+    [JsonPropertyName("success")]
     public virtual bool Success {  get; set; }
 }

+ 5 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/BaseTypes/DingtalkResponseSuccessResult.cs

@@ -4,11 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using System.Text.Json.Serialization;
+
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 public abstract class DingtalkResponseSuccessResult<T>:DingtalkResponseSuccess
 {
     /// <summary>
     /// 返回结果
     /// </summary>
+    [JsonProperty("result")]
+    [JsonPropertyName("result")]
     public T Result;
 }

+ 3 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/CheckinRequest.cs

@@ -6,7 +6,7 @@
 
 using NewLife;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Checkin;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Checkin;
 
 public class CheckinRequest : IScoped
 {
@@ -52,9 +52,9 @@ public class CheckinRequest : IScoped
     /// <param name="size">支持分页查询,与offset 参数同时设置时才生效,此参数代表分页大小,最大100</param>
     /// <param name="order">排序。asc:正序,desc:倒序</param>
     /// <returns></returns>
-    public async Task<DTO.GetDeptRecordResponse> GetDeptRecord(string accessToken, long deptId, DateTime startTime, DateTime endTime, long offset = 1, long size = 100, string order = "asc")
+    public async Task<DTO.GetDeptRecordResponse> GetDeptRecord(string accessToken, long deptId, DateTime startTime, DateTime endTime, long offset = 0, long size = 100, string order = "asc")
     {
-        var resStr = await _request.GetDeptRecord(accessToken, deptId.ToString(),new DateTimeOffset(startTime).ToUnixTimeMilliseconds(),new DateTimeOffset(endTime).ToUnixTimeMilliseconds(), offset, size, order);
+        var resStr = await _request.GetDeptRecord(accessToken, deptId.ToString(), new DateTimeOffset(startTime).ToUnixTimeMilliseconds(), new DateTimeOffset(endTime).ToUnixTimeMilliseconds(), offset, size, order);
         var res = resStr.ToObject<DTO.GetDeptRecordResponse>();
         return res;
     }

+ 0 - 52
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/DTO/GetDeptRecordRequest.cs

@@ -1,52 +0,0 @@
-// Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
-//
-// 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
-//
-// 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
-
-using System.Text.Json.Serialization;
-
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Checkin.DTO;
-
-public class GetDeptRecordRequest
-{
-    /// <summary>
-    /// 部门ID,1表示根部门
-    /// </summary>
-    [JsonProperty("department_id")]
-    [JsonPropertyName("department_id")]
-    public string DepartmentId { get; set; }
-
-    /// <summary>
-    /// 开始时间,Unix时间戳,单位毫秒
-    /// </summary>
-    [JsonProperty("start_time")]
-    [JsonPropertyName("start_time")]
-    public long? StartTime { get; set; }
-
-    /// <summary>
-    /// 截止时间,单位毫秒。如果是取1个人的数据,时间范围最大10天。如果是取多个人的数据,时间范围最大1天。
-    /// </summary>
-    [JsonProperty("end_time")]
-    [JsonPropertyName("end_time")]
-    public long? EndTime { get; set; }
-
-    /// <summary>
-    /// 分页查询的游标,最开始可以传0
-    /// </summary>
-    [JsonProperty("offset")]
-    [JsonPropertyName("offset")]
-    public long? Offset { get; set; }
-
-    /// <summary>
-    /// 分页查询的每页大小,最大100
-    /// </summary>
-    [JsonProperty("size")]
-    [JsonPropertyName("size")]
-    public long? Size { get; set; }
-
-    /// <summary>
-    /// 排序。 asc:正序,desc:倒序
-    /// </summary>
-    public string? Order { get; set; }
-}

+ 27 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/DTO/GetDeptRecordResponse.cs

@@ -4,17 +4,22 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Checkin.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Checkin.DTO;
 
+/// <summary>
+/// 获取部门用户签到记录
+/// </summary>
 public class GetDeptRecordResponse : DingtalkResponseError
 {
     /// <summary>
     /// 返回结果
     /// </summary>
+    [JsonProperty("data")]
+    [JsonPropertyName("data")]
     public List<GetDeptRecordResponseData> Data { get; set; }
 }
 
@@ -23,50 +28,70 @@ public class GetDeptRecordResponseData
     /// <summary>
     /// 员工姓名
     /// </summary>
+    [JsonProperty("name")]
+    [JsonPropertyName("name")]
     public string Name { get; set; }
 
     /// <summary>
     /// 员工userId,不可修改
     /// </summary>
+    [JsonProperty("userId")]
+    [JsonPropertyName("userId")]
     public string UserId { get; set; }
 
     /// <summary>
     /// 头像URL
     /// </summary>
+    [JsonProperty("avatar")]
+    [JsonPropertyName("avatar")]
     public string Avatar { get; set; }
 
     /// <summary>
     /// 签到时间,不可修改
     /// </summary>
+    [JsonProperty("timestamp")]
+    [JsonPropertyName("timestamp")]
     public long Timestamp { get; set; }
 
     /// <summary>
     /// 签到地址
     /// </summary>
+    [JsonProperty("place")]
+    [JsonPropertyName("place")]
     public string Place { get; set; }
 
     /// <summary>
     /// 签到详细地址
     /// </summary>
+    [JsonProperty("detailPlace")]
+    [JsonPropertyName("detailPlace")]
     public string DetailPlace { get; set; }
 
     /// <summary>
     /// 签到备注
     /// </summary>
+    [JsonProperty("remark")]
+    [JsonPropertyName("remark")]
     public string Remark { get; set; }
 
     /// <summary>
     /// 签到照片URL列表
     /// </summary>
+    [JsonProperty("imageList")]
+    [JsonPropertyName("imageList")]
     public List<string> ImageList { get; set; }
 
     /// <summary>
     /// 纬度
     /// </summary>
+    [JsonProperty("latitude")]
+    [JsonPropertyName("latitude")]
     public string Latitude { get; set; }
 
     /// <summary>
     /// 经度
     /// </summary>
+    [JsonProperty("longitude")]
+    [JsonPropertyName("longitude")]
     public string Longitude { get; set; }
 }

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/DTO/GetUserRecordRequest.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Checkin.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Checkin.DTO;
 
+/// <summary>
+/// 获取用户签到记录
+/// </summary>
 public class GetUserRecordRequest
 {
     /// <summary>

+ 15 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/DTO/GetUserRecordResponse.cs

@@ -4,12 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Checkin.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Checkin.DTO;
 
+/// <summary>
+/// 获取用户签到记录
+/// </summary>
 public class GetUserRecordResponse : DingtalkResponseErrorResultRequestId<GetUserRecordResponseResultDomain>
 {
 }
@@ -57,26 +60,36 @@ public class GetUserRecordResponsePageDomain
     /// <summary>
     /// 签到备注
     /// </summary>
+    [JsonProperty("remark")]
+    [JsonPropertyName("remark")]
     public string Remark { get; set; }
 
     /// <summary>
     /// 签到用户userId
     /// </summary>
+    [JsonProperty("userid")]
+    [JsonPropertyName("userid")]
     public string UserId { get; set; }
 
     /// <summary>
     /// 签到地址
     /// </summary>
+    [JsonProperty("place")]
+    [JsonPropertyName("place")]
     public string Place { get; set; }
 
     /// <summary>
     /// 签到位置经度(暂未开放)
     /// </summary>
+    [JsonProperty("longitude")]
+    [JsonPropertyName("longitude")]
     public string Longitude { get; set; }
 
     /// <summary>
     /// 签到位置维度(暂未开放)
     /// </summary>
+    [JsonProperty("latitude")]
+    [JsonPropertyName("latitude")]
     public string Latitude { get; set; }
 
     /// <summary>

+ 1 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Checkin/ICheckinRequestProxy.cs

@@ -4,7 +4,7 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Checkin;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Checkin;
 
 public interface ICheckinRequestProxy : IHttpDispatchProxy
 {

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/GetDeptInfoRequest.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Department.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Department.DTO;
 
+/// <summary>
+/// 获取部门详情
+/// </summary>
 public class GetDeptInfoRequest
 {
     /// <summary>

+ 11 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/GetDeptInfoResponse.cs

@@ -4,12 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Department.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Department.DTO;
 
+/// <summary>
+/// 获取部门详情
+/// </summary>
 public class GetDeptInfoResponse : DingtalkResponseErrorResultRequestId<GetDeptInfoResponseResultDomain>
 {
 }
@@ -26,6 +29,8 @@ public class GetDeptInfoResponseResultDomain
     /// <summary>
     /// 部门名称
     /// </summary>
+    [JsonProperty("name")]
+    [JsonPropertyName("name")]
     public string Name { get; set; }
 
     /// <summary>
@@ -73,11 +78,15 @@ public class GetDeptInfoResponseResultDomain
     /// <summary>
     /// 教育部门标签: campus:校区,period:学段,grade:年级,class:班级
     /// </summary>
+    [JsonProperty("tags")]
+    [JsonPropertyName("tags")]
     public string Tags { get; set; }
 
     /// <summary>
     /// 在父部门中的次序值
     /// </summary>
+    [JsonProperty("order")]
+    [JsonPropertyName("order")]
     public long Order { get; set; }
 
     /// <summary>

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/ListSubIdRequest.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Department.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Department.DTO;
 
+/// <summary>
+/// 获取子部门ID列表
+/// </summary>
 public class ListSubIdRequest
 {
     /// <summary>

+ 5 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/ListSubIdResponse.cs

@@ -4,12 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Department.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Department.DTO;
 
+/// <summary>
+/// 获取子部门ID列表
+/// </summary>
 public class ListSubIdResponse : DingtalkResponseErrorResultRequestId<ListSubIdResponseResultDomain>
 {
 }

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/ListSubRequest.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Department.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Department.DTO;
 
+/// <summary>
+/// 获取部门列表
+/// </summary>
 public class ListSubRequest
 {
     /// <summary>

+ 7 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DTO/ListSubResponse.cs

@@ -4,12 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Department.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Department.DTO;
 
+/// <summary>
+/// 获取部门列表
+/// </summary>
 public class ListSubResponse : DingtalkResponseErrorResultRequestId<List<ListSubResponseResultDomain>>
 {
 }
@@ -26,6 +29,8 @@ public class ListSubResponseResultDomain
     /// <summary>
     /// 部门名称
     /// </summary>
+    [JsonProperty("name")]
+    [JsonPropertyName("name")]
     public string Name { get; set; }
 
     /// <summary>

+ 4 - 4
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/DepartmentRequest.cs

@@ -4,9 +4,9 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.Department.DTO;
+using Admin.NET.Plugin.DingTalk.RequestProxy.Department.DTO;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Department;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Department;
 
 public class DepartmentRequest : IScoped
 {
@@ -43,11 +43,11 @@ public class DepartmentRequest : IScoped
     /// <returns></returns>
     public async Task<ListSubIdResponse> ListSubId(string accessToken, long deptId = 1)
     {
-        var resStr = await _request.ListSubId(accessToken, new DTO.ListSubIdRequest
+        var resStr = await _request.ListSubId(accessToken, new ListSubIdRequest
         {
             DeptId = deptId
         });
-        var res = resStr.ToObject<DTO.ListSubIdResponse>();
+        var res = resStr.ToObject<ListSubIdResponse>();
         return res;
     }
 

+ 1 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Department/IDepartmentRequestProxy.cs

@@ -4,7 +4,7 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Department;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Department;
 
 public interface IDepartmentRequestProxy : IHttpDispatchProxy
 {

+ 6 - 11
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/HRM/DTO/EmployeeQueryOnJobRequest.cs

@@ -4,11 +4,16 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
+
 using System.Text.Json.Serialization;
 
 namespace Admin.NET.Plugin.DingTalk.RequestProxy.HRM.DTO;
 
-public class EmployeeQueryOnJobRequest
+/// <summary>
+/// 获取在职员工列表
+/// </summary>
+public class EmployeeQueryOnJobRequest : DingtalkRequestOffsetSize
 {
     /// <summary>
     /// 在职员工状态筛选,可以查询多个状态。不同状态之间使用英文逗号分隔。2:试用期、3:正式、5:待离职、-1:无状态
@@ -16,14 +21,4 @@ public class EmployeeQueryOnJobRequest
     [JsonProperty("status_list")]
     [JsonPropertyName("status_list")]
     public string StatusList { get; set; }
-
-    /// <summary>
-    /// 分页游标,从0开始。根据返回结果里的next_cursor是否为空来判断是否还有下一页,且再次调用时offset设置成next_cursor的值。
-    /// </summary>
-    public int Offset { get; set; }
-
-    /// <summary>
-    /// 分页大小,最大50。
-    /// </summary>
-    public int Size { get; set; }
 }

+ 12 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/HRM/DTO/EmployeeQueryOnJobResponse.cs

@@ -4,19 +4,29 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
 namespace Admin.NET.Plugin.DingTalk.RequestProxy.HRM.DTO;
 
+/// <summary>
+/// 获取在职员工列表
+/// </summary>
 public class EmployeeQueryOnJobResponse: DingtalkResponseErrorSuccess
 {
+    /// <summary>
+    /// 请求ID
+    /// </summary>
     [JsonProperty("request_id")]
     [JsonPropertyName("request_id")]
     public string RequestId { get; set; }
 
-
+    /// <summary>
+    /// 返回结果
+    /// </summary>
+    [JsonProperty("result")]
+    [JsonPropertyName("result")]
     public EmployeeQueryOnJobResponseResultDomain Result { get; set; }
 }
 

+ 5 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/HRM/DTO/RosterListsQueryRequest.cs

@@ -7,6 +7,10 @@
 using System.Text.Json.Serialization;
 
 namespace Admin.NET.Plugin.DingTalk.RequestProxy.HRM.DTO;
+
+/// <summary>
+/// 获取员工花名册字段信息
+/// </summary>
 public class RosterListsQueryRequest
 {
     /// <summary>
@@ -29,4 +33,4 @@ public class RosterListsQueryRequest
     [JsonProperty("agentid")]
     [JsonPropertyName("agentid")]
     public long AgentId { get; set; }
-}
+}

+ 82 - 53
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/HRM/DTO/RosterListsQueryResponse.cs

@@ -4,76 +4,105 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
+using System.Text.Json.Serialization;
+
 namespace Admin.NET.Plugin.DingTalk.RequestProxy.HRM.DTO;
 
+/// <summary>
+/// 获取员工花名册字段信息
+/// </summary>
 public class RosterListsQueryResponse
 {
     /// <summary>
     /// 结果列表
     /// </summary>
+    [JsonProperty("result")]
+    [JsonPropertyName("result")]
     public List<ResultDomain> Result { get; set; }
+}
 
-    public class ResultDomain
-    {
-        /// <summary>
-        /// 企业的corpId
-        /// </summary>
-        public string CorpId { get; set; }
+public class ResultDomain
+{
+    /// <summary>
+    /// 企业的corpId
+    /// </summary>
+    [JsonProperty("corpId")]
+    [JsonPropertyName("corpId")]
+    public string CorpId { get; set; }
 
-        /// <summary>
-        /// 员工的userId
-        /// </summary>
-        public string UserId { get; set; }
+    /// <summary>
+    /// 员工的userId
+    /// </summary>
+    [JsonProperty("userId")]
+    [JsonPropertyName("userId")]
+    public string UserId { get; set; }
 
-        /// <summary>
-        /// 暂未开放
-        /// </summary>
-        public string UnionId { get; set; }
+    /// <summary>
+    /// 暂未开放
+    /// </summary>
+    [JsonProperty("unionId")]
+    [JsonPropertyName("unionId")]
+    public string UnionId { get; set; }
 
-        /// <summary>
-        /// 返回的字段信息列表
-        /// </summary>
-        public List<FieldDataDomain> FieldDataList { get; set; }
+    /// <summary>
+    /// 返回的字段信息列表
+    /// </summary>
+    [JsonProperty("fieldDataList")]
+    [JsonPropertyName("fieldDataList")]
+    public List<FieldDataDomain> FieldDataList { get; set; }
+}
 
-        public class FieldDataDomain
-        {
-            /// <summary>
-            /// 字段标识
-            /// </summary>
-            public string FieldCode { get; set; }
+public class FieldDataDomain
+{
+    /// <summary>
+    /// 字段标识
+    /// </summary>
+    [JsonProperty("fieldCode")]
+    [JsonPropertyName("fieldCode")]
+    public string FieldCode { get; set; }
 
-            /// <summary>
-            /// 字段名称
-            /// </summary>
-            public string FieldName { get; set; }
+    /// <summary>
+    /// 字段名称
+    /// </summary>
+    [JsonProperty("fieldName")]
+    [JsonPropertyName("fieldName")]
+    public string FieldName { get; set; }
 
-            /// <summary>
-            /// 分组标识
-            /// </summary>
-            public string GroupId { get; set; }
+    /// <summary>
+    /// 分组标识
+    /// </summary>
+    [JsonProperty("groupId")]
+    [JsonPropertyName("groupId")]
+    public string GroupId { get; set; }
 
-            /// <summary>
-            /// 字段值列表
-            /// </summary>
-            public List<FieldValueDomain> FieldValueList { get; set; }
+    /// <summary>
+    /// 字段值列表
+    /// </summary>
+    [JsonProperty("fieldValueList")]
+    [JsonPropertyName("fieldValueList")]
+    public List<FieldValueDomain> FieldValueList { get; set; }
+}
 
-            public class FieldValueDomain
-            {
-                /// <summary>
-                /// 字段取值,选项类型字段对应选项的key
-                /// </summary>
-                public string Value { get; set; }
+public class FieldValueDomain
+{
+    /// <summary>
+    /// 字段取值,选项类型字段对应选项的key
+    /// </summary>
+    [JsonProperty("value")]
+    [JsonPropertyName("value")]
+    public string Value { get; set; }
 
-                /// <summary>
-                /// 字段展示值,选项类型字段对应选项的value
-                /// </summary>
-                public string Label { get; set; }
+    /// <summary>
+    /// 字段展示值,选项类型字段对应选项的value
+    /// </summary>
+    [JsonProperty("label")]
+    [JsonPropertyName("label")]
+    public string Label { get; set; }
 
-                /// <summary>
-                /// 第几条的明细标识,下标从0开始
-                /// </summary>
-                public int ItemIndex { get; set; }
-            }
-        }
-    }
+    /// <summary>
+    /// 第几条的明细标识,下标从0开始
+    /// </summary>
+    [JsonProperty("itemIndex")]
+    [JsonPropertyName("itemIndex")]
+    public int ItemIndex { get; set; }
 }

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/HRM/HrmRequest.cs

@@ -5,12 +5,15 @@
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
 using Admin.NET.Plugin.DingTalk.RequestProxy.HRM.DTO;
+
 using NewLife;
 
 namespace Admin.NET.Plugin.DingTalk.RequestProxy.HRM;
+
 public class HrmRequest : IScoped
 {
     private readonly IHrmRequestProxy _request;
+
     public HrmRequest(IHrmRequestProxy request)
     {
         _request = request;
@@ -53,4 +56,4 @@ public class HrmRequest : IScoped
         });
         return resStr.ToObject<RosterListsQueryResponse>();
     }
-}
+}

+ 157 - 145
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Message/DTO/SendCorpConversationRequest.cs

@@ -8,8 +8,11 @@ using Newtonsoft.Json.Converters;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Message.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Message.DTO;
 
+/// <summary>
+/// 发送工作通知
+/// </summary>
 public class SendCorpConversationRequest
 {
     /// <summary>
@@ -56,7 +59,7 @@ public class MsgDomain
     [JsonProperty("msgtype")]
     [JsonPropertyName("msgtype")]
     [Newtonsoft.Json.JsonConverter(typeof(StringEnumConverter))]
-    public MsgTypeEnum MsgType { get; set; }
+    public SendCorpConversationMsgTypeEnum MsgType { get; set; }
 
     /// <summary>
     /// 文本消息
@@ -115,7 +118,12 @@ public class MsgDomain
     public MsgActionCardDomain? ActionCard { get; set; }
 }
 
-public enum MsgTypeEnum
+/// <summary>
+/// 消息类型
+/// </summary>
+[SuppressSniffer]
+[System.Text.Json.Serialization.JsonConverter(typeof(JsonStringEnumConverter))]
+public enum SendCorpConversationMsgTypeEnum
 {
     text, image, voice, file, link, oa, markdown, action_card
 }
@@ -249,126 +257,126 @@ public class MsgOaDomain
     [JsonProperty("status_bar")]
     [JsonPropertyName("status_bar")]
     public MsgOaStatusBarDomain? StatusBar { get; set; }
+}
+
+public class MsgOaHeadDomain
+{
+    /// <summary>
+    /// 消息头部的背景颜色。长度限制为8个英文字符,其中前2为表示透明度,后6位表示颜色值。不要添加0x。
+    /// </summary>
+    [JsonProperty("bgcolor")]
+    [JsonPropertyName("bgcolor")]
+    public string BgColor { get; set; }
+
+    /// <summary>
+    /// 消息的头部标题
+    /// </summary>
+    [JsonProperty("text")]
+    [JsonPropertyName("text")]
+    public string Text { get; set; }
+}
+
+public class MsgOaStatusBarDomain
+{
+    /// <summary>
+    /// 状态栏文案
+    /// </summary>
+    [JsonProperty("status_value")]
+    [JsonPropertyName("status_value")]
+    public string StatusValue { get; set; }
+
+    /// <summary>
+    /// 状态栏背景色,默认为黑色,推荐0xFF加六位颜色值
+    /// </summary>
+    [JsonProperty("status_bg")]
+    [JsonPropertyName("status_bg")]
+    public string StatusBg { get; set; }
+}
+
+public class MsgOaBodyDomain
+{
+    /// <summary>
+    /// 消息体的标题,建议50个字符以内
+    /// </summary>
+    [JsonProperty("title")]
+    [JsonPropertyName("title")]
+    public string? Title { get; set; }
+
+    /// <summary>
+    /// 消息体的表单,最多显示6个,超过会被隐藏
+    /// </summary>
+    [JsonProperty("form")]
+    [JsonPropertyName("form")]
+    public MsgOaBodyFormDomain[]? Form { get; set; }
+
+    /// <summary>
+    /// 单行富文本信息
+    /// </summary>
+    [JsonProperty("rich")]
+    [JsonPropertyName("rich")]
+    public MsgOaBodyRichDomain? Rich { get; set; }
+
+    /// <summary>
+    /// 消息体的内容,最多显示3行
+    /// </summary>
+    [JsonProperty("content")]
+    [JsonPropertyName("content")]
+    public string? Content { get; set; }
 
-    public class MsgOaHeadDomain
-    {
-        /// <summary>
-        /// 消息头部的背景颜色。长度限制为8个英文字符,其中前2为表示透明度,后6位表示颜色值。不要添加0x。
-        /// </summary>
-        [JsonProperty("bgcolor")]
-        [JsonPropertyName("bgcolor")]
-        public string BgColor { get; set; }
-
-        /// <summary>
-        /// 消息的头部标题
-        /// </summary>
-        [JsonProperty("text")]
-        [JsonPropertyName("text")]
-        public string Text { get; set; }
-    }
-
-    public class MsgOaStatusBarDomain
-    {
-        /// <summary>
-        /// 状态栏文案
-        /// </summary>
-        [JsonProperty("status_value")]
-        [JsonPropertyName("status_value")]
-        public string StatusValue { get; set; }
-
-        /// <summary>
-        /// 状态栏背景色,默认为黑色,推荐0xFF加六位颜色值
-        /// </summary>
-        [JsonProperty("status_bg")]
-        [JsonPropertyName("status_bg")]
-        public string StatusBg { get; set; }
-    }
-
-    public class MsgOaBodyDomain
-    {
-        /// <summary>
-        /// 消息体的标题,建议50个字符以内
-        /// </summary>
-        [JsonProperty("title")]
-        [JsonPropertyName("title")]
-        public string? Title { get; set; }
-
-        /// <summary>
-        /// 消息体的表单,最多显示6个,超过会被隐藏
-        /// </summary>
-        [JsonProperty("form")]
-        [JsonPropertyName("form")]
-        public MsgOaBodyFormDomain[]? Form { get; set; }
-
-        /// <summary>
-        /// 单行富文本信息
-        /// </summary>
-        [JsonProperty("rich")]
-        [JsonPropertyName("rich")]
-        public MsgOaBodyRichDomain? Rich { get; set; }
-
-        /// <summary>
-        /// 消息体的内容,最多显示3行
-        /// </summary>
-        [JsonProperty("content")]
-        [JsonPropertyName("content")]
-        public string? Content { get; set; }
-
-        /// <summary>
-        /// 消息体中的图片,支持图片资源@mediaId。建议宽600像素 x 400像素,宽高比3 : 2
-        /// </summary>
-        [JsonProperty("image")]
-        [JsonPropertyName("image")]
-        public string? Image { get; set; }
-
-        /// <summary>
-        /// 自定义的附件数目。此数字仅供显示,钉钉不作验证
-        /// </summary>
-        [JsonProperty("file_count")]
-        [JsonPropertyName("file_count")]
-        public string? FileCount { get; set; }
-
-        /// <summary>
-        /// 自定义的作者名字
-        /// </summary>
-        [JsonProperty("author")]
-        [JsonPropertyName("author")]
-        public string? Author { get; set; }
-    }
-
-    public class MsgOaBodyRichDomain
-    {
-        /// <summary>
-        /// 单行富文本信息的数目
-        /// </summary>
-        [JsonProperty("num")]
-        [JsonPropertyName("num")]
-        public string? Num { get; set; }
-
-        /// <summary>
-        /// 单行富文本信息的单位
-        /// </summary>
-        [JsonProperty("unit")]
-        [JsonPropertyName("unit")]
-        public string? Unit { get; set; }
-    }
-
-    public class MsgOaBodyFormDomain
-    {
-        /// <summary>
-        /// 消息体的关键字
-        /// </summary>
-        [JsonProperty("key")]
-        [JsonPropertyName("key")]
-        public string? Key { get; set; }
-
-        /// <summary>
-        /// 消息体的关键字对应的值
-        /// </summary>
-        [JsonProperty("value")]
-        [JsonPropertyName("value")]
-        public string? Value { get; set; }
-    }
+    /// <summary>
+    /// 消息体中的图片,支持图片资源@mediaId。建议宽600像素 x 400像素,宽高比3 : 2
+    /// </summary>
+    [JsonProperty("image")]
+    [JsonPropertyName("image")]
+    public string? Image { get; set; }
+
+    /// <summary>
+    /// 自定义的附件数目。此数字仅供显示,钉钉不作验证
+    /// </summary>
+    [JsonProperty("file_count")]
+    [JsonPropertyName("file_count")]
+    public string? FileCount { get; set; }
+
+    /// <summary>
+    /// 自定义的作者名字
+    /// </summary>
+    [JsonProperty("author")]
+    [JsonPropertyName("author")]
+    public string? Author { get; set; }
+}
+
+public class MsgOaBodyRichDomain
+{
+    /// <summary>
+    /// 单行富文本信息的数目
+    /// </summary>
+    [JsonProperty("num")]
+    [JsonPropertyName("num")]
+    public string? Num { get; set; }
+
+    /// <summary>
+    /// 单行富文本信息的单位
+    /// </summary>
+    [JsonProperty("unit")]
+    [JsonPropertyName("unit")]
+    public string? Unit { get; set; }
+}
+
+public class MsgOaBodyFormDomain
+{
+    /// <summary>
+    /// 消息体的关键字
+    /// </summary>
+    [JsonProperty("key")]
+    [JsonPropertyName("key")]
+    public string? Key { get; set; }
+
+    /// <summary>
+    /// 消息体的关键字对应的值
+    /// </summary>
+    [JsonProperty("value")]
+    [JsonPropertyName("value")]
+    public string? Value { get; set; }
 }
 
 /// <summary>
@@ -429,13 +437,7 @@ public class MsgActionCardDomain
     /// </summary>
     [JsonProperty("btn_orientation")]
     [JsonPropertyName("btn_orientation")]
-    public BenOrientationEnum? BtnOrientation { get; set; }
-
-    public enum BenOrientationEnum
-    {
-        竖直排列,
-        横向排列
-    }
+    public ActionCardBtnOrientationEnum? BtnOrientation { get; set; }
 
     /// <summary>
     /// 使用独立跳转ActionCard样式时的按钮列表;必须与btn_orientation同时设置,且长度不超过1000字符
@@ -443,21 +445,31 @@ public class MsgActionCardDomain
     [JsonProperty("btn_json_list")]
     [JsonPropertyName("btn_json_list")]
     public MsgActionCardBtnJsonListDomain[]? BtnJsonList { get; set; }
+}
 
-    public class MsgActionCardBtnJsonListDomain
-    {
-        /// <summary>
-        /// 使用独立跳转ActionCard样式时的按钮的标题,最长20个字符
-        /// </summary>
-        [JsonProperty("title")]
-        [JsonPropertyName("title")]
-        public string Title { get; set; }
-
-        /// <summary>
-        /// 使用独立跳转ActionCard样式时的跳转链接,最长700个字符
-        /// </summary>
-        [JsonProperty("action_url")]
-        [JsonPropertyName("action_url")]
-        public string ActionUrl { get; set; }
-    }
+/// <summary>
+/// 使用独立跳转ActionCard样式时的按钮排列方式
+/// </summary>
+[SuppressSniffer]
+public enum ActionCardBtnOrientationEnum
+{
+    竖直排列 = 0,
+    横向排列 = 1
+}
+
+public class MsgActionCardBtnJsonListDomain
+{
+    /// <summary>
+    /// 使用独立跳转ActionCard样式时的按钮的标题,最长20个字符
+    /// </summary>
+    [JsonProperty("title")]
+    [JsonPropertyName("title")]
+    public string Title { get; set; }
+
+    /// <summary>
+    /// 使用独立跳转ActionCard样式时的跳转链接,最长700个字符
+    /// </summary>
+    [JsonProperty("action_url")]
+    [JsonPropertyName("action_url")]
+    public string ActionUrl { get; set; }
 }

+ 5 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Message/DTO/SendCorpConversationResponse.cs

@@ -4,12 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Message.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Message.DTO;
 
+/// <summary>
+/// 发送工作通知
+/// </summary>
 public class SendCorpConversationResponse:DingtalkResponseErrorRequestId
 {
     /// <summary>

+ 2 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Message/IMessageRequestProxy.cs

@@ -4,9 +4,9 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.Message.DTO;
+using Admin.NET.Plugin.DingTalk.RequestProxy.Message.DTO;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Message;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Message;
 
 public interface IMessageRequestProxy : IHttpDispatchProxy
 {

+ 31 - 7
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Message/MessageRequest.cs

@@ -4,13 +4,11 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.Message.DTO;
+using Admin.NET.Plugin.DingTalk.RequestProxy.Message.DTO;
 
 using NewLife;
 
-using static Admin.Net.Plugin.DingTalk.RequestProxy.Message.DTO.MsgActionCardDomain;
-
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Message;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Message;
 
 public class MessageRequest : IScoped
 {
@@ -21,6 +19,17 @@ public class MessageRequest : IScoped
         _request = request;
     }
 
+    /// <summary>
+    /// 发送工作通知 -- markdown消息
+    /// </summary>
+    /// <param name="accessToken"></param>
+    /// <param name="agentId">发送消息时使用的微应用的AgentID</param>
+    /// <param name="useridList">接收者的userid列表,最大用户列表长度100</param>
+    /// <param name="deptIdList">接收者的部门id列表,最大列表长度20。接收者是部门ID时,包括子部门下的所有用户</param>
+    /// <param name="mdTitle">首屏会话透出的展示内容</param>
+    /// <param name="mdText">markdown格式的消息,最大不超过5000字符</param>
+    /// <param name="toAllUser">是否发送给企业全部用户</param>
+    /// <returns></returns>
     public async Task<SendCorpConversationResponse> SendCorpMarkdown(string accessToken, long agentId, List<string>? useridList, List<long> deptIdList
         , string mdTitle, string mdText, bool toAllUser = false)
     {
@@ -32,7 +41,7 @@ public class MessageRequest : IScoped
             ToAllUser = toAllUser,
             Msg = new MsgDomain
             {
-                MsgType = MsgTypeEnum.markdown,
+                MsgType = SendCorpConversationMsgTypeEnum.markdown,
                 Markdown = new MsgMarkdownDomain
                 {
                     Title = mdTitle,
@@ -44,9 +53,24 @@ public class MessageRequest : IScoped
         return res;
     }
 
+    /// <summary>
+    /// 发送工作通知 -- 卡片消息
+    /// </summary>
+    /// <param name="accessToken"></param>
+    /// <param name="agentId">发送消息时使用的微应用的AgentID</param>
+    /// <param name="useridList">接收者的userid列表,最大用户列表长度100</param>
+    /// <param name="deptIdList">接收者的部门id列表,最大列表长度20。接收者是部门ID时,包括子部门下的所有用户</param>
+    /// <param name="markdown">消息内容,支持markdown,语法参考标准markdown语法。建议1000个字符以内</param>
+    /// <param name="title">透出到会话列表和通知的文案</param>
+    /// <param name="singleTitle">使用整体跳转ActionCard样式时的标题。必须与single_url同时设置,最长20个字符</param>
+    /// <param name="singleUrl">消息点击链接地址,当发送消息为小程序时支持小程序跳转链接,最长500个字符</param>
+    /// <param name="btnOrientation">使用独立跳转ActionCard样式时的按钮排列方式</param>
+    /// <param name="btnJsonList">使用独立跳转ActionCard样式时的按钮列表;必须与btn_orientation同时设置,且长度不超过1000字符</param>
+    /// <param name="toAllUser">是否发送给企业全部用户</param>
+    /// <returns></returns>
     public async Task<SendCorpConversationResponse> SendCorpActionCard(string accessToken, long agentId, List<string>? useridList, List<long>? deptIdList
         , string markdown, string? title = null, string? singleTitle = null, string? singleUrl = null
-        , BenOrientationEnum? btnOrientation = null, MsgActionCardBtnJsonListDomain[]? btnJsonList = null
+        , ActionCardBtnOrientationEnum? btnOrientation = null, MsgActionCardBtnJsonListDomain[]? btnJsonList = null
         , bool toAllUser = false)
     {
         var resStr = await _request.SendCorpConversation(accessToken, new SendCorpConversationRequest
@@ -57,7 +81,7 @@ public class MessageRequest : IScoped
             ToAllUser = toAllUser,
             Msg = new MsgDomain
             {
-                MsgType = MsgTypeEnum.action_card,
+                MsgType = SendCorpConversationMsgTypeEnum.action_card,
                 ActionCard = new MsgActionCardDomain
                 {
                     Markdown = markdown,

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/DTO/GetAccessTokenRequest.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Top.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Top.DTO;
 
+/// <summary>
+/// 获取企业内部应用的accessToken
+/// </summary>
 public class GetAccessTokenRequest
 {
     /// <summary>

+ 8 - 4
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/DTO/GetAccessTokenResponse.cs

@@ -6,17 +6,21 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Top.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Top.DTO;
 
+/// <summary>
+/// 获取企业内部应用的accessToken
+/// </summary>
 public class GetAccessTokenResponse
 {
-    /// <summary>
-    /// 生成的accessToken
-    /// </summary>
+    [JsonProperty("accessToken")]
+    [JsonPropertyName("accessToken")]
     public string AccessToken { get; set; }
 
     /// <summary>
     /// accessToken的过期时间,单位秒
     /// </summary>
+    [JsonProperty("expireIn")]
+    [JsonPropertyName("expireIn")]
     public long ExpireIn { get; set; }
 }

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/DTO/GetApiTicketResponse.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Top.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Top.DTO;
 
+/// <summary>
+/// 获取jsapiTicket
+/// </summary>
 public class GetApiTicketResponse
 {
     /// <summary>

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/DTO/GetUserInfoRequest.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Top.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Top.DTO;
 
+/// <summary>
+/// 通过免登码获取用户信息
+/// </summary>
 public class GetUserInfoRequest
 {
     /// <summary>

+ 12 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/DTO/GetUserInfoResponse.cs

@@ -4,11 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
+
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Top.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Top.DTO;
 
+/// <summary>
+/// 通过免登码获取用户信息
+/// </summary>
 public class GetUserInfoResponse : DingtalkResponseErrorResultRequestId<UserGetByCodeResponse>
 {
 }
@@ -32,6 +36,8 @@ public class UserGetByCodeResponse
     /// <summary>
     /// 是否是管理员
     /// </summary>
+    [JsonProperty("sys")]
+    [JsonPropertyName("sys")]
     public bool Sys { get; set; }
 
     /// <summary>
@@ -51,10 +57,14 @@ public class UserGetByCodeResponse
     /// <summary>
     /// 用户unionId
     /// </summary>
+    [JsonProperty("unionid")]
+    [JsonPropertyName("unionid")]
     public string Unionid { get; set; }
 
     /// <summary>
     /// 用户名字
     /// </summary>
+    [JsonProperty("name")]
+    [JsonPropertyName("name")]
     public string Name { get; set; }
 }

+ 1 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/ITopRequestProxy.cs

@@ -4,7 +4,7 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Top;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Top;
 
 public interface ITopRequestProxy : IHttpDispatchProxy
 {

+ 2 - 4
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/Top/TopRequest.cs

@@ -4,10 +4,9 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.AliTrip.DTO;
-using Admin.Net.Plugin.DingTalk.RequestProxy.Top.DTO;
+using Admin.NET.Plugin.DingTalk.RequestProxy.Top.DTO;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.Top;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.Top;
 
 public class TopRequest : IScoped
 {
@@ -59,5 +58,4 @@ public class TopRequest : IScoped
         var res = resStr.ToObject<GetApiTicketResponse>();
         return res;
     }
-
 }

+ 8 - 17
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/RoleListRequest.cs

@@ -4,22 +4,13 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using System.Text.Json.Serialization;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User.DTO;
-public  class RoleListRequest
-{
-    /// <summary>
-    /// 支持分页查询,与offset参数同时设置时才生效,此参数代表分页大小,默认值20,最大值200。
-    /// </summary>
-    [JsonProperty("size")]
-    [JsonPropertyName("size")]
-    public int Size {  get; set; }
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User.DTO;
 
-    /// <summary>
-    /// 支持分页查询,与size参数同时设置时才生效,此参数代表偏移量,偏移量从0开始。
-    /// </summary>
-    [JsonProperty("offset")]
-    [JsonPropertyName("offset")]
-    public int Offset {  get; set; }
-}
+/// <summary>
+/// 获取角色列表
+/// </summary>
+public class RoleListRequest : DingtalkRequestOffsetSize
+{
+}

+ 49 - 32
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/RoleListResponse.cs

@@ -4,12 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User.DTO;
 
+/// <summary>
+/// 获取角色列表
+/// </summary>
 public class RoleListResponse : DingtalkResponseErrorResultRequestId<RoleListResultDomain>
 {
 }
@@ -19,41 +22,55 @@ public class RoleListResultDomain
     /// <summary>
     /// 是否还有更多数据
     /// </summary>
+    [JsonProperty("hasMore")]
+    [JsonPropertyName("hasMore")]
     public bool HasMore { get; set; }
 
     /// <summary>
     /// 角色组列表
     /// </summary>
+    [JsonProperty("list")]
+    [JsonPropertyName("list")]
     public List<OpenRoleGroup> List { get; set; }
+}
+
+public class OpenRoleGroup
+{
+    /// <summary>
+    /// 角色组ID
+    /// </summary>
+    [JsonProperty("groupId")]
+    [JsonPropertyName("groupId")]
+    public long GroupId { get; set; }
+
+    /// <summary>
+    /// 角色组名称
+    /// </summary>
+    [JsonProperty("name")]
+    [JsonPropertyName("name")]
+    public string Name { get; set; }
+
+    /// <summary>
+    /// 角色列表
+    /// </summary>
+    [JsonProperty("roles")]
+    [JsonPropertyName("roles")]
+    public List<OpenRole> Roles { get; set; }
+}
 
-    public class OpenRoleGroup
-    {
-        /// <summary>
-        /// 角色组ID
-        /// </summary>
-        public long GroupId { get; set; }
-
-        /// <summary>
-        /// 角色组名称
-        /// </summary>
-        public string Name { get; set; }
-
-        /// <summary>
-        /// 角色列表
-        /// </summary>
-        public List<OpenRole> Roles { get; set; }
-
-        public class OpenRole
-        {
-            /// <summary>
-            /// 角色ID
-            /// </summary>
-            public long Id { get; set; }
-
-            /// <summary>
-            /// 角色名称
-            /// </summary>
-            public string Name { get; set; }
-        }
-    }
+public class OpenRole
+{
+    /// <summary>
+    /// 角色ID
+    /// </summary>
+    [JsonProperty("id")]
+    [JsonPropertyName("id")]
+    public long Id { get; set; }
+
+    /// <summary>
+    /// 角色名称
+    /// </summary>
+    [JsonProperty("name")]
+    [JsonPropertyName("name")]
+    public string Name { get; set; }
 }

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserDetailRequest.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User.DTO;
 
+/// <summary>
+/// 查询用户详情
+/// </summary>
 public class UserDetailRequest
 {
     /// <summary>

+ 33 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserDetailResponse.cs

@@ -4,12 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User.DTO;
 
+/// <summary>
+/// 查询用户详情
+/// </summary>
 public class UserDetailResponse : DingtalkResponseErrorResultRequestId<UserDetailResponseResultDomain>
 {
 }
@@ -19,21 +22,29 @@ public class UserDetailResponseResultDomain
     /// <summary>
     /// 员工的userId
     /// </summary>
+    [JsonProperty("userid")]
+    [JsonPropertyName("userid")]
     public string UserId { get; set; }
 
     /// <summary>
     /// 员工在当前开发者企业账号范围内的唯一标识
     /// </summary>
+    [JsonProperty("unionid")]
+    [JsonPropertyName("unionid")]
     public string Unionid { get; set; }
 
     /// <summary>
     /// 员工姓名
     /// </summary>
+    [JsonProperty("name")]
+    [JsonPropertyName("name")]
     public string Name { get; set; }
 
     /// <summary>
     /// 头像
     /// </summary>
+    [JsonProperty("avatar")]
+    [JsonPropertyName("avatar")]
     public string Avatar { get; set; }
 
     /// <summary>
@@ -53,6 +64,8 @@ public class UserDetailResponseResultDomain
     /// <summary>
     /// 手机号码
     /// </summary>
+    [JsonProperty("mobile")]
+    [JsonPropertyName("mobile")]
     public string Mobile { get; set; }
 
     /// <summary>
@@ -65,6 +78,8 @@ public class UserDetailResponseResultDomain
     /// <summary>
     /// 分机号
     /// </summary>
+    [JsonProperty("telephone")]
+    [JsonPropertyName("telephone")]
     public string Telephone { get; set; }
 
     /// <summary>
@@ -77,11 +92,15 @@ public class UserDetailResponseResultDomain
     /// <summary>
     /// 职位
     /// </summary>
+    [JsonProperty("title")]
+    [JsonPropertyName("title")]
     public string Title { get; set; }
 
     /// <summary>
     /// 员工邮箱
     /// </summary>
+    [JsonProperty("email")]
+    [JsonPropertyName("email")]
     public string Email { get; set; }
 
     /// <summary>
@@ -94,6 +113,8 @@ public class UserDetailResponseResultDomain
     /// <summary>
     /// 备注
     /// </summary>
+    [JsonProperty("remark")]
+    [JsonPropertyName("remark")]
     public string Remark { get; set; }
 
     /// <summary>
@@ -127,6 +148,8 @@ public class UserDetailResponseResultDomain
     /// <summary>
     /// 扩展属性,最大长度2000个字符
     /// </summary>
+    [JsonProperty("extension")]
+    [JsonPropertyName("extension")]
     public string Extension { get; set; }
 
     /// <summary>
@@ -139,6 +162,8 @@ public class UserDetailResponseResultDomain
     /// <summary>
     /// 是否激活了钉钉
     /// </summary>
+    [JsonProperty("active")]
+    [JsonPropertyName("active")]
     public bool Active { get; set; }
 
     /// <summary>
@@ -151,16 +176,22 @@ public class UserDetailResponseResultDomain
     /// <summary>
     /// 是否为企业的高管
     /// </summary>
+    [JsonProperty("senior")]
+    [JsonPropertyName("senior")]
     public bool Senior { get; set; }
 
     /// <summary>
     /// 是否为企业的管理员
     /// </summary>
+    [JsonProperty("admin")]
+    [JsonPropertyName("admin")]
     public bool Admin { get; set; }
 
     /// <summary>
     /// 是否为企业的老板
     /// </summary>
+    [JsonProperty("boss")]
+    [JsonPropertyName("boss")]
     public bool Boss { get; set; }
 
     /// <summary>
@@ -185,7 +216,6 @@ public class UserDetailResponseResultDomain
     public UnionEmpExtDomain UnionEmpExt { get; set; }
 }
 
-
 public class DeptOrderDomain
 {
     /// <summary>

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListIdRequest.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User.DTO;
 
+/// <summary>
+/// 获取部门用户userid列表
+/// </summary>
 public class UserListIdRequest
 {
     /// <summary>

+ 5 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListIdResponse.cs

@@ -4,12 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User.DTO;
 
+/// <summary>
+/// 获取部门用户userid列表
+/// </summary>
 public class UserListIdResponse : DingtalkResponseErrorResultRequestId<UserListIdResponseResultDomain>
 {
 }

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListRequest.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User.DTO;
 
+/// <summary>
+/// 获取部门用户详情
+/// </summary>
 public class UserListRequest
 {
     /// <summary>

+ 33 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListResponse.cs

@@ -4,12 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User.DTO;
 
+/// <summary>
+/// 获取部门用户详情
+/// </summary>
 public class UserListResponse : DingtalkResponseErrorResult<DingtalkResponseHasMoreList<UserListResponseResultDomain>>
 {
 }
@@ -19,21 +22,29 @@ public class UserListResponseResultDomain
     /// <summary>
     /// 是否激活了钉钉
     /// </summary>
+    [JsonProperty("active")]
+    [JsonPropertyName("active")]
     public bool Active { get; set; }
 
     /// <summary>
     /// 是否为企业的管理员
     /// </summary>
+    [JsonProperty("admin")]
+    [JsonPropertyName("admin")]
     public bool Admin { get; set; }
 
     /// <summary>
     /// 头像地址
     /// </summary>
+    [JsonProperty("avatar")]
+    [JsonPropertyName("avatar")]
     public string Avatar { get; set; }
 
     /// <summary>
     /// 是否为企业的老板
     /// </summary>
+    [JsonProperty("boss")]
+    [JsonPropertyName("boss")]
     public bool Boss { get; set; }
 
     /// <summary>
@@ -53,6 +64,8 @@ public class UserListResponseResultDomain
     /// <summary>
     /// 员工邮箱
     /// </summary>
+    [JsonProperty("email")]
+    [JsonPropertyName("email")]
     public string Email { get; set; }
 
     /// <summary>
@@ -65,6 +78,8 @@ public class UserListResponseResultDomain
     /// <summary>
     /// 扩展属性
     /// </summary>
+    [JsonProperty("extension")]
+    [JsonPropertyName("extension")]
     public string Extension { get; set; }
 
     /// <summary>
@@ -91,16 +106,22 @@ public class UserListResponseResultDomain
     /// <summary>
     /// 是否是部门的主管
     /// </summary>
+    [JsonProperty("leader")]
+    [JsonPropertyName("leader")]
     public bool Leader { get; set; }
 
     /// <summary>
     /// 手机号码
     /// </summary>
+    [JsonProperty("mobile")]
+    [JsonPropertyName("mobile")]
     public string Mobile { get; set; }
 
     /// <summary>
     /// 用户姓名
     /// </summary>
+    [JsonProperty("name")]
+    [JsonPropertyName("name")]
     public string Name { get; set; }
 
     /// <summary>
@@ -113,6 +134,8 @@ public class UserListResponseResultDomain
     /// <summary>
     /// 备注
     /// </summary>
+    [JsonProperty("remark")]
+    [JsonPropertyName("remark")]
     public string Remark { get; set; }
 
     /// <summary>
@@ -125,21 +148,29 @@ public class UserListResponseResultDomain
     /// <summary>
     /// 分机号
     /// </summary>
+    [JsonProperty("telephone")]
+    [JsonPropertyName("telephone")]
     public string Telephone { get; set; }
 
     /// <summary>
     /// 职位
     /// </summary>
+    [JsonProperty("title")]
+    [JsonPropertyName("title")]
     public string Title { get; set; }
 
     /// <summary>
     /// 用户在当前开发者企业账号范围内的唯一标识
     /// </summary>
+    [JsonProperty("unionid")]
+    [JsonPropertyName("unionid")]
     public string Unionid { get; set; }
 
     /// <summary>
     /// 用户的userId
     /// </summary>
+    [JsonProperty("userid")]
+    [JsonPropertyName("userid")]
     public string UserId { get; set; }
 
     /// <summary>

+ 4 - 1
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListSimpleRequest.cs

@@ -6,8 +6,11 @@
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User.DTO;
 
+/// <summary>
+/// 获取部门用户基础信息
+/// </summary>
 public class UserListSimpleRequest
 {
     /// <summary>

+ 9 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/DTO/UserListSimpleResponse.cs

@@ -4,12 +4,15 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.BaseTypes;
+using Admin.NET.Plugin.DingTalk.RequestProxy.BaseTypes;
 
 using System.Text.Json.Serialization;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User.DTO;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User.DTO;
 
+/// <summary>
+/// 获取部门用户基础信息
+/// </summary>
 public class UserListSimpleResponse : DingtalkResponseErrorResultRequestId<DingtalkResponseHasMoreList<UserListSimpleResponseDomain>>
 {
 }
@@ -19,10 +22,14 @@ public class UserListSimpleResponseDomain
     /// <summary>
     /// 用户姓名
     /// </summary>
+    [JsonProperty("name")]
+    [JsonPropertyName("name")]
     public string Name { get; set; }
 
     /// <summary>
     /// 用户的userid
     /// </summary>
+    [JsonProperty("userid")]
+    [JsonPropertyName("userid")]
     public string UserId { get; set; }
 }

+ 1 - 2
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/IUserRequestProxy.cs

@@ -4,7 +4,7 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User;
 
 public interface IUserRequestProxy : IHttpDispatchProxy
 {
@@ -20,7 +20,6 @@ public interface IUserRequestProxy : IHttpDispatchProxy
     [Post("https://oapi.dingtalk.com/topapi/v2/user/list"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))]
     Task<string> UserList([QueryString("access_token")] string accessToken, [Body] DTO.UserListRequest request);
 
-
     [Post("https://oapi.dingtalk.com/topapi/role/list"), JsonSerialization(typeof(NewtonsoftJsonSerializerProvider))]
     Task<string> RoleList([QueryString("access_token")] string accessToken, [Body] DTO.RoleListRequest request);
 }

+ 10 - 3
Admin.NET/Plugins/Admin.NET.Plugin.DingTalk/RequestProxy/User/UserRequest.cs

@@ -4,9 +4,9 @@
 //
 // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
 
-using Admin.Net.Plugin.DingTalk.RequestProxy.User.DTO;
+using Admin.NET.Plugin.DingTalk.RequestProxy.User.DTO;
 
-namespace Admin.Net.Plugin.DingTalk.RequestProxy.User;
+namespace Admin.NET.Plugin.DingTalk.RequestProxy.User;
 
 public class UserRequest : IScoped
 {
@@ -101,7 +101,14 @@ public class UserRequest : IScoped
         return res;
     }
 
-    public async Task<RoleListResponse> RoleList(string accessToken, int size=20, int offset=0)
+    /// <summary>
+    /// 获取角色列表
+    /// </summary>
+    /// <param name="accessToken"></param>
+    /// <param name="size">支持分页查询,与offset参数同时设置时才生效,此参数代表分页大小,默认值20,最大值200</param>
+    /// <param name="offset">支持分页查询,与size参数同时设置时才生效,此参数代表偏移量,偏移量从0开始</param>
+    /// <returns></returns>
+    public async Task<RoleListResponse> RoleList(string accessToken, int size = 20, int offset = 0)
     {
         var resStr = await _request.RoleList(accessToken, new RoleListRequest { Offset = offset, Size = size });
         var res = resStr.ToObject<RoleListResponse>();