refactor 优化命名和结构,注释
This commit is contained in:
@@ -0,0 +1,112 @@
|
||||
using System.Text;
|
||||
using Dlhis.Basic.Common.ApiLog.Services;
|
||||
using Dlhis.Basic.Common.Message.Requests;
|
||||
using Dlhis.Basic.Common.Message.Responses;
|
||||
using Dlhis.Entity.Common.Enums;
|
||||
using Kurisu.AspNetCore.Utils.Extensions;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Linq;
|
||||
|
||||
namespace Dlhis.Basic.Common.Message.Services.Implements;
|
||||
|
||||
public class JinkoApiService : IJinkoApiService
|
||||
{
|
||||
private readonly IHttpClientFactory _httpClientFactory;
|
||||
private readonly IServiceProvider _serviceProvider;
|
||||
private const string _agentId = "2984453842";
|
||||
private const string _appKey = "dingppvj6wvtgbagwpsw";
|
||||
private const string _appSecret = "k9mxYwilZgQiuhV_RVYRueoIAWHCQWrUdhbj6DAmiEiqMzSQE4igt0kAj97rmLaS";
|
||||
|
||||
public JinkoApiService(IHttpClientFactory httpClientFactory, IServiceProvider serviceProvider)
|
||||
{
|
||||
_httpClientFactory = httpClientFactory;
|
||||
_serviceProvider = serviceProvider;
|
||||
}
|
||||
|
||||
private async Task<string> GetTokenAsync()
|
||||
{
|
||||
var token = string.Empty;
|
||||
if (!token.IsEmpty())
|
||||
{
|
||||
return token;
|
||||
}
|
||||
|
||||
var httpClient = _httpClientFactory.CreateClient("jinko.httpclient");
|
||||
|
||||
var form = new FormUrlEncodedContent(new Dictionary<string, string>
|
||||
{
|
||||
{ "appkey", _appKey },
|
||||
{ "appsecret", _appSecret }
|
||||
});
|
||||
|
||||
//eg: appkey=dingumelppews6rah7x9&appsecret=nsWfJTVjYesHVzrLiP-t1TQqMQvC1L_kZNfXfnIyzcXK4pCTfKprkjZcxAbsDR_l
|
||||
var response = await httpClient.GetStringAsync($"/gettoken?{await form.ReadAsStringAsync()}");
|
||||
var jObj = JObject.Parse(response);
|
||||
(jObj.Value<string>("errcode") == "0").ThrowIfFalse(jObj.Value<string>("errmsg"));
|
||||
|
||||
token = jObj.Value<string>("access_token");
|
||||
|
||||
return token;
|
||||
}
|
||||
|
||||
|
||||
public async Task SendWorkMessageAsync(DingTalkWorkMessageRequest request)
|
||||
{
|
||||
request.Content.IsEmpty().ThrowIfTrue("发送内容不能为空");
|
||||
var token = await GetTokenAsync();
|
||||
|
||||
var users = await GetJinkoOaInfoByWorkCodes(request.WorkCodes);
|
||||
var userIds = users.Select(x => x.Id).Join(",");
|
||||
(userIds.Length > 100).ThrowIfTrue("超出消息接受人数,length > 100");
|
||||
|
||||
var body = new
|
||||
{
|
||||
agent_id = _agentId,
|
||||
userid_list = userIds,
|
||||
msg = new
|
||||
{
|
||||
msgtype = "text",
|
||||
text = new
|
||||
{
|
||||
content = request.Content
|
||||
}
|
||||
}
|
||||
}.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<string>("errcode") == "0").ThrowIfFalse(jObject.Value<string>("errmsg"));
|
||||
|
||||
using var scope = _serviceProvider.CreateScope();
|
||||
var ol = scope.ServiceProvider.GetService<IOperateLog>();
|
||||
await ol.LogAsync(OperateLogType.WorkGrid, $"dingtalk消息推送:{request.ToJson()}");
|
||||
}
|
||||
|
||||
|
||||
private async Task<List<JinkoOaInfo>> GetJinkoOaInfoByWorkCodes(List<string> codes)
|
||||
{
|
||||
var httpClient = _httpClientFactory.CreateClient("jinko.oa");
|
||||
|
||||
var body = new
|
||||
{
|
||||
token = "TTMlaplWIEjmJHiVShWybekyyNnJXDHD",
|
||||
type = "workCode",
|
||||
workCode = string.Join(",", codes)
|
||||
}.ToJson();
|
||||
|
||||
var content = new StringContent(body, Encoding.UTF8, "application/json");
|
||||
var response = await httpClient.PostAsync("http://oa.jinkosolar.com/api/commonRequestService/getUserByWorkCode/v2", content);
|
||||
var responseJson = await response.Content.ReadAsStringAsync();
|
||||
|
||||
var oaInfo = JsonConvert.DeserializeObject<JinkoOaResponse<JinkoData<List<JinkoOaInfo>>>>(responseJson);
|
||||
(oaInfo.Code == 200).ThrowIfFalse(oaInfo.Message);
|
||||
|
||||
return oaInfo.Result.Data;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user