Files
jinko.yikatong/Src/Dlhis.Basic/Organization/Services/Implements/JinkoSapService.cs
2026-05-12 14:44:35 +08:00

165 lines
5.4 KiB
C#

using System.Net;
using System.Text;
using Dlhis.Entity.Basic.Entity;
using Dlhis.Jip.Api.ClientHandlers;
using Dlhis.Jip.Api.Dto;
using Dlhis.Jip.Api.Responses;
using Kurisu.AspNetCore.DataAccess.SqlSugar.Services;
using Newtonsoft.Json;
namespace Dlhis.Basic.Organization.Services.Implements;
public class JinkoSapService : IJinkoSapService
{
private readonly IDbContext _dbContext;
private readonly IServiceProvider _serviceProvider;
private readonly ILogger<JinkoSapService> _logger;
private readonly IHttpClientFactory _httpClientFactory;
public JinkoSapService(IHttpClientFactory httpClientFactory,
IDbContext dbContext,
IServiceProvider serviceProvider,
ILogger<JinkoSapService> logger)
{
_dbContext = dbContext;
_serviceProvider = serviceProvider;
_logger = logger;
_httpClientFactory = httpClientFactory;
}
private async Task<HttpClient> GetHttpClientAsync()
{
var token = await new JipTokenHandler().GetTokenAsync(_serviceProvider);
var httpClient = _httpClientFactory.CreateClient();
httpClient.BaseAddress = new Uri("http://jip.jinkosolar.com");
httpClient.Timeout = TimeSpan.FromMinutes(30);
httpClient.DefaultRequestHeaders.Add("Authorization", token);
return httpClient;
}
public async Task<SapOrganizationResponse> GetSapOrganizationsAsync()
{
//const string apiUrl = "/RESTAdapter/Rest/EHR_ORGANIZATION/";
var httpClient = await GetHttpClientAsync();
var response = await httpClient.PostAsync("/JIP/HCM/HCM_SYN_01", 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()
{
//const string apiUrl = "/RESTAdapter/Rest/EHR_POSITION/";
var httpClient = await GetHttpClientAsync();
var response = await httpClient.PostAsync("/JIP/HCM/HCM_SYN_02", 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> GetPersonsByWerkAsync(string werk)
{
//const string apiUrl = "/RESTAdapter/Rest/EHR_PERSONNEL/";
var httpClient = await GetHttpClientAsync();
var werkInfo = await _dbContext.Queryable<WerkEntity>()
.Where(x => x.Enable)
.Where(x => x.Werk == werk)
.SingleAsync();
var body = new
{
//I_ALLINFO = "X",
//I_DATE = DateTime.Today.ToString("yyyy-MM-dd"),//开始日期
T_WERKS = new
{
item = new List<object>
{
new
{
WERKS = werkInfo.Werk
}
}
},
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("/JIP/HCM/HCM_SYN_03_IAM", content);
if (response.StatusCode != HttpStatusCode.OK)
{
_logger.LogError("获取{Werk}人事范围数据异常:{error}", werk, await response.Content.ReadAsStringAsync());
response.EnsureSuccessStatusCode();
}
var jsonResponse = await response.Content.ReadAsStringAsync();
var personResp = JsonConvert.DeserializeObject<SapPersonResponse>(jsonResponse);
List<SapPersonItem> persons = new();
if (personResp?.Persons?.Any() == true)
{
persons.AddRange(personResp.Persons);
}
return new SapPersonResponse()
{
Persons = persons
};
}
public async Task<SapPersonResponse> GetPersonsByCodeAsync(string code)
{
//const string apiUrl = "/RESTAdapter/Rest/EHR_PERSONNEL/";
var httpClient = await GetHttpClientAsync();
var body = new
{
//I_ALLINFO = "X",
T_WERKS = Array.Empty<string>(),
T_PERSON = Array.Empty<string>(),
T_PNO = new
{
item = new List<object>
{
new
{
ZWORKCODE = code
}
}
},
};
var content = new StringContent(JsonConvert.SerializeObject(body), Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("/JIP/HCM/HCM_SYN_03_IAM", content);
response.EnsureSuccessStatusCode();
var jsonResponse = await response.Content.ReadAsStringAsync();
var personResp = JsonConvert.DeserializeObject<SapPersonResponse>(jsonResponse);
List<SapPersonItem> persons = new();
if (personResp?.Persons?.Any() == true)
{
persons.AddRange(personResp.Persons);
}
return new SapPersonResponse
{
Persons = persons
};
}
}