DingTalkService.cs 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // Admin.NET 项目的版权、商标、专利和其他相关权利均受相应法律法规的保护。使用本项目应遵守相关法律法规和许可证的要求。
  2. //
  3. // 本项目主要遵循 MIT 许可证和 Apache 许可证(版本 2.0)进行分发和使用。许可证位于源代码树根目录中的 LICENSE-MIT 和 LICENSE-APACHE 文件。
  4. //
  5. // 不得利用本项目从事危害国家安全、扰乱社会秩序、侵犯他人合法权益等法律法规禁止的活动!任何基于本项目二次开发而产生的一切法律纠纷和责任,我们不承担任何责任!
  6. using Admin.Net.Plugin.DingTalk.RequestProxy.Top;
  7. using Admin.Net.Plugin.DingTalk.RequestProxy.Top.DTO;
  8. using Admin.NET.Plugin.DingTalk.RequestProxy.HRM;
  9. using Admin.NET.Plugin.DingTalk.RequestProxy.HRM.DTO;
  10. namespace Admin.NET.Plugin.DingTalk.Service;
  11. /// <summary>
  12. /// 钉钉服务 🧩
  13. /// </summary>
  14. [ApiDescriptionSettings(DingTalkConst.GroupName, Order = 100)]
  15. public class DingTalkService : IDynamicApiController, IScoped
  16. {
  17. private readonly IDingTalkApi _dingTalkApi;
  18. private readonly DingTalkOptions _dingTalkOptions;
  19. private readonly TopRequest _topRequest;
  20. private readonly HrmRequest _hrmRequest;
  21. public DingTalkService(IDingTalkApi dingTalkApi,
  22. IOptions<DingTalkOptions> dingTalkOptions,
  23. TopRequest topRequest,
  24. HrmRequest hrmRequest)
  25. {
  26. _dingTalkApi = dingTalkApi;
  27. _dingTalkOptions = dingTalkOptions.Value;
  28. _topRequest = topRequest;
  29. _hrmRequest = hrmRequest;
  30. }
  31. /// <summary>
  32. /// 获取企业内部应用的access_token
  33. /// </summary>
  34. /// <returns></returns>
  35. [DisplayName("获取企业内部应用的access_token")]
  36. public async Task<GetAccessTokenResponse> GetDingTalkToken()
  37. {
  38. var tokenRes = await _topRequest.GetAccessToken(_dingTalkOptions.ClientId, _dingTalkOptions.ClientSecret);
  39. return tokenRes;
  40. }
  41. /// <summary>
  42. /// 获取在职员工列表 🔖
  43. /// </summary>
  44. /// <param name="accessToken"></param>
  45. /// <param name="statusList"></param>
  46. /// <param name="size"></param>
  47. /// <param name="offset"></param>
  48. /// <returns></returns>
  49. [HttpPost, DisplayName("获取在职员工列表")]
  50. public async Task<EmployeeQueryOnJobResponse> GetDingTalkCurrentEmployeesList(string accessToken, List<string> statusList, int size, int offset)
  51. {
  52. return await _hrmRequest.EmployeeQueryOnJob(accessToken, statusList, size, offset);
  53. }
  54. /// <summary>
  55. /// 获取员工花名册字段信息 🔖
  56. /// </summary>
  57. /// <param name="accessToken"></param>
  58. /// <param name="userIdList"></param>
  59. /// <param name="fieldFilterList"></param>
  60. /// <param name="appAgentId"></param>
  61. /// <returns></returns>
  62. [HttpPost, DisplayName("获取员工花名册字段信息")]
  63. public async Task<RosterListsQueryResponse> GetDingTalkCurrentEmployeesRosterList(string accessToken, List<string> userIdList, List<string> fieldFilterList, long appAgentId)
  64. {
  65. return await _hrmRequest.RosterListsQuery(accessToken,userIdList,fieldFilterList,appAgentId);
  66. }
  67. /// <summary>
  68. /// 发送钉钉互动卡片 🔖
  69. /// </summary>
  70. /// <param name="accessToken"></param>
  71. /// <param name="input"></param>
  72. /// <returns></returns>
  73. [DisplayName("给指定用户发送钉钉互动卡片")]
  74. public async Task<DingTalkSendInteractiveCardsOutput> DingTalkSendInteractiveCards(string accessToken, DingTalkSendInteractiveCardsInput input)
  75. {
  76. return await _dingTalkApi.DingTalkSendInteractiveCards(accessToken, input);
  77. }
  78. }