Files
jinko.yikatong/Src/Dlhis.ScheduledTask/SyncSapInfo/Services/Implements/JinkoSapService.cs
2024-01-16 18:59:28 +08:00

105 lines
3.5 KiB
C#

using System.Text;
using Dlhis.ScheduledTask.SyncSapInfo.Dto;
using Dlhis.ScheduledTask.SyncSapInfo.Response;
using Dlhis.User.Api;
using Newtonsoft.Json;
namespace Dlhis.ScheduledTask.SyncSapInfo.Services.Implements;
public class JinkoSapService : IJinkoSapService
{
private readonly HttpClient _httpClient;
private readonly ILogger<JinkoSapService> _logger;
private readonly ITenantApi _tenantApi;
public JinkoSapService(IHttpClientFactory httpClientFactory, ILogger<JinkoSapService> logger, ITenantApi tenantApi)
{
_httpClient = httpClientFactory.CreateClient("jinko:sap");
_logger = logger;
_tenantApi = tenantApi;
}
public async Task<SapOrganizationResponse> GetSapOrganizationsAsync()
{
string apiUrl = "http://sappidap.jinkosolar.cn:51000/RESTAdapter/Rest/EHR_ORGANIZATION/";
var response = await _httpClient.PostAsync(apiUrl, new StringContent("{}", Encoding.UTF8, "application/json"));
response.EnsureSuccessStatusCode();
string responseJson = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<SapOrganizationResponse>(responseJson);
return result;
}
public async Task<SapPositionResponse> GetPositionsAsync()
{
string apiUrl = "http://sappidap.jinkosolar.cn:51000/RESTAdapter/Rest/EHR_POSITION/";
var response = await _httpClient.PostAsync(apiUrl, new StringContent("{}", Encoding.UTF8, "application/json"));
response.EnsureSuccessStatusCode();
string responseJson = await response.Content.ReadAsStringAsync();
var result = JsonConvert.DeserializeObject<SapPositionResponse>(responseJson);
return result;
}
public async Task<SapPersonResponse> GetPersonsAsync()
{
var apiUrl = "http://sappipap01.jinkosolar.cn:50100/RESTAdapter/Rest/EHR_PERSONNEL/";
var tenantResult = await _tenantApi.GetTenantsInternalAsync();
var tenants = tenantResult.Data;
List<SapPersonItem> persons = new();
foreach (var item in tenants)
{
try
{
var body = new
{
T_WERKS = new
{
item = new List<object>
{
new
{
WERKS = item.Code
}
}
},
T_PERSON = Array.Empty<string>(),
T_PNO = Array.Empty<string>(),
};
var content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json");
var response = await _httpClient.PostAsync(apiUrl, content);
response.EnsureSuccessStatusCode();
var jsonResponse = await response.Content.ReadAsStringAsync();
var personResp = JsonConvert.DeserializeObject<SapPersonResponse>(jsonResponse);
if (personResp?.Person?.Items?.Any() == true)
{
persons.AddRange(personResp.Person.Items);
}
}
catch (Exception ex)
{
_logger.LogError(ex, "获取人事范围{werk}失败:" + ex.Message, item);
}
}
return new SapPersonResponse()
{
Person = new SapPerson
{
Items = persons
},
};
}
}