diff --git a/Src/Dlhis.Basic.Api/IDingTalkApi.cs b/Src/Dlhis.Basic.Api/IDingTalkApi.cs index ca18643f..aa905a29 100644 --- a/Src/Dlhis.Basic.Api/IDingTalkApi.cs +++ b/Src/Dlhis.Basic.Api/IDingTalkApi.cs @@ -14,4 +14,7 @@ public interface IDingTalkApi [Post("/api/messages/dingtalk/workgrid/workmessage")] Task SendWorkMessageByWorkGridAsync(JinkoSendWorkMessageRequest request); + + [Post("/api/messages/dingtalk/messageurl")] + Task SendMessageUrlAsync(DingTalkMessageUrlRequest request); } \ No newline at end of file diff --git a/Src/Dlhis.Basic.Api/Requests/DingTalkMessageUrlRequest.cs b/Src/Dlhis.Basic.Api/Requests/DingTalkMessageUrlRequest.cs new file mode 100644 index 00000000..d0d093ec --- /dev/null +++ b/Src/Dlhis.Basic.Api/Requests/DingTalkMessageUrlRequest.cs @@ -0,0 +1,10 @@ +namespace Dlhis.Basic.Api.Requests; + +public class DingTalkMessageUrlRequest +{ + public string UserCode { get; set; } + public string Title { get; set; } + public string Text { get; set; } + public string PicUrl { get; set; } + public string MessageUrl { get; set; } +} diff --git a/Src/Dlhis.Basic/Common/Message/Controller/MessagesController.cs b/Src/Dlhis.Basic/Common/Message/Controller/MessagesController.cs index 14a022bf..337358c8 100644 --- a/Src/Dlhis.Basic/Common/Message/Controller/MessagesController.cs +++ b/Src/Dlhis.Basic/Common/Message/Controller/MessagesController.cs @@ -28,4 +28,10 @@ public class MessagesController : ControllerBase { await _jinkoApiService.SendWorkMessageByWorkGridAsync(request); } + + [HttpPost("dingtalk/messageurl")] + public async Task SendMessageUrlAsync(DingTalkMessageUrlRequest request) + { + await _jinkoApiService.SendMessageUrlAsync(request); + } } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Common/Message/Requests/DingTalkMessageUrlRequest.cs b/Src/Dlhis.Basic/Common/Message/Requests/DingTalkMessageUrlRequest.cs new file mode 100644 index 00000000..f597df48 --- /dev/null +++ b/Src/Dlhis.Basic/Common/Message/Requests/DingTalkMessageUrlRequest.cs @@ -0,0 +1,10 @@ +namespace Dlhis.Basic.Common.Message.Requests; + +public class DingTalkMessageUrlRequest +{ + public string UserCode { get; set; } + public string Title { get; set; } + public string Text { get; set; } + public string PicUrl { get; set; } + public string MessageUrl { get; set; } +} \ No newline at end of file diff --git a/Src/Dlhis.Basic/Common/Message/Services/IJinkoApiService.cs b/Src/Dlhis.Basic/Common/Message/Services/IJinkoApiService.cs index f04efc0a..0052c293 100644 --- a/Src/Dlhis.Basic/Common/Message/Services/IJinkoApiService.cs +++ b/Src/Dlhis.Basic/Common/Message/Services/IJinkoApiService.cs @@ -6,4 +6,6 @@ public interface IJinkoApiService : ISingletonDependency { Task SendWorkMessageAsync(DingTalkWorkMessageRequest request); Task SendWorkMessageByWorkGridAsync(DingTalkWorkMessageRequest request); + + Task SendMessageUrlAsync(DingTalkMessageUrlRequest request); } \ No newline at end of file diff --git a/Src/Dlhis.Basic/Common/Message/Services/Implements/JinkoApiService.cs b/Src/Dlhis.Basic/Common/Message/Services/Implements/JinkoApiService.cs index 4444f3b5..e6c28216 100644 --- a/Src/Dlhis.Basic/Common/Message/Services/Implements/JinkoApiService.cs +++ b/Src/Dlhis.Basic/Common/Message/Services/Implements/JinkoApiService.cs @@ -81,7 +81,7 @@ public class JinkoApiService : IJinkoApiService var jsonResponse = await response.Content.ReadAsStringAsync(); var jObject = JObject.Parse(jsonResponse); - (jObject.Value("errcode") == "0").ThrowIfFalse(jObject.Value("errmsg")); + (jObject.Value("errcode") == "0").ThrowIfFalse(jObject.Value("errmsg")); } public async Task SendWorkMessageByWorkGridAsync(DingTalkWorkMessageRequest request) @@ -114,4 +114,43 @@ public class JinkoApiService : IJinkoApiService return oaInfo.Result.Data; } + + public async Task SendMessageUrlAsync(DingTalkMessageUrlRequest request) + { + request.Title.IsEmpty().ThrowIfTrue("发送标题不能为空"); + request.Text.IsEmpty().ThrowIfTrue("发送内容不能为空"); + request.UserCode.IsEmpty().ThrowIfTrue("发送用户不能为空"); + request.MessageUrl.IsEmpty().ThrowIfTrue("消息链接不能为空"); + request.PicUrl.IsEmpty().ThrowIfTrue("图片链接不能为空"); + var token = await GetTokenAsync(); + + var users = await GetJinkoOaInfoByWorkCodes(new List { request.UserCode }); + var userIds = users.Select(x => x.Id).Join(","); + var body = new + { + agent_id = _agentId, + userid_list = userIds, + msg = new + { + msgtype = "link", + link = new + { + messageUrl = request.MessageUrl, + picUrl = request.PicUrl, + title = request.Title, + text = request.Text + } + } + }.ToJson(); + + var httpClient = _httpClientFactory.CreateClient("jinko.httpclient"); + var url = $"/topapi/message/corpconversation/asyncsend_v2?access_token={token}"; + var content = new StringContent(body, Encoding.UTF8, "application/json"); + + var response = await httpClient.PostAsync(url, content); + var jsonResponse = await response.Content.ReadAsStringAsync(); + + var jObject = JObject.Parse(jsonResponse); + (jObject.Value("errcode") == "0").ThrowIfFalse(jObject.Value("errmsg")); + } } \ No newline at end of file