diff --git a/IRaCIS.Core.API/Program.cs b/IRaCIS.Core.API/1Program.cs similarity index 99% rename from IRaCIS.Core.API/Program.cs rename to IRaCIS.Core.API/1Program.cs index 7ba083592..1f3449c62 100644 --- a/IRaCIS.Core.API/Program.cs +++ b/IRaCIS.Core.API/1Program.cs @@ -17,7 +17,7 @@ using System.Runtime.InteropServices; namespace IRaCIS.Core.API { - public class Program + public class Program1 { public readonly string environment; public static async Task Main(string[] args) diff --git a/IRaCIS.Core.API/Startup.cs b/IRaCIS.Core.API/1Startup.cs similarity index 100% rename from IRaCIS.Core.API/Startup.cs rename to IRaCIS.Core.API/1Startup.cs diff --git a/IRaCIS.Core.API/Test.cs b/IRaCIS.Core.API/1Test.cs similarity index 100% rename from IRaCIS.Core.API/Test.cs rename to IRaCIS.Core.API/1Test.cs diff --git a/IRaCIS.Core.API/2Program.cs b/IRaCIS.Core.API/2Program.cs deleted file mode 100644 index e7649cb42..000000000 --- a/IRaCIS.Core.API/2Program.cs +++ /dev/null @@ -1,231 +0,0 @@ -//using Autofac; -//using Autofac.Extensions.DependencyInjection; -//using IRaCIS.Core.API; -//using IRaCIS.Core.Application.Filter; -//using IRaCIS.Core.Application.MediatR.Handlers; -//using LogDashboard; -//using MassTransit; -//using MassTransit.NewIdProviders; -//using MediatR; -//using Microsoft.AspNetCore.Builder; -//using Microsoft.AspNetCore.Http.Features; -//using Microsoft.AspNetCore.HttpOverrides; -//using Microsoft.AspNetCore.SignalR; -//using Microsoft.Extensions.Configuration; -//using Microsoft.Extensions.DependencyInjection; -//using Microsoft.Extensions.Hosting; -//using Serilog; -//using System; - -//var builder = WebApplication.CreateBuilder(args); - - -// //以配置文件为准,否则 从url中取环境值(服务以命令行传递参数启动,配置文件配置了就不需要传递环境参数) -// var config = new ConfigurationBuilder() -// .AddEnvironmentVariables() -// .Build(); - -// var enviromentName = config["ASPNETCORE_ENVIRONMENT"]; - -// if (string.IsNullOrWhiteSpace(enviromentName)) -// { - -// var index = Array.IndexOf(args, "--env"); -// enviromentName = index > -1 -// ? args[index + 1] -// : "Development"; -// } - - -// NewId.SetProcessIdProvider(new CurrentProcessIdProvider()); - - - - -//builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory()) -// .ConfigureContainer(containerBuilder => -// { -// containerBuilder.RegisterModule(); -// }) -// .UseWindowsService().UseSerilog(); - - - -//// Add services to the container. - -////本地化 -//builder.Services.AddJsonLocalization(options => options.ResourcesPath = "Resources"); - -//// 异常、参数统一验证过滤器、Json序列化配置、字符串参数绑型统一Trim() -//builder.Services.AddControllers(options => -//{ -// //options.Filters.Add(); -// options.Filters.Add(); -// options.Filters.Add(); -// //options.Filters.Add(); - -// //if (_configuration.GetSection("BasicSystemConfig").GetValue("OpenLoginLimit")) -// //{ -// // options.Filters.Add(); - -// //} - - -//}).AddNewtonsoftJsonSetup(); // NewtonsoftJson 序列化 处理 - -////动态WebApi + UnifiedApiResultFilter 省掉控制器代码 -//builder.Services.AddDynamicWebApiSetup(); -////AutoMapper -//builder.Services.AddAutoMapperSetup(); -////EF ORM QueryWithNoLock -//builder.Services.AddEFSetup(builder.Configuration); -////Http 响应压缩 -//builder.Services.AddResponseCompressionSetup(); -////Swagger Api 文档 -//builder.Services.AddSwaggerSetup(); -////JWT Token 验证 -//builder.Services.AddJWTAuthSetup(builder.Configuration); -//// MediatR 进程内消息 事件解耦 从程序集中 注册命令和handler对应关系 -//builder.Services.AddMediatR(typeof(ConsistencyVerificationHandler).Assembly); -//// EasyCaching 缓存 -//builder.Services.AddEasyCachingSetup(); - -////services.AddDistributedMemoryCache(); - -////// hangfire 定时任务框架 有界面,更友好~ -//builder.Services.AddhangfireSetup(builder.Configuration); -////// QuartZ 定时任务框架 使用了hangfire 暂时不用,后续需要可以打开,已经配好 -////builder.Services.AddQuartZSetup(_configuration); - -//// 保护上传文件 -////services.AddStaticFileAuthorizationSetup(); - - -//////HttpReports 暂时废弃 -////services.AddHttpReports().AddHttpTransport(); -////Serilog 日志可视化 LogDashboard日志 -//builder.Services.AddLogDashboardSetup(); -////上传限制 配置 -//builder.Services.Configure(options => -//{ -// options.MultipartBodyLengthLimit = int.MaxValue; -// options.ValueCountLimit = int.MaxValue; -// options.ValueLengthLimit = int.MaxValue; -//}); -////IP 限流 可设置白名单 或者黑名单 -////services.AddIpPolicyRateLimitSetup(_configuration); -////用户类型 策略授权 -//builder.Services.AddAuthorizationPolicySetup(builder.Configuration); - -//builder.Services.AddJsonConfigSetup(builder.Configuration); - -////转发头设置 获取真实IP -//builder.Services.Configure(options => -//{ -// options.ForwardedHeaders = -// ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; -//}); -////Dicom影像渲染图片 跨平台 -//builder.Services.AddDicomSetup(); - -//// 实时应用 -//builder.Services.AddSignalR(); - - -//builder.Services.AddSingleton(); - -//builder.Services.AddControllers(); -//// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle -////builder.Services.AddEndpointsApiExplorer(); -////builder.Services.AddSwaggerGen(); - -////SerilogExtension.AddSerilogSetup(enviromentName, builder.Host.confi); - - -//var app = builder.Build(); - -//// Configure the HTTP request pipeline. - -////本地化 -//app.UseLocalization(); - -//app.UseForwardedHeaders(); - - -////不需要 token 访问的静态文件 wwwroot css, JavaScript, and images don't require authentication. -//app.UseStaticFiles(); - -//app.UseIRacisHostStaticFileStore(app.Environment); - -////LogDashboard -//app.UseLogDashboard("/LogDashboard"); - -////hangfire -////app.UseHangfireConfig(app.Environment); - -//////暂时废弃 -////app.UseHttpReports(); - -//////限流 中间件 -////app.UseIpRateLimiting(); - -////响应压缩 -//app.UseResponseCompression(); - -//if (app.Environment.IsDevelopment()) -//{ -// app.UseDeveloperExceptionPage(); -//} -//else -//{ - -// //app.UseHsts(); -//} - -//SwaggerSetup.Configure(app, app.Environment); - -//Console.WriteLine("当前环境: " + builder.Environment.EnvironmentName); - -////app.UseMiddleware(); - -//// 特殊异常处理 比如 404 -//app.UseStatusCodePagesWithReExecute("/Error/{0}"); - - - - -//////serilog 记录请求的用户信息 -//app.UseSerilogConfig(app.Environment); - -//app.UseRouting(); - -//app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); - - -//app.UseAuthentication(); -////app.UseJwtBearerQueryString(); -//app.UseAuthorization(); - -//////文件伺服 必须带Token 访问 -//////app.UseIRacisHostStaticFileStore(env); - - - -////app.UseEndpoints(endpoints => -////{ - - -//// endpoints.MapControllers(); - -//// endpoints.MapHub("/UploadHub")/*.RequireCors(t=>t.WithOrigins(new string[] {"null"}).AllowAnyMethod().AllowAnyHeader().AllowCredentials())*/; -////}); - - - -//app.MapControllers(); -//app.MapHub("/UploadHub")/*.RequireCors(t=>t.WithOrigins(new string[] {"null"}).AllowAnyMethod().AllowAnyHeader().AllowCredentials())*/; - - -//app.Run(); - -//测试同步 diff --git a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs index 34193ceeb..73efc46c6 100644 --- a/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs +++ b/IRaCIS.Core.API/Controllers/UploadDownLoadController.cs @@ -402,7 +402,7 @@ namespace IRaCIS.Core.API.Controllers } - catch (Exception ex) + catch (Exception ) { _provider.Remove($"StudyUid_{trialId}_{archiveStudyCommand.StudyInstanceUid}"); diff --git a/IRaCIS.Core.API/IRC绯荤粺鏇存柊鏃ュ織.docx b/IRaCIS.Core.API/IRC绯荤粺鏇存柊鏃ュ織.docx deleted file mode 100644 index 467c074a1..000000000 Binary files a/IRaCIS.Core.API/IRC绯荤粺鏇存柊鏃ュ織.docx and /dev/null differ diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.csproj b/IRaCIS.Core.API/IRaCIS.Core.API.csproj index c3c264151..816fd9726 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.csproj +++ b/IRaCIS.Core.API/IRaCIS.Core.API.csproj @@ -24,12 +24,7 @@ 1701;1702;1591 - - - - - - + @@ -70,20 +65,20 @@ - - + + true - + - + - + - - + + diff --git a/IRaCIS.Core.API/IRaCIS.Core.API.xml b/IRaCIS.Core.API/IRaCIS.Core.API.xml index 5b5c02b0c..fb1288021 100644 --- a/IRaCIS.Core.API/IRaCIS.Core.API.xml +++ b/IRaCIS.Core.API/IRaCIS.Core.API.xml @@ -4,34 +4,6 @@ IRaCIS.Core.API - - - 涓昏澶勭悊 鍓嶇404绛夐敊璇 鍏ㄥ眬涓氬姟寮傚父宸茬粺涓澶勭悊浜嗭紝闈炰笟鍔¢敊璇細鏉ュ埌杩欓噷 - - - - - - - 鍖荤敓鍩烘湰淇℃伅 銆佸伐浣滀俊鎭 涓撲笟淇℃伅銆佸鏍哥姸鎬 - - - - - 鑾峰彇鍖荤敓璇︽儏 - - - - - - - - - - - - 绯荤粺鐢ㄦ埛鐧诲綍鎺ュ彛[New] - 娣诲姞瀹為獙椤圭洰-杩斿洖鏂板Id[AUTH] 鏂拌褰旾d @@ -373,6 +345,27 @@ 搴忓垪鍖栨垚鍛 + + + 鍖荤敓鍩烘湰淇℃伅 銆佸伐浣滀俊鎭 涓撲笟淇℃伅銆佸鏍哥姸鎬 + + + + + 鑾峰彇鍖荤敓璇︽儏 + + + + + + + + + + + + 绯荤粺鐢ㄦ埛鐧诲綍鎺ュ彛[New] + 涓轰簡鍓嶇 涓娈垫椂闂存棤鎿嶄綔锛岄渶瑕侀噸鏂扮櫥闄 @@ -380,6 +373,13 @@ + + + 涓昏澶勭悊 鍓嶇404绛夐敊璇 鍏ㄥ眬涓氬姟寮傚父宸茬粺涓澶勭悊浜嗭紝闈炰笟鍔¢敊璇細鏉ュ埌杩欓噷 + + + + 瀵圭О鍙嗗姞瀵 diff --git a/IRaCIS.Core.API/Progranm.cs b/IRaCIS.Core.API/Progranm.cs new file mode 100644 index 000000000..c58aaf662 --- /dev/null +++ b/IRaCIS.Core.API/Progranm.cs @@ -0,0 +1,306 @@ +using System; +using Autofac.Extensions.DependencyInjection; +using Microsoft.AspNetCore.Hosting; +using Microsoft.Extensions.Hosting; +using Microsoft.Extensions.Configuration; +using Serilog; +using MediatR; +using IRaCIS.Core.Application.MediatR.Handlers; +using System.Threading.Tasks; +using MassTransit; +using MassTransit.NewIdProviders; +using System.IO; +using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infra.EFCore; +using IRaCIS.Core.Application.Helper; +using System.Runtime.InteropServices; +using Microsoft.AspNetCore.Builder; +using IRaCIS.Core.API; +using Autofac; +using Microsoft.AspNetCore.Http.Features; +using Microsoft.AspNetCore.SignalR; +using Microsoft.Extensions.DependencyInjection; +using IRaCIS.Core.Application.Filter; +using Microsoft.AspNetCore.HttpOverrides; +using IRaCIS.Application.Services.BackGroundJob; +using LogDashboard; +using OfficeOpenXml.Utils; + + + +#region 获取环境变量 +//以配置文件为准,否则 从url中取环境值(服务以命令行传递参数启动,配置文件配置了就不需要传递环境参数) +var config = new ConfigurationBuilder() + .AddEnvironmentVariables() + .Build(); + +var enviromentName = config["ASPNETCORE_ENVIRONMENT"]; + +if (string.IsNullOrWhiteSpace(enviromentName)) +{ + + var index = Array.IndexOf(args, "--env"); + enviromentName = index > -1 + ? args[index + 1] + : "Development"; +} +#endregion + +var builder = WebApplication.CreateBuilder(new WebApplicationOptions +{ + EnvironmentName = enviromentName +}); + +#region 兼容windows 服务命令行的方式 + +//foreach (var arg in args) +//{ +// Console.WriteLine(arg); +//} + +int urlsIndex = Array.FindIndex(args, arg => arg != null && arg.StartsWith("--urls")); + +if (urlsIndex > -1) +{ + var url = args[urlsIndex].Substring("--urls=".Length); + Console.WriteLine(url); + builder.WebHost.UseUrls(url); +} + +#endregion + +#region 主机配置 + + +NewId.SetProcessIdProvider(new CurrentProcessIdProvider()); + + + +builder.Host + .ConfigureAppConfiguration((hostContext, config) => + { + + //Console.WriteLine(hostContext.HostingEnvironment.EnvironmentName); + config.AddJsonFile("appsettings.json", false, true) + .AddJsonFile($"appsettings.{enviromentName}.json", false, true); + }) + .UseServiceProviderFactory(new AutofacServiceProviderFactory()) + .ConfigureContainer(containerBuilder => + { + containerBuilder.RegisterModule(); + }) + .UseWindowsService().UseSerilog(); +#endregion + + +#region 配置服务 +var _configuration = builder.Configuration; + +//健康检查 +builder.Services.AddHealthChecks(); +//本地化 +builder.Services.AddJsonLocalization(options => options.ResourcesPath = "Resources"); + +// 异常、参数统一验证过滤器、Json序列化配置、字符串参数绑型统一Trim() +builder.Services.AddControllers(options => +{ + //options.Filters.Add(); + options.Filters.Add(); + options.Filters.Add(); + options.Filters.Add(); + + if (_configuration.GetSection("BasicSystemConfig").GetValue("OpenLoginLimit")) + { + options.Filters.Add(); + } + +}) + .AddNewtonsoftJsonSetup(); // NewtonsoftJson 序列化 处理 + +builder.Services.AddOptions().Configure(_configuration.GetSection("SystemEmailSendConfig")); +builder.Services.AddOptions().Configure(_configuration.GetSection("BasicSystemConfig")); +builder.Services.AddOptions().Configure(_configuration.GetSection("AliyunOSS")); +builder.Services.AddOptions().Configure(_configuration.GetSection("ObjectStoreService")); + + +//动态WebApi + UnifiedApiResultFilter 省掉控制器代码 +builder.Services.AddDynamicWebApiSetup(); +//AutoMapper +builder.Services.AddAutoMapperSetup(); +//EF ORM QueryWithNoLock +builder.Services.AddEFSetup(_configuration); +//Http 响应压缩 +builder.Services.AddResponseCompressionSetup(); +//Swagger Api 文档 +builder.Services.AddSwaggerSetup(); +//JWT Token 验证 +builder.Services.AddJWTAuthSetup(_configuration); + +// MediatR 进程内消息 事件解耦 从程序集中 注册命令和handler对应关系 +builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining()); +// EasyCaching 缓存 +builder.Services.AddEasyCachingSetup(_configuration); + +// hangfire 定时任务框架 有界面,更友好~ +builder.Services.AddhangfireSetup(_configuration); + + +//Serilog 日志可视化 LogDashboard日志 +builder.Services.AddLogDashboardSetup(); + + +builder.Services.AddJsonConfigSetup(_configuration); +//转发头设置 获取真实IP +builder.Services.Configure(options => +{ + options.ForwardedHeaders = + ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto; +}); +//Dicom影像渲染图片 跨平台 +builder.Services.AddDicomSetup(); + +// 实时应用 +builder.Services.AddSignalR(); + +builder.Services.AddSingleton(); + + + + + +#region 历史废弃配置 +//builder.Services.AddMemoryCache(); +////上传限制 配置 +//builder.Services.Configure(options => +//{ +// options.MultipartBodyLengthLimit = int.MaxValue; +// options.ValueCountLimit = int.MaxValue; +// options.ValueLengthLimit = int.MaxValue; +//}); +//IP 限流 可设置白名单 或者黑名单 +//services.AddIpPolicyRateLimitSetup(_configuration); +// 用户类型 策略授权 +//services.AddAuthorizationPolicySetup(_configuration); +#endregion + +#endregion + +var app = builder.Build(); +var env = app.Environment; + +#region 配置中间件 + + +// Configure the HTTP request pipeline. + +//本地化 +app.UseLocalization(); + +app.UseForwardedHeaders(); + +//响应压缩 +app.UseResponseCompression(); + +//app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); + +//不需要 token 访问的静态文件 wwwroot css, JavaScript, and images don't require authentication. +app.UseStaticFiles(); + +app.UseMiddleware(); + +//LogDashboard +app.UseLogDashboard("/LogDashboard"); + +//hangfire +app.UseHangfireConfig(env); + + +////限流 中间件 +//app.UseIpRateLimiting(); + + +if (env.IsDevelopment()) +{ + app.UseDeveloperExceptionPage(); +} +else +{ + //app.UseHsts(); +} + +// 特殊异常处理 比如 404 +app.UseStatusCodePagesWithReExecute("/Error/{0}"); + +SwaggerSetup.Configure(app, env); + + +////serilog 记录请求的用户信息 +app.UseSerilogConfig(env); + +app.UseRouting(); + +app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader()); + +//app.UseIRacisHostStaticFileStore(env); + + +app.UseAuthentication(); +app.UseAuthorization(); + + +app.UseEndpoints(endpoints => +{ + endpoints.MapControllers(); + + endpoints.MapHub("/UploadHub"); + + endpoints.MapHealthChecks("/health"); +}); + +// Serilog +SerilogExtension.AddSerilogSetup(enviromentName, app.Services); + + +var hangfireJobService = app.Services.GetRequiredService(); + +await hangfireJobService.InitHangfireJobTaskAsync(); + + +#endregion + +try +{ + #region 运行环境 部署平台 + + Log.Logger.Warning($"当前环境:{enviromentName}"); + + if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows)) + { + Log.Logger.Warning($"当前部署平台环境:windows"); + } + else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux)) + { + Log.Logger.Warning($"当前部署平台环境:linux"); + } + else + { + Log.Logger.Warning($"当前部署平台环境:OSX or FreeBSD"); + } + + #endregion + + + app.Run(); + + + + +} +catch (Exception e) +{ + + Log.Logger.Error(e.InnerException is null ? e.Message + e.StackTrace : e.InnerException?.Message + e.InnerException?.StackTrace); +} + + + diff --git a/IRaCIS.Core.API/_ServiceExtensions/AutofacModuleSetup.cs b/IRaCIS.Core.API/_ServiceExtensions/AutofacModuleSetup.cs index 3435a738a..015405bf1 100644 --- a/IRaCIS.Core.API/_ServiceExtensions/AutofacModuleSetup.cs +++ b/IRaCIS.Core.API/_ServiceExtensions/AutofacModuleSetup.cs @@ -1,7 +1,6 @@ 锘縰sing Autofac; using Autofac.Extras.DynamicProxy; using IRaCIS.Core.Application; -using IRaCIS.Core.Application.AOP; using IRaCIS.Core.Application.BackGroundJob; using IRaCIS.Core.Infra.EFCore; using Microsoft.AspNetCore.Http; diff --git a/IRaCIS.Core.API/appsettings.Test_IRC.json b/IRaCIS.Core.API/appsettings.Test_IRC.json index 1563831a3..e75753b45 100644 --- a/IRaCIS.Core.API/appsettings.Test_IRC.json +++ b/IRaCIS.Core.API/appsettings.Test_IRC.json @@ -37,17 +37,6 @@ } }, - "AliyunOSS": { - "RegionId": "cn-shanghai", - "Endpoint": "https://oss-cn-shanghai.aliyuncs.com", - "AccessKeyId": "LTAI5tKvzs7ed3UfSpNk3xwQ", - "AccessKeySecret": "zTIceGEShlZDGnLrCFfIGFE7TXVRio", - "BucketName": "zy-irc-test-store", - "RoleArn": "acs:ram::1899121822495495:role/oss-upload", - "ViewEndpoint": "https://zy-irc-test-store.oss-cn-shanghai.aliyuncs.com", - "Region": "oss-cn-shanghai" - }, - "BasicSystemConfig": { "OpenUserComplexPassword": false, diff --git a/IRaCIS.Core.Application/AOP/AsyncInterceptor.cs b/IRaCIS.Core.Application/AOP/AsyncInterceptor.cs deleted file mode 100644 index d08f1649f..000000000 --- a/IRaCIS.Core.Application/AOP/AsyncInterceptor.cs +++ /dev/null @@ -1,97 +0,0 @@ -锘縰sing Castle.DynamicProxy; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Text; -using System.Threading.Tasks; - -namespace IRaCIS.Core.Application.AOP -{ - public abstract class AsyncInterceptorBase : IInterceptor - { - public AsyncInterceptorBase() - { - } - - public void Intercept(IInvocation invocation) - { - BeforeProceed(invocation); - invocation.Proceed(); - if (IsAsyncMethod(invocation.MethodInvocationTarget)) - { - invocation.ReturnValue = InterceptAsync((dynamic)invocation.ReturnValue, invocation); - } - else - { - AfterProceedSync(invocation); - } - } - - private bool CheckMethodReturnTypeIsTaskType(MethodInfo method) - { - var methodReturnType = method.ReturnType; - if (methodReturnType.IsGenericType) - { - if (methodReturnType.GetGenericTypeDefinition() == typeof(Task<>) || - methodReturnType.GetGenericTypeDefinition() == typeof(ValueTask<>)) - return true; - } - else - { - if (methodReturnType == typeof(Task) || - methodReturnType == typeof(ValueTask)) - return true; - } - return false; - } - - private bool IsAsyncMethod(MethodInfo method) - { - bool isDefAsync = Attribute.IsDefined(method, typeof(AsyncStateMachineAttribute), false); - bool isTaskType = CheckMethodReturnTypeIsTaskType(method); - bool isAsync = isDefAsync && isTaskType; - - return isAsync; - } - - protected object ProceedAsyncResult { get; set; } - - - private async Task InterceptAsync(Task task, IInvocation invocation) - { - await task.ConfigureAwait(false); - await AfterProceedAsync(invocation, false); - } - - private async Task InterceptAsync(Task task, IInvocation invocation) - { - ProceedAsyncResult = await task.ConfigureAwait(false); - await AfterProceedAsync(invocation, true); - return (TResult)ProceedAsyncResult; - } - - private async ValueTask InterceptAsync(ValueTask task, IInvocation invocation) - { - await task.ConfigureAwait(false); - await AfterProceedAsync(invocation, false); - } - - private async ValueTask InterceptAsync(ValueTask task, IInvocation invocation) - { - ProceedAsyncResult = await task.ConfigureAwait(false); - await AfterProceedAsync(invocation, true); - return (TResult)ProceedAsyncResult; - } - - protected virtual void BeforeProceed(IInvocation invocation) { } - - protected virtual void AfterProceedSync(IInvocation invocation) { } - - protected virtual Task AfterProceedAsync(IInvocation invocation, bool hasAsynResult) - { - return Task.CompletedTask; - } - } -} diff --git a/IRaCIS.Core.Application/AOP/QANoticeAOP.cs b/IRaCIS.Core.Application/AOP/QANoticeAOP.cs deleted file mode 100644 index 0e80ae3a4..000000000 --- a/IRaCIS.Core.Application/AOP/QANoticeAOP.cs +++ /dev/null @@ -1,499 +0,0 @@ -锘//using System; -//using Castle.DynamicProxy; -//using IRaCIS.Core.Application.Contracts.Dicom.DTO; -//using IRaCIS.Core.Infra.EFCore; - -//using System.Linq; -//using IRaCIS.Core.Domain.Models; -//using IRaCIS.Core.Domain.Share; - -//namespace IRaCIS.Core.API.Utility.AOP -//{ -//#pragma warning disable -// public class QANoticeAOP : IInterceptor -// { -// private readonly IRepository _qaNoticeRepository; - -// private readonly IRepository _studyRepository; -// private readonly IRepository _userTrialRepository; -// private readonly IRepository _userTrialSiteRepository; -// private readonly IUserInfo _userInfo; - -// public QANoticeAOP(IRepository qaNoticeRepository, -// IUserInfo userInfo, IRepository studyRepository, IRepository userTrialRepository, IRepository userTrialSiteRepository) -// { -// _qaNoticeRepository = qaNoticeRepository; - -// _studyRepository = studyRepository; -// _userTrialRepository = userTrialRepository; -// _userTrialSiteRepository = userTrialSiteRepository; -// _userInfo = userInfo; -// } - -// public void Intercept(IInvocation invocation) -// { -// //澶勭悊鎷︽埅鐨勬柟娉 -// invocation.Proceed(); - -// if (invocation.Method.Name == "UpdateStudyStatus") -// { -// var studyStatus = invocation.Arguments[0] as StudyStatusDetailCommand; - -// var study = _studyRepository.FirstOrDefault(t=>t.Id==studyStatus.StudyId); - - -// if (study.Status == (int)StudyStatus.Uploaded) -// { -// _qaNoticeRepository.Add(new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, - -// NoticeTypeEnum = NoticeType.NotNeedNotice, -// NeedDeal = false, -// StudyStatusStr = "Uploaded", -// Message = $"CRC : {_userInfo.RealName} has uploaded {study.StudyCode} ", -// SendTime = DateTime.Now, -// }); -// } - -// #region 澶勭悊QA閫氱煡妯″潡 - -// //鏌ヨ椤圭洰鐨勫弬涓庤 鍜 璐熻矗site涓婥RC鐢ㄦ埛 -// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList(); - -// // 鎵惧埌璇tudy 鍏宠仈Site 涓嬬殑CRC - -// var crcList = _userTrialSiteRepository.Where(t => -// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList(); - - -// var qaList = trialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).ToList(); - -// var pm = trialUserList.FirstOrDefault(t => t.User.UserTypeEnum == UserTypeEnum.ProjectManager); - - - - -// // CRC =>QA -// if (studyStatus.Status == (int)StudyStatus.QARequested) -// { -// //鎵惧嚭褰撳墠鎿嶄綔鐨凜RC -// //PM 鎴栬卆dmin鍙互浠f浛CRC瑙掕壊 涓嶈兘浠嶤RC鍒楄〃涓煡璇㈢敤鎴 -// //var currentCRC = trialUserList.First(t => t.UserId == _userInfo.Id); - -// var notice = new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, - -// //FromUser = currentCRC.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentCRC.UserType, -// NoticeTypeEnum = NoticeType.CRC_RequestToQA_NoticeQA, -// NeedDeal = true, -// StudyStatusStr = "QA Requested", -// Message = -// $"CRC -> QA : {_userInfo.RealName} request QA {study.StudyCode} , Inquiry can be performed! ", -// SendTime = DateTime.Now, -// }; - -// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser() -// { -// QANoticeId = notice.Id, -// SubjectVisitId = study.Id, -// ToUser = t.User.LastName + " / " + t.User.FirstName, -// ToUserId = t.UserId, -// ToUserType = t.User.UserTypeRole.UserTypeShortName -// })); - -// _qaNoticeRepository.Add(notice); - -// //DealRequestToQA(study.Id); - -// var needDealNoticeList = _qaNoticeRepository.AsQueryable() -// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA).ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); -// } - -// // QA =>CRC 鍚慍RC鎺ㄩ佹秷鎭奖鍍忔湁闂 鍚屾椂浣滀负 requestToQA 鐨勮竟鐣 -// else if (studyStatus.Status == (int)StudyStatus.QAing) -// { -// //鎵惧嚭褰撳墠鎿嶄綔鐨凲A 濡傛灉鏄痯m 鎴栬卆dmin 浠f浛鎿嶄綔 姝ゆ椂浼氭湁闂 鎵浠 璋佷唬鏇匡紝灏变互璋佺殑鍚嶄箟鎵ц -// //var currentQA = qaList.First(t => t.UserId == _userInfo.Id); -// //var currentQA = trialUserList.First(t => t.UserId == _userInfo.Id); - -// //鍦ㄩ」鐩瓹RC鍒楄〃涓瓫閫夊嚭 璐熻矗璇tudy鍏宠仈 site鐨凜RC -// var siteCRCList = _userTrialSiteRepository.Where(t => -// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList(); - -// //鏌ヨ椤圭洰鐨勫弬涓庤 鍜 璐熻矗site涓婥RC鐢ㄦ埛 - - - -// var notice = new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// //FromUser = currentQA.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentQA.UserType, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.QA_InQA_NoticeCRC, -// NeedDeal = true, -// StudyStatusStr = "In QA", -// Message = $"QA -> CRC : {_userInfo.RealName} inquiry {study.StudyCode} ", -// SendTime = DateTime.Now, -// }; - -// siteCRCList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser() -// { -// QANoticeId = notice.Id, -// SubjectVisitId = study.Id, -// ToUser = t.User.LastName + " / " + t.User.FirstName, -// ToUserId = t.UserId, -// ToUserType = t.UserTypeRole.UserTypeShortName -// })); - -// //娣诲姞 鍙戦佺粰CRC鐨勬秷鎭 娑堟伅鍜孋RC鏄 涓瀵瑰 -// _qaNoticeRepository.Add(notice); - - -// //澶勭悊 娑堟伅 鏍囪宸插鐞 -// var needDealNoticeList = _qaNoticeRepository.AsQueryable() -// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && -// (t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_ReUpload_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_QARecordDialogPost_NoticeQA)).ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); - - -// } -// // QA =>QA 缁欒嚜宸辩殑娑堟伅 閫氱煡闇瑕佸尶鍚嶅寲 鍚屾椂浣滀负 requestToQA 鐨勮竟鐣 -// else if (studyStatus.Status == (int)StudyStatus.QAFinish) -// { - -// //鎵惧嚭褰撳墠鎿嶄綔鐨凲A 濡傛灉鏄痯m 鎴栬卆dmin 浠f浛鎿嶄綔 姝ゆ椂浼氭湁闂 鎵浠 璋佷唬鏇匡紝灏变互璋佺殑鍚嶄箟鎵ц -// //var currentQA = qaList.First(t => t.UserId == _userInfo.Id); -// //var currentQA = trialUserList.First(t => t.UserId == _userInfo.Id); - -// //鍙戦佺粰褰撳墠椤圭洰QA鍒楄〃 - -// var notice = new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// //FromUser = currentQA.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentQA.UserType, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.QA_QAPass_NoticeQA, -// NeedDeal = true, -// StudyStatusStr = "QA-Passed", -// Message = -// $"QA -> QA : {_userInfo.RealName} inquiry {study.StudyCode} finished锛孉nonymization can be performed锛", -// SendTime = DateTime.Now, -// }; - -// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser() -// { -// QANoticeId = notice.Id, -// SubjectVisitId = study.Id, -// ToUser = t.User.LastName+" / "+t.User.FirstName, -// ToUserId = t.UserId, -// ToUserType = t.User.UserTypeRole.UserTypeShortName -// })); - -// _qaNoticeRepository.Add(notice); - -// //澶勭悊 娑堟伅 鏍囪宸插鐞 瀛樺湪鎰忓鎯呭喌 qa鍙戠粰CRC鐨 浣嗘槸qa閲岄潰璁剧疆浜 閫氳繃鎴栬呬笉閫氳繃 姝ゆ椂qa鍙戦佺殑娑堟伅涔熻缃负宸插鐞 -// var needDealNoticeList = _qaNoticeRepository.AsQueryable() -// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && -// (t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_ReUpload_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_QARecordDialogPost_NoticeQA || - -// t.NoticeTypeEnum == NoticeType.QA_QARecordDialogPost_NoticeCRC || -// t.NoticeTypeEnum == NoticeType.QA_InQA_NoticeCRC || -// t.NoticeTypeEnum == NoticeType.QA_AddQARecord_NoticeCRC)).ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); - - -// } -// // QA =>CRC 鏆傛椂涓嶇敤鍙戦佹秷鎭粰CRC 鍥犱负CRC 鏆傛椂娌℃湁鍏ュ彛鍥炲 鍚屾椂浣滀负 requestToQA 鐨勮竟鐣 -// else if (studyStatus.Status == (int)StudyStatus.QAFInishNotPass) -// { - -// _qaNoticeRepository.Add(new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.NotNeedNotice, -// NeedDeal = false, -// StudyStatusStr = "QA-Failed", -// Message = $"QA : {_userInfo.RealName} set {study.StudyCode} QA-Failed 锛", -// SendTime = DateTime.Now, -// }); - -// //澶勭悊 娑堟伅 鏍囪宸插鐞 -// var needDealNoticeList = _qaNoticeRepository.AsQueryable() -// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && -// (t.NoticeTypeEnum == NoticeType.CRC_RequestToQA_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_ReUpload_NoticeQA || -// t.NoticeTypeEnum == NoticeType.CRC_QARecordDialogPost_NoticeQA || - - -// t.NoticeTypeEnum == NoticeType.QA_QARecordDialogPost_NoticeCRC || -// t.NoticeTypeEnum == NoticeType.QA_InQA_NoticeCRC || -// t.NoticeTypeEnum == NoticeType.QA_AddQARecord_NoticeCRC)).ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); -// } - -// #endregion - - -// } - -// else if (invocation.Method.Name == "ReUploadSameStudy") -// { -// var studyId = Guid.Parse(invocation.Arguments[0].ToString()); - -// var study = _studyRepository.FirstOrDefault(t => t.Id == studyId); -// var status = study.Status; - -// //澶勭悊CRC 閲嶄紶鏃 QA娑堟伅 - -// if (status == (int)StudyStatus.QAing) -// { -// //鏌ヨ椤圭洰鐨勫弬涓庤 鍜 璐熻矗site涓婥RC鐢ㄦ埛 -// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList(); - -// // 鎵惧埌璇tudy 鍏宠仈Site 涓嬬殑CRC - -// var crcList = _userTrialSiteRepository.Where(t => -// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList(); - -// var qaList = trialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).ToList(); - -// //CRC =>QA CRC鐨勮亴鑳借PM 鎴栬卆dmin浠f浛 -// //if (_userInfo.UserTypeEnumInt == (int)UserType.ClinicalResearchCoordinator) -// { -// //PM 鎴栬卆dmin鍙互浠f浛CRC瑙掕壊 涓嶈兘浠嶤RC鍒楄〃涓煡璇㈢敤鎴 -// //var currentCRC = trialUserList.First(t => t.UserId == _userInfo.Id); - -// var notice = new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// //FromUser = currentCRC.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentCRC.UserType, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.CRC_ReUpload_NoticeQA, -// NeedDeal = true, -// Message = $"CRC -> QA :{_userInfo.RealName} has reuploaded {study.StudyCode} , Need to be inquiry again", -// SendTime = DateTime.Now -// }; - -// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser() -// { -// QANoticeId = notice.Id, -// SubjectVisitId = study.Id, -// ToUser = t.User.LastName+" / "+t.User.FirstName, -// ToUserId = t.UserId, -// ToUserType = t.User.UserTypeRole.UserTypeShortName -// })); - -// _qaNoticeRepository.Add(notice); - -// //杩欓噷浣滀负 QA 璁剧疆 Inqa 鐘舵佺殑鍥炲 鎴栬匭A鍜孋RC瀵硅瘽鐨 -// var needDealNoticeList = _qaNoticeRepository.Where(t => t.SubjectVisitId == study.Id && t.NeedDeal -// && (t.NoticeTypeEnum == NoticeType.QA_InQA_NoticeCRC || t.NoticeTypeEnum == NoticeType.QA_QARecordDialogPost_NoticeCRC)) -// .ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); - -// } -// } -// else -// { -// //涓嶆槸QAing 鐨勯噸浼 涓嶅彂閫乹a娑堟伅 -// return; -// } - - - -// } - -// else if (invocation.Method.Name == "DicomAnonymize") -// { -// var studyId = Guid.Parse(invocation.Arguments[0].ToString()); - -// var study = _studyRepository.FirstOrDefault(t => t.Id == studyId); - -// #region 澶勭悊QA閫氱煡 鍖垮悕鍖栧畬姣 閫氱煡PM - -// //鏌ヨ椤圭洰鐨勫弬涓庤 鍜 璐熻矗site涓婥RC鐢ㄦ埛 -// var trialUserList = _userTrialRepository.Where(t => t.TrialId == study.TrialId).ToList(); - -// // 鎵惧埌璇tudy 鍏宠仈Site 涓嬬殑CRC - -// var crcList = _userTrialSiteRepository.Where(t => -// t.SiteId == study.SiteId && t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && t.TrialId == study.TrialId).ToList(); - -// var qaList = trialUserList.Where(t => t.User.UserTypeEnum == UserTypeEnum.IQC).ToList(); - -// // -// var pm = trialUserList.FirstOrDefault(t => t.User.UserTypeEnum == UserTypeEnum.ProjectManager); - - -// //鎵惧嚭褰撳墠鎿嶄綔鐨凲A 濡傛灉鏄痯m 鎴栬卆dmin 浠f浛鎿嶄綔 姝ゆ椂浼氭湁闂 鎵浠 璋佷唬鏇匡紝灏变互璋佺殑鍚嶄箟鎵ц -// //var currentQA = trialUserList.First(t => -// // t.UserTypeEnum == UserType.IQC && t.UserId == _userInfo.Id); -// //var currentQA = trialUserList.First(t => t.UserId == _userInfo.Id); - -// var notice = new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// //FromUser = currentQA.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentQA.UserType, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.QA_Anonymized_NoticeQA, -// NeedDeal = true, -// StudyStatusStr = "Anonymized", -// //Message = $"QA -> PM :{_userInfo.RealName} has anonymized {study.StudyCode} 锛孎orward can be performed锛侊紒", -// Message = $"QA -> QA :{_userInfo.RealName} has anonymized {study.StudyCode} 锛孎orward can be performed锛侊紒", - -// SendTime = DateTime.Now, - -// }; - -// //notice.QANoticeUserList.Add(new QANoticeUser() -// //{ -// // QANoticeId = notice.Id, -// // StudyId = study.Id, -// // ToUser = pm.UserRealName, -// // ToUserId = pm.UserId, -// // ToUserType = pm.UserType -// //}); - -// qaList.ForEach(t => notice.QANoticeUserList.Add(new QANoticeUser() -// { -// QANoticeId = notice.Id, -// SubjectVisitId = study.Id, -// ToUser = t.User.LastName+" / "+t.User.FirstName, -// ToUserId = t.UserId, -// ToUserType = t.User.UserTypeRole.UserTypeShortName -// })); - -// _qaNoticeRepository.Add(notice); - -// var needDealNoticeList = _qaNoticeRepository.AsQueryable() -// .Where(t => t.SubjectVisitId == study.Id && t.NeedDeal && (t.NoticeTypeEnum == NoticeType.QA_QAPass_NoticeQA)).ToList(); - -// needDealNoticeList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); - - -// #endregion -// } - -// else if (invocation.Method.Name == "ForwardStudy") -// { -// var studyId = Guid.Parse(invocation.Arguments[0].ToString()); - -// var study = _studyRepository.FirstOrDefault(t => t.Id == studyId); - -// //鍖垮悕鍖栨搷浣滀骇鐢熺殑娑堟伅 璁剧疆涓哄凡缁忓鐞 -// _qaNoticeRepository.Add(new QANotice() -// { -// TrialId = study.TrialId, -// SubjectVisitId = study.Id, -// //FromUser = currentQA.UserRealName, -// //FromUserId = _userInfo.Id, -// //FromUserType = currentQA.UserType, -// FromUser = _userInfo.RealName, -// FromUserId = _userInfo.Id, -// FromUserType = _userInfo.UserTypeShortName, -// NoticeTypeEnum = NoticeType.NotNeedNotice, -// NeedDeal = false, -// StudyStatusStr = "Forwarded", -// //Message = $"PM :{_userInfo.RealName} has forwarded {study.StudyCode} 锛", -// Message = $"QA :{_userInfo.RealName} has forwarded {study.StudyCode} 锛", -// SendTime = DateTime.Now, -// }); - -// var needDealList = _qaNoticeRepository.Where(t => -// t.SubjectVisitId == study.Id && t.NeedDeal && t.NoticeTypeEnum == NoticeType.QA_Anonymized_NoticeQA).ToList(); - -// needDealList.ForEach(t => -// { -// t.NeedDeal = false; -// t.DealTime = DateTime.Now; -// _qaNoticeRepository.Update(t); -// }); -// } - -// var success = _qaNoticeRepository.SaveChanges(); - -// if (!success) -// { -// throw new Exception("Send QA message failed"); -// } -// } - - -// } -//} \ No newline at end of file diff --git a/IRaCIS.Core.Application/AOP/TrialStatusAutofacAOP.cs b/IRaCIS.Core.Application/AOP/TrialStatusAutofacAOP.cs deleted file mode 100644 index e1523b6d9..000000000 --- a/IRaCIS.Core.Application/AOP/TrialStatusAutofacAOP.cs +++ /dev/null @@ -1,89 +0,0 @@ -锘縰sing Castle.DynamicProxy; -using EasyCaching.Core; -using IRaCIS.Application.Contracts; -using IRaCIS.Core.Domain.Share; - -namespace IRaCIS.Core.Application.AOP -{ - public class TrialStatusAutofacAOP : IAsyncInterceptor - { - private readonly IEasyCachingProvider _provider; - - public TrialStatusAutofacAOP(IEasyCachingProvider provider) - { - _provider = provider; - } - - - - public void InterceptAsynchronous(IInvocation invocation) - { - invocation.Proceed(); - } - - //杩欓噷AOP 澶勭悊涓や釜鏂规硶 鍒嗗埆鏄 椤圭洰鐨勬坊鍔犲拰鏇存柊銆侀」鐩姸鎬佺殑鍙樻洿 - - public void InterceptAsynchronous(IInvocation invocation) - { - - - //澶勭悊鎷︽埅鐨勬柟娉 - invocation.Proceed(); - - - - dynamic result = invocation.ReturnValue; - - //鎺ュ彛鎴愬姛浜嗭紝鎵嶄慨鏀圭紦瀛 - if (!result.IsSuccess) - { - return; - } - - #region 澶勭悊椤圭洰鍒楄〃鐨勬煡璇 鍦ㄥ墠绔晫闈㈠凡缁忓湪鏌愪釜鐣岄潰锛屼絾鏄湇鍔″櫒閲嶇疆浜嗭紝姝ゆ椂娌℃湁缂撳瓨椤圭洰淇℃伅,鎺ュ彛涓嶈兘姝g‘杩斿洖锛屽洜鏁呴噰鐢紝鍚姩鏃舵煡璇紝姣忓ぉ鏌ヨ涓娆★紝缂撳瓨涓澶╋紝鐒跺悗椤圭洰娣诲姞銆佹洿鏀圭姸鎬佹椂锛屽強鏃舵洿鏂 - - //if (invocation.Method.Name == "GetTrialList") - //{ - // //鍦ㄦ 灏嗗綋鍓嶆煡璇㈢殑椤圭洰Id 鍜屽搴旂殑椤圭洰鐘舵佽繘琛岀紦瀛 - // dynamic result = invocation.ReturnValue; - // foreach (var item in result.CurrentPageData) - // { - // _provider.Remove(item.Id.ToString()); - // _provider.Set(item.Id.ToString(), item.TrialStatusStr.ToString(), TimeSpan.FromDays(1)); - // } - //} - - #endregion - - if (invocation.Method.Name == "AddOrUpdateTrial") - { - //濡傛灉鏄坊鍔 閭d箞灏嗗搴旂殑鍒濆鐘舵佸姞杩涘幓 鏇存柊鐘舵佹槸鍗曠嫭鎿嶄綔鐨 - - var trialModel = (invocation.Arguments[0] as TrialCommand).IfNullThrowConvertException(); - if (trialModel.Id == null || trialModel.Id == Guid.Empty) - { - _provider.Set(result.Data.Id.ToString(), StaticData.TrialState.TrialOngoing, TimeSpan.FromDays(1)); - } - - - } - // 鏇存柊缂撳瓨 - else if (invocation.Method.Name == "UpdateTrialStatus") - { - //椤圭洰鐘舵佹洿鏂帮紝涔熼渶瑕佸強鏃舵洿鏂 - _provider.Set(invocation.Arguments[0].ToString(), invocation.Arguments[1].ToString(), TimeSpan.FromDays(1)); - - ////Test鍙傛暟鏄惁绗﹀悎瑕佹眰 - //var tt = invocation.Arguments[0].ToString(); - //var cc = _provider.Get(invocation.Arguments[0].ToString()); - - } - - } - - public void InterceptSynchronous(IInvocation invocation) - { - invocation.Proceed(); - } - } -} \ No newline at end of file diff --git a/IRaCIS.Core.Application/BusinessFilter/LogActionFilter.cs b/IRaCIS.Core.Application/BusinessFilter/LogActionFilter.cs deleted file mode 100644 index 64f11585b..000000000 --- a/IRaCIS.Core.Application/BusinessFilter/LogActionFilter.cs +++ /dev/null @@ -1,81 +0,0 @@ -锘//using System.Diagnostics; -//using IRaCIS.Application.Interfaces; -//using IRaCIS.Application.Contracts; -//using IRaCIS.Core.Infra.EFCore; -//using IRaCIS.Core.Infrastructure.Extention; -//using Microsoft.AspNetCore.Mvc; -//using Microsoft.AspNetCore.Mvc.Filters; -//using Microsoft.Extensions.Logging; -//using Newtonsoft.Json; - -//namespace IRaCIS.Core.Application.Filter -//{ - -// [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)] -// public class LogFilter : Attribute -// { -// } -// public class LogActionFilter : IAsyncActionFilter -// { -// private readonly ILogService _logService; -// private readonly IUserInfo _userInfo; -// private readonly ILogger _logger; - -// public LogActionFilter(ILogService logService, IUserInfo userInfo , ILogger logger) -// { -// _logService = logService; -// _userInfo = userInfo; -// _logger = logger; -// } - -// public Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) -// { - -// if (context.ActionDescriptor.EndpointMetadata!=null&& context.ActionDescriptor.EndpointMetadata.Any(m => m.GetType() == typeof(LogFilter))) -// { -// return LogAsync(context, next); -// } -// return next(); -// } - -// public async Task LogAsync(ActionExecutingContext context, ActionExecutionDelegate next) -// { -// var sw = new Stopwatch(); -// sw.Start(); - -// dynamic actionResult = (await next()).Result; -// sw.Stop(); -// var args = JsonConvert.SerializeObject(context.ActionArguments); -// var result = JsonConvert.SerializeObject(actionResult?.Value); - -// var attr = (ApiExplorerSettingsAttribute)context.ActionDescriptor.EndpointMetadata.FirstOrDefault(m => m.GetType() == typeof(ApiExplorerSettingsAttribute)); -// var groupName = attr?.GroupName; -// var res = actionResult?.Value as IResponseOutput; -// var input = new SystemLogDTO -// { -// ClientIP = string.Empty, -// OptUserId = _userInfo.Id, -// OptUserName = _userInfo.UserName, -// ApiPath = context.ActionDescriptor.AttributeRouteInfo.Template.ToLower(), -// Params = args, -// Result = result, -// RequestTime = DateTime.Now, -// ElapsedMilliseconds = sw.ElapsedMilliseconds, -// Status =res?.IsSuccess?? false, -// Message = res?.ErrorMessage, -// LogCategory = groupName -// }; - -// try -// { -// _logService.SaveLog2Db(input); -// } -// catch (Exception ex) -// { - -// _logger.LogError(ex.Message); -// } - -// } -// } -//} diff --git a/IRaCIS.Core.Application/BusinessFilter/TrialAuditFilter.cs b/IRaCIS.Core.Application/BusinessFilter/TrialAuditFilter.cs deleted file mode 100644 index a614a1e6d..000000000 --- a/IRaCIS.Core.Application/BusinessFilter/TrialAuditFilter.cs +++ /dev/null @@ -1,1575 +0,0 @@ -锘//using IRaCIS.Application.Contracts; -//using IRaCIS.Core.Application.Contracts.Dicom.DTO; -//using IRaCIS.Core.Application.Contracts.DTO; -//using IRaCIS.Core.Infra.EFCore; -//using IRaCIS.Core.Domain.Models; -//using IRaCIS.Core.Domain.Share; -//using IRaCIS.Core.Infrastructure.Extention; -//using Microsoft.AspNetCore.Mvc.Filters; -//using Microsoft.EntityFrameworkCore; -//using Microsoft.Extensions.Logging; -//using IRaCIS.Core.Infrastructure; -//using IRaCIS.Core.Application.Contracts; - -//namespace IRaCIS.Core.Application.Filter -//{ -//#pragma warning disable CS8618 - -//#pragma warning disable CS8062 -// //by zhouhang 2021.08 - - -//瀹¤绫诲瀷澶х被 -using Microsoft.AspNetCore.Mvc.Filters; - -public enum AuditType -{ - TrialAudit = 0, - SubjectAudit = 1, - StudyAudit = 2 -} - -//鍏蜂綋瀹¤鎿嶄綔 -public enum AuditOptType -{ - //DeleteTrial = 2, - AddOrUpdateTrial = 0, - - AddTrialSiteSurvey = 1, - - //鍙備笌浜哄憳 - AddTrialStaff = 3, - DeleteTrailStaff = 4, - - //Site - AddTrialSite = 5, - DeleteTrialSite = 6, - - //Site CRC - AddTrialSiteCRC = 7, - DeleteTrialSiteCRC = 8, - - //璁胯璁″垝 - AddOrUpdateTrialVisitPlanItem = 9, - DeleteTrialVisitPlanItem = 10, - ConfirmTrialVisitPlan = 11, - - //椤圭洰妯℃澘 - AddOrUpdateTrialTemplate = 12, - DeleteTrialTemplate = 13, - - //subject 璁胯璁″垝 - AddOrUpdateSubjectOutPlanVisit = 14, - DeleteSubjectOutPlanVisit = 15, - SetSVExecuted = 16, - - AddOrUpdateSubject = 17, - DeleteSubject = 18, - - //褰卞儚涓婁紶 - UploadImage = 19, - - //鍙樻洿QA鐘舵 姣斿璁剧疆涓篞A涓 QA缁撴潫閫氳繃銆佷笉閫氳繃 - ChangeStudyStatus = 20, - - //鍖垮悕鍖 - Anonymized = 22, - - //杞彂 - Forwarded = 24 -} - -[AttributeUsage(AttributeTargets.Method)] -public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilter -{ - private readonly AuditType _auditType; - private readonly AuditOptType _auditOptType; - public TrialAuditAttribute(AuditType auditType, AuditOptType auditOptType) - { - _auditType = auditType; - _auditOptType = auditOptType; - } - public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) - { - await next(); - - } -} - -// [AttributeUsage(AttributeTargets.Method)] -// public class TrialAuditAttribute : Attribute,/*IActionFilter, */IAsyncActionFilter -// { -// private readonly AuditType _auditType; -// private readonly AuditOptType _auditOptType; -// public IDictionary _actionArguments; - -// #region 鏍规嵁涓嶅悓鎺ュ彛鏋勯犵殑灞炴 - -// private TrialAuditAttribute _attr; - -// private string _userIdStr; - -// private string _userRealName; - -// private IRepository _auditRepository; - -// private TrialUser _userTrial; - -// private TrialSiteUser _userTrialSite; - -// private VisitStage _visitPlan; - -// //private QATrialTemplate _qATrailTemplate; - -// private Subject _subject; - -// private SubjectVisit _subjectVisit; - -// private TrialSite _trialSite; - -// private DicomStudy _study; - -// private IRepository _studyRepository; - -// //private IRaCISDBContext _dbContext; - -// //private IDbContextTransaction transaction; - - -// #endregion - -// public TrialAuditAttribute(AuditType auditType, AuditOptType auditOptType) -// { -// _auditType = auditType; -// _auditOptType = auditOptType; -// } - - -// #region 鍚屾鐗堟湰 搴熷純 - -// //public void OnActionExecuted(ActionExecutedContext executedcontext) -// //{ - -// // //涓婁紶褰卞儚鎺ュ彛杩斿洖鍊肩被鍨嬬壒娈 闇瑕佸崟鐙鐞 -// // if (_attr._auditOptType == AuditOptType.UploadImage) -// // { -// // //鎺ュ彛鍙傛暟 -// // var archiveStudyInfo = (ArchiveStudyCommand)_actionArguments.Values.ToList()[0]; - -// // //鎺ュ彛杩斿洖缁撴灉 鍥犱负涓婁紶鎴愬姛鍜屼笉鎴愬姛 娉涘瀷绫诲瀷涓嶄竴鏍 -// // dynamic archive = executedcontext.Result; -// // if (archive == null) -// // { -// // var logger = (ILogger)executedcontext.HttpContext.RequestServices.GetService( -// // typeof(ILogger)); - -// // logger.LogError("褰卞儚涓婁紶锛孫nActionExecuted Reuslt 涓簄ull"); -// // return; -// // } -// // var archiveResult = (IResponseOutput)archive.Value; - - - -// // if (archiveResult.IsSuccess) -// // { -// // _studyRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // var successResult = (IResponseOutput)archiveResult; - -// // _study = _studyRepository.GetAll().First(t => -// // t.Id == successResult.Data.ArchivedDicomStudies.ToList()[0].Id); - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _study.TrialId, -// // SubjectId = _study.SubjectId, -// // StudyId = _study.Id, -// // AuditType = (int)AuditType.StudyAudit, -// // Note = $"{ _userRealName} 鍔ㄤ綔鍙樻洿浜 { _study.StudyCode} 妫鏌ョ姸鎬佷负 {DealStudyStatus(_study.Status)} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); - -// // _auditRepository.SaveChanges(); -// // } - -// // return; -// // } - -// // //鎺ュ彛杩斿洖缁撴灉 -// // dynamic actionResult = executedcontext.Result; -// // var result = (IResponseOutput)actionResult.Value;//姝ゅ瀹¤鍙秹鍙婂埌娣诲姞鏇存柊鍜屽垹闄わ紝 缁熶竴浜嗙浉鍏虫帴鍙g殑杩斿洖缁撴灉锛屾墠鑳藉湪姝ゅ己鍒惰浆鎹 - - - -// // switch (_attr._auditType) -// // { -// // //椤圭洰瀹¤ -// // case AuditType.TrialAudit: - -// // switch (_attr._auditOptType) -// // { -// // //椤圭洰鐨勬坊鍔犲拰鏇存柊鎺ュ彛 -// // case AuditOptType.AddOrUpdateTrial: - -// // //鎺ュ彛鍙傛暟 -// // var trialInfo = (TrialCommand)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // //鍒ゆ柇鏄坊鍔犺繕鏄洿鏂 -// // TrialId = trialInfo.Id == null ? Guid.Parse(result.Data) : trialInfo.Id.Value, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = trialInfo.Id == null ? $"{ _userRealName} 娣诲姞浜嗛」鐩 {trialInfo.Code} " : $"{ _userRealName} 鏇存柊浜嗛」鐩 {trialInfo.Code} 鍩烘湰淇℃伅 ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // //娣诲姞椤圭洰杩愮淮浜哄憳 -// // case AuditOptType.AddTrialStaff: - -// // //鎺ュ彛鍙傛暟 -// // var trialUsers = (List)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = trialUsers[0].TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 娣诲姞浜嗛」鐩繍缁翠汉鍛 {string.Join(',', trialUsers.Select(t => t.UserRealName).ToList())} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; - -// // //娣诲姞鐮旂┒涓績 -// // case AuditOptType.AddTrialSite: -// // //鎺ュ彛鍙傛暟 -// // var trialSites = (List)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // //鏌ヨsite淇℃伅 -// // var siteIds = trialSites.Select(t => t.SiteId).ToList(); -// // var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// // var siteNames = _siteRepository.Where(t => siteIds.Contains(t.Id)).Select(u => u.SiteName); - -// // _auditRepository.Add(new TrialAudit() -// // { -// // //鍒ゆ柇鏄坊鍔犺繕鏄洿鏂 -// // TrialId = trialSites[0].TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 娣诲姞浜嗛」鐩爺绌朵腑蹇 {string.Join(',', siteNames)} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; - -// // //鐮旂┒涓績娣诲姞杩愮淮浜哄憳 -// // case AuditOptType.AddTrialSiteCRC: -// // //鎺ュ彛鍙傛暟 -// // var trialSiteCRCs = (List)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // //鏌ヨsite淇℃伅 -// // var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// // var siteName = _siteRepository.GetAll().First(t => t.Id == trialSiteCRCs[0].SiteId).SiteName; - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = trialSiteCRCs[0].TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 涓簕 siteName } 娣诲姞浜嗚繍缁翠汉鍛 {string.Join(',', trialSiteCRCs.Select(t => t.UserRealName).ToList())}", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; - -// // //鍒犻櫎椤圭洰杩愮淮浜哄憳 -// // case AuditOptType.DeleteTrailStaff: - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _userTrial.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 绉婚櫎浜嗛」鐩弬涓庝汉鍛 {_userTrial.UserRealName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // //鍒犻櫎椤圭洰site -// // case AuditOptType.DeleteTrialSite: - -// // if (result.IsSuccess) -// // { -// // //鏌ヨsite淇℃伅 -// // var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// // var siteName = _siteRepository.GetAll().First(t => t.Id == _trialSite.SiteId).SiteName; - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _trialSite.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 绉婚櫎浜嗙爺绌朵腑蹇 {siteName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // //鍒犻櫎椤圭洰Site CRC -// // case AuditOptType.DeleteTrialSiteCRC: - -// // if (result.IsSuccess) -// // { -// // //鏌ヨsite淇℃伅 -// // var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// // var siteName = _siteRepository.GetAll().First(t => t.Id == _userTrial.SiteId).SiteName; - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _userTrial.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 绉婚櫎浜 {siteName} 鐨勮繍缁翠汉鍛 {_userTrial.UserRealName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } -// // break; - -// // //娣诲姞璁胯璁″垝Item -// // case AuditOptType.AddOrUpdateTrialVisitPlanItem: -// // //鎺ュ彛鍙傛暟 -// // var visitPlanItem = (VisitPlanCommand)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = visitPlanItem.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = visitPlanItem.Id == null ? $"{ _userRealName} 娣诲姞浜嗚瑙嗚鍒掗」 {visitPlanItem.VisitName} " : $"{ _userRealName} 鏇存柊浜嗚瑙嗚鍒掗」涓 {visitPlanItem.VisitName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // //鍒犻櫎璁胯璁″垝Item -// // case AuditOptType.DeleteTrialVisitPlanItem: - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _visitPlan.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 绉婚櫎浜嗚瑙嗚鍒掗」 {_visitPlan.VisitName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } -// // break; - -// // //纭浜嗚瑙嗚鍒 -// // case AuditOptType.ConfirmTrialVisitPlan: -// // var trialId = (Guid)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = trialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 纭浜嗚瑙嗚鍒掞紝涓嶅厑璁镐慨鏀 ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // //娣诲姞浜哘A妯℃澘 -// // case AuditOptType.AddOrUpdateTrialTemplate: -// // //鎺ュ彛鍙傛暟 -// // var trialQATemplate = (TrialQATemplateAddCommand)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { - -// // TrialId = trialQATemplate.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = trialQATemplate.Id == null ? $"{ _userRealName} 娣诲姞浜哘A妯℃澘 {trialQATemplate.Name} " : $"{ _userRealName} 鏇存柊浜哘A妯℃澘 {trialQATemplate.Name} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - - -// // break; -// // //鍒犻櫎椤圭洰妯℃澘 -// // case AuditOptType.DeleteTrialTemplate: - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { - -// // TrialId = _qATrailTemplate.TrialId, -// // SubjectId = Guid.Empty, -// // AuditType = (int)AuditType.TrialAudit, -// // Note = $"{ _userRealName} 绉婚櫎浜哘A妯℃澘 {_qATrailTemplate.Name} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } -// // break; - -// // } - -// // break; -// // //鍙楄瘯鑰呭璁 -// // case AuditType.SubjectAudit: - - -// // switch (_attr._auditOptType) -// // { -// // // 娣诲姞鎴栬呮洿鏂板彈璇曡 -// // case AuditOptType.AddOrUpdateSubject: - -// // //鎺ュ彛鍙傛暟 -// // var subject = (SubjectCommand)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = subject.TrialId, -// // SubjectId = subject.Id == null ? Guid.Parse(result.Data) : subject.Id.Value, -// // AuditType = (int)AuditType.SubjectAudit, -// // Note = subject.Id == null ? $"{ _userRealName} 娣诲姞浜嗗彈璇曡 {subject.LastName + subject.FirstName} 骞跺垵濮嬪寲浜嗚瑙嗚鍒" : $"{ _userRealName} 瀵瑰彈璇曡 { subject.LastName + subject.FirstName} 淇℃伅杩涜浜嗘洿鏂 ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // // 鍒犻櫎鍙楄瘯鑰 -// // case AuditOptType.DeleteSubject: -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _subject.TrialId, -// // SubjectId = _subject.Id, -// // AuditType = (int)AuditType.SubjectAudit, -// // Note = $"{ _userRealName} 绉婚櫎浜嗗彈璇曡 {_subject.LastName + _subject.FirstName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // // 鍙楄瘯鑰呰鍒掑璁胯 -// // case AuditOptType.AddOrUpdateSubjectOutPlanVisit: - -// // //鎺ュ彛鍙傛暟 -// // var subjectVisit = (SubjectVisitCommand)_actionArguments.Values.ToList()[0]; - -// // if (result.IsSuccess) -// // { -// // var _subjectRepository = -// // (IRepository)executedcontext.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _subject = _subjectRepository.FirstOrDefault(t => t.Id == subjectVisit.SubjectId); - -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _subject.TrialId, -// // SubjectId = _subject.Id, -// // AuditType = (int)AuditType.SubjectAudit, -// // Note = subjectVisit.Id == null ? $"{ _userRealName} 涓哄彈璇曡 {_subject.LastName + _subject.FirstName} 娣诲姞浜嗚鍒掑璁胯 {subjectVisit.VisitName}" : $"{ _userRealName} 鏇存柊鍙楄瘯鑰 {_subject.LastName + _subject.FirstName} 璁″垝澶栬瑙唟subjectVisit.VisitName}", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // // 鍒犻櫎璁″垝澶栬瑙 -// // case AuditOptType.DeleteSubjectOutPlanVisit: - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _subjectVisit.TrialId, -// // SubjectId = _subject.Id, -// // AuditType = (int)AuditType.SubjectAudit, -// // Note = $"{ _userRealName} 绉婚櫎浜嗗彈璇曡厈_subject.LastName + _subject.FirstName} 璁″垝澶栬瑙 {_subjectVisit.VisitName} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; -// // // 浜哄伐璁剧疆宸叉墽琛 -// // case AuditOptType.SetSVExecuted: - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _subjectVisit.TrialId, -// // SubjectId = _subject.Id, -// // AuditType = (int)AuditType.SubjectAudit, -// // Note = $"{ _userRealName} 灏嗗彈璇曡 {_subject.LastName + _subject.FirstName} 璁胯 {_subjectVisit.VisitName} 璁剧疆涓哄凡鎵ц ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - - -// // break; -// // } - -// // break; - -// // //妫鏌ュ璁 -// // case AuditType.StudyAudit: -// // _studyRepository = -// // (IRepository)executedcontext.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // switch (_attr._auditOptType) -// // { - -// // case AuditOptType.ChangeStudyStatus: - -// // //鎺ュ彛鍙傛暟 -// // var studyStatusInfo = (StudyStatusDetailCommand)_actionArguments.Values.ToList()[0]; - -// // _study = _studyRepository.FirstOrDefault(t => t.Id == studyStatusInfo.StudyId); - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _study.TrialId, -// // SubjectId = _study.SubjectId, -// // StudyId = _study.Id, -// // AuditType = (int)AuditType.StudyAudit, -// // Note = $"{ _userRealName} 鍔ㄤ綔鍙樻洿浜 { _study.StudyCode} 妫鏌ョ姸鎬佷负 {DealStudyStatus(_study.Status)} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - -// // break; - -// // case AuditOptType.Anonymized: - -// // case AuditOptType.Forwarded: - -// // //鎺ュ彛鍙傛暟 -// // var studyId = (Guid)_actionArguments.Values.ToList()[0]; - -// // _study = _studyRepository.FirstOrDefault(t => t.Id == studyId); - -// // if (result.IsSuccess) -// // { -// // _auditRepository.Add(new TrialAudit() -// // { -// // TrialId = _study.TrialId, -// // SubjectId = _study.SubjectId, -// // StudyId = _study.Id, -// // AuditType = (int)AuditType.StudyAudit, -// // Note = $"{ _userRealName} 鍔ㄤ綔鍙樻洿浜 { _study.StudyCode} 妫鏌ョ姸鎬佷负 {DealStudyStatus(_study.Status)} ", -// // Detail = string.Empty, -// // OptUserId = Guid.Parse(_userIdStr), -// // OptUser = _userRealName, -// // OptTime = DateTime.Now -// // }); -// // } - - -// // break; -// // } - -// // break; - -// // } - -// // _auditRepository.SaveChanges(); - -// //} - - -// //public void OnActionExecuting(ActionExecutingContext context) -// //{ -// // //_dbContext = (IRaCISDBContext)context.HttpContext.RequestServices.GetService(typeof(IRaCISDBContext)); - - -// // _actionArguments = context.ActionArguments; - -// // _attr = (TrialAuditAttribute)context.ActionDescriptor.EndpointMetadata.First(m => m.GetType() == typeof(TrialAuditAttribute)); - -// // _userIdStr = context.HttpContext.User.Claims.First(t => t.Type == "id")?.Value ?? Guid.Empty.ToString(); -// // _userRealName = context.HttpContext.User.Claims.First(t => t.Type == "realName")?.Value ?? string.Empty; - -// // //鑾峰彇鎺ュ彛浠撳偍 -// // _auditRepository = (IRepository)context.HttpContext.RequestServices.GetService(typeof(IRepository)); - - - -// // switch (_attr._auditType) -// // { -// // //椤圭洰瀹¤ -// // case AuditType.TrialAudit: - -// // switch (_attr._auditOptType) -// // { -// // //鍒犻櫎椤圭洰杩愮淮浜哄憳 -// // case AuditOptType.DeleteTrailStaff: - -// // // 鍒犻櫎椤圭洰Site CRC -// // case AuditOptType.DeleteTrialSiteCRC: - -// // //鎺ュ彛鍙傛暟 -// // var userTrialId = (Guid)_actionArguments.Values.ToList()[0]; - -// // var _userTrialRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _userTrial = _userTrialRepository.GetAll().First(t => t.Id == userTrialId); -// // break; - - -// // //鍒犻櫎椤圭洰site -// // case AuditOptType.DeleteTrialSite: - -// // //鎺ュ彛鍙傛暟 -// // var trialSiteId = (Guid)_actionArguments.Values.ToList()[0]; - -// // var _TrialsiteRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _trialSite = _TrialsiteRepository.GetAll().First(t => t.Id == trialSiteId); -// // break; - -// // case AuditOptType.DeleteTrialVisitPlanItem: - -// // //鎺ュ彛鍙傛暟 -// // var visitPlanId = (Guid)_actionArguments.Values.ToList()[0]; - -// // var _visitPlanRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _visitPlan = _visitPlanRepository.GetAll().First(t => t.Id == visitPlanId); - -// // break; -// // case AuditOptType.DeleteTrialTemplate: - -// // //鎺ュ彛鍙傛暟 -// // var qATrailTemplateId = (Guid)_actionArguments.Values.ToList()[0]; -// // var _qATrailTemplateRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _qATrailTemplate = _qATrailTemplateRepository.GetAll() -// // .FirstOrDefault(t => t.Id == qATrailTemplateId); - -// // break; - -// // } - -// // break; - -// // //鍙楄瘯鑰呭璁 -// // case AuditType.SubjectAudit: - -// // switch (_auditOptType) -// // { -// // case AuditOptType.DeleteSubject: -// // //鎺ュ彛鍙傛暟 -// // var subjectId = (Guid)_actionArguments.Values.ToList()[0]; - -// // var _subjectRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _subject = _subjectRepository.FirstOrDefault(t => t.Id == subjectId); - -// // break; - -// // case AuditOptType.DeleteSubjectOutPlanVisit: -// // case AuditOptType.SetSVExecuted: - -// // //鎺ュ彛鍙傛暟 -// // var subjectVisitId = (Guid)_actionArguments.Values.ToList()[0]; - -// // var _subjectVisitRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _subjectVisit = _subjectVisitRepository.FirstOrDefault(t => t.Id == subjectVisitId); - -// // _subjectRepository = -// // (IRepository)context.HttpContext.RequestServices.GetService( -// // typeof(IRepository)); - -// // _subject = _subjectRepository.FirstOrDefault(t => t.Id == _subjectVisit.SubjectId); - -// // break; -// // } -// // break; - - -// // //妫鏌ュ璁 -// // case AuditType.StudyAudit: - -// // switch (_attr._auditOptType) -// // { -// // case AuditOptType.UploadImage: - -// // break; -// // } -// // break; - -// // } - -// //} -// #endregion - -// public static string DealStudyStatus(int status) -// { - -// var message = string.Empty; -// switch (status) -// { -// case (int)StudyStatus.Uploaded: -// message = "Uploaded"; -// break; - -// case (int)StudyStatus.QARequested: - -// message = "QA Requested"; -// break; -// case (int)StudyStatus.QAing: - -// message = "In QA"; -// break; - -// //case (int)StudyStatus.Abandon: -// // message = "Study has abandon"; -// // break; - -// case (int)StudyStatus.QAFinish: -// message = "QA Completed Passed"; -// break; - -// case (int)StudyStatus.QAFInishNotPass: -// message = "QA Completed Failed"; -// break; - -// case (int)StudyStatus.Anonymizing: -// message = "Anonymizing"; -// break; - -// case (int)StudyStatus.Anonymized: -// message = "Anonymized"; -// break; - -// case (int)StudyStatus.AnonymizeFailed: -// message = "Anonymize Failed"; -// break; - -// case (int)StudyStatus.Forwarding: -// message = "Forwarding"; -// break; - -// case (int)StudyStatus.Forwarded: -// message = "Forwarded "; -// break; - -// case (int)StudyStatus.ForwardFailed: -// message = "Forward Failed "; -// break; -// } - -// return message; -// } - -// public async Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next) -// { -// // 寮鍚疉OP浜嬪姟(瀹¤娑堟伅璁板綍鍜 娣诲姞鏇存柊璁板綍 鍦ㄤ竴涓簨鍔¢噷闈紝涓嶅啀鏄垎寮鐨勪簨鍔) -// //var _dbContext = (IRaCISDBContext)context.HttpContext.RequestServices.GetService(typeof(IRaCISDBContext)); - -// //var strategy = _dbContext.Database.CreateExecutionStrategy(); - -// var _dbContext = (IRaCISDBContext)context.HttpContext.RequestServices.GetService(typeof(IRaCISDBContext)); - -// var strategy = _dbContext.Database.CreateExecutionStrategy(); - -// await strategy.Execute(async () => -// { -// var currentTransaction = _dbContext.Database.CurrentTransaction; - -// var transaction = currentTransaction ?? _dbContext.Database.BeginTransaction(System.Data.IsolationLevel.ReadUncommitted); - -// #region 鎵ц鏂规硶鍓 - -// _actionArguments = context.ActionArguments; - -// _attr = (TrialAuditAttribute)context.ActionDescriptor.EndpointMetadata.First(m => m.GetType() == typeof(TrialAuditAttribute)); - -// _userIdStr = context.HttpContext.User.Claims.First(t => t.Type == "id")?.Value ?? Guid.Empty.ToString(); -// _userRealName = context.HttpContext.User.Claims.First(t => t.Type == "realName")?.Value ?? string.Empty; - -// //鑾峰彇鎺ュ彛浠撳偍 -// _auditRepository = (IRepository)context.HttpContext.RequestServices.GetService(typeof(IRepository)); - -// switch (_attr._auditType) -// { -// //椤圭洰瀹¤ -// case AuditType.TrialAudit: - -// switch (_attr._auditOptType) -// { -// //鍒犻櫎椤圭洰杩愮淮浜哄憳 -// case AuditOptType.DeleteTrailStaff: - -// //鎺ュ彛鍙傛暟 -// var userTrial = (Guid)_actionArguments.Values.ToList()[0]; - -// var _userTrialRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _userTrial = _userTrialRepository.AsQueryable().Include(t => t.User).FirstOrDefault(t => t.Id == userTrial); -// break; - -// // 鍒犻櫎椤圭洰Site CRC -// case AuditOptType.DeleteTrialSiteCRC: - -// //鎺ュ彛鍙傛暟 -// var userTrialSiteId = (Guid)_actionArguments.Values.ToList()[0]; - -// var _userTrialSiteRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _userTrialSite = _userTrialSiteRepository.AsQueryable().Include(t => t.User).FirstOrDefault(t => t.Id == userTrialSiteId); -// break; - - -// //鍒犻櫎椤圭洰site -// case AuditOptType.DeleteTrialSite: - -// //鎺ュ彛鍙傛暟 -// var trialSiteId = (Guid)_actionArguments.Values.ToList()[0]; - -// var _TrialsiteRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _trialSite = _TrialsiteRepository.AsQueryable().Include(t => t.Site).FirstOrDefault(t => t.Id == trialSiteId); -// break; - -// case AuditOptType.DeleteTrialVisitPlanItem: - -// //鎺ュ彛鍙傛暟 -// var visitPlanId = (Guid)_actionArguments.Values.ToList()[0]; - -// var _visitPlanRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _visitPlan = _visitPlanRepository.FirstOrDefault(t => t.Id == visitPlanId).IfNullThrowException(); - -// break; -// case AuditOptType.DeleteTrialTemplate: - - - -// break; - -// } - -// break; - -// //鍙楄瘯鑰呭璁 -// case AuditType.SubjectAudit: - -// switch (_auditOptType) -// { -// case AuditOptType.DeleteSubject: -// //鎺ュ彛鍙傛暟 -// var subjectId = (Guid)_actionArguments.Values.ToList()[0]; - -// var _subjectRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _subject = _subjectRepository.FirstOrDefault(t => t.Id == subjectId).IfNullThrowException(); - -// break; - -// case AuditOptType.DeleteSubjectOutPlanVisit: -// case AuditOptType.SetSVExecuted: - -// //鎺ュ彛鍙傛暟 -// var subjectVisitId = (Guid)_actionArguments.Values.ToList()[0]; - -// var _subjectVisitRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _subjectVisit = _subjectVisitRepository.FirstOrDefault(t => t.Id == subjectVisitId).IfNullThrowException(); - -// _subjectRepository = -// (IRepository)context.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _subject = _subjectRepository.FirstOrDefault(t => t.Id == _subjectVisit.SubjectId).IfNullThrowException(); - -// break; -// } -// break; - - -// //妫鏌ュ璁 -// case AuditType.StudyAudit: - -// switch (_attr._auditOptType) -// { -// case AuditOptType.UploadImage: - -// break; -// } -// break; - -// } - -// #endregion - -// //鑾峰彇瀹為檯鎵ц鏂规硶next() 鐨勭粨鏋 -// ActionExecutedContext executedcontext = await next(); - -// #region 鏂规硶鎵ц鍚 - -// //涓婁紶褰卞儚鎺ュ彛杩斿洖鍊肩被鍨嬬壒娈 闇瑕佸崟鐙鐞 -// if (_attr._auditOptType == AuditOptType.UploadImage) -// { - -// //鎺ュ彛鍙傛暟 -// var archiveStudyInfo = (ArchiveStudyCommand)_actionArguments.Values.ToList()[0]; - -// if (executedcontext.Exception != null) -// { -// var logger = (ILogger)executedcontext.HttpContext.RequestServices.GetService( -// typeof(ILogger)); - -// logger!.LogError("褰卞儚涓婁紶 涓棿鍙戠敓寮傚父", executedcontext.Exception.StackTrace); - -// return; -// } - -// //鎺ュ彛杩斿洖缁撴灉 鍥犱负涓婁紶鎴愬姛鍜屼笉鎴愬姛 娉涘瀷绫诲瀷涓嶄竴鏍 -// dynamic archive = executedcontext.Result; - - -// var archiveResult = (IResponseOutput)archive.Value; - -// if (archiveResult.IsSuccess) -// { - - -// _studyRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); - -// _auditRepository = (IRepository)context.HttpContext.RequestServices.GetService(typeof(IRepository)); - -// var successResult = (IResponseOutput)archiveResult; - -// var studyList = _studyRepository.Where(t => t.SubjectVisitId == successResult.Data.ArchivedDicomStudies.ToList()[0].SubjectVisitId).ToList(); - -// studyList.ForEach(study => -// { -// var mes = study.Status == (int)StudyStatus.Uploaded ? "涓婁紶浜" : "閲嶄紶浜"; -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = study.TrialId, -// SubjectId = study.SubjectId, -// StudyId = study.Id, -// AuditType = (int)AuditType.StudyAudit, -// //Note = $"{ _userRealName} 鍔ㄤ綔鍙樻洿浜 { _study.StudyCode} 妫鏌ョ姸鎬佷负 {DealStudyStatus(_study.Status)} ", -// Note = $"{ _userRealName} {mes} { study.StudyCode} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// }); - - - -// _auditRepository.SaveChanges(); - -// transaction.Commit(); - -// return; - -// } - - -// } - -// //鎺ュ彛杩斿洖缁撴灉 -// if (executedcontext.Result is null) -// { -// throw new BusinessValidationFailedException(executedcontext.Exception.Message); -// } -// dynamic actionResult = executedcontext.Result; - -// //姝ゅ瀹¤鍙秹鍙婂埌娣诲姞鏇存柊鍜屽垹闄わ紝 缁熶竴浜嗙浉鍏虫帴鍙g殑杩斿洖缁撴灉锛屾墠鑳藉湪姝ゅ己鍒惰浆鎹 -// //var result = (IResponseOutput)actionResult.Value; - -// var result = (IResponseOutput)actionResult.Value; - - -// switch (_attr._auditType) -// { -// //椤圭洰瀹¤ -// case AuditType.TrialAudit: - -// switch (_attr._auditOptType) -// { -// //椤圭洰鐨勬坊鍔犲拰鏇存柊鎺ュ彛 -// case AuditOptType.AddOrUpdateTrial: - -// //鎺ュ彛鍙傛暟 -// var trialInfo = (TrialCommand)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// //鍒ゆ柇鏄坊鍔犺繕鏄洿鏂 -// TrialId = trialInfo.Id == null ? Guid.Parse(result.Data) : trialInfo.Id.Value, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = trialInfo.Id == null ? $"{ _userRealName} 娣诲姞浜嗛」鐩 {trialInfo.TrialCode} " : $"{ _userRealName} 鏇存柊浜嗛」鐩 {trialInfo.TrialCode} 鍩烘湰淇℃伅 ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// //娣诲姞椤圭洰杩愮淮浜哄憳 -// case AuditOptType.AddTrialStaff: - -// //鎺ュ彛鍙傛暟 -// var trialUsers = (TrialUserAddCommand[])_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { - -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = trialUsers[0].TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// //Note = $"{ _userRealName} 娣诲姞浜嗛」鐩繍缁翠汉鍛 {string.Join(',', trialUsers.Select(t => t.UserRealName).ToList())} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; - -// //娣诲姞鐮旂┒涓績 -// case AuditOptType.AddTrialSite: -// //鎺ュ彛鍙傛暟 -// var trialSites = (List)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// //鏌ヨsite淇℃伅 -// var siteIds = trialSites.Select(t => t.SiteId).ToList(); -// var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// var siteNames = _siteRepository.Where(t => siteIds.Contains(t.Id)).Select(u => u.SiteName); - -// _auditRepository.Add(new TrialAudit() -// { -// //鍒ゆ柇鏄坊鍔犺繕鏄洿鏂 -// TrialId = trialSites[0].TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 娣诲姞浜嗛」鐩爺绌朵腑蹇 {string.Join(',', siteNames)} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; - -// //鐮旂┒涓績娣诲姞杩愮淮浜哄憳 -// case AuditOptType.AddTrialSiteCRC: -// //鎺ュ彛鍙傛暟 -// var trialSiteCRCs = (List)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// //鏌ヨsite淇℃伅 -// var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// var siteName = _siteRepository.FirstOrDefault(t => t.Id == trialSiteCRCs[0].SiteId).IfNullThrowException().SiteName; - -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = trialSiteCRCs[0].TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 涓簕 siteName } 娣诲姞浜嗚繍缁翠汉鍛 {string.Join(',', trialSiteCRCs.Select(t => t.UserRealName).ToList())}", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; - -// //鍒犻櫎椤圭洰杩愮淮浜哄憳 -// case AuditOptType.DeleteTrailStaff: - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _userTrial.TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 绉婚櫎浜嗛」鐩弬涓庝汉鍛 {_userTrial.User.LastName + " / " + _userTrial.User.FirstName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// //鍒犻櫎椤圭洰site -// case AuditOptType.DeleteTrialSite: - -// if (result.IsSuccess) -// { -// //鏌ヨsite淇℃伅 -// var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// var siteName = _siteRepository.FirstOrDefault(t => t.Id == _trialSite.SiteId).IfNullThrowException().SiteName; - -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _trialSite.TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 绉婚櫎浜嗙爺绌朵腑蹇 {siteName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// //鍒犻櫎椤圭洰Site CRC -// case AuditOptType.DeleteTrialSiteCRC: - -// if (result.IsSuccess) -// { -// //鏌ヨsite淇℃伅 -// var _siteRepository = (IRepository)executedcontext.HttpContext.RequestServices.GetService(typeof(IRepository)); -// var siteName = _siteRepository.FirstOrDefault(t => t.Id == _userTrialSite.SiteId).IfNullThrowException().SiteName; - -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _userTrialSite.TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 绉婚櫎浜 {siteName} 鐨勮繍缁翠汉鍛 {_userTrialSite.User.UserName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } -// break; - -// //娣诲姞璁胯璁″垝Item -// case AuditOptType.AddOrUpdateTrialVisitPlanItem: -// //鎺ュ彛鍙傛暟 -// var visitPlanItem = (VisitPlanCommand)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = visitPlanItem.TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = visitPlanItem.Id == null ? $"{ _userRealName} 娣诲姞浜嗚瑙嗚鍒掗」 {visitPlanItem.VisitName} " : $"{ _userRealName} 鏇存柊浜嗚瑙嗚鍒掗」涓 {visitPlanItem.VisitName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// //鍒犻櫎璁胯璁″垝Item -// case AuditOptType.DeleteTrialVisitPlanItem: - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _visitPlan.TrialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 绉婚櫎浜嗚瑙嗚鍒掗」 {_visitPlan.VisitName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } -// break; - -// //纭浜嗚瑙嗚鍒 -// case AuditOptType.ConfirmTrialVisitPlan: -// var trialId = (Guid)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = trialId, -// SubjectId = Guid.Empty, -// AuditType = (int)AuditType.TrialAudit, -// Note = $"{ _userRealName} 纭浜嗚瑙嗚鍒掞紝涓嶅厑璁镐慨鏀 ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// //娣诲姞浜哘A妯℃澘 -// case AuditOptType.AddOrUpdateTrialTemplate: -// //鎺ュ彛鍙傛暟 - -// if (result.IsSuccess) -// { - -// } - - -// break; -// //鍒犻櫎椤圭洰妯℃澘 -// case AuditOptType.DeleteTrialTemplate: - -// if (result.IsSuccess) -// { - -// } -// break; - -// } - -// break; -// //鍙楄瘯鑰呭璁 -// case AuditType.SubjectAudit: - - -// switch (_attr._auditOptType) -// { -// // 娣诲姞鎴栬呮洿鏂板彈璇曡 -// case AuditOptType.AddOrUpdateSubject: - -// //鎺ュ彛鍙傛暟 -// var subject = (SubjectCommand)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = subject.TrialId, -// SubjectId = subject.Id == null ? Guid.Parse(result.Data) : subject.Id.Value, -// AuditType = (int)AuditType.SubjectAudit, -// Note = subject.Id == null ? $"{ _userRealName} 娣诲姞浜嗗彈璇曡 {subject.ShortName } 骞跺垵濮嬪寲浜嗚瑙嗚鍒" : $"{ _userRealName} 瀵瑰彈璇曡 { subject.ShortName } 淇℃伅杩涜浜嗘洿鏂 ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// // 鍒犻櫎鍙楄瘯鑰 -// case AuditOptType.DeleteSubject: -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _subject.TrialId, -// SubjectId = _subject.Id, -// AuditType = (int)AuditType.SubjectAudit, -// Note = $"{ _userRealName} 绉婚櫎浜嗗彈璇曡 {_subject.LastName + _subject.FirstName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// // 鍙楄瘯鑰呰鍒掑璁胯 -// case AuditOptType.AddOrUpdateSubjectOutPlanVisit: - -// //鎺ュ彛鍙傛暟 -// var subjectVisit = (SubjectVisitCommand)_actionArguments.Values.ToList()[0]; - -// if (result.IsSuccess) -// { -// var _subjectRepository = -// (IRepository)executedcontext.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// _subject = _subjectRepository.FirstOrDefault(t => t.Id == subjectVisit.SubjectId).IfNullThrowException(); - -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _subject.TrialId, -// SubjectId = _subject.Id, -// AuditType = (int)AuditType.SubjectAudit, -// Note = subjectVisit.Id == null ? $"{ _userRealName} 涓哄彈璇曡 {_subject.LastName + _subject.FirstName} 娣诲姞浜嗚鍒掑璁胯 {subjectVisit.VisitName}" : $"{ _userRealName} 鏇存柊鍙楄瘯鑰 {_subject.LastName + _subject.FirstName} 璁″垝澶栬瑙唟subjectVisit.VisitName}", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// // 鍒犻櫎璁″垝澶栬瑙 -// case AuditOptType.DeleteSubjectOutPlanVisit: - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _subjectVisit.TrialId, -// SubjectId = _subject.Id, -// AuditType = (int)AuditType.SubjectAudit, -// Note = $"{ _userRealName} 绉婚櫎浜嗗彈璇曡厈_subject.LastName + _subject.FirstName} 璁″垝澶栬瑙 {_subjectVisit.VisitName} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; -// // 浜哄伐璁剧疆宸叉墽琛 -// case AuditOptType.SetSVExecuted: - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _subjectVisit.TrialId, -// SubjectId = _subject.Id, -// AuditType = (int)AuditType.SubjectAudit, -// Note = $"{ _userRealName} 灏嗗彈璇曡 {_subject.LastName + _subject.FirstName} 璁胯 {_subjectVisit.VisitName} 璁剧疆涓哄凡鎵ц ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - - -// break; -// } - -// break; - -// //妫鏌ュ璁 -// case AuditType.StudyAudit: -// _studyRepository = -// (IRepository)executedcontext.HttpContext.RequestServices.GetService( -// typeof(IRepository)); - -// switch (_attr._auditOptType) -// { - -// case AuditOptType.ChangeStudyStatus: - -// //鎺ュ彛鍙傛暟 -// var studyStatusInfo = (StudyStatusDetailCommand)_actionArguments.Values.ToList()[0]; - -// _study = _studyRepository.FirstOrDefault(t => t.Id == studyStatusInfo.StudyId).IfNullThrowException(); - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _study.TrialId, -// SubjectId = _study.SubjectId, -// StudyId = _study.Id, -// AuditType = (int)AuditType.StudyAudit, -// Note = $"{ _userRealName} 鍔ㄤ綔鍙樻洿浜 { _study.StudyCode} 妫鏌ョ姸鎬佷负 {DealStudyStatus(_study.Status)} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - -// break; - -// case AuditOptType.Anonymized: - -// case AuditOptType.Forwarded: - -// //鎺ュ彛鍙傛暟 -// var studyId = (Guid)_actionArguments.Values.ToList()[0]; - -// _study = _studyRepository.FirstOrDefault(t => t.Id == studyId).IfNullThrowException(); - -// if (result.IsSuccess) -// { -// _auditRepository.Add(new TrialAudit() -// { -// TrialId = _study.TrialId, -// SubjectId = _study.SubjectId, -// StudyId = _study.Id, -// AuditType = (int)AuditType.StudyAudit, -// Note = $"{ _userRealName} 鍔ㄤ綔鍙樻洿浜 { _study.StudyCode} 妫鏌ョ姸鎬佷负 {DealStudyStatus(_study.Status)} ", -// Detail = string.Empty, -// OptUserId = Guid.Parse(_userIdStr), -// OptUser = _userRealName, -// OptTime = DateTime.Now -// }); -// } - - -// break; -// } - -// break; - -// } - -// _auditRepository.SaveChanges(); - -// #endregion - - -// //鎻愪氦浜嬪姟 Commit transaction if all commands succeed, transaction will auto-rollback when disposed if either commands fails -// transaction.Commit(); -// } -// ); - - - - - - - - - -// } -// } -//} - - - - diff --git a/IRaCIS.Core.Application/Helper/FileStoreHelper.cs b/IRaCIS.Core.Application/Helper/FileStoreHelper.cs index 8027d4635..63e2278f1 100644 --- a/IRaCIS.Core.Application/Helper/FileStoreHelper.cs +++ b/IRaCIS.Core.Application/Helper/FileStoreHelper.cs @@ -14,40 +14,6 @@ namespace IRaCIS.Core.Application.Helper; public static class FileStoreHelper { - public static string UploadOOS(string filePath,string route) - { - var endpoint = ConfigurationManager.AppSettings["AliyunOSS:endpoint"]; - // yourEndpoint濉啓Bucket鎵鍦ㄥ湴鍩熷搴旂殑Endpoint銆備互鍗庝笢1锛堟澀宸烇級涓轰緥锛孍ndpoint濉啓涓篽ttps://oss-cn-hangzhou.aliyuncs.com銆 - - // 闃块噷浜戣处鍙稟ccessKey鎷ユ湁鎵鏈堿PI鐨勮闂潈闄愶紝椋庨櫓寰堥珮銆傚己鐑堝缓璁偍鍒涘缓骞朵娇鐢≧AM鐢ㄦ埛杩涜API璁块棶鎴栨棩甯歌繍缁达紝璇风櫥褰昍AM鎺у埗鍙板垱寤篟AM鐢ㄦ埛銆 - var accessKeyId = ConfigurationManager.AppSettings["AliyunOSS:accessKeyId"]; - var accessKeySecret = ConfigurationManager.AppSettings["AliyunOSS:accessKeySecret"]; - // 濉啓Bucket鍚嶇О锛屼緥濡俥xamplebucket銆 - var bucketName = ConfigurationManager.AppSettings["AliyunOSS:bucketName"]; - // 濉啓Object瀹屾暣璺緞锛屽畬鏁磋矾寰勪腑涓嶈兘鍖呭惈Bucket鍚嶇О锛屼緥濡俥xampledir/exampleobject.txt銆 - - var fileNameList = filePath.Split(',').ToList(); - var fileName = fileNameList[fileNameList.Count - 1]; - - var objectName = route+ fileName; - // 濉啓鏈湴鏂囦欢瀹屾暣璺緞锛屼緥濡侱:\\localpath\\examplefile.txt銆傚鏋滄湭鎸囧畾鏈湴璺緞锛屽垯榛樿浠庣ず渚嬬▼搴忔墍灞為」鐩搴旀湰鍦拌矾寰勪腑涓婁紶鏂囦欢銆 - var localFilename = filePath; - // 鍒涘缓OSSClient瀹炰緥銆 - var client = new OssClient(endpoint, accessKeyId, accessKeySecret); - try - { - // 涓婁紶鏂囦欢銆 - var result = client.PutObject(bucketName, objectName, localFilename); - - return result.ETag; - } - catch (Exception ex) - { - throw new BusinessValidationFailedException("涓婁紶寮傚父!"); - - } - } - //澶勭悊鏂囦欢鍚 鍘嬬缉鍖咃紝鎴栬呯洰褰曠被鐨 浼氬甫涓婄浉瀵硅矾寰 public static (string TrustedFileNameForFileStorage, string RealName) GetStoreFileName(string fileName,bool isChangeToPdfFormat=false) { diff --git a/IRaCIS.Core.Application/Helper/OSSService.cs b/IRaCIS.Core.Application/Helper/OSSService.cs index 66ecfbbec..47ad9e321 100644 --- a/IRaCIS.Core.Application/Helper/OSSService.cs +++ b/IRaCIS.Core.Application/Helper/OSSService.cs @@ -104,11 +104,11 @@ namespace IRaCIS.Core.Application.Helper - public OSSService(IOptionsMonitor options) + public OSSService(IOptionsMonitor options) { var ossOptions = options.CurrentValue; - _OSSConfig = ossOptions; + _OSSConfig = ossOptions.AliyunOSS; _ossClient = new OssClient(_OSSConfig.endPoint, _OSSConfig.accessKeyId, _OSSConfig.accessKeySecret); diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj index 8153511fb..bf82287d9 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.csproj @@ -65,18 +65,18 @@ - + - - + + - + true @@ -85,9 +85,9 @@ true - - - + + + @@ -96,8 +96,8 @@ - - + + diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 67dd0e63f..8a73e868f 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -12012,7 +12012,7 @@ 鏋勯犲嚱鏁版敞鍏 - + 鏋勯犲嚱鏁版敞鍏 diff --git a/IRaCIS.Core.Application/Service/Doctor/ResearchPublicationService.cs b/IRaCIS.Core.Application/Service/Doctor/ResearchPublicationService.cs index 1c17ceebe..8749571be 100644 --- a/IRaCIS.Core.Application/Service/Doctor/ResearchPublicationService.cs +++ b/IRaCIS.Core.Application/Service/Doctor/ResearchPublicationService.cs @@ -23,9 +23,9 @@ namespace IRaCIS.Application.Services public async Task GetResearchPublication(Guid doctorId) { var doctorScientificResearchInfo = await researchPublicationRepository.Where(o => o.DoctorId == doctorId) - .ProjectTo(_mapper.ConfigurationProvider).FirstNotNullAsync(); + .ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync(); - return doctorScientificResearchInfo; + return doctorScientificResearchInfo!; } diff --git a/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs b/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs index dfd96079c..127b80708 100644 --- a/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs +++ b/IRaCIS.Core.Application/Service/Inspection/DTO/InspectionModel.cs @@ -357,7 +357,6 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO public class GetDataInspectionOutDto : DataInspection { - public Guid? TrialReadingCriterionId { get; set; } public string TrialReadingCriterionName { get; set; } public string BlindName { get; set; } @@ -371,9 +370,6 @@ namespace IRaCIS.Core.Application.Service.Inspection.DTO //public string ParentJson { get; set; } = string.Empty; - - public string CreateUserRealName { get; set; } = string.Empty; - public string Description { get; set; } = string.Empty; public string DescriptionCN { get; set; } = string.Empty; diff --git a/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs b/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs index a68328309..2b97741d3 100644 --- a/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs +++ b/IRaCIS.Core.Application/Service/Management/DTO/UserTypeRoleModel.cs @@ -9,7 +9,6 @@ namespace IRaCIS.Core.Application.Contracts /// UserTypeRoleView 鍒楄〃瑙嗗浘妯″瀷 public class UserTypeRoleView : UserTypeMenuAddOrEdit { - public UserTypeEnum UserTypeEnum { get; set; } public List UserTypeGroupList { get; set; } = new List(); public new List UserTypeGroupIdList => UserTypeGroupList.Select(t => t.DictionaryId).ToList(); diff --git a/IRaCIS.Core.Application/Service/Management/UserService.cs b/IRaCIS.Core.Application/Service/Management/UserService.cs index 2606ad5b0..e24721232 100644 --- a/IRaCIS.Core.Application/Service/Management/UserService.cs +++ b/IRaCIS.Core.Application/Service/Management/UserService.cs @@ -12,6 +12,7 @@ using Microsoft.Identity.Client; using static IRaCIS.Core.Domain.Share.StaticData; using IRaCIS.Core.Application.ViewModel; using Medallion.Threading; +using EasyCaching.Core; namespace IRaCIS.Application.Services { @@ -26,7 +27,7 @@ namespace IRaCIS.Application.Services private readonly IRepository _userLogRepository; private readonly IDistributedLockProvider _distributedLockProvider; - private readonly IMemoryCache _cache; + private readonly IEasyCachingProvider _cache; private readonly IOptionsMonitor _verifyConfig; @@ -36,7 +37,7 @@ namespace IRaCIS.Application.Services IMailVerificationService mailVerificationService, IRepository verificationCodeRepository, IRepository doctorRepository, - IMemoryCache cache, + IEasyCachingProvider cache, IRepository userTrialRepository, IOptionsMonitor verifyConfig, IRepository userLogRepository @@ -281,7 +282,7 @@ namespace IRaCIS.Application.Services { await _mailVerificationService.AdminResetPwdSendEmailAsync(userId, pwd); } - catch (Exception ex) + catch (Exception ) { //---璇锋鏌ラ偖绠卞湴鍧鎴栬呰仈绯荤淮鎶や汉鍛, 閭欢鍙戦佸け璐, 鏈兘鍒涘缓璐︽埛鎴愬姛 throw new BusinessValidationFailedException(_localizer["User_CreateFailed"]); @@ -631,7 +632,7 @@ namespace IRaCIS.Application.Services string cacheKey = $"{cachePrefix}{userName}"; // 浠庣紦瀛樹腑鑾峰彇鐧诲綍澶辫触娆℃暟 - int? failCount = _cache.Get(cacheKey); + int? failCount = _cache.Get(cacheKey).Value; if (failCount == null) { diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs index c26348971..bbdb7f757 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QARecordViewModel.cs @@ -476,7 +476,7 @@ namespace IRaCIS.Core.Application.Contracts.DTO { return JsonConvert.DeserializeObject>(ParamInfo); } - catch (Exception e) + catch (Exception ) { return new List(); diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs index c620c1100..51ee5499d 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs @@ -711,7 +711,6 @@ namespace IRaCIS.Core.Application.Contracts public string RequestReReadingReason { get; set; } = string.Empty; - public DateTime? SuggesteFinishedTime { get; set; } [DictionaryTranslateAttribute("RequestReReadingResult")] public RequestReReadingResult RequestReReadingResultEnum { get; set; } diff --git a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs index 9f3c9f688..9c22a8b91 100644 --- a/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs +++ b/IRaCIS.Core.Application/Service/Reading/Dto/ReadingPeriodSetViewModel.cs @@ -10,7 +10,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto { public class ReadingPeriodSetAddOrEdit { - public new Guid? Id { get; set; } + public Guid? Id { get; set; } /// /// 椤圭洰ID diff --git a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs index b7c96d35e..21b355e6b 100644 --- a/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ReadingImageTask/ReadingImageTaskService.cs @@ -62,12 +62,10 @@ namespace IRaCIS.Application.Services private readonly IRepository _noneDicomStudyFileSystem; private readonly IRepository _readingQuestionTrialRepository; - private readonly IMemoryCache _cache; private readonly ITrialEmailNoticeConfigService _trialEmailNoticeConfigService; public ReadingImageTaskService( - IMapper mapper, IRepository noneDicomStudyRepository, IRepository visitTaskRepository, IRepository TrialRepository, @@ -90,8 +88,7 @@ namespace IRaCIS.Application.Services IRepository userRepository, IEasyCachingProvider provider, IRepository readingCustomTagRepository, - IRepository readingTaskQuestionMarkRepository, - IMemoryCache cache, + IRepository readingTaskQuestionMarkRepository, IRepository readingCriterionDictionaryRepository, IRepository readingTrialCriterionDictionaryRepository, IRepository tumorAssessmentRepository, @@ -107,7 +104,6 @@ namespace IRaCIS.Application.Services IRepository readingQuestionTrialRepository ) { - base._mapper = mapper; this._noneDicomStudyRepository = noneDicomStudyRepository; this._visitTaskRepository = visitTaskRepository; this._trialRepository = TrialRepository; @@ -144,7 +140,6 @@ namespace IRaCIS.Application.Services this._readingQuestionSystem = ReadingQuestionSystem; this._noneDicomStudyFileSystem = noneDicomStudyFileSystem; this._readingQuestionTrialRepository = readingQuestionTrialRepository; - this._cache = cache; this._trialEmailNoticeConfigService = trialEmailNoticeConfigService; } diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs index 51073a746..2406b12c1 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/TrialSiteService.cs @@ -348,7 +348,6 @@ namespace IRaCIS.Core.Application.Services /// 鍒犻櫎 椤圭洰 涓嬫煇涓site [HttpDelete("{id:guid}/{trialId:guid}")] - [TrialAudit(AuditType.TrialAudit, AuditOptType.DeleteTrialSite)] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] [Obsolete] public async Task DeleteTrialSite(Guid id) diff --git a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs index 58872405f..a90ec99e0 100644 --- a/IRaCIS.Core.Application/Service/Visit/SubjectService.cs +++ b/IRaCIS.Core.Application/Service/Visit/SubjectService.cs @@ -26,7 +26,6 @@ namespace IRaCIS.Application.Services /// state:1-璁胯涓紝2-鍑虹粍銆0-鍏ㄩ儴 /// - [TrialAudit(AuditType.SubjectAudit, AuditOptType.AddOrUpdateSubject)] [TypeFilter(typeof(TrialResourceFilter), Arguments = new object[] { "AfterStopCannNotOpt" })] //[Authorize(Policy = IRaCISPolicy.PM_APM_CRC_QC)] public async Task> AddOrUpdateSubject([FromBody] SubjectCommand subjectCommand) diff --git a/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs b/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs index b89ffbf42..6f5082e6e 100644 --- a/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/AddlTrialUserTrigger.cs @@ -1,6 +1,7 @@ 锘縰sing EntityFrameworkCore.Triggered; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure; +using Microsoft.Extensions.Localization; using System; using System.Collections.Generic; using System.Linq; @@ -11,18 +12,19 @@ namespace IRaCIS.Core.Application.Triggers { // 缁熶竴澶勭悊 澶栭儴鐢ㄦ埛銆佷腑蹇冭皟鐮(鍏堟坊鍔 鍐嶅彂閫侀偖浠)銆佸弬涓庡尰鐢熷姞鍏ュ埌椤圭洰 ----搴熷純 - public class AddlTrialUserTrigger :BaseService, IBeforeSaveTrigger + public class AddlTrialUserTrigger :IBeforeSaveTrigger { + public IStringLocalizer _localizer; private readonly IRepository _trialRepository; private readonly IRepository _userRepository; - public AddlTrialUserTrigger(IRepository trialRepository, IRepository userRepository) + public AddlTrialUserTrigger(IRepository trialRepository, IRepository userRepository, IStringLocalizer localizer) { _trialRepository = trialRepository; _userRepository = userRepository; - + _localizer = localizer; } public async Task BeforeSave(ITriggerContext context, CancellationToken cancellationToken) { diff --git a/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs index 765de8984..884a0e8ec 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectStateTrigger.cs @@ -1,20 +1,26 @@ 锘縰sing AutoMapper; using EntityFrameworkCore.Triggered; using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Infrastructure; using MassTransit; +using Microsoft.Extensions.Localization; namespace IRaCIS.Core.Application.Triggers { /// /// /// - public class SubjectStateTrigger :BaseService, IAfterSaveTrigger + public class SubjectStateTrigger : IAfterSaveTrigger { + public IStringLocalizer _localizer; + private readonly IRepository _repository; private readonly IRepository _subjectVisitRepository; - public SubjectStateTrigger(IRepository subjectVisitRepository) + public SubjectStateTrigger(IRepository subjectVisitRepository, IStringLocalizer localizer, IRepository repository) { + _repository = repository; + _localizer = localizer; _subjectVisitRepository = subjectVisitRepository; } diff --git a/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs index 6c2073461..791e17704 100644 --- a/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/SubjectVisitFinalVisitTrigger.cs @@ -2,15 +2,17 @@ using IRaCIS.Core.Application.Service; using IRaCIS.Core.Application.ViewModel; using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infra.EFCore; using IRaCIS.Core.Infrastructure; using MassTransit; +using Microsoft.Extensions.Localization; namespace IRaCIS.Core.Application.Triggers { /// /// 澶勭悊 璁胯 鏈璇勪及 浼氬奖鍝峉ubject 鐘舵 /// - public class SubjectVisitFinalVisitTrigger :BaseService, IAfterSaveTrigger + public class SubjectVisitFinalVisitTrigger :IAfterSaveTrigger { private readonly IRepository _subjectVisitRepository; private readonly IRepository _readingPeriodSetRepository; @@ -19,7 +21,8 @@ namespace IRaCIS.Core.Application.Triggers private readonly IRepository _subjectRepository; private readonly IRepository _visitTaskRepository; private readonly IVisitTaskHelpeService _ivisitTaskHelpeService; - + public IStringLocalizer _localizer; + private readonly IRepository _repository; public SubjectVisitFinalVisitTrigger(IRepository subjectVisitRepository, IRepository readingPeriodSetRepository, @@ -27,7 +30,9 @@ namespace IRaCIS.Core.Application.Triggers IRepository visitTaskRepository, IVisitTaskHelpeService visitTaskHelpeService, IRepository readModuleRepository, - IRepository subjectRepository) + IRepository subjectRepository, + IStringLocalizer localizer, + IRepository repository) { _subjectVisitRepository = subjectVisitRepository; this._readingPeriodSetRepository = readingPeriodSetRepository; @@ -36,6 +41,8 @@ namespace IRaCIS.Core.Application.Triggers this._readingPeriodPlanRepository = readingPeriodPlanRepository; this._readModuleRepository = readModuleRepository; _subjectRepository = subjectRepository; + _repository = repository; + _localizer = localizer; } public async Task AfterSave(ITriggerContext context, CancellationToken cancellationToken) diff --git a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs index 0373eef90..5603cb53f 100644 --- a/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs +++ b/IRaCIS.Core.Application/_MediatR/Handlers/ConsistencyVerificationHandler.cs @@ -5,6 +5,7 @@ using Newtonsoft.Json; using MediatR; using System.Linq.Expressions; using System.Text; +using Microsoft.Extensions.Localization; namespace IRaCIS.Core.Application.MediatR.Handlers { @@ -17,6 +18,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers private readonly IRepository _trialSiteRepository; private readonly IMapper _mapper; private readonly IRepository _noneDicomStudyRepository; + public IStringLocalizer _localizer { get; set; } /// /// 鏋勯犲嚱鏁版敞鍏 @@ -25,7 +27,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers public ConsistencyVerificationHandler(IRepository studyRepository, IUserInfo userInfo, IRepository subjectRepository, IRepository subjectVisitRepository, IRepository trialSiteRepository, IRepository noneDicomStudyRepository, - IMapper mapper) + IMapper mapper, IStringLocalizer localizer) { _noneDicomStudyRepository = noneDicomStudyRepository; _studyRepository = studyRepository; @@ -34,6 +36,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers _subjectVisitRepository = subjectVisitRepository; _trialSiteRepository = trialSiteRepository; _mapper = mapper; + _localizer = localizer; } async Task IRequestHandler.Handle(ConsistencyVerificationRequest request, CancellationToken cancellationToken) @@ -113,7 +116,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers StringBuilder dialogMsg = new StringBuilder(); //---鎮ㄥソ,鏍规嵁鏈郴缁熻嚜鍔ㄨ瘑鍒紝璇ュ彈璇曡呭綋鍓嶈瑙嗗湪IRC绯荤粺涓凡鎻愪氦鐨勫奖鍍忔鏌ユ儏鍐靛涓嬶細 - dialogMsg.Append($"
{StaticData.International("ConsistencyVerification_Img")}
"); + dialogMsg.Append($"
{_localizer["ConsistencyVerification_Img"]}
"); var num = 0; List paramInfoList = new List(); @@ -121,16 +124,8 @@ namespace IRaCIS.Core.Application.MediatR.Handlers { num++; - if (_userInfo.IsEn_Us) - { - dialogMsg.AppendLine($"
{num}. {item.StudyDate} {item.Modality} {StaticData.International("ConsistencyVerification_ImgC")}
"); + dialogMsg.AppendLine($"
{num}. {_localizer["ConsistencyVerification_ImgC", item.StudyDate, item.Modality]}
"); - } - else - { - dialogMsg.AppendLine($"
{num}. {item.StudyDate} {StaticData.International("ConsistencyVerification_Of")}{item.Modality}{StaticData.International("ConsistencyVerification_ImgC")}
"); - - } paramInfoList.Add(new ParamInfoDto() { @@ -189,7 +184,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers { dialogMsg.AppendLine($"
"); //---鏍稿EDC鏁版嵁锛屽畬鍏ㄤ竴鑷, 瀹℃牳閫氳繃 - dialogMsg.AppendLine(StaticData.International("ConsistencyVerification_EDCA")); + dialogMsg.AppendLine(_localizer["ConsistencyVerification_EDCA"]); // dialogMsg.AppendLine(@$"
璇存槑锛氫负楂樻晥瑙e喅/澶勭悊浠ヤ笂鍏ㄩ儴璐ㄧ枒闂锛岄夯鐑︽偍鍑嗙‘鏍稿疄瀹為檯褰卞儚妫鏌ユ儏鍐点傝娉ㄦ剰褰卞儚鏃ユ湡涓庡疄闄呮鏌ョ殑鏃ユ湡鍙兘浼氫笉涓鑷达紝閮ㄥ垎妫鏌ワ紙濡侾ET -CT)鍙兘鍚屾椂瀛樺湪澶氱妯℃佸奖鍍忋傚噯纭牳瀹炲悗锛岃鍥炲璇ヨ瑙嗘纭殑褰卞儚妫鏌ユ儏鍐点"); @@ -197,9 +192,9 @@ namespace IRaCIS.Core.Application.MediatR.Handlers dbSV.CheckUserId = _userInfo.Id; dbSV.CheckPassedTime = DateTime.Now; //---鏍稿EDC鏁版嵁锛屽畬鍏ㄤ竴鑷 - dbSV.CheckResult = StaticData.International("ConsistencyVerification_EDCB"); + dbSV.CheckResult = _localizer["ConsistencyVerification_EDCB"]; //---鑷姩鏍告煡閫氳繃 - dbSV.ManualPassReason = StaticData.International("ConsistencyVerification_Auto"); + dbSV.ManualPassReason = _localizer["ConsistencyVerification_Auto"]; //缁存姢鐘舵 dbSV.ReadingStatus = ReadingStatusEnum.TaskAllocate; @@ -218,55 +213,33 @@ namespace IRaCIS.Core.Application.MediatR.Handlers else { //"Problems are as follows: - dialogMsg.AppendLine($"
{StaticData.International("ConsistencyVerification_Prob")}
"); + dialogMsg.AppendLine($"
{_localizer["ConsistencyVerification_Prob"]}
"); num = 0; foreach (var item in dbExceptExcel) { num++; //褰卞儚妫鏌(EDC 缂哄皯) ConsistencyVerification_EdcL - - if (_userInfo.IsEn_Us) - { - dialogMsg.AppendLine($"
{num}. {item.StudyDate} {item.Modality} {StaticData.International("ConsistencyVerification_ImgC")} {StaticData.International("ConsistencyVerification_EdcL")}
"); - } - else - { - dialogMsg.AppendLine($"
{num}. {StaticData.International("ConsistencyVerification_EdcL")}{item.StudyDate}{StaticData.International("ConsistencyVerification_Of")}{item.Modality}{StaticData.International("ConsistencyVerification_ImgC")}
"); - - } - + dialogMsg.AppendLine($"
{num}. {_localizer["ConsistencyVerification_EdcL", item.StudyDate, item.Modality]}
"); } foreach (var item in excelExceptDB) { num++; - // 褰卞儚妫鏌(IRC 缂哄皯) - - if (_userInfo.IsEn_Us) - { - dialogMsg.AppendLine($"
{num}. {item.StudyDate} {item.Modality} {StaticData.International("ConsistencyVerification_ImgC")} {StaticData.International("ConsistencyVerification_IrcL")}
"); - - } - else - { - dialogMsg.AppendLine($"
{num}. {StaticData.International("ConsistencyVerification_IrcL")}{item.StudyDate}{StaticData.International("ConsistencyVerification_Of")}{item.Modality}{StaticData.International("ConsistencyVerification_ImgC")}
"); - - } - + dialogMsg.AppendLine($"
{num}. {_localizer["ConsistencyVerification_IrcLi", item.StudyDate, item.Modality]}
"); } dialogMsg.AppendLine($"
"); - dialogMsg.AppendLine(@$"
{StaticData.International("ConsistencyVerification_Desc")}
"); + dialogMsg.AppendLine(@$"
{_localizer["ConsistencyVerification_Desc"]}
"); + + dbSV.CheckResult = _localizer["ConsistencyVerification_Conf"] + + String.Join(" | ", dbExceptExcel.Select(t => $"{_localizer["ConsistencyVerification_EdcL", t.StudyDate, t.Modality]}")) + " | " + + String.Join(" | ", excelExceptDB.Select(t => $"{_localizer["ConsistencyVerification_IrcLi", t.StudyDate, t.Modality]}")); - //---鏍规嵁瀵煎叆鐨勪竴鑷存ф牳鏌ユ暟鎹紝璇风‘璁ゆ湰璁胯浠ヤ笅涓嶄竴鑷存鏌ラ」淇℃伅锛 - dbSV.CheckResult = StaticData.International("ConsistencyVerification_Conf") + String.Join(" | ", dbExceptExcel.Select(t => $"{StaticData.International("ConsistencyVerification_Edc")}{t.StudyDate} {t.Modality} ")) + " | " - + String.Join(" | ", excelExceptDB.Select(t => $"{StaticData.International("ConsistencyVerification_IrcLi")}{t.StudyDate} {t.Modality}")); //鏂板涓鑷存ф牳鏌ヨ川鐤戣褰 - dbSV.CheckState = CheckStateEnum.CVIng; dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply; diff --git a/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj b/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj index 53f18f1b4..5611c9d8f 100644 --- a/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj +++ b/IRaCIS.Core.Domain/IRaCIS.Core.Domain.csproj @@ -16,8 +16,8 @@ - - + + diff --git a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs index ab463a705..535cae623 100644 --- a/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs +++ b/IRaCIS.Core.Infra.EFCore/Context/IRaCISDBContext.cs @@ -587,12 +587,12 @@ namespace IRaCIS.Core.Infra.EFCore throw new DBSaveFailedException("SQL 浜嬪姟澶辫触,璇锋鏌ョ幆澧冦"); } - catch (Exception ex) - { - _logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message); + //catch (Exception ex) + //{ + // _logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message); - throw new DBSaveFailedException("鏁版嵁淇濆瓨寮傚父銆"); - } + // throw new DBSaveFailedException(ex.Message); + //} } diff --git a/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj b/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj index 926824848..aec773466 100644 --- a/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj +++ b/IRaCIS.Core.Infra.EFCore/IRaCIS.Core.Infra.EFCore.csproj @@ -23,8 +23,8 @@ - - + + diff --git a/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj b/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj index 738f20c04..ffeaf4324 100644 --- a/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj +++ b/IRaCIS.Core.Infrastructure/IRaCIS.Core.Infrastructure.csproj @@ -13,9 +13,9 @@ - + - + diff --git a/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj b/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj index 899f95036..807e7a1be 100644 --- a/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj +++ b/IRaCIS.Core.Test/IRaCIS.Core.Test.csproj @@ -14,7 +14,7 @@ - + all