DingTalkService.cs 4.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  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.HRM;
  8. using Admin.NET.Plugin.DingTalk.RequestProxy.HRM.DTO;
  9. using Admin.NET.Core.Service;
  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 SysCacheService _sysCacheService;
  20. private readonly TopRequest _topRequest;
  21. private readonly HrmRequest _hrmRequest;
  22. private readonly string _accessTokenKey;
  23. public DingTalkService(IDingTalkApi dingTalkApi,
  24. IOptions<DingTalkOptions> dingTalkOptions,
  25. TopRequest topRequest,
  26. HrmRequest hrmRequest,
  27. SysCacheService sysCacheService)
  28. {
  29. _dingTalkApi = dingTalkApi;
  30. _dingTalkOptions = dingTalkOptions.Value;
  31. _sysCacheService = sysCacheService;
  32. _topRequest = topRequest;
  33. _hrmRequest = hrmRequest;
  34. _accessTokenKey = DingTalkConst.AccessTokenKeyPrefix + _dingTalkOptions.ClientId;
  35. }
  36. /// <summary>
  37. /// 获取企业内部应用的access_token
  38. /// </summary>
  39. /// <returns></returns>
  40. [HttpGet,DisplayName("获取企业内部应用的access_token")]
  41. public async Task<string> GetDingTalkToken()
  42. {
  43. var token = _sysCacheService.Get<string>(_accessTokenKey);
  44. if (token != null) return token;
  45. var tokenRes = await _topRequest.GetAccessToken(_dingTalkOptions.ClientId, _dingTalkOptions.ClientSecret);
  46. _sysCacheService.Set(_accessTokenKey, tokenRes.AccessToken, TimeSpan.FromSeconds(tokenRes.ExpireIn));
  47. return tokenRes.AccessToken;
  48. }
  49. /// <summary>
  50. /// 获取在职员工列表 🔖
  51. /// </summary>
  52. /// <param name="accessToken"></param>
  53. /// <param name="statusList"></param>
  54. /// <param name="size"></param>
  55. /// <param name="offset"></param>
  56. /// <returns></returns>
  57. [HttpPost, DisplayName("获取在职员工列表")]
  58. public async Task<EmployeeQueryOnJobResponse> GetDingTalkCurrentEmployeesList(string accessToken, List<string> statusList, int size, int offset)
  59. {
  60. return await _hrmRequest.EmployeeQueryOnJob(accessToken, statusList, size, offset);
  61. }
  62. /// <summary>
  63. /// 获取员工花名册字段信息 🔖
  64. /// </summary>
  65. /// <param name="accessToken"></param>
  66. /// <param name="userIdList"></param>
  67. /// <param name="fieldFilterList"></param>
  68. /// <param name="appAgentId"></param>
  69. /// <returns></returns>
  70. [HttpPost, DisplayName("获取员工花名册字段信息")]
  71. public async Task<RosterListsQueryResponse> GetDingTalkCurrentEmployeesRosterList(string accessToken, List<string> userIdList, List<string> fieldFilterList, long appAgentId)
  72. {
  73. return await _hrmRequest.RosterListsQuery(accessToken, userIdList, fieldFilterList, appAgentId);
  74. }
  75. /// <summary>
  76. /// 发送钉钉互动卡片 🔖
  77. /// </summary>
  78. /// <param name="accessToken"></param>
  79. /// <param name="input"></param>
  80. /// <returns></returns>
  81. [DisplayName("给指定用户发送钉钉互动卡片")]
  82. public async Task<DingTalkSendInteractiveCardsOutput> DingTalkSendInteractiveCards(string accessToken, DingTalkSendInteractiveCardsInput input)
  83. {
  84. return await _dingTalkApi.DingTalkSendInteractiveCards(accessToken, input);
  85. }
  86. }