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 _logger; private readonly ITenantApi _tenantApi; public JinkoSapService(IHttpClientFactory httpClientFactory, ILogger logger, ITenantApi tenantApi) { _httpClient = httpClientFactory.CreateClient("jinko:sap"); _logger = logger; _tenantApi = tenantApi; } public async Task 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(responseJson); return result; } public async Task 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(responseJson); return result; } public async Task GetPersonsAsync() { var apiUrl = "http://sappipap01.jinkosolar.cn:50100/RESTAdapter/Rest/EHR_PERSONNEL/"; var tenantResult = await _tenantApi.GetTenantsInternalAsync(); var tenants = tenantResult.Data; List persons = new(); foreach (var item in tenants) { try { var body = new { T_WERKS = new { item = new List { new { WERKS = item.Code } } }, T_PERSON = Array.Empty(), T_PNO = Array.Empty(), }; 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(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 }, }; } }