8 changed files with 361 additions and 1 deletions
-
2ThirdPlugIns/Shentun.Peis.PlugIns.Gem/test/Shentun.Peis.PlugIns.Gem.Test/ChargeRequestPlugInsGemTest.cs
-
15src/Shentun.ColumnReferencePlugIns/WebAppointPatientRegisterInput.cs
-
41src/Shentun.ColumnReferencePlugIns/WebAppointPlugInsBase.cs
-
213src/Shentun.ColumnReferencePlugIns/WebAppointWebPeisPlugIns.cs
-
15src/Shentun.Peis.Application.Contracts/AppointPatientRegisters/AppointPatientRegisterPlugInsInputDto.cs
-
13src/Shentun.Peis.Application.Contracts/WebApiOutDtoExter.cs
-
27src/Shentun.Peis.Application/ChargeRequests/ChargeRequestAppService.cs
-
36test/Shentun.Peis.ColumnReference.Tests/WebAppointWebPeisPlugInsTest.cs
@ -0,0 +1,15 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Text; |
|||
|
|||
namespace Shentun.Peis.PlugIns |
|||
{ |
|||
public class WebAppointPatientRegisterInput |
|||
{ |
|||
public Guid MedicalCenterId { get; set; } |
|||
public string IdNo { get; set; } |
|||
public string MobilePhone { get; set; } |
|||
public DateTime? AppointStartDate { get; set; } |
|||
public DateTime? AppointStopDate { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
using Microsoft.Extensions.Configuration; |
|||
using Npgsql; |
|||
using Shentun.Peis.AppointPatientRegisters; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Data.Common; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Shentun.Peis.PlugIns |
|||
{ |
|||
public class WebAppointPlugInsBase : ThirdPlugInsBase |
|||
{ |
|||
public WebAppointPlugInsBase(Guid thirdInterfaceId) : base(thirdInterfaceId) |
|||
{ |
|||
|
|||
} |
|||
|
|||
public virtual async Task<List<AppointPatientRegisterDto>> GetListByFilterAsync(AppointPatientRegisterPlugInsInputDto input) |
|||
{ |
|||
//_thirdInterfaceRepository
|
|||
return new List<AppointPatientRegisterDto>(); |
|||
|
|||
} |
|||
|
|||
public Guid GetMedicalCenterId() |
|||
{ |
|||
var configurationBuilder = new ConfigurationBuilder() |
|||
.AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(_thirdInterfaceDto.ParmValue))); |
|||
InterfaceConfig = configurationBuilder.Build(); |
|||
|
|||
var medicalCenterIdStr = InterfaceConfig.GetSection("Interface").GetSection("MedicalCenterId").Value; |
|||
if(!Guid.TryParse(medicalCenterIdStr ,out var medicalCenterId)) |
|||
{ |
|||
throw new Exception("体检中心ID格式不正确"); |
|||
} |
|||
return medicalCenterId; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,213 @@ |
|||
using Azure.Core; |
|||
using Microsoft.Extensions.Configuration; |
|||
using Newtonsoft.Json; |
|||
using Newtonsoft.Json.Converters; |
|||
using Newtonsoft.Json.Linq; |
|||
using Shentun.Peis.AppointPatientRegisters; |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.IdentityModel.Tokens.Jwt; |
|||
using System.Linq; |
|||
using System.Net.Http.Headers; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Shentun.Peis.PlugIns |
|||
{ |
|||
public class WebAppointWebPeisPlugIns : WebAppointPlugInsBase |
|||
{ |
|||
private string _webPeisUser; |
|||
private string _webPeisPassword; |
|||
private string _webPeisBaseAddress; |
|||
private string _webPeisToken; |
|||
private string _webPeisGetListByFilterUrl; |
|||
public WebAppointWebPeisPlugIns(Guid thirdInterfaceId) : base(thirdInterfaceId) |
|||
{ |
|||
var configurationBuilder = new ConfigurationBuilder() |
|||
.AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(_thirdInterfaceDto.ParmValue))); |
|||
InterfaceConfig = configurationBuilder.Build(); |
|||
|
|||
_webPeisUser = InterfaceConfig.GetSection("Interface").GetSection("User").Value; |
|||
_webPeisPassword = InterfaceConfig.GetSection("Interface").GetSection("Password").Value; |
|||
_webPeisGetListByFilterUrl = InterfaceConfig.GetSection("Interface").GetSection("GetListByFilterUrl").Value; |
|||
} |
|||
|
|||
public override async Task<List<AppointPatientRegisterDto>> GetListByFilterAsync(AppointPatientRegisterPlugInsInputDto input) |
|||
{ |
|||
var medicalCenterId = GetMedicalCenterId(); |
|||
var webAppointPatientRegisterInput = new WebAppointPatientRegisterInput() |
|||
{ |
|||
MedicalCenterId = medicalCenterId, |
|||
IdNo = input.IdNo, |
|||
MobilePhone = input.MobilePhone, |
|||
AppointStartDate = input.AppointStartDate, |
|||
AppointStopDate = input.AppointStopDate, |
|||
}; |
|||
var appointPatientRegisterDtos = await CallWePeisAppServiceAsync<WebAppointPatientRegisterInput, List<AppointPatientRegisterDto>>(_webPeisGetListByFilterUrl, |
|||
webAppointPatientRegisterInput); |
|||
return appointPatientRegisterDtos; |
|||
|
|||
} |
|||
public async virtual Task<LoginOutDto> LoginWebPeisAsync() |
|||
{ |
|||
if (string.IsNullOrWhiteSpace(_webPeisUser)) |
|||
{ |
|||
throw new Exception("WebPeisUser不能为空"); |
|||
} |
|||
if (string.IsNullOrWhiteSpace(_webPeisPassword)) |
|||
{ |
|||
throw new Exception("WebPeisPassword不能为空"); |
|||
} |
|||
var relult = await LoginAsync(_webPeisUser, _webPeisPassword); |
|||
return relult; |
|||
} |
|||
|
|||
public async Task<LoginOutDto> LoginWebPeisAsync(string userId, string password) |
|||
{ |
|||
if (string.IsNullOrWhiteSpace(userId)) |
|||
{ |
|||
throw new Exception("用户ID不能为空"); |
|||
} |
|||
if (string.IsNullOrWhiteSpace(password)) |
|||
{ |
|||
throw new Exception("密码不能为空"); |
|||
} |
|||
using (var httpClientHandler = new HttpClientHandler()) |
|||
{ |
|||
using (var httpClient = new HttpClient(httpClientHandler)) |
|||
{ |
|||
httpClient.BaseAddress = new Uri(_webPeisBaseAddress); |
|||
|
|||
httpClient.DefaultRequestHeaders.Accept.Add( |
|||
new MediaTypeWithQualityHeaderValue("application/json"));//设置accept标头,告诉JSON是可接受的响应类型
|
|||
var url = "api/identity/users/login"; |
|||
var loginUser = new LoginInputDto() |
|||
{ |
|||
UserName = userId, |
|||
Password = password |
|||
}; |
|||
var sendData = JsonConvert.SerializeObject(loginUser); |
|||
using (HttpContent httpContent = new StringContent(sendData)) |
|||
{ |
|||
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); |
|||
HttpResponseMessage response = await httpClient.PostAsync(url, httpContent); |
|||
string result; |
|||
if (!response.IsSuccessStatusCode) |
|||
{ |
|||
result = response.Content.ReadAsStringAsync().Result; |
|||
throw new Exception("http通信错误:" + response.StatusCode + ",结果:" + result); |
|||
} |
|||
result = await response.Content.ReadAsStringAsync(); |
|||
var restultDto = JsonConvert.DeserializeObject<LoginOutDto>(result); |
|||
if (restultDto == null) |
|||
{ |
|||
throw new Exception("返回结果是空"); |
|||
} |
|||
if (restultDto.Code != "1") |
|||
{ |
|||
throw new Exception($"登录失败{restultDto.Message}"); |
|||
} |
|||
_webPeisToken = restultDto.Data.access_token; |
|||
return restultDto; |
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
public async Task<TOut> CallWePeisAppServiceAsync<TInput, TOut>(string url, TInput data, string method = "post") |
|||
{ |
|||
if (string.IsNullOrWhiteSpace(_webPeisBaseAddress)) |
|||
{ |
|||
throw new Exception("_webPeisBaseAddress不能为空"); |
|||
} |
|||
string baseAddress = _webPeisBaseAddress; |
|||
await CheckWebPeisLoginAsync(); |
|||
using (var httpClientHandler = new HttpClientHandler()) |
|||
{ |
|||
using (var httpClient = new HttpClient(httpClientHandler)) |
|||
{ |
|||
httpClient.BaseAddress = new Uri(baseAddress); |
|||
|
|||
httpClient.DefaultRequestHeaders.Accept.Add( |
|||
new MediaTypeWithQualityHeaderValue("application/json"));//设置accept标头,告诉JSON是可接受的响应类型
|
|||
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _webPeisToken); |
|||
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter(); |
|||
timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss"; |
|||
var sendData = JsonConvert.SerializeObject(data, Newtonsoft.Json.Formatting.Indented, timeFormat); |
|||
using (HttpContent httpContent = new StringContent(sendData)) |
|||
{ |
|||
httpContent.Headers.ContentType = new MediaTypeHeaderValue("application/json"); |
|||
HttpResponseMessage response = null; |
|||
if (method == "post") |
|||
{ |
|||
response = await httpClient.PostAsync(url, httpContent); |
|||
} |
|||
else |
|||
{ |
|||
response = await httpClient.GetAsync(url); |
|||
} |
|||
|
|||
string result; |
|||
if (!response.IsSuccessStatusCode) |
|||
{ |
|||
result = response.Content.ReadAsStringAsync().Result; |
|||
throw new Exception("http通信错误:" + response.StatusCode + ",结果:" + result); |
|||
} |
|||
result = await response.Content.ReadAsStringAsync(); |
|||
|
|||
var resultDto = JsonConvert.DeserializeObject<WebApiOutDtoExter<TOut>>(result); |
|||
if (resultDto != null) |
|||
{ |
|||
if (resultDto.Code == -1) |
|||
{ |
|||
throw new Exception($"调用WebApi失败,返回-1,消息:" + resultDto.Message); |
|||
} |
|||
|
|||
return resultDto.Data; |
|||
} |
|||
return resultDto.Data; |
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
|||
|
|||
private async Task CheckWebPeisLoginAsync() |
|||
{ |
|||
if (string.IsNullOrWhiteSpace(_webPeisToken)) |
|||
{ |
|||
await LoginWebPeisAsync(); |
|||
} |
|||
else |
|||
{ |
|||
var handler = new JwtSecurityTokenHandler(); |
|||
var payload = handler.ReadJwtToken(_webPeisToken).Payload; |
|||
var claims = payload.Claims; |
|||
var exp = claims.First(claim => claim.Type == "exp").Value; |
|||
if (exp == null) |
|||
{ |
|||
await LoginWebPeisAsync(); |
|||
} |
|||
else |
|||
{ |
|||
if (long.TryParse(exp, out var expires)) |
|||
{ |
|||
var expireTime = DateTimeOffset.FromUnixTimeSeconds(expires).LocalDateTime; |
|||
if (expireTime <= DateTime.Now) |
|||
{ |
|||
await LoginAsync(); |
|||
} |
|||
} |
|||
else |
|||
{ |
|||
await LoginAsync(); |
|||
} |
|||
|
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,15 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Text; |
|||
|
|||
namespace Shentun.Peis.AppointPatientRegisters |
|||
{ |
|||
public class AppointPatientRegisterPlugInsInputDto |
|||
{ |
|||
public string IdNo { get; set; } |
|||
public string MobilePhone { get; set; } |
|||
|
|||
public DateTime? AppointStartDate { get; set; } |
|||
public DateTime? AppointStopDate { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,13 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Text; |
|||
|
|||
namespace Shentun.Peis |
|||
{ |
|||
public class WebApiOutDtoExter<T> |
|||
{ |
|||
public int Code { get; set; } |
|||
public string Message { get; set; } |
|||
public T? Data { get; set; } |
|||
} |
|||
} |
|||
@ -0,0 +1,36 @@ |
|||
using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
using System.Text; |
|||
using System.Threading.Tasks; |
|||
using Xunit.Abstractions; |
|||
|
|||
namespace Shentun.Peis.PlugIns.Tests |
|||
{ |
|||
public class WebAppointWebPeisPlugInsTest |
|||
{ |
|||
private readonly ITestOutputHelper _output; |
|||
public WebAppointWebPeisPlugInsTest(ITestOutputHelper testOutputHelper) |
|||
{ |
|||
_output = testOutputHelper; |
|||
|
|||
} |
|||
|
|||
[Fact] |
|||
public async Task GetListByFilterAsync() |
|||
{ |
|||
|
|||
var plugIns = new WebAppointWebPeisPlugIns(new Guid("43a9c3a5-8741-4c64-b869-bc304712d88e")); |
|||
var items = await plugIns.GetListByFilterAsync(new AppointPatientRegisters.AppointPatientRegisterPlugInsInputDto() |
|||
{ |
|||
MobilePhone = "18911254911", |
|||
AppointStartDate = DateTime.Now.Date.AddDays(-10) |
|||
}); |
|||
foreach (var item in items) |
|||
{ |
|||
_output.WriteLine(item.PersonName); |
|||
} |
|||
|
|||
} |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue