From 79a5ce65fd31e5a356fb6af6e15d860c1827257c Mon Sep 17 00:00:00 2001 From: "DESKTOP-G961P6V\\Zhh" <839860190@qq.com> Date: Tue, 25 Jun 2024 23:33:22 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E7=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ColumnReferencePlugIns.cs | 65 ++++ .../ColumnReferencePlugInsBase.cs | 143 ++++++++ .../ColumnReferencePlugInsDbBase.cs | 43 +++ Shentun.WebPeis.Plugins/LoginInputDto.cs | 14 + Shentun.WebPeis.Plugins/LoginOutDto.cs | 22 ++ Shentun.WebPeis.Plugins/PlugInsBase.cs | 330 ++++++++++++++++++ .../Shentun.WebPeis.Plugins.csproj | 29 ++ Shentun.WebPeis.Plugins/ThirdPlugInsBase.cs | 92 +++++ .../WebPeisPlugInsModule.cs | 21 ++ Shentun.WebPeis.sln | 9 +- .../AppointPatientRegisterAppService.cs | 32 +- .../Persons/PersonAppService.cs | 3 +- .../AppointPatientRegisterManager.cs | 2 + 13 files changed, 798 insertions(+), 7 deletions(-) create mode 100644 Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugIns.cs create mode 100644 Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugInsBase.cs create mode 100644 Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugInsDbBase.cs create mode 100644 Shentun.WebPeis.Plugins/LoginInputDto.cs create mode 100644 Shentun.WebPeis.Plugins/LoginOutDto.cs create mode 100644 Shentun.WebPeis.Plugins/PlugInsBase.cs create mode 100644 Shentun.WebPeis.Plugins/Shentun.WebPeis.Plugins.csproj create mode 100644 Shentun.WebPeis.Plugins/ThirdPlugInsBase.cs create mode 100644 Shentun.WebPeis.Plugins/WebPeisPlugInsModule.cs diff --git a/Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugIns.cs b/Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugIns.cs new file mode 100644 index 0000000..1348870 --- /dev/null +++ b/Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugIns.cs @@ -0,0 +1,65 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.WebPeis.PlugIns.ColumnReferences +{ + interface IColumnReferencePlugIns + { + public List GetAppColumns(); + public string GetAppFilterColumnName(); + public List GetInterfaceColumns(); + public Task> GetAppCodeValuesAsync(); + public Task> GetAppFilterCodeValuesAsync(); + public Task> GetInterfaceCodeValuesAsync(); + } + + public class ColumnReferenceCodeValue + { + public string CodeValue { get; set; } + public string DisplayName { get; set; } + public string Exter1 { get; set; } + public string Exter2 { get; set; } + public string Exter3 { get; set; } + public string Exter4 { get; set; } + public string Exter5 { get; set; } + public string SimpleCode { get; set; } + public string FilterCodeValue { get; set; } + public int DisplayOrder { get; set; } + } + + public class ColumnReferenceFilterCodeValue + { + public string CodeValue { get; set; } + public string DiaplayName { get; set; } + public int DisplayOrder { get; set; } + } + + public class ColumnReferenceInterfaceCodeValue + { + public string InterfaceCodeValue { get; set; } + public string DisplayName { get; set; } + public string Exter1 { get; set; } + public string Exter2 { get; set; } + public string Exter3 { get; set; } + public string Exter4 { get; set; } + public string Exter5 { get; set; } + + } + public class ColumnReferenceColumn + { + public string Column { get; set; } + public string Name { get; set; } + } + + public class ColumnReferenceTable + { + public string TableName { get; set; } + public string CodeColumn { get; set; } + public string NameColumn { get; set; } + public string SimpleCodeColumn { get; set; } + public string DisplayOrderColumn { get; set; } + } +} diff --git a/Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugInsBase.cs b/Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugInsBase.cs new file mode 100644 index 0000000..c4fb4c2 --- /dev/null +++ b/Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugInsBase.cs @@ -0,0 +1,143 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Data.Common; +using System.Linq; +using System.Text; +using System.Text.Json; +using System.Threading.Tasks; +using Dapper; +using Microsoft.Extensions.Configuration; +using Npgsql; +using Shentun.Utilities; +namespace Shentun.WebPeis.PlugIns.ColumnReferences +{ + + public class ColumnReferencePlugInsBase : PlugInsBase, IColumnReferencePlugIns + { + + protected string AppSql; + private List _columns; + private List _interfaceColumns; + + public ColumnReferencePlugInsBase(string parmValue) : base(parmValue) + { + + AppSql = InterfaceConfig.GetSection("App").GetSection("Sql").Value; + var columns = InterfaceConfig.GetSection("App").GetSection("Columns").Value; + string[]? columnArry; + if (columns != null) + { + columns = columns.Replace(",", ","); + columnArry = columns.Split(','); + _columns = new List(); + foreach (var column in columnArry) + { + var singleColumns = column.Split('='); + if (singleColumns.Length == 2) + { + _columns.Add(new ColumnReferenceColumn() + { + Column = singleColumns[0], + Name = singleColumns[1] + }); + } + } + } + + + columns = InterfaceConfig.GetSection("Interface").GetSection("Columns").Value; + if (columns != null) + { + columns = columns.Replace(",", ","); + columnArry = columns.Split(','); + _interfaceColumns = new List(); + foreach (var columnName in columnArry) + { + var singleColumns = columnName.Split('='); + if (singleColumns.Length == 2) + { + _interfaceColumns.Add(new ColumnReferenceColumn() + { + Column = singleColumns[0], + Name = singleColumns[1] + }); + } + } + } + + } + public virtual List GetAppColumns() + { + if (_columns == null || _columns.Count() == 0) + { + return new List() + { + new ColumnReferenceColumn() + { + Column = "Code", + Name = "编码" + }, + new ColumnReferenceColumn() + { + Column = "DisplayName", + Name = "名称" + } + + }; + } + return _columns; + + } + + public virtual List GetInterfaceColumns() + { + if (_interfaceColumns == null || _interfaceColumns.Count() == 0) + { + return new List() + { + new ColumnReferenceColumn() + { + Column = "Code", + Name = "编码" + }, + new ColumnReferenceColumn() + { + Column = "DisplayName", + Name = "名称" + } + + }; + } + return _interfaceColumns; + } + public virtual async Task> GetAppCodeValuesAsync() + { + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) + { + var list = (await conn.QueryAsync(AppSql)).ToList(); + return list; + } + } + + public virtual async Task> GetInterfaceCodeValuesAsync() + { + return new List() + { + + }; + } + + public virtual async Task> GetAppFilterCodeValuesAsync() + { + throw new NotImplementedException(); + } + + public virtual string GetAppFilterColumnName() + { + return null; + } + + + } +} diff --git a/Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugInsDbBase.cs b/Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugInsDbBase.cs new file mode 100644 index 0000000..48d0f41 --- /dev/null +++ b/Shentun.WebPeis.Plugins/ColumnReferences/ColumnReferencePlugInsDbBase.cs @@ -0,0 +1,43 @@ +using Dapper; +using Microsoft.Data.SqlClient; +using Npgsql; +using Oracle.ManagedDataAccess.Client; +using Shentun.Utilities; +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.WebPeis.PlugIns.ColumnReferences +{ + public class ColumnReferencePlugInsDbBase : ColumnReferencePlugInsBase + { + + public ColumnReferencePlugInsDbBase(string parmValue) : base(parmValue) + { + InterfaceSql = InterfaceConfig.GetSection("Interface").GetSection("Sql").Value; + InterfaceDbType = InterfaceConfig.GetSection("Interface").GetSection("DbType").Value; + InterfaceConnctionStr = InterfaceConfig.GetSection("Interface").GetSection("ConnectionStrings").Value; + } + + + public override async Task> GetInterfaceCodeValuesAsync() + { + using (DbConnection conn = CreateInterfaceDbConnect()) + { + var list = (await conn.QueryAsync(InterfaceSql)).ToList(); + foreach (var item in list) + { + if(string.IsNullOrWhiteSpace(item.SimpleCode)) + { + item.SimpleCode = LanguageConverter.GetPYSimpleCode(item.DisplayName); + } + + } + return list; + } + } + } +} diff --git a/Shentun.WebPeis.Plugins/LoginInputDto.cs b/Shentun.WebPeis.Plugins/LoginInputDto.cs new file mode 100644 index 0000000..cce09d0 --- /dev/null +++ b/Shentun.WebPeis.Plugins/LoginInputDto.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.WebPeis.PlugIns +{ + public class LoginInputDto + { + public string UserName { get; set; } + public string Password { get; set; } + } +} diff --git a/Shentun.WebPeis.Plugins/LoginOutDto.cs b/Shentun.WebPeis.Plugins/LoginOutDto.cs new file mode 100644 index 0000000..5c3086c --- /dev/null +++ b/Shentun.WebPeis.Plugins/LoginOutDto.cs @@ -0,0 +1,22 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.WebPeis.PlugIns +{ + //public class LoginOutDto: WebApiOutDtoBase + //{ + // public LoginOutDataDto Data { get; set; } + //} + + public class LoginOutDataDto + { + public string peis_id { get; set; } + public string access_token { get; set; } + public string token_type { get; set; } + public int expires_in { get; set; } + public string refresh_token { get; set; } + } +} diff --git a/Shentun.WebPeis.Plugins/PlugInsBase.cs b/Shentun.WebPeis.Plugins/PlugInsBase.cs new file mode 100644 index 0000000..803b528 --- /dev/null +++ b/Shentun.WebPeis.Plugins/PlugInsBase.cs @@ -0,0 +1,330 @@ +using Microsoft.Data.SqlClient; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Newtonsoft.Json; +using Newtonsoft.Json.Converters; +using Npgsql; +using Oracle.ManagedDataAccess.Client; +using Shentun.Utilities; +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.IdentityModel.Tokens.Jwt; +using System.Linq; +using System.Linq.Dynamic.Core.Tokenizer; +using System.Net.Http.Headers; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.WebPeis.PlugIns +{ + public class PlugInsBase + { + protected IConfiguration? AppConfig; + protected IConfiguration? InterfaceConfig; + protected string? AppConnctionStr; + private string? _appBaseAddress; + private static string? _accesToken; + protected string? AppUser; + protected string? AppPassword; + + protected string? InterfaceSql; + protected string? InterfaceSqlKeyColumn; + protected string? InterfaceDbType; + protected string? InterfaceConnctionStr; + + protected string? InterfaceWebApiUrl; + + protected Guid ItemColumnReferenceId; + protected Guid AsbitemColumnReferenceId; + protected Guid DepartmentColumnReferenceId; + protected Guid UserColumnReferenceId; + protected ILogger Logger; + static PlugInsBase() + { + Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true; + } + public PlugInsBase() + { + Init(); + } + + public PlugInsBase(string parmValue) + { + Init(); + + Init(parmValue); + + } + public void Init() + { + AppConfig = new ConfigurationBuilder() + .SetBasePath(DirectoryHelper.GetAppDirectory()) // 设置基础路径为当前目录 + .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) + .Build(); + AppConnctionStr = AppConfig.GetSection("ConnectionStrings") + .GetSection("Default").Value; + _appBaseAddress = AppConfig.GetSection("App") + .GetSection("SelfUrl").Value; + AppUser = AppConfig.GetSection("App") + .GetSection("SelfUser").Value; + AppPassword = AppConfig.GetSection("App") + .GetSection("SelfPassword").Value; + + using var loggerFactory = LoggerFactory.Create(builder => + { + + }); + Logger = loggerFactory.CreateLogger(); + } + public void Init(string parmValue) + { + var configurationBuilder = new ConfigurationBuilder() + .AddJsonStream(new MemoryStream(System.Text.Encoding.UTF8.GetBytes(parmValue))); + InterfaceConfig = configurationBuilder.Build(); + //如果接口配置里面配置了用户名密码,则用接口中的覆盖本地配置 + var appUser = InterfaceConfig.GetSection("App").GetSection("User").Value; + if(!string.IsNullOrWhiteSpace(appUser)) + { + AppUser = appUser; + } + var appPassword = InterfaceConfig.GetSection("App").GetSection("Password").Value; + if (!string.IsNullOrWhiteSpace(appPassword)) + { + AppPassword = appPassword; + } + //设置接口有关配置 + InterfaceSql = InterfaceConfig.GetSection("Interface").GetSection("Sql").Value; + InterfaceSqlKeyColumn = InterfaceConfig.GetSection("Interface").GetSection("SqlKeyColumn").Value; + InterfaceDbType = InterfaceConfig.GetSection("Interface").GetSection("DbType").Value; + InterfaceWebApiUrl = InterfaceConfig.GetSection("Interface").GetSection("WebApiUrl").Value; + + InterfaceConnctionStr = InterfaceConfig.GetSection("Interface").GetSection("ConnectionStrings").Value; + + var itemColumnReferenceIdStr = InterfaceConfig.GetSection("Interface") + .GetSection("ItemColumnReferenceId").Value; + if (!string.IsNullOrWhiteSpace(itemColumnReferenceIdStr)) + { + ItemColumnReferenceId = new Guid(itemColumnReferenceIdStr); + } + + var asbItemColumnReferenceIdStr = InterfaceConfig.GetSection("Interface") + .GetSection("AsbitemColumnReferenceId").Value; + if (!string.IsNullOrWhiteSpace(asbItemColumnReferenceIdStr)) + { + AsbitemColumnReferenceId = new Guid(asbItemColumnReferenceIdStr); + } + + var departmentColumnReferenceIdStr = InterfaceConfig.GetSection("Interface") + .GetSection("DepartmentColumnReferenceId").Value; + if (!string.IsNullOrWhiteSpace(departmentColumnReferenceIdStr)) + { + DepartmentColumnReferenceId = new Guid(departmentColumnReferenceIdStr); + } + + var userColumnReferenceIdStr = InterfaceConfig.GetSection("Interface") + .GetSection("UserColumnReferenceId").Value; + if (!string.IsNullOrWhiteSpace(userColumnReferenceIdStr)) + { + UserColumnReferenceId = new Guid(userColumnReferenceIdStr); + } + } + protected DbConnection CreateInterfaceDbConnect() + { + DbConnection conn; + if (string.IsNullOrWhiteSpace(InterfaceConnctionStr)) + { + throw new ArgumentException("数据连接设置中的DbType不能为空"); + } + InterfaceDbType = InterfaceDbType.ToLower(); + //Logger.LogInformation("数据库类型:" + InterfaceDbType); + if (InterfaceDbType == "sqlserver") + { + //Logger.LogInformation("调用sqlserver:" + InterfaceDbType); + conn = new SqlConnection(InterfaceConnctionStr); + } + else if (InterfaceDbType == "postgres") + { + //Logger.LogInformation("调用postgres:" + InterfaceDbType); + conn = new NpgsqlConnection(InterfaceConnctionStr); + } + else if (InterfaceDbType == "oracle") + { + //Logger.LogInformation("调用oracle:" + InterfaceDbType); + conn = new OracleConnection(InterfaceConnctionStr); + } + else + { + throw new ArgumentException("数据连接设置中的DbType不支持"); + } + return conn; + } + + public async Task CallAppServiceAsync(string url, TInput data, string method = "post") + { + if(string.IsNullOrWhiteSpace(_appBaseAddress)) + { + throw new Exception("_appBaseAddress不能为空"); + } + 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, 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< WebApiOutDto>(result); + + if (resultDto.Code == -1) + { + throw new Exception($"调用WebApi失败,返回-1,消息:" + resultDto.Message); + } + return resultDto.Data; + + } + + } + } + } + + public virtual async Task DoWorkAsync() + { + + } + + public virtual Task DoWork() + { + return Task.CompletedTask; + } + + public async virtual Task> 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> 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>(result); + if (restultDto == null) + { + throw new Exception("返回结果是空"); + } + if (restultDto.Code != 1) + { + throw new Exception($"登录失败{restultDto.Message}"); + } + _accesToken = restultDto.Data.access_token; + return restultDto; + } + + } + } + } + + 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(); + } + + } + + } + } + } +} diff --git a/Shentun.WebPeis.Plugins/Shentun.WebPeis.Plugins.csproj b/Shentun.WebPeis.Plugins/Shentun.WebPeis.Plugins.csproj new file mode 100644 index 0000000..1cbd787 --- /dev/null +++ b/Shentun.WebPeis.Plugins/Shentun.WebPeis.Plugins.csproj @@ -0,0 +1,29 @@ + + + + net8.0 + enable + enable + + + + + + + + + + + + + + + + + + + + + + + diff --git a/Shentun.WebPeis.Plugins/ThirdPlugInsBase.cs b/Shentun.WebPeis.Plugins/ThirdPlugInsBase.cs new file mode 100644 index 0000000..7a036eb --- /dev/null +++ b/Shentun.WebPeis.Plugins/ThirdPlugInsBase.cs @@ -0,0 +1,92 @@ +using Dapper; +using Microsoft.Extensions.Configuration; +using Npgsql; +using Shentun.Utilities; +using Shentun.WebPeis.PlugIns.ColumnReferences; +using Shentun.WebPeis.ThirdInterfaces; +using System; +using System.Collections.Generic; +using System.Data.Common; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Shentun.WebPeis.PlugIns +{ + public class ThirdPlugInsBase: PlugInsBase + { + //private Guid _thirdInterfaceId; + protected ThirdInterfaceDto _thirdInterfaceDto; + public ThirdPlugInsBase(Guid thirdInterfaceId):base() + { + + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) + { + string sql; + sql = @" + SELECT * + from third_interface + where id =@ThirdInterfaceId + "; + _thirdInterfaceDto = ( conn.Query(sql, + new { ThirdInterfaceId = thirdInterfaceId })).Single(); + Init(_thirdInterfaceDto.ParmValue); + } + } + public ThirdPlugInsBase(string parmValue):base(parmValue) + { + + } + + public async Task> GetColumnReferenceInterfaceCodeValuesAsync(Guid columnReferenceId, + string appCodeValue) + { + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) + { + string sql; + sql = @" + SELECT + column_reference_interface.interface_code_value + from column_reference + join column_reference_code on column_reference.id = column_reference_code.column_reference_id + join column_reference_interface on column_reference_code.id = column_reference_interface.column_reference_code_id + where column_reference.id = @ColumnReferenceId and + column_reference_code.code_value = @CodeValue + "; + var columnReferenceInterfaceCodeValues = (await conn.QueryAsync(sql, + new { ColumnReferenceId = columnReferenceId, CodeValue =appCodeValue })).ToList(); + return columnReferenceInterfaceCodeValues; + } + } + + public async Task> GetColumnReferenceCodeValuesAsync(Guid columnReferenceId, + string interfaceCodeValue) + { + if(string.IsNullOrWhiteSpace(interfaceCodeValue)) + { + throw new Exception("第三方编码不能为空"); + } + interfaceCodeValue = interfaceCodeValue.Trim(); + using (DbConnection conn = new NpgsqlConnection(AppConnctionStr)) + { + string sql; + sql = @" + SELECT + column_reference_code.code_value + from column_reference + join column_reference_code on column_reference.id = column_reference_code.column_reference_id + join column_reference_interface on column_reference_code.id = column_reference_interface.column_reference_code_id + where column_reference.id = @ColumnReferenceId and + column_reference_interface.interface_code_value = @InterfaceCodeValue + "; + var columnReferenceCodeValues = (await conn.QueryAsync(sql, + new { ColumnReferenceId = columnReferenceId, InterfaceCodeValue = interfaceCodeValue })).ToList(); + //if(columnReferenceCodeValues.Count == 0) + //{ + // throw new Exception($"{interfaceCodeValue}没有找到对照"); + //} + return columnReferenceCodeValues; + } + } + } +} diff --git a/Shentun.WebPeis.Plugins/WebPeisPlugInsModule.cs b/Shentun.WebPeis.Plugins/WebPeisPlugInsModule.cs new file mode 100644 index 0000000..59f03d0 --- /dev/null +++ b/Shentun.WebPeis.Plugins/WebPeisPlugInsModule.cs @@ -0,0 +1,21 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Modularity; + +namespace Shentun.WebPeis.Plugins +{ + public class WebPeisPlugInsModule : AbpModule + { + public override void OnApplicationInitialization(ApplicationInitializationContext context) + { + //var myService = context.ServiceProvider + // .GetRequiredService(); + + //myService.Initialize(); + } + } +} diff --git a/Shentun.WebPeis.sln b/Shentun.WebPeis.sln index 433558f..1da411d 100644 --- a/Shentun.WebPeis.sln +++ b/Shentun.WebPeis.sln @@ -39,7 +39,9 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shentun.Utilities", "src\Sh EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shentun.WebApi.Service", "src\Shentun.WebApi.Service\Shentun.WebApi.Service.csproj", "{6625C4ED-DAF2-41BA-8499-58655E4C1D3C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shentun.Sms.Client", "Shentun.Sms.Client\Shentun.Sms.Client.csproj", "{B45965B5-7A87-4163-9904-2A2EEC84EEDC}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Shentun.Sms.Client", "Shentun.Sms.Client\Shentun.Sms.Client.csproj", "{B45965B5-7A87-4163-9904-2A2EEC84EEDC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shentun.WebPeis.Plugins", "Shentun.WebPeis.Plugins\Shentun.WebPeis.Plugins.csproj", "{FCAFD220-0BD5-4A92-AC22-4585F493DAC5}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -115,6 +117,10 @@ Global {B45965B5-7A87-4163-9904-2A2EEC84EEDC}.Debug|Any CPU.Build.0 = Debug|Any CPU {B45965B5-7A87-4163-9904-2A2EEC84EEDC}.Release|Any CPU.ActiveCfg = Release|Any CPU {B45965B5-7A87-4163-9904-2A2EEC84EEDC}.Release|Any CPU.Build.0 = Release|Any CPU + {FCAFD220-0BD5-4A92-AC22-4585F493DAC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FCAFD220-0BD5-4A92-AC22-4585F493DAC5}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FCAFD220-0BD5-4A92-AC22-4585F493DAC5}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FCAFD220-0BD5-4A92-AC22-4585F493DAC5}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -137,6 +143,7 @@ Global {99FB7F67-8EB4-4448-A831-39EE7E5F59F7} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} {6625C4ED-DAF2-41BA-8499-58655E4C1D3C} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} {B45965B5-7A87-4163-9904-2A2EEC84EEDC} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} + {FCAFD220-0BD5-4A92-AC22-4585F493DAC5} = {CA9AC87F-097E-4F15-8393-4BC07735A5B0} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F} diff --git a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs index dc75d78..e60c496 100644 --- a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs +++ b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs @@ -177,7 +177,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters /// /// /// - [AllowAnonymous] + //[AllowAnonymous] [HttpPost("api/app/AppointPatientRegister/GetListByFilter")] public async Task> GetListByFilterAsync(AppointPatientRegisterInputDto input) { @@ -424,11 +424,11 @@ namespace Shentun.WebPeis.AppointPatientRegisters } /// - /// 获取预约的组合项目 + /// 获取预约的组合项目通过预约ID /// /// /// - [AllowAnonymous] + //[AllowAnonymous] [HttpPost("api/app/AppointPatientRegister/GetAppointRegisterAsbitemListById")] public async Task> GetAppointRegisterAsbitemListByIdAsync(AppointPatientRegisterIdInputDto input) { @@ -491,6 +491,28 @@ namespace Shentun.WebPeis.AppointPatientRegisters return appointRegisterAsbitemDtos; } + + /// + /// 获取预约的组合项目通过备单登记ID + /// + /// + /// + [HttpPost("api/app/AppointPatientRegister/GetAppointRegisterAsbitemListByPatientRegisterId")] + public async Task> GetAppointRegisterAsbitemListByPatientRegisterIdAsync(PatientRegisterIdInputDto input) + { + var appointRegister = await _repository.FindAsync(o => o.PatientRegisterId == input.PatientRegisterId && o.CompleteFlag == AppointPatientRegisterCompleteFlag.Appoint); + if (appointRegister == null) + { + throw new UserFriendlyException("没有预约的人员信息"); + } + var appointPatientRegisterIdInputDto = new AppointPatientRegisterIdInputDto() + { + AppointPatientRegisterId = appointRegister.AppointPatientRegisterId + }; + + var asbitems = await GetAppointRegisterAsbitemListByIdAsync(appointPatientRegisterIdInputDto); + return asbitems; + } /// /// 获取单位预约病人 /// @@ -930,7 +952,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters /// /// /// - private async Task GetDiseaseRiskListByPersonIdAsync(Guid personId, int recommendId ) + private async Task GetDiseaseRiskListByPersonIdAsync(Guid personId, int recommendId) { var questionRegister = (await _questionRegisterRepository.GetQueryableAsync()) .Where(o => o.PersonId == personId) @@ -1183,7 +1205,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters { if (personDiseaseRiskLevel.Asbitems.Where(o => o.AsbitemId == personDiseaseRiskLevel2.Asbitems[i].AsbitemId).Any()) { - if(!personDiseaseRiskLevel.DiseaseRiskName.Contains(personDiseaseRiskLevel2.DiseaseRiskName)) + if (!personDiseaseRiskLevel.DiseaseRiskName.Contains(personDiseaseRiskLevel2.DiseaseRiskName)) { personDiseaseRiskLevel.DiseaseRiskName += "," + personDiseaseRiskLevel2.DiseaseRiskName; } diff --git a/src/Shentun.WebPeis.Application/Persons/PersonAppService.cs b/src/Shentun.WebPeis.Application/Persons/PersonAppService.cs index c238cb0..e6de184 100644 --- a/src/Shentun.WebPeis.Application/Persons/PersonAppService.cs +++ b/src/Shentun.WebPeis.Application/Persons/PersonAppService.cs @@ -439,7 +439,8 @@ namespace Shentun.WebPeis.Persons join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on patient.PatientId equals patientRegister.PatientId where user.Id == input.PersonId && - (patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck) + (patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck) && + !string.IsNullOrWhiteSpace(patientRegister.ReportFile) orderby patientRegister.MedicalStartDate select new PersonMedicalTimesDto() { diff --git a/src/Shentun.WebPeis.Domain/AppointPatientRegisters/AppointPatientRegisterManager.cs b/src/Shentun.WebPeis.Domain/AppointPatientRegisters/AppointPatientRegisterManager.cs index b01643f..542a6b1 100644 --- a/src/Shentun.WebPeis.Domain/AppointPatientRegisters/AppointPatientRegisterManager.cs +++ b/src/Shentun.WebPeis.Domain/AppointPatientRegisters/AppointPatientRegisterManager.cs @@ -280,6 +280,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters { throw new UserFriendlyException($"{asbitem.AsbitemName}支付类别错误"); } + //先强制设置为单位支付 + appointRegisterAsbitem.PayTypeFlag = PayTypeFlag.OrgPay; } if (entity.PregnantFlag == PregnantFlag.PreparePregnancy && asbitem.ForPregnantFlag == ForPregnantFlag.PreparePregnancy)