Browse Source

0813

master
wxd 1 year ago
parent
commit
8342f0935e
  1. 222
      Shentun.WebPeis.Plugins/AppQueueRegisterPlugIns.cs
  2. 61
      src/Shentun.WebPeis.Application.Contracts/QueueRegisters/GetAppQueueRegisterByPersonIdDto.cs
  3. 14
      src/Shentun.WebPeis.Application.Contracts/QueueRegisters/IdNoInputDto.cs
  4. 52
      src/Shentun.WebPeis.Application/QueueRegisters/QueueRegisterAppService.cs
  5. 1
      src/Shentun.WebPeis.Application/Shentun.WebPeis.Application.csproj
  6. 2
      src/Shentun.WebPeis.HttpApi.Host/Shentun.WebPeis.HttpApi.Host.csproj
  7. 6
      src/Shentun.WebPeis.HttpApi.Host/appsettings.json

222
Shentun.WebPeis.Plugins/AppQueueRegisterPlugIns.cs

@ -0,0 +1,222 @@
using Azure.Core;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
using Microsoft.Identity.Client;
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Shentun.Utilities;
using Shentun.WebPeis.PatientRegisters;
using Shentun.WebPeis.PlugIns;
using Shentun.WebPeis.QueueRegisters;
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.WebPeis.Plugins
{
public class AppQueueRegisterPlugIns
{
protected IConfiguration? AppConfig;
private string? _appBaseAddress;
private static string? _accesToken;
private string? _appUser;
private string? _appPassword;
private string? _appQueueRegisterUrl;
public AppQueueRegisterPlugIns()
{
Init();
}
public void Init()
{
AppConfig = new ConfigurationBuilder()
.SetBasePath(DirectoryHelper.GetAppDirectory()) // 设置基础路径为当前目录
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.Build();
_appBaseAddress = AppConfig.GetSection("Peis")
.GetSection("PeisBaseUrl").Value;
_appUser = AppConfig.GetSection("Peis")
.GetSection("AppUser").Value;
_appPassword = AppConfig.GetSection("Peis")
.GetSection("AppPassWord").Value;
_appQueueRegisterUrl = AppConfig.GetSection("Peis")
.GetSection("AppQueueRegisterUrl").Value;
}
/// <summary>
/// 小程序获取当前排队信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
public async Task<GetAppQueueRegisterByPersonIdDto> GetAppQueueRegisterByIdNoAsync(IdNoInputDto input)
{
var appQueueRegisterByPersonIdDtos = await CallAppServiceAsync<IdNoInputDto, GetAppQueueRegisterByPersonIdDto>(_appQueueRegisterUrl,
input);
return appQueueRegisterByPersonIdDtos;
}
public async Task<TOut> CallAppServiceAsync<TInput, TOut>(string url, TInput data, string method = "post")
{
string baseAddress = _appBaseAddress;
await CheckLoginAsync();
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", _accesToken);
IsoDateTimeConverter timeFormat = new IsoDateTimeConverter();
timeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
var sendData = JsonConvert.SerializeObject(data, 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<WebApiOutDto<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 CheckLoginAsync()
{
if (string.IsNullOrWhiteSpace(_accesToken))
{
await LoginAsync();
}
else
{
var handler = new JwtSecurityTokenHandler();
var payload = handler.ReadJwtToken(_accesToken).Payload;
var claims = payload.Claims;
var exp = claims.First(claim => claim.Type == "exp").Value;
if (exp == null)
{
await LoginAsync();
}
else
{
if (long.TryParse(exp, out var expires))
{
var expireTime = DateTimeOffset.FromUnixTimeSeconds(expires).LocalDateTime;
if (expireTime <= DateTime.Now)
{
await LoginAsync();
}
}
else
{
await LoginAsync();
}
}
}
}
public async Task<WebApiOutDto<LoginOutDataDto>> LoginAsync()
{
if (string.IsNullOrWhiteSpace(_appUser))
{
throw new Exception("SelfUser不能为空");
}
if (string.IsNullOrWhiteSpace(_appPassword))
{
throw new Exception("SelfPassword不能为空");
}
var relult = await LoginAsync(_appUser, _appPassword);
return relult;
}
public async Task<WebApiOutDto<LoginOutDataDto>> LoginAsync(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(_appBaseAddress);
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<WebApiOutDto<LoginOutDataDto>>(result);
if (restultDto == null)
{
throw new Exception("返回结果是空");
}
if (restultDto.Code != 1)
{
throw new Exception($"登录失败{restultDto.Message}");
}
_accesToken = restultDto.Data.access_token;
return restultDto;
}
}
}
}
}
}

61
src/Shentun.WebPeis.Application.Contracts/QueueRegisters/GetAppQueueRegisterByPersonIdDto.cs

@ -0,0 +1,61 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.WebPeis.QueueRegisters
{
public class GetAppQueueRegisterByPersonIdDto
{
/// <summary>
/// 姓名
/// </summary>
public string PatientName { get; set; }
/// <summary>
/// 身份证号码
/// </summary>
public string IdNo { get; set; }
/// <summary>
/// 人员条码号
/// </summary>
public string PatientRegisterNo { get; set; }
/// <summary>
/// 性别
/// </summary>
public string SexName { get; set; }
/// <summary>
/// 手机号
/// </summary>
public string MobileTelephone { get; set; }
/// <summary>
/// 婚姻状况
/// </summary>
public string MaritalStatusName { get; set; }
/// <summary>
/// 照片
/// </summary>
public string Photo { get; set; }
/// <summary>
/// 排队房间名称
/// </summary>
public string RoomName { get; set; }
/// <summary>
/// 候诊人数
/// </summary>
public int QueueCount { get; set; }
/// <summary>
/// 完成标志 (o=候诊 1=已呼 2=过号)
/// </summary>
public char CompleteFlag { get; set; }
}
}

14
src/Shentun.WebPeis.Application.Contracts/QueueRegisters/IdNoInputDto.cs

@ -0,0 +1,14 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.WebPeis.QueueRegisters
{
public class IdNoInputDto
{
/// <summary>
/// 身份证号码
/// </summary>
public string IdNo { get; set; }
}
}

52
src/Shentun.WebPeis.Application/QueueRegisters/QueueRegisterAppService.cs

@ -0,0 +1,52 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Shentun.WebPeis.Models;
using Shentun.WebPeis.PatientRegisters;
using Shentun.WebPeis.Persons;
using Shentun.WebPeis.Plugins;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
namespace Shentun.WebPeis.QueueRegisters
{
/// <summary>
/// 获取排队信息
/// </summary>
[ApiExplorerSettings(GroupName = "Work")]
[Authorize]
public class QueueRegisterAppService : ApplicationService
{
private readonly IRepository<Person> _personRepository;
public QueueRegisterAppService(
IRepository<Person> personRepository
)
{
_personRepository = personRepository;
}
/// <summary>
/// 小程序获取当前排队信息
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/QueueRegister/GetAppQueueRegisterByPersonId")]
public async Task<GetAppQueueRegisterByPersonIdDto> GetAppQueueRegisterByPersonIdAsync(PersonIdInputDto input)
{
var msg = new GetAppQueueRegisterByPersonIdDto();
//获取身份证号码
var personEnt = await _personRepository.FirstOrDefaultAsync(f => f.PersonId == input.PersonId);
if (personEnt == null)
throw new UserFriendlyException("人员不存在");
var appQueueRegisterPlugIns = new AppQueueRegisterPlugIns();
msg = await appQueueRegisterPlugIns.GetAppQueueRegisterByIdNoAsync(new IdNoInputDto { IdNo = personEnt.IdNo });
return msg;
}
}
}

1
src/Shentun.WebPeis.Application/Shentun.WebPeis.Application.csproj

@ -11,6 +11,7 @@
<ItemGroup>
<ProjectReference Include="..\..\Shentun.Sms.Client\Shentun.Sms.Client.csproj" />
<ProjectReference Include="..\..\Shentun.WebPeis.Plugins\Shentun.WebPeis.Plugins.csproj" />
<ProjectReference Include="..\Shentun.Utilities\Shentun.Utilities.csproj" />
<ProjectReference Include="..\Shentun.WebPeis.Domain\Shentun.WebPeis.Domain.csproj" />
<ProjectReference Include="..\Shentun.WebPeis.Application.Contracts\Shentun.WebPeis.Application.Contracts.csproj" />

2
src/Shentun.WebPeis.HttpApi.Host/Shentun.WebPeis.HttpApi.Host.csproj

@ -14,7 +14,7 @@
<PackageReference Include="Serilog.AspNetCore" Version="8.0.0" />
<PackageReference Include="Serilog.Sinks.Async" Version="1.5.0" />
<PackageReference Include="Serilog.Sinks.Postgresql.Alternative" Version="4.0.4" />
<PackageReference Include="Volo.Abp.AspNetCore.MultiTenancy" Version="8.1.4" />
<PackageReference Include="Volo.Abp.AspNetCore.MultiTenancy" Version="8.1.5" />
<PackageReference Include="Volo.Abp.Autofac" Version="8.1.3" />
<PackageReference Include="Volo.Abp.AspNetCore.Serilog" Version="8.1.3" />
<PackageReference Include="Volo.Abp.Swashbuckle" Version="8.1.3" />

6
src/Shentun.WebPeis.HttpApi.Host/appsettings.json

@ -68,5 +68,11 @@
},
"Swagger": {
"IsEnabled": true
},
"Peis": {
"PeisBaseUrl": "",
"AppQueueRegisterUrl": "",
"AppUser": "",
"AppPassWord": ""
}
}
Loading…
Cancel
Save