Merge branch 'Test.IRC' of http://192.168.3.68:2000/XCKJ/irc-netcore-api into Test.IRC
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
commit
16e0bebc29
|
@ -1,16 +1,16 @@
|
||||||
// 使用的是proto3版本
|
// 使用的是proto3版本
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
// 定义命名空间,后续生成代码时就会生成对应的命名空间
|
// 定义命名空间,后续生成代码时就会生成对应的命名空间
|
||||||
option csharp_namespace = "gRPC.ZHiZHUN.AuthServer.protos";
|
option csharp_namespace = "gRPC.ZHiZHUN.AuthServer.protos";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
每一句需要用分号结尾
|
每一句需要用分号结尾
|
||||||
message 用来定义请求和返回数据格式
|
message 用来定义请求和返回数据格式
|
||||||
tag message后面的值数字代表是字段的标识(tag),不是赋值,
|
tag message后面的值数字代表是字段的标识(tag),不是赋值,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// 新增用户时需要传递数据消息, 可理解为一个类
|
// 新增用户时需要传递数据消息, 可理解为一个类
|
||||||
message GetTokenReuqest{
|
message GetTokenReuqest{
|
||||||
string id=1;
|
string id=1;
|
||||||
string userName=2;
|
string userName=2;
|
||||||
|
@ -22,48 +22,48 @@ message GetTokenReuqest{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增时返回的消息格式
|
// 新增时返回的消息格式
|
||||||
message GetTokenResponse {
|
message GetTokenResponse {
|
||||||
int32 code=1;
|
int32 code=1;
|
||||||
string token =2;
|
string token =2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// service 用标识定义服务的,里面写对应的方法
|
// service 用标识定义服务的,里面写对应的方法
|
||||||
service TokenGrpcService{
|
service TokenGrpcService{
|
||||||
// 获取token
|
// 获取token
|
||||||
rpc GetUserToken(GetTokenReuqest) returns (GetTokenResponse);
|
rpc GetUserToken(GetTokenReuqest) returns (GetTokenResponse);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// 新增用户时需要传递数据消息, 可理解为一个类
|
// 新增用户时需要传递数据消息, 可理解为一个类
|
||||||
message AddUserReuqest{
|
message AddUserReuqest{
|
||||||
string name=1;
|
string name=1;
|
||||||
int32 age=2;
|
int32 age=2;
|
||||||
bool isBoy=3;
|
bool isBoy=3;
|
||||||
}
|
}
|
||||||
// 新增时返回的消息格式
|
// 新增时返回的消息格式
|
||||||
message ResultResponse {
|
message ResultResponse {
|
||||||
int32 code=1;
|
int32 code=1;
|
||||||
string msg =2;
|
string msg =2;
|
||||||
}
|
}
|
||||||
//传递的查询条件信息格式,可理解为平时传入的查询条件对象
|
//传递的查询条件信息格式,可理解为平时传入的查询条件对象
|
||||||
message QueryUserReuqest{
|
message QueryUserReuqest{
|
||||||
string name=1;
|
string name=1;
|
||||||
}
|
}
|
||||||
//查询返回的用户信息格式,可理解为返回的类
|
//查询返回的用户信息格式,可理解为返回的类
|
||||||
message UserInfoResponse {
|
message UserInfoResponse {
|
||||||
string name=1;
|
string name=1;
|
||||||
int32 age=2;
|
int32 age=2;
|
||||||
string gender=3;
|
string gender=3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// service 用标识定义服务的,里面写对应的方法
|
// service 用标识定义服务的,里面写对应的方法
|
||||||
service UserService{
|
service UserService{
|
||||||
// 新增用户
|
// 新增用户
|
||||||
rpc AddUser(AddUserReuqest) returns (ResultResponse);
|
rpc AddUser(AddUserReuqest) returns (ResultResponse);
|
||||||
// 查询用户
|
// 查询用户
|
||||||
rpc GetAllUser(QueryUserReuqest) returns (UserInfoResponse);
|
rpc GetAllUser(QueryUserReuqest) returns (UserInfoResponse);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using Autofac.Extensions.DependencyInjection;
|
using Autofac.Extensions.DependencyInjection;
|
||||||
using Microsoft.AspNetCore.Hosting;
|
using Microsoft.AspNetCore.Hosting;
|
||||||
using Microsoft.Extensions.Hosting;
|
using Microsoft.Extensions.Hosting;
|
||||||
|
@ -28,8 +28,8 @@ using OfficeOpenXml.Utils;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region 获取环境变量
|
#region 获取环境变量
|
||||||
//以配置文件为准,否则 从url中取环境值(服务以命令行传递参数启动,配置文件配置了就不需要传递环境参数)
|
//以配置文件为准,否则 从url中取环境值(服务以命令行传递参数启动,配置文件配置了就不需要传递环境参数)
|
||||||
var config = new ConfigurationBuilder()
|
var config = new ConfigurationBuilder()
|
||||||
.AddEnvironmentVariables()
|
.AddEnvironmentVariables()
|
||||||
.Build();
|
.Build();
|
||||||
|
@ -51,7 +51,7 @@ var builder = WebApplication.CreateBuilder(new WebApplicationOptions
|
||||||
EnvironmentName = enviromentName
|
EnvironmentName = enviromentName
|
||||||
});
|
});
|
||||||
|
|
||||||
#region 兼容windows 服务命令行的方式
|
#region 兼容windows 服务命令行的方式
|
||||||
|
|
||||||
//foreach (var arg in args)
|
//foreach (var arg in args)
|
||||||
//{
|
//{
|
||||||
|
@ -69,7 +69,7 @@ if (urlsIndex > -1)
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region 主机配置
|
#region 主机配置
|
||||||
|
|
||||||
|
|
||||||
NewId.SetProcessIdProvider(new CurrentProcessIdProvider());
|
NewId.SetProcessIdProvider(new CurrentProcessIdProvider());
|
||||||
|
@ -93,15 +93,15 @@ builder.Host
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region 配置服务
|
#region 配置服务
|
||||||
var _configuration = builder.Configuration;
|
var _configuration = builder.Configuration;
|
||||||
|
|
||||||
//健康检查
|
//健康检查
|
||||||
builder.Services.AddHealthChecks();
|
builder.Services.AddHealthChecks();
|
||||||
//本地化
|
//本地化
|
||||||
builder.Services.AddJsonLocalization(options => options.ResourcesPath = "Resources");
|
builder.Services.AddJsonLocalization(options => options.ResourcesPath = "Resources");
|
||||||
|
|
||||||
// 异常、参数统一验证过滤器、Json序列化配置、字符串参数绑型统一Trim()
|
// 异常、参数统一验证过滤器、Json序列化配置、字符串参数绑型统一Trim()
|
||||||
builder.Services.AddControllers(options =>
|
builder.Services.AddControllers(options =>
|
||||||
{
|
{
|
||||||
//options.Filters.Add<LogActionFilter>();
|
//options.Filters.Add<LogActionFilter>();
|
||||||
|
@ -115,7 +115,7 @@ builder.Services.AddControllers(options =>
|
||||||
}
|
}
|
||||||
|
|
||||||
})
|
})
|
||||||
.AddNewtonsoftJsonSetup(); // NewtonsoftJson 序列化 处理
|
.AddNewtonsoftJsonSetup(); // NewtonsoftJson 序列化 处理
|
||||||
|
|
||||||
builder.Services.AddOptions().Configure<SystemEmailSendConfig>(_configuration.GetSection("SystemEmailSendConfig"));
|
builder.Services.AddOptions().Configure<SystemEmailSendConfig>(_configuration.GetSection("SystemEmailSendConfig"));
|
||||||
builder.Services.AddOptions().Configure<ServiceVerifyConfigOption>(_configuration.GetSection("BasicSystemConfig"));
|
builder.Services.AddOptions().Configure<ServiceVerifyConfigOption>(_configuration.GetSection("BasicSystemConfig"));
|
||||||
|
@ -123,43 +123,43 @@ builder.Services.AddOptions().Configure<AliyunOSSOptions>(_configuration.GetSect
|
||||||
builder.Services.AddOptions().Configure<ObjectStoreServiceOptions>(_configuration.GetSection("ObjectStoreService"));
|
builder.Services.AddOptions().Configure<ObjectStoreServiceOptions>(_configuration.GetSection("ObjectStoreService"));
|
||||||
|
|
||||||
|
|
||||||
//动态WebApi + UnifiedApiResultFilter 省掉控制器代码
|
//动态WebApi + UnifiedApiResultFilter 省掉控制器代码
|
||||||
builder.Services.AddDynamicWebApiSetup();
|
builder.Services.AddDynamicWebApiSetup();
|
||||||
//AutoMapper
|
//AutoMapper
|
||||||
builder.Services.AddAutoMapperSetup();
|
builder.Services.AddAutoMapperSetup();
|
||||||
//EF ORM QueryWithNoLock
|
//EF ORM QueryWithNoLock
|
||||||
builder.Services.AddEFSetup(_configuration);
|
builder.Services.AddEFSetup(_configuration);
|
||||||
//Http 响应压缩
|
//Http 响应压缩
|
||||||
builder.Services.AddResponseCompressionSetup();
|
builder.Services.AddResponseCompressionSetup();
|
||||||
//Swagger Api 文档
|
//Swagger Api 文档
|
||||||
builder.Services.AddSwaggerSetup();
|
builder.Services.AddSwaggerSetup();
|
||||||
//JWT Token 验证
|
//JWT Token 验证
|
||||||
builder.Services.AddJWTAuthSetup(_configuration);
|
builder.Services.AddJWTAuthSetup(_configuration);
|
||||||
|
|
||||||
// MediatR 进程内消息 事件解耦 从程序集中 注册命令和handler对应关系
|
// MediatR 进程内消息 事件解耦 从程序集中 注册命令和handler对应关系
|
||||||
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<ConsistencyVerificationHandler>());
|
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssemblyContaining<ConsistencyVerificationHandler>());
|
||||||
// EasyCaching 缓存
|
// EasyCaching 缓存
|
||||||
builder.Services.AddEasyCachingSetup(_configuration);
|
builder.Services.AddEasyCachingSetup(_configuration);
|
||||||
|
|
||||||
// hangfire 定时任务框架 有界面,更友好~
|
// hangfire 定时任务框架 有界面,更友好~
|
||||||
builder.Services.AddhangfireSetup(_configuration);
|
builder.Services.AddhangfireSetup(_configuration);
|
||||||
|
|
||||||
|
|
||||||
//Serilog 日志可视化 LogDashboard日志
|
//Serilog 日志可视化 LogDashboard日志
|
||||||
builder.Services.AddLogDashboardSetup();
|
builder.Services.AddLogDashboardSetup();
|
||||||
|
|
||||||
|
|
||||||
builder.Services.AddJsonConfigSetup(_configuration);
|
builder.Services.AddJsonConfigSetup(_configuration);
|
||||||
//转发头设置 获取真实IP
|
//转发头设置 获取真实IP
|
||||||
builder.Services.Configure<ForwardedHeadersOptions>(options =>
|
builder.Services.Configure<ForwardedHeadersOptions>(options =>
|
||||||
{
|
{
|
||||||
options.ForwardedHeaders =
|
options.ForwardedHeaders =
|
||||||
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
|
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
|
||||||
});
|
});
|
||||||
//Dicom影像渲染图片 跨平台
|
//Dicom影像渲染图片 跨平台
|
||||||
builder.Services.AddDicomSetup();
|
builder.Services.AddDicomSetup();
|
||||||
|
|
||||||
// 实时应用
|
// 实时应用
|
||||||
builder.Services.AddSignalR();
|
builder.Services.AddSignalR();
|
||||||
|
|
||||||
builder.Services.AddSingleton<IUserIdProvider, IRaCISUserIdProvider>();
|
builder.Services.AddSingleton<IUserIdProvider, IRaCISUserIdProvider>();
|
||||||
|
@ -168,18 +168,18 @@ builder.Services.AddSingleton<IUserIdProvider, IRaCISUserIdProvider>();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region 历史废弃配置
|
#region 历史废弃配置
|
||||||
//builder.Services.AddMemoryCache();
|
//builder.Services.AddMemoryCache();
|
||||||
////上传限制 配置
|
////上传限制 配置
|
||||||
//builder.Services.Configure<FormOptions>(options =>
|
//builder.Services.Configure<FormOptions>(options =>
|
||||||
//{
|
//{
|
||||||
// options.MultipartBodyLengthLimit = int.MaxValue;
|
// options.MultipartBodyLengthLimit = int.MaxValue;
|
||||||
// options.ValueCountLimit = int.MaxValue;
|
// options.ValueCountLimit = int.MaxValue;
|
||||||
// options.ValueLengthLimit = int.MaxValue;
|
// options.ValueLengthLimit = int.MaxValue;
|
||||||
//});
|
//});
|
||||||
//IP 限流 可设置白名单 或者黑名单
|
//IP 限流 可设置白名单 或者黑名单
|
||||||
//services.AddIpPolicyRateLimitSetup(_configuration);
|
//services.AddIpPolicyRateLimitSetup(_configuration);
|
||||||
// 用户类型 策略授权
|
// 用户类型 策略授权
|
||||||
//services.AddAuthorizationPolicySetup(_configuration);
|
//services.AddAuthorizationPolicySetup(_configuration);
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
@ -188,22 +188,22 @@ builder.Services.AddSingleton<IUserIdProvider, IRaCISUserIdProvider>();
|
||||||
var app = builder.Build();
|
var app = builder.Build();
|
||||||
var env = app.Environment;
|
var env = app.Environment;
|
||||||
|
|
||||||
#region 配置中间件
|
#region 配置中间件
|
||||||
|
|
||||||
|
|
||||||
// Configure the HTTP request pipeline.
|
// Configure the HTTP request pipeline.
|
||||||
|
|
||||||
//本地化
|
//本地化
|
||||||
app.UseLocalization();
|
app.UseLocalization();
|
||||||
|
|
||||||
app.UseForwardedHeaders();
|
app.UseForwardedHeaders();
|
||||||
|
|
||||||
//响应压缩
|
//响应压缩
|
||||||
app.UseResponseCompression();
|
app.UseResponseCompression();
|
||||||
|
|
||||||
//app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
|
//app.UseCors(t => t.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
|
||||||
|
|
||||||
//不需要 token 访问的静态文件 wwwroot css, JavaScript, and images don't require authentication.
|
//不需要 token 访问的静态文件 wwwroot css, JavaScript, and images don't require authentication.
|
||||||
app.UseStaticFiles();
|
app.UseStaticFiles();
|
||||||
|
|
||||||
app.UseMiddleware<MultiDiskStaticFilesMiddleware>();
|
app.UseMiddleware<MultiDiskStaticFilesMiddleware>();
|
||||||
|
@ -215,7 +215,7 @@ app.UseLogDashboard("/LogDashboard");
|
||||||
app.UseHangfireConfig(env);
|
app.UseHangfireConfig(env);
|
||||||
|
|
||||||
|
|
||||||
////限流 中间件
|
////限流 中间件
|
||||||
//app.UseIpRateLimiting();
|
//app.UseIpRateLimiting();
|
||||||
|
|
||||||
|
|
||||||
|
@ -228,13 +228,13 @@ else
|
||||||
//app.UseHsts();
|
//app.UseHsts();
|
||||||
}
|
}
|
||||||
|
|
||||||
// 特殊异常处理 比如 404
|
// 特殊异常处理 比如 404
|
||||||
app.UseStatusCodePagesWithReExecute("/Error/{0}");
|
app.UseStatusCodePagesWithReExecute("/Error/{0}");
|
||||||
|
|
||||||
SwaggerSetup.Configure(app, env);
|
SwaggerSetup.Configure(app, env);
|
||||||
|
|
||||||
|
|
||||||
////serilog 记录请求的用户信息
|
////serilog 记录请求的用户信息
|
||||||
app.UseSerilogConfig(env);
|
app.UseSerilogConfig(env);
|
||||||
|
|
||||||
app.UseRouting();
|
app.UseRouting();
|
||||||
|
@ -270,21 +270,21 @@ await hangfireJobService.InitHangfireJobTaskAsync();
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
#region 运行环境 部署平台
|
#region 运行环境 部署平台
|
||||||
|
|
||||||
Log.Logger.Warning($"当前环境:{enviromentName}");
|
Log.Logger.Warning($"当前环境:{enviromentName}");
|
||||||
|
|
||||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||||
{
|
{
|
||||||
Log.Logger.Warning($"当前部署平台环境:windows");
|
Log.Logger.Warning($"当前部署平台环境:windows");
|
||||||
}
|
}
|
||||||
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
|
else if (RuntimeInformation.IsOSPlatform(OSPlatform.Linux))
|
||||||
{
|
{
|
||||||
Log.Logger.Warning($"当前部署平台环境:linux");
|
Log.Logger.Warning($"当前部署平台环境:linux");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Log.Logger.Warning($"当前部署平台环境:OSX or FreeBSD");
|
Log.Logger.Warning($"当前部署平台环境:OSX or FreeBSD");
|
||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
|
@ -1,16 +1,16 @@
|
||||||
// 使用的是proto3版本
|
// 使用的是proto3版本
|
||||||
syntax = "proto3";
|
syntax = "proto3";
|
||||||
// 定义命名空间,后续生成代码时就会生成对应的命名空间
|
// 定义命名空间,后续生成代码时就会生成对应的命名空间
|
||||||
option csharp_namespace = "gRPC.ZHiZHUN.AuthServer.protos";
|
option csharp_namespace = "gRPC.ZHiZHUN.AuthServer.protos";
|
||||||
|
|
||||||
/*
|
/*
|
||||||
每一句需要用分号结尾
|
每一句需要用分号结尾
|
||||||
message 用来定义请求和返回数据格式
|
message 用来定义请求和返回数据格式
|
||||||
tag message后面的值数字代表是字段的标识(tag),不是赋值,
|
tag message后面的值数字代表是字段的标识(tag),不是赋值,
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
// 新增用户时需要传递数据消息, 可理解为一个类
|
// 新增用户时需要传递数据消息, 可理解为一个类
|
||||||
message GetTokenReuqest{
|
message GetTokenReuqest{
|
||||||
string id=1;
|
string id=1;
|
||||||
string userName=2;
|
string userName=2;
|
||||||
|
@ -22,48 +22,48 @@ message GetTokenReuqest{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 新增时返回的消息格式
|
// 新增时返回的消息格式
|
||||||
message GetTokenResponse {
|
message GetTokenResponse {
|
||||||
int32 code=1;
|
int32 code=1;
|
||||||
string token =2;
|
string token =2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// service 用标识定义服务的,里面写对应的方法
|
// service 用标识定义服务的,里面写对应的方法
|
||||||
service TokenGrpcService{
|
service TokenGrpcService{
|
||||||
// 获取token
|
// 获取token
|
||||||
rpc GetUserToken(GetTokenReuqest) returns (GetTokenResponse);
|
rpc GetUserToken(GetTokenReuqest) returns (GetTokenResponse);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
// 新增用户时需要传递数据消息, 可理解为一个类
|
// 新增用户时需要传递数据消息, 可理解为一个类
|
||||||
message AddUserReuqest{
|
message AddUserReuqest{
|
||||||
string name=1;
|
string name=1;
|
||||||
int32 age=2;
|
int32 age=2;
|
||||||
bool isBoy=3;
|
bool isBoy=3;
|
||||||
}
|
}
|
||||||
// 新增时返回的消息格式
|
// 新增时返回的消息格式
|
||||||
message ResultResponse {
|
message ResultResponse {
|
||||||
int32 code=1;
|
int32 code=1;
|
||||||
string msg =2;
|
string msg =2;
|
||||||
}
|
}
|
||||||
//传递的查询条件信息格式,可理解为平时传入的查询条件对象
|
//传递的查询条件信息格式,可理解为平时传入的查询条件对象
|
||||||
message QueryUserReuqest{
|
message QueryUserReuqest{
|
||||||
string name=1;
|
string name=1;
|
||||||
}
|
}
|
||||||
//查询返回的用户信息格式,可理解为返回的类
|
//查询返回的用户信息格式,可理解为返回的类
|
||||||
message UserInfoResponse {
|
message UserInfoResponse {
|
||||||
string name=1;
|
string name=1;
|
||||||
int32 age=2;
|
int32 age=2;
|
||||||
string gender=3;
|
string gender=3;
|
||||||
}
|
}
|
||||||
|
|
||||||
// service 用标识定义服务的,里面写对应的方法
|
// service 用标识定义服务的,里面写对应的方法
|
||||||
service UserService{
|
service UserService{
|
||||||
// 新增用户
|
// 新增用户
|
||||||
rpc AddUser(AddUserReuqest) returns (ResultResponse);
|
rpc AddUser(AddUserReuqest) returns (ResultResponse);
|
||||||
// 查询用户
|
// 查询用户
|
||||||
rpc GetAllUser(QueryUserReuqest) returns (UserInfoResponse);
|
rpc GetAllUser(QueryUserReuqest) returns (UserInfoResponse);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -5,13 +5,13 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
{
|
{
|
||||||
//public enum AttachmentType
|
//public enum AttachmentType
|
||||||
//{
|
//{
|
||||||
// Avatar=1,//头像
|
// Avatar=1,//头像
|
||||||
// Resume=2,//简历
|
// Resume=2,//简历
|
||||||
// GCP=3,//GCP证书
|
// GCP=3,//GCP证书
|
||||||
// MedicalLicence=4,//医师资格证
|
// MedicalLicence=4,//医师资格证
|
||||||
// PracticeCertificate=5,//执业资格证
|
// PracticeCertificate=5,//执业资格证
|
||||||
// LargeEquipmentWorkingCertificate=6,//大型器械上岗证
|
// LargeEquipmentWorkingCertificate=6,//大型器械上岗证
|
||||||
// HighestDegreeCertificate=7//最高学历证书
|
// HighestDegreeCertificate=7//最高学历证书
|
||||||
//}
|
//}
|
||||||
[Table("Attachment")]
|
[Table("Attachment")]
|
||||||
public partial class Attachment : Entity, IAuditAdd
|
public partial class Attachment : Entity, IAuditAdd
|
||||||
|
@ -29,7 +29,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
public string FileName { get; set; } = string.Empty;
|
public string FileName { get; set; } = string.Empty;
|
||||||
public DateTime CreateTime { get; set; }
|
public DateTime CreateTime { get; set; }
|
||||||
public Guid CreateUserId { get; set; } = Guid.Empty;
|
public Guid CreateUserId { get; set; } = Guid.Empty;
|
||||||
//language=1 中文, 2为英文
|
//language=1 中文, 2为英文
|
||||||
public int Language { get; set; } = 0;
|
public int Language { get; set; } = 0;
|
||||||
|
|
||||||
//public Guid CreateUserId { get; set; } = Guid.Empty;
|
//public Guid CreateUserId { get; set; } = Guid.Empty;
|
||||||
|
|
|
@ -4,7 +4,7 @@ using System.ComponentModel.DataAnnotations.Schema;
|
||||||
namespace IRaCIS.Core.Domain.Models
|
namespace IRaCIS.Core.Domain.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 用户与医生管理关联关系表 - 实体
|
/// 用户与医生管理关联关系表 - 实体
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Table("UserDoctor")]
|
[Table("UserDoctor")]
|
||||||
public partial class UserDoctor : Entity
|
public partial class UserDoctor : Entity
|
||||||
|
|
|
@ -13,7 +13,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
public string RoleDescription { get; set; } = string.Empty;
|
public string RoleDescription { get; set; } = string.Empty;
|
||||||
|
|
||||||
public int Status { get; set; }
|
public int Status { get; set; }
|
||||||
public int PrivilegeLevel { get; set; } //ȨĎŢźśąđ
|
public int PrivilegeLevel { get; set; } //权限级别
|
||||||
|
|
||||||
public DateTime CreateTime { get; set; } = DateTime.Now;
|
public DateTime CreateTime { get; set; } = DateTime.Now;
|
||||||
public Guid CreateUserId { get; set; } = Guid.Empty;
|
public Guid CreateUserId { get; set; } = Guid.Empty;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.ComponentModel.DataAnnotations;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.ComponentModel.DataAnnotations.Schema;
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
@ -96,12 +96,12 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
[StringLength(512)]
|
[StringLength(512)]
|
||||||
public string Indication { get; set; } = string.Empty;
|
public string Indication { get; set; } = string.Empty;
|
||||||
|
|
||||||
//入组那一块的状态
|
//入组那一块的状态
|
||||||
//[ConcurrencyCheck]
|
//[ConcurrencyCheck]
|
||||||
public int TrialEnrollStatus { get; set; }
|
public int TrialEnrollStatus { get; set; }
|
||||||
|
|
||||||
|
|
||||||
//启动状态
|
//启动状态
|
||||||
[StringLength(500)]
|
[StringLength(500)]
|
||||||
public string TrialStatusStr { get; set; } = StaticData.TrialState.TrialInitializing;
|
public string TrialStatusStr { get; set; } = StaticData.TrialState.TrialInitializing;
|
||||||
|
|
||||||
|
@ -151,15 +151,15 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//废弃
|
//废弃
|
||||||
//public AttendedReviewerType AttendedReviewerType { get; set; } = AttendedReviewerType.CN;//0全部中国医生 1美国医生 2既有中国医生,也有美国医生
|
//public AttendedReviewerType AttendedReviewerType { get; set; } = AttendedReviewerType.CN;//0全部中国医生 1美国医生 2既有中国医生,也有美国医生
|
||||||
|
|
||||||
////废弃
|
////废弃
|
||||||
//[JsonIgnore]
|
//[JsonIgnore]
|
||||||
//[ForeignKey("DeclarationTypeId")]
|
//[ForeignKey("DeclarationTypeId")]
|
||||||
//public Dictionary DeclarationType { get; set; }
|
//public Dictionary DeclarationType { get; set; }
|
||||||
|
|
||||||
//废弃
|
//废弃
|
||||||
//public Guid DeclarationTypeId { get; set; } = Guid.Empty;
|
//public Guid DeclarationTypeId { get; set; } = Guid.Empty;
|
||||||
|
|
||||||
|
|
||||||
|
@ -182,66 +182,66 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
public bool VisitPlanConfirmed { get; set; }
|
public bool VisitPlanConfirmed { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 受试者编号具体规则
|
/// 受试者编号具体规则
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string SubjectCodeRule { get; set; } = StaticData.International("Trial_number");
|
public string SubjectCodeRule { get; set; } = StaticData.International("Trial_number");
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否 提醒受试者编号规则
|
/// 是否 提醒受试者编号规则
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsNoticeSubjectCodeRule { get; set; } = true;
|
public bool IsNoticeSubjectCodeRule { get; set; } = true;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否 有基准时间(首次给药时间)
|
/// 是否 有基准时间(首次给药时间)
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsHaveFirstGiveMedicineDate { get; set; } = true;
|
public bool IsHaveFirstGiveMedicineDate { get; set; } = true;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否有 受试者年龄
|
/// 是否有 受试者年龄
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsHaveSubjectAge { get; set; } = false;
|
public bool IsHaveSubjectAge { get; set; } = false;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否有 入组性确认
|
/// 是否有 入组性确认
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsEnrollementQualificationConfirm { get; set; } = false;
|
public bool IsEnrollementQualificationConfirm { get; set; } = false;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 出组后计划外访视名称
|
/// 出组后计划外访视名称
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string OutEnrollmentVisitName { get; set; } = "EOT";
|
public string OutEnrollmentVisitName { get; set; } = "EOT";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否 验证拍片日期
|
/// 是否 验证拍片日期
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsVerifyVisitImageDate { get; set; } = true;
|
public bool IsVerifyVisitImageDate { get; set; } = true;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 临床信息传输 1:系统录入 2:系统录入+PDF 0:无
|
/// 临床信息传输 1:系统录入 2:系统录入+PDF 0:无
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int ClinicalInformationTransmissionEnum { get; set; } = 1;
|
public int ClinicalInformationTransmissionEnum { get; set; } = 1;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否审核 临床信息
|
/// 是否审核 临床信息
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsCRAAuditClinicalInformation { get; set; } = false;
|
public bool IsCRAAuditClinicalInformation { get; set; } = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// QC流程 0 不审,1 单审,2双审
|
/// QC流程 0 不审,1 单审,2双审
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public TrialQCProcess QCProcessEnum { get; set; } = TrialQCProcess.DoubleAudit;
|
public TrialQCProcess QCProcessEnum { get; set; } = TrialQCProcess.DoubleAudit;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 影像一致性核查
|
/// 影像一致性核查
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsImageConsistencyVerification { get; set; } = true;
|
public bool IsImageConsistencyVerification { get; set; } = true;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 影像导出
|
/// 影像导出
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsImageExport { get; set; } = false;
|
public bool IsImageExport { get; set; } = false;
|
||||||
|
|
||||||
|
@ -250,7 +250,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//阅片方式
|
//阅片方式
|
||||||
public int ReadingMode { get; set; } = 1;
|
public int ReadingMode { get; set; } = 1;
|
||||||
|
|
||||||
|
|
||||||
|
@ -258,12 +258,12 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
public int ChangeDefalutDays { get; set; } = 5;
|
public int ChangeDefalutDays { get; set; } = 5;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 跨项目复制
|
/// 跨项目复制
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsImageReplicationAcrossTrial { get; set; } = false;
|
public bool IsImageReplicationAcrossTrial { get; set; } = false;
|
||||||
|
|
||||||
|
|
||||||
public string BodyPartTypes { get; set; } = "鼻咽部|脑部|颈部|胸部|上/下腹部|盆腔|全身|其他";
|
public string BodyPartTypes { get; set; } = "鼻咽部|脑部|颈部|胸部|上/下腹部|盆腔|全身|其他";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -279,25 +279,25 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
//PD 进展是否显示 配置访视 是否显示 PD进展 (从而可以设置状态)
|
//PD 进展是否显示 配置访视 是否显示 PD进展 (从而可以设置状态)
|
||||||
public bool IsPDProgressView { get; set; }
|
public bool IsPDProgressView { get; set; }
|
||||||
|
|
||||||
//研究方案号
|
//研究方案号
|
||||||
public string ResearchProgramNo { get; set; }
|
public string ResearchProgramNo { get; set; }
|
||||||
|
|
||||||
//实验名称
|
//实验名称
|
||||||
public string ExperimentName { get; set; }
|
public string ExperimentName { get; set; }
|
||||||
|
|
||||||
//主研单位
|
//主研单位
|
||||||
public string MainResearchUnit { get; set; }
|
public string MainResearchUnit { get; set; }
|
||||||
|
|
||||||
// 负责人PI
|
// 负责人PI
|
||||||
public string HeadPI { get; set; }
|
public string HeadPI { get; set; }
|
||||||
|
|
||||||
public bool IsUrgent { get; set; }
|
public bool IsUrgent { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 项目类型 1 正式项目、0 非正式项目 2是培训项目
|
/// 项目类型 1 正式项目、0 非正式项目 2是培训项目
|
||||||
/// </summary>time
|
/// </summary>time
|
||||||
public TrialType TrialType { get; set; }
|
public TrialType TrialType { get; set; }
|
||||||
|
|
||||||
|
@ -314,7 +314,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
public bool IsSubjectSexView { get; set; } = false;
|
public bool IsSubjectSexView { get; set; } = false;
|
||||||
|
|
||||||
//配置Suject Edit页面 是否显示 加急
|
//配置Suject Edit页面 是否显示 加急
|
||||||
public bool IsSubjectExpeditedView { get; set; } = false;
|
public bool IsSubjectExpeditedView { get; set; } = false;
|
||||||
|
|
||||||
|
|
||||||
|
@ -322,14 +322,14 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
public bool IsDeleted { get; set; }
|
public bool IsDeleted { get; set; }
|
||||||
|
|
||||||
|
|
||||||
//QC 问题流程
|
//QC 问题流程
|
||||||
|
|
||||||
public User QCQuestionConfirmedUser { get; set; }
|
public User QCQuestionConfirmedUser { get; set; }
|
||||||
public Guid? QCQuestionConfirmedUserId { get; set; }
|
public Guid? QCQuestionConfirmedUserId { get; set; }
|
||||||
public DateTime? QCQuestionConfirmedTime { get; set; }
|
public DateTime? QCQuestionConfirmedTime { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 项目完成时间
|
/// 项目完成时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime? TrialFinishTime { get; set; }
|
public DateTime? TrialFinishTime { get; set; }
|
||||||
|
|
||||||
|
@ -348,7 +348,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
public Guid? DeleteUserId { get; set; }
|
public Guid? DeleteUserId { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 同步临床数据时间
|
/// 同步临床数据时间
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public DateTime? SyncClinicalDataTime { get; set; }
|
public DateTime? SyncClinicalDataTime { get; set; }
|
||||||
|
|
||||||
|
@ -359,34 +359,34 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
public int IndicationEnum { get; set; } = -1;
|
public int IndicationEnum { get; set; } = -1;
|
||||||
|
|
||||||
#region 邮件配置
|
#region 邮件配置
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 发件箱账号
|
/// 发件箱账号
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string EmailFromEmail { get; set; } = string.Empty;
|
public string EmailFromEmail { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 发件人
|
/// 发件人
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string EmailFromName { get; set; } = string.Empty;
|
public string EmailFromName { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 密码/授权码
|
/// 密码/授权码
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string EmailAuthorizationCode { get; set; } = string.Empty;
|
public string EmailAuthorizationCode { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// SMTP服务器
|
/// SMTP服务器
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public string EmailSMTPServerAddress { get; set; } = string.Empty;
|
public string EmailSMTPServerAddress { get; set; } = string.Empty;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// SMTP端口
|
/// SMTP端口
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int EmailSMTPServerPort { get; set; }
|
public int EmailSMTPServerPort { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 是否配置过邮箱
|
/// 是否配置过邮箱
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsConfigureEmail { get; set; } = false;
|
public bool IsConfigureEmail { get; set; } = false;
|
||||||
#endregion
|
#endregion
|
||||||
|
@ -395,20 +395,20 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
|
|
||||||
///// <summary>
|
///// <summary>
|
||||||
///// 图像是否有标注
|
///// 图像是否有标注
|
||||||
///// </summary>
|
///// </summary>
|
||||||
//public bool IsImageIabeled { get; set; }
|
//public bool IsImageIabeled { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
////阅片类型
|
////阅片类型
|
||||||
//public ReadingMethod ReadingType { get; set; } = ReadingMethod.Double;
|
//public ReadingMethod ReadingType { get; set; } = ReadingMethod.Double;
|
||||||
|
|
||||||
|
|
||||||
//public bool IsGlobalReading { get; set; } = true;
|
//public bool IsGlobalReading { get; set; } = true;
|
||||||
|
|
||||||
///// <summary>
|
///// <summary>
|
||||||
///// 仲裁阅片
|
///// 仲裁阅片
|
||||||
///// </summary>
|
///// </summary>
|
||||||
//public bool? IsArbitrationReading { get; set; } = true;
|
//public bool? IsArbitrationReading { get; set; } = true;
|
||||||
|
|
||||||
|
@ -416,50 +416,50 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
|
|
||||||
///// <summary>
|
///// <summary>
|
||||||
///// 1 Mint、2 PACS
|
///// 1 Mint、2 PACS
|
||||||
///// </summary>
|
///// </summary>
|
||||||
|
|
||||||
//public int ImagePlatform { get; set; } = 1;
|
//public int ImagePlatform { get; set; } = 1;
|
||||||
|
|
||||||
|
|
||||||
///// <summary>
|
///// <summary>
|
||||||
///// 仲裁规则
|
///// 仲裁规则
|
||||||
///// </summary>
|
///// </summary>
|
||||||
//public ArbitrationRule ArbitrationRule { get; set; } = ArbitrationRule.None;
|
//public ArbitrationRule ArbitrationRule { get; set; } = ArbitrationRule.None;
|
||||||
|
|
||||||
////任务分配对象
|
////任务分配对象
|
||||||
//public TaskAllocateObj TaskAllocateObjEnum { get; set; }
|
//public TaskAllocateObj TaskAllocateObjEnum { get; set; }
|
||||||
|
|
||||||
////后续访视任务自动分配
|
////后续访视任务自动分配
|
||||||
//public bool IsFollowVisitAutoAssign { get; set; } = true;
|
//public bool IsFollowVisitAutoAssign { get; set; } = true;
|
||||||
|
|
||||||
////后续全局自动分配
|
////后续全局自动分配
|
||||||
//public bool IsFollowGlobalVisitAutoAssign { get; set; } = true;
|
//public bool IsFollowGlobalVisitAutoAssign { get; set; } = true;
|
||||||
|
|
||||||
//public bool IsFollowJudgeTaskAutoAssign { get; set; } = true;
|
//public bool IsFollowJudgeTaskAutoAssign { get; set; } = true;
|
||||||
|
|
||||||
//public TaskAllocateDefaultState FollowJudgeTaskAutoAssignDefaultState { get; set; } = TaskAllocateDefaultState.Allocated;
|
//public TaskAllocateDefaultState FollowJudgeTaskAutoAssignDefaultState { get; set; } = TaskAllocateDefaultState.Allocated;
|
||||||
|
|
||||||
////后续访视自动分配默认状态
|
////后续访视自动分配默认状态
|
||||||
//public TaskAllocateDefaultState FollowVisitAutoAssignDefaultState { get; set; } = TaskAllocateDefaultState.Allocated;
|
//public TaskAllocateDefaultState FollowVisitAutoAssignDefaultState { get; set; } = TaskAllocateDefaultState.Allocated;
|
||||||
|
|
||||||
////后续全局自动分配默认状态
|
////后续全局自动分配默认状态
|
||||||
//public TaskAllocateDefaultState FollowGlobalVisitAutoAssignDefaultState { get; set; } = TaskAllocateDefaultState.Allocated;
|
//public TaskAllocateDefaultState FollowGlobalVisitAutoAssignDefaultState { get; set; } = TaskAllocateDefaultState.Allocated;
|
||||||
|
|
||||||
////读片任务显示规则
|
////读片任务显示规则
|
||||||
|
|
||||||
//public ReadingTaskViewMethod ReadingTaskViewEnum { get; set; }
|
//public ReadingTaskViewMethod ReadingTaskViewEnum { get; set; }
|
||||||
|
|
||||||
////读片任务显示是否顺序
|
////读片任务显示是否顺序
|
||||||
//public bool IsReadingTaskViewInOrder { get; set; } = true;
|
//public bool IsReadingTaskViewInOrder { get; set; } = true;
|
||||||
|
|
||||||
///// <summary>
|
///// <summary>
|
||||||
///// 阅片是否显示受试者信息
|
///// 阅片是否显示受试者信息
|
||||||
///// </summary>
|
///// </summary>
|
||||||
//public bool IsReadingShowSubjectInfo { get; set; } = false;
|
//public bool IsReadingShowSubjectInfo { get; set; } = false;
|
||||||
|
|
||||||
///// <summary>
|
///// <summary>
|
||||||
///// 阅片是否显示既往结果
|
///// 阅片是否显示既往结果
|
||||||
///// </summary>
|
///// </summary>
|
||||||
//public bool IsReadingShowPreviousResults { get; set; } = false;
|
//public bool IsReadingShowPreviousResults { get; set; } = false;
|
||||||
|
|
||||||
|
@ -467,7 +467,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
|
|
||||||
///// <summary>
|
///// <summary>
|
||||||
///// 是确认医学审核问题
|
///// 是确认医学审核问题
|
||||||
///// </summary>
|
///// </summary>
|
||||||
|
|
||||||
//public bool IsConfirmMedicineQuestion { get; set; } = false;
|
//public bool IsConfirmMedicineQuestion { get; set; } = false;
|
||||||
|
@ -476,12 +476,12 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
|
|
||||||
///// <summary>
|
///// <summary>
|
||||||
///// 阅片信息签名时间
|
///// 阅片信息签名时间
|
||||||
///// </summary>
|
///// </summary>
|
||||||
//public DateTime? ReadingInfoSignTime { get; set; }
|
//public DateTime? ReadingInfoSignTime { get; set; }
|
||||||
|
|
||||||
///// <summary>
|
///// <summary>
|
||||||
///// 阅片工具
|
///// 阅片工具
|
||||||
///// </summary>
|
///// </summary>
|
||||||
//public ReadingTool? ReadingTool { get; set; }
|
//public ReadingTool? ReadingTool { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@ using IRaCIS.Core.Domain.Share;
|
||||||
namespace IRaCIS.Core.Domain.Models
|
namespace IRaCIS.Core.Domain.Models
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 运维人员与项目关联关系表 - 实体
|
/// 运维人员与项目关联关系表 - 实体
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[Table("TrialUser")]
|
[Table("TrialUser")]
|
||||||
public partial class TrialUser : Entity, IAuditUpdate, IAuditAdd ,ISoftDelete
|
public partial class TrialUser : Entity, IAuditUpdate, IAuditAdd ,ISoftDelete
|
||||||
|
|
|
@ -5,10 +5,10 @@
|
||||||
"RemoteNew": "Server=123.56.181.144,14333\\MSSQLExpress14;Database=IRaCIS_New;User ID=sa;Password=dev123456DEV;"
|
"RemoteNew": "Server=123.56.181.144,14333\\MSSQLExpress14;Database=IRaCIS_New;User ID=sa;Password=dev123456DEV;"
|
||||||
},
|
},
|
||||||
"JwtSetting": {
|
"JwtSetting": {
|
||||||
"SecurityKey": "3e6dbfa227234a03977a2f421bdb7f4f", // 密钥
|
"SecurityKey": "3e6dbfa227234a03977a2f421bdb7f4f", // 密钥
|
||||||
"Issuer": "IRaCIS", // 颁发者
|
"Issuer": "IRaCIS", // 颁发者
|
||||||
"Audience": "ZhiZhun", // 接收者
|
"Audience": "ZhiZhun", // 接收者
|
||||||
"TokenExpireDays": "7" // 过期时间(7day)
|
"TokenExpireDays": "7" // 过期时间(7day)
|
||||||
},
|
},
|
||||||
"IpRateLimiting": {
|
"IpRateLimiting": {
|
||||||
"EnableEndpointRateLimiting": true, //False: globally executed, true: executed for each
|
"EnableEndpointRateLimiting": true, //False: globally executed, true: executed for each
|
||||||
|
@ -69,7 +69,7 @@
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
||||||
//网站根地址,为了访问文件 dicom 和上传的文档... 实测发现不用将域名拼接返回,浏览器会自动加上当前ip,避免了多环境读取环境配置文件
|
//网站根地址,为了访问文件 dicom 和上传的文档... 实测发现不用将域名拼接返回,浏览器会自动加上当前ip,避免了多环境读取环境配置文件
|
||||||
//"RootUrl": "http://localhost:8060",
|
//"RootUrl": "http://localhost:8060",
|
||||||
|
|
||||||
"GrpcAddress": "http://123.56.181.144:7200",
|
"GrpcAddress": "http://123.56.181.144:7200",
|
||||||
|
@ -83,7 +83,7 @@
|
||||||
"UserCodePrefix": "U",
|
"UserCodePrefix": "U",
|
||||||
"Share": false, //
|
"Share": false, //
|
||||||
"FileSizeLimit": 1073741824,
|
"FileSizeLimit": 1073741824,
|
||||||
"LoginExpiredTimeSpan": ":15", // Minute
|
"LoginExpiredTimeSpan": ":15", // Minute
|
||||||
"OpenLog": true,
|
"OpenLog": true,
|
||||||
"AddClinicalInfo": true
|
"AddClinicalInfo": true
|
||||||
|
|
||||||
|
|
|
@ -36,8 +36,6 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
|
|
||||||
public IRaCISDBContext(DbContextOptions<IRaCISDBContext> options, IUserInfo userInfo, ILogger<IRaCISDBContext> logger
|
public IRaCISDBContext(DbContextOptions<IRaCISDBContext> options, IUserInfo userInfo, ILogger<IRaCISDBContext> logger
|
||||||
|
|
||||||
|
|
||||||
//IAuditingData auditingData
|
|
||||||
) : base(options)
|
) : base(options)
|
||||||
{
|
{
|
||||||
_logger= logger;
|
_logger= logger;
|
||||||
|
@ -49,36 +47,12 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
//比数据库上下文构造函数先执行 不能构造函数注入的方式使用配置文件
|
//比数据库上下文构造函数先执行 不能构造函数注入的方式使用配置文件
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
{
|
{
|
||||||
optionsBuilder.UseLoggerFactory(MyLoggerFactory)
|
optionsBuilder.UseLoggerFactory(MyLoggerFactory);
|
||||||
|
|
||||||
.ReplaceService<IModelCacheKeyFactory, DynamicModelCacheKeyFactoryDesignTimeSupport>();
|
|
||||||
|
|
||||||
optionsBuilder.UseExceptionProcessor();
|
optionsBuilder.UseExceptionProcessor();
|
||||||
|
|
||||||
//var config = new ConfigurationBuilder()
|
|
||||||
// .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true).Build();
|
|
||||||
//connectionString = config.GetSection("ConnectionStrings:RemoteNew").Value;
|
|
||||||
//optionsBuilder.AddInterceptors(new AuditingInterceptor(connectionString));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#region IModelCacheKeyFactory
|
|
||||||
|
|
||||||
|
|
||||||
public class DynamicModelCacheKeyFactoryDesignTimeSupport : IModelCacheKeyFactory
|
|
||||||
{
|
|
||||||
public object Create(DbContext context, bool designTime)
|
|
||||||
=> context is IRaCISDBContext dynamicContext
|
|
||||||
? (context.GetType(), dynamicContext._userInfo.IsEn_Us, designTime)
|
|
||||||
: (object)context.GetType();
|
|
||||||
|
|
||||||
public object Create(DbContext context)
|
|
||||||
=> Create(context, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
{
|
{
|
||||||
|
@ -89,7 +63,6 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
builder.HasNoKey();
|
builder.HasNoKey();
|
||||||
});
|
});
|
||||||
|
|
||||||
//modelBuilder.HasDbFunction(typeof(DbContext).GetMethod(nameof(GetTableList)));
|
|
||||||
|
|
||||||
modelBuilder.Entity<ReadingQuestionTrial>().HasQueryFilter(p => p.IsAdditional==false);
|
modelBuilder.Entity<ReadingQuestionTrial>().HasQueryFilter(p => p.IsAdditional==false);
|
||||||
|
|
||||||
|
@ -117,20 +90,10 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
modelBuilder.Entity<VisitTask>().HasMany(t => t.TaskInfluenceList).WithOne(s => s.OriginalTask).HasForeignKey(t => t.OriginalTaskId);
|
modelBuilder.Entity<VisitTask>().HasMany(t => t.TaskInfluenceList).WithOne(s => s.OriginalTask).HasForeignKey(t => t.OriginalTaskId);
|
||||||
|
|
||||||
|
|
||||||
modelBuilder.Entity<VisitTask>().HasMany(t => t.GlobalVisitResultList).WithOne(s => s.GlobalVisitTask).HasForeignKey(t => t.GlobalTaskId);
|
modelBuilder.Entity<VisitTask>().HasMany(t => t.GlobalVisitResultList).WithOne(s => s.GlobalVisitTask).HasForeignKey(t => t.GlobalTaskId);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
modelBuilder.Entity<Dictionary>().HasMany(t => t.ChildList).WithOne(t => t.Parent);
|
modelBuilder.Entity<Dictionary>().HasMany(t => t.ChildList).WithOne(t => t.Parent);
|
||||||
modelBuilder.Entity<SubjectUser>().HasMany(t => t.EarlierSubjectUserList).WithOne(t => t.OrignalSubjectUser);
|
modelBuilder.Entity<SubjectUser>().HasMany(t => t.EarlierSubjectUserList).WithOne(t => t.OrignalSubjectUser);
|
||||||
//if (_userInfo.IsEn_Us)
|
|
||||||
//{
|
|
||||||
// modelBuilder.Entity<Dictionary>().Property(t => t.MappedValue).HasColumnName(nameof(Domain.Models.Dictionary.Value));
|
|
||||||
//}
|
|
||||||
//else
|
|
||||||
//{
|
|
||||||
// modelBuilder.Entity<Dictionary>().Property(t => t.MappedValue).HasColumnName(nameof(Domain.Models.Dictionary.ValueCN));
|
|
||||||
//}
|
|
||||||
|
|
||||||
|
|
||||||
//遍历实体模型手动配置
|
//遍历实体模型手动配置
|
||||||
|
@ -515,19 +478,6 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
public virtual DbSet<TrialEmailBlackUser> TrialEmailBlackUser { get; set; }
|
public virtual DbSet<TrialEmailBlackUser> TrialEmailBlackUser { get; set; }
|
||||||
|
|
||||||
|
|
||||||
#region 废弃
|
|
||||||
|
|
||||||
public override int SaveChanges()
|
|
||||||
{
|
|
||||||
|
|
||||||
SetCommonEntityAuditInfo();
|
|
||||||
AddAudit().GetAwaiter();
|
|
||||||
return base.SaveChanges();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
|
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
|
||||||
{
|
{
|
||||||
// 采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId 稽查实体里面没有这四个字段的值 因为先后顺序的原因
|
// 采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId 稽查实体里面没有这四个字段的值 因为先后顺序的原因
|
||||||
|
@ -587,12 +537,7 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
|
|
||||||
throw new DBSaveFailedException("SQL 事务失败,请检查环境。");
|
throw new DBSaveFailedException("SQL 事务失败,请检查环境。");
|
||||||
}
|
}
|
||||||
//catch (Exception ex)
|
|
||||||
//{
|
|
||||||
// _logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
|
|
||||||
|
|
||||||
// throw new DBSaveFailedException(ex.Message);
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -701,68 +646,6 @@ namespace IRaCIS.Core.Infra.EFCore
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#region 更新审计信息 废弃
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// 事件绑定的方式 更新审计信息 废弃
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="sender"></param>
|
|
||||||
/// <param name="e"></param>
|
|
||||||
private void UpdateAuitUser(object sender, EntityEntryEventArgs e)
|
|
||||||
{
|
|
||||||
if (e.Entry.Entity is IAuditUpdate updateEntity)
|
|
||||||
{
|
|
||||||
switch (e.Entry.State)
|
|
||||||
{
|
|
||||||
//case EntityState.Deleted:
|
|
||||||
// entityWithTimestamps.UpdateTime = DateTime.UtcNow;
|
|
||||||
// Console.WriteLine($"Stamped for delete: {e.Entry.Entity}");
|
|
||||||
// break;
|
|
||||||
case EntityState.Modified:
|
|
||||||
updateEntity.UpdateTime = DateTime.UtcNow;
|
|
||||||
updateEntity.UpdateUserId = _userInfo.Id;
|
|
||||||
break;
|
|
||||||
//添加的时候,更新审计字段也赋值
|
|
||||||
case EntityState.Added:
|
|
||||||
updateEntity.UpdateTime = DateTime.UtcNow;
|
|
||||||
updateEntity.UpdateUserId = _userInfo.Id;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (e.Entry.Entity is IAuditAdd addEntity)
|
|
||||||
{
|
|
||||||
switch (e.Entry.State)
|
|
||||||
{
|
|
||||||
case EntityState.Added:
|
|
||||||
addEntity.CreateTime = DateTime.UtcNow;
|
|
||||||
addEntity.CreateUserId = _userInfo.Id;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (e.Entry.Entity is IAuditAddWithUserName addEntity2)
|
|
||||||
{
|
|
||||||
switch (e.Entry.State)
|
|
||||||
{
|
|
||||||
case EntityState.Added:
|
|
||||||
addEntity2.CreateTime = DateTime.UtcNow;
|
|
||||||
addEntity2.CreateUserId = _userInfo.Id;
|
|
||||||
addEntity2.CreateUser = _userInfo.RealName;
|
|
||||||
break;
|
|
||||||
case EntityState.Deleted:
|
|
||||||
addEntity2.CreateTime = DateTime.UtcNow;
|
|
||||||
addEntity2.CreateUserId = _userInfo.Id;
|
|
||||||
addEntity2.CreateUser = _userInfo.RealName;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public virtual DbSet<TaskAllocationRule> TaskAllocationRule { get; set; }
|
public virtual DbSet<TaskAllocationRule> TaskAllocationRule { get; set; }
|
||||||
|
|
||||||
public virtual DbSet<VisitTask> VisitTask { get; set; }
|
public virtual DbSet<VisitTask> VisitTask { get; set; }
|
||||||
|
|
|
@ -43,20 +43,7 @@ public class AuditingInterceptor : ISaveChangesInterceptor
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region SavedChanges
|
#region SavedChanges
|
||||||
public int SavedChanges(SaveChangesCompletedEventData eventData, int result)
|
|
||||||
{
|
|
||||||
if (_audit.Entities.Count > 0)
|
|
||||||
{
|
|
||||||
var auditContext = eventData.Context as IRaCISDBContext;
|
|
||||||
_audit.Succeeded = true;
|
|
||||||
_audit.EndTime = DateTime.Now;
|
|
||||||
auditContext.SaveChangesAudits.Add(_audit);
|
|
||||||
auditContext.SaveChanges();
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async ValueTask<int> SavedChangesAsync(
|
public async ValueTask<int> SavedChangesAsync(
|
||||||
SaveChangesCompletedEventData eventData,
|
SaveChangesCompletedEventData eventData,
|
||||||
int result,
|
int result,
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
{
|
{
|
||||||
public static readonly string ConnectionString = "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Test.IRC;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true";
|
public static readonly string ConnectionString = "Server=123.56.94.154,1433\\MSSQLSERVER;Database=Test.IRC;User ID=sa;Password=dev123456DEV;TrustServerCertificate=true";
|
||||||
public static readonly string DbDatabase = "Test.IRC";
|
public static readonly string DbDatabase = "Test.IRC";
|
||||||
//表名称用字符串,拼接
|
//表名称用字符串,拼接
|
||||||
public static readonly string TableName = "ReadingTaskQuestionMark";
|
public static readonly string TableName = "ReadingTaskQuestionMark";
|
||||||
//具体文件里面 例如service 可以配置是否分页
|
//具体文件里面 例如service 可以配置是否分页
|
||||||
}
|
}
|
||||||
#>
|
#>
|
||||||
<#+
|
<#+
|
||||||
|
|
Loading…
Reference in New Issue