diff --git a/Dlhis.Jinko.Face.sln b/Dlhis.Jinko.Face.sln
index 54d1e6b7..0cf2b39a 100644
--- a/Dlhis.Jinko.Face.sln
+++ b/Dlhis.Jinko.Face.sln
@@ -51,8 +51,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dlhis.Constants", "Src\Dlhi
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dlhis.Canteen.Api", "Src\Dlhis.Canteen.Api\Dlhis.Canteen.Api.csproj", "{7934BE46-9409-4D28-8B35-82A0F900DD01}"
EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Dlhis.Message.Api", "Src\Dlhis.Message.Api\Dlhis.Message.Api.csproj", "{78B80FBD-E7B0-4352-B7FD-B6DCE2D48AEE}"
-EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -131,10 +129,6 @@ Global
{7934BE46-9409-4D28-8B35-82A0F900DD01}.Debug|Any CPU.Build.0 = Debug|Any CPU
{7934BE46-9409-4D28-8B35-82A0F900DD01}.Release|Any CPU.ActiveCfg = Release|Any CPU
{7934BE46-9409-4D28-8B35-82A0F900DD01}.Release|Any CPU.Build.0 = Release|Any CPU
- {78B80FBD-E7B0-4352-B7FD-B6DCE2D48AEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {78B80FBD-E7B0-4352-B7FD-B6DCE2D48AEE}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {78B80FBD-E7B0-4352-B7FD-B6DCE2D48AEE}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {78B80FBD-E7B0-4352-B7FD-B6DCE2D48AEE}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -153,7 +147,6 @@ Global
{841B7B43-5394-413F-9D68-A07EBDD6D4CD} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A}
{E673CA04-3567-4E03-9A86-994F50291ACC} = {4EBCE46B-CE3A-4A47-9432-82A1854CA58A}
{7934BE46-9409-4D28-8B35-82A0F900DD01} = {3D8A98C1-83C9-4375-AEAB-4F72AFAF365B}
- {78B80FBD-E7B0-4352-B7FD-B6DCE2D48AEE} = {65E76F97-E78A-4C95-B788-4091236B1A79}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {7439494A-E2FD-4FEA-8ABF-74AE57A4A5A0}
diff --git a/Src/Dlhis.Basic.Api/Dlhis.Basic.Api.csproj b/Src/Dlhis.Basic.Api/Dlhis.Basic.Api.csproj
index 2ddebbf0..b41f2841 100644
--- a/Src/Dlhis.Basic.Api/Dlhis.Basic.Api.csproj
+++ b/Src/Dlhis.Basic.Api/Dlhis.Basic.Api.csproj
@@ -10,8 +10,4 @@
-
-
-
-
diff --git a/Src/Dlhis.Message.Api/IDingTalkApi.cs b/Src/Dlhis.Basic.Api/IDingTalkApi.cs
similarity index 75%
rename from Src/Dlhis.Message.Api/IDingTalkApi.cs
rename to Src/Dlhis.Basic.Api/IDingTalkApi.cs
index 7b7c7f17..23f0da6c 100644
--- a/Src/Dlhis.Message.Api/IDingTalkApi.cs
+++ b/Src/Dlhis.Basic.Api/IDingTalkApi.cs
@@ -1,11 +1,11 @@
-using Dlhis.Message.Api.Requests;
+using Dlhis.Basic.Api.Requests;
using Kurisu.RemoteCall.Attributes;
-namespace Dlhis.Message.Api;
+namespace Dlhis.Basic.Api;
[RequestLog]
[RequestResultHandler]
-[EnableRemoteClient(Name = "message-service", BaseUrl = "${InternalRequest:MessageRequestUrl}")]
+[EnableRemoteClient(Name = "message-service", BaseUrl = "${InternalRequest:BasicRequestUrl}")]
public interface IDingTalkApi
{
[Post("/api/messages/dingtalk/workmessage")]
diff --git a/Src/Dlhis.Message.Api/Requests/JinkoSendWorkMessageRequest.cs b/Src/Dlhis.Basic.Api/Requests/JinkoSendWorkMessageRequest.cs
similarity index 86%
rename from Src/Dlhis.Message.Api/Requests/JinkoSendWorkMessageRequest.cs
rename to Src/Dlhis.Basic.Api/Requests/JinkoSendWorkMessageRequest.cs
index 794621a5..e5d27f8a 100644
--- a/Src/Dlhis.Message.Api/Requests/JinkoSendWorkMessageRequest.cs
+++ b/Src/Dlhis.Basic.Api/Requests/JinkoSendWorkMessageRequest.cs
@@ -1,4 +1,4 @@
-namespace Dlhis.Message.Api.Requests;
+namespace Dlhis.Basic.Api.Requests;
public class JinkoSendWorkMessageRequest
{
diff --git a/Src/Dlhis.Basic/Common/Message/IJinkoApiService.cs b/Src/Dlhis.Basic/Common/Message/IJinkoApiService.cs
new file mode 100644
index 00000000..7b1f9485
--- /dev/null
+++ b/Src/Dlhis.Basic/Common/Message/IJinkoApiService.cs
@@ -0,0 +1,6 @@
+namespace Dlhis.Basic.Common.Message;
+
+public interface IJinkoApiService : ISingletonDependency
+{
+ Task SendWorkMessageAsync(JinkoSendWorkMessageRequest request);
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Common/Message/JinkoApiService.cs b/Src/Dlhis.Basic/Common/Message/JinkoApiService.cs
new file mode 100644
index 00000000..3780ad21
--- /dev/null
+++ b/Src/Dlhis.Basic/Common/Message/JinkoApiService.cs
@@ -0,0 +1,99 @@
+using System.Text;
+using Kurisu.AspNetCore.Utils.Extensions;
+using Newtonsoft.Json;
+using Newtonsoft.Json.Linq;
+
+namespace Dlhis.Basic.Common.Message;
+
+public class JinkoApiService : IJinkoApiService
+{
+ private readonly IHttpClientFactory _httpClientFactory;
+
+ public JinkoApiService(IHttpClientFactory httpClientFactory)
+ {
+ _httpClientFactory = httpClientFactory;
+ }
+
+ public async Task GetTokenAsync()
+ {
+ var token = string.Empty;
+ if (string.IsNullOrEmpty(token))
+ {
+ var httpClient = _httpClientFactory.CreateClient("jinko.httpclient");
+
+ var form = new FormUrlEncodedContent(new Dictionary
+ {
+ { "appkey", "dingumelppews6rah7x9" },
+ { "appsecret", "nsWfJTVjYesHVzrLiP-t1TQqMQvC1L_kZNfXfnIyzcXK4pCTfKprkjZcxAbsDR_l" }
+ });
+
+ //appkey=dingumelppews6rah7x9&appsecret=nsWfJTVjYesHVzrLiP-t1TQqMQvC1L_kZNfXfnIyzcXK4pCTfKprkjZcxAbsDR_l
+ var response = await httpClient.GetStringAsync($"/gettoken?{await form.ReadAsStringAsync()}");
+ var jObj = JObject.Parse(response);
+ (jObj.Value("errcode") == "0").ThrowIfFalse(jObj.Value("errmsg"));
+
+ token = jObj.Value("access_token");
+ }
+
+ return token;
+ }
+
+
+ public async Task SendWorkMessageAsync(JinkoSendWorkMessageRequest request)
+ {
+ request.Content.IsEmpty().ThrowIfTrue("发送内容不能为空");
+ var token = await GetTokenAsync();
+
+ var users = await GetJinkoOaInfoByWorkCodes(request.WorkCodes);
+ var userStringIds = string.Join(",", users.Select(x => x.Id));
+ (userStringIds.Length > 100).ThrowIfTrue("超出消息接受人数,length > 100");
+
+ var body = new
+ {
+ agent_id = "2768073678",
+ userid_list = userStringIds,
+ 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();
+
+ //_logger.LogInformation("请求参数:{Request} \r\n 钉钉请求参数:{DingTalkRequest} \r\n 钉钉响应:{DingTalkResponse}", JsonConvert.SerializeObject(request), body, jsonResponse);
+
+ var jObj = JObject.Parse(jsonResponse);
+ (jObj.Value("errcode") == "0").ThrowIfFalse(jObj.Value("errmsg"));
+ }
+
+
+ private async Task> GetJinkoOaInfoByWorkCodes(List 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>>>(responseJson);
+ (oaInfo.Code == 200).ThrowIfFalse(oaInfo.Message);
+
+ return oaInfo.Result.Data;
+ }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Common/Message/JinkoOaResponse.cs b/Src/Dlhis.Basic/Common/Message/JinkoOaResponse.cs
new file mode 100644
index 00000000..301c100f
--- /dev/null
+++ b/Src/Dlhis.Basic/Common/Message/JinkoOaResponse.cs
@@ -0,0 +1,22 @@
+namespace Dlhis.Basic.Common.Message
+{
+ public class JinkoOaResponse
+ {
+ public int Code { get; set; }
+ public string Message { get; set; }
+ public T Result { get; set; }
+ }
+
+ public class JinkoData
+ {
+ public T Data { get; set; }
+ }
+
+
+ public class JinkoOaInfo
+ {
+ public int Id { get; set; }
+ public string Email { get; set; }
+ public string Lastname { get; set; }
+ }
+}
diff --git a/Src/Dlhis.Basic/Common/Message/JinkoSendWorkMessageRequest.cs b/Src/Dlhis.Basic/Common/Message/JinkoSendWorkMessageRequest.cs
new file mode 100644
index 00000000..5353e28a
--- /dev/null
+++ b/Src/Dlhis.Basic/Common/Message/JinkoSendWorkMessageRequest.cs
@@ -0,0 +1,14 @@
+namespace Dlhis.Basic.Common.Message;
+
+public class JinkoSendWorkMessageRequest
+{
+ ///
+ /// 发送内容
+ ///
+ public string Content { get; set; }
+
+ ///
+ /// 工号
+ ///
+ public List WorkCodes { get; set; }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Common/Message/MessagesController.cs b/Src/Dlhis.Basic/Common/Message/MessagesController.cs
new file mode 100644
index 00000000..ffb95678
--- /dev/null
+++ b/Src/Dlhis.Basic/Common/Message/MessagesController.cs
@@ -0,0 +1,23 @@
+using Microsoft.AspNetCore.Mvc;
+
+namespace Dlhis.Basic.Common.Message;
+
+
+[Route("api/[controller]")]
+[ApiController]
+public class MessagesController : ControllerBase
+{
+ private readonly IJinkoApiService _jinkoApiService;
+
+ public MessagesController(IJinkoApiService jinkoApiService)
+ {
+ _jinkoApiService = jinkoApiService;
+ }
+
+
+ [HttpPost("dingtalk/workmessage")]
+ public async Task SendWorkMessageAsync(JinkoSendWorkMessageRequest request)
+ {
+ await _jinkoApiService.SendWorkMessageAsync(request);
+ }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Common/Packs/MessagePack.cs b/Src/Dlhis.Basic/Common/Packs/MessagePack.cs
new file mode 100644
index 00000000..cadf7074
--- /dev/null
+++ b/Src/Dlhis.Basic/Common/Packs/MessagePack.cs
@@ -0,0 +1,50 @@
+using Kurisu.AspNetCore.Startup;
+
+namespace Dlhis.Basic.Common.Packs;
+
+public class MessagePack : BaseAppPack
+{
+ public override void ConfigureServices(IServiceCollection services)
+ {
+ services.AddHttpClient("jinko.oa", (_, _) => { })
+ .ConfigurePrimaryHttpMessageHandler(() =>
+ {
+ var handler = new HttpClientHandler
+ {
+ ClientCertificateOptions = ClientCertificateOption.Manual,
+ ServerCertificateCustomValidationCallback = (_, _, _, _) => true
+ };
+
+ return handler;
+ });
+
+ services.AddHttpClient("jinko.httpclient", (sp, httpClient) =>
+ {
+ // "BaseUrl": "https://oapi.dingtalk.com",
+ // "AgentId": "2768073678",
+ // "AppId": "dingumelppews6rah7x9",
+ // "AppSecret": "nsWfJTVjYesHVzrLiP-t1TQqMQvC1L_kZNfXfnIyzcXK4pCTfKprkjZcxAbsDR_l",
+
+ httpClient.BaseAddress = new Uri("https://oapi.dingtalk.com");
+ httpClient.Timeout = TimeSpan.FromSeconds(30);
+ })
+ // .SetHandlerLifetime(TimeSpan.FromMinutes(5))
+ // .addd((res) =>
+ // {
+ // return HttpPolicyExtensions
+ // .HandleTransientHttpError()
+ // .OrResult(msg => msg.StatusCode != HttpStatusCode.OK)
+ // .WaitAndRetryAsync(6, retryAttempt => TimeSpan.FromSeconds(Math.Pow(2, retryAttempt)));
+ // })
+ .ConfigurePrimaryHttpMessageHandler(() =>
+ {
+ var handler = new HttpClientHandler
+ {
+ ClientCertificateOptions = ClientCertificateOption.Manual,
+ ServerCertificateCustomValidationCallback = (_, _, _, _) => true
+ };
+
+ return handler;
+ });
+ }
+}
\ No newline at end of file
diff --git a/Src/Dlhis.Basic/Dlhis.Basic.csproj b/Src/Dlhis.Basic/Dlhis.Basic.csproj
index 2878e80d..111e5c03 100644
--- a/Src/Dlhis.Basic/Dlhis.Basic.csproj
+++ b/Src/Dlhis.Basic/Dlhis.Basic.csproj
@@ -31,12 +31,10 @@
-
-
diff --git a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs
index d42a9cf8..7a129f97 100644
--- a/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs
+++ b/Src/Dlhis.Basic/Organization/Services/Implements/GainfoUpdateService.cs
@@ -1,12 +1,11 @@
-using Dlhis.Basic.Organization.Comparers;
+using Dlhis.Basic.Common.Message;
+using Dlhis.Basic.Organization.Comparers;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Basic.Enums;
using Dlhis.Entity.Device.Enums;
using Dlhis.Entity.Sys.Entities;
using Dlhis.Entity.Sys.Enums;
using Dlhis.Jip.Api.Dto;
-using Dlhis.Message.Api;
-using Dlhis.Message.Api.Requests;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Kurisu.AspNetCore.Utils.Extensions;
@@ -18,14 +17,14 @@ public class GainfoUpdateService : IGainfoUpdateService
private readonly ILogger _logger;
private readonly IJinkoSapService _jinkoSapService;
private readonly IGainfoPermissionService _gainfoPermissionService;
- private readonly IDingTalkApi _dingTalkApi;
+ private readonly IJinkoApiService _dingTalkApi;
private readonly IIdentityUserSyncService _identityUserSyncService;
public GainfoUpdateService(IDbContext dbContext,
ILogger logger,
IJinkoSapService jinkoSapService,
IGainfoPermissionService gainfoPermissionService,
- IDingTalkApi dingTalkApi,
+ IJinkoApiService dingTalkApi,
IIdentityUserSyncService identityUserSyncService)
{
_dbContext = dbContext;
diff --git a/Src/Dlhis.Message.Api/Dlhis.Message.Api.csproj b/Src/Dlhis.Message.Api/Dlhis.Message.Api.csproj
deleted file mode 100644
index 4100a696..00000000
--- a/Src/Dlhis.Message.Api/Dlhis.Message.Api.csproj
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
- net6.0
- enable
- enable
-
-
-
-
-
-
-
diff --git a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs
index 39c9c5ef..7701d6a1 100644
--- a/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs
+++ b/Src/Dlhis.ScheduledTask/DeviceUploadLog/Services/Implements/DeviceUploadLogService.cs
@@ -1,12 +1,12 @@
-using Dlhis.Constants;
+using Dlhis.Basic.Api;
+using Dlhis.Basic.Api.Requests;
+using Dlhis.Constants;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Entity.Basic.Enums;
using Dlhis.Entity.Device.Entities;
using Dlhis.Entity.Device.Enums;
using Dlhis.Jip.Api;
using Dlhis.Jip.Api.Requests;
-using Dlhis.Message.Api;
-using Dlhis.Message.Api.Requests;
using Dlhis.ScheduledTask.DeviceUploadLog.Request;
using Dlhis.ScheduledTask.DeviceUploadLog.Response;
using Kurisu.AspNetCore.Authentication.Abstractions;
diff --git a/Src/Dlhis.ScheduledTask/Dlhis.ScheduledTask.csproj b/Src/Dlhis.ScheduledTask/Dlhis.ScheduledTask.csproj
index c49399a6..43855326 100644
--- a/Src/Dlhis.ScheduledTask/Dlhis.ScheduledTask.csproj
+++ b/Src/Dlhis.ScheduledTask/Dlhis.ScheduledTask.csproj
@@ -32,7 +32,6 @@
-
diff --git a/Src/Dlhis.ScheduledTask/Properties/launchSettings.json b/Src/Dlhis.ScheduledTask/Properties/launchSettings.json
index 685ccdf7..519808b2 100644
--- a/Src/Dlhis.ScheduledTask/Properties/launchSettings.json
+++ b/Src/Dlhis.ScheduledTask/Properties/launchSettings.json
@@ -2,7 +2,6 @@
"profiles": {
"Dlhis.ScheduledTask": {
"commandName": "Project",
- "launchBrowser": false,
"launchUrl": "swagger/index.html",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"