清理、整理代码
continuous-integration/drone/push Build is passing Details

IRC_NewDev
hang 2024-08-29 22:32:08 +08:00
parent a340167bfb
commit 7dc40fbc5c
16 changed files with 312 additions and 414 deletions

View File

@ -66,6 +66,13 @@
<returns></returns>
<exception cref="T:IRaCIS.Core.Infrastructure.BusinessValidationFailedException"></exception>
</member>
<member name="M:IRaCIS.Core.Application.Helper.OSSService.DeleteFromPrefix(System.String)">
<summary>
删除某个目录的文件
</summary>
<param name="prefix"></param>
<returns></returns>
</member>
<member name="T:IRaCIS.Core.Application.Helper.RSAHelper">
<summary>
https://www.cnblogs.com/NBDWDYS2214143926/p/13329231.html
@ -979,6 +986,49 @@
<param name="isAnonymize"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.DownloadAndUploadService.GetIRUploadTaskList(IRaCIS.Core.Application.Contracts.CRCUploadTaskQuery)">
<summary>
IR 影像上传任务列表
</summary>
<param name="inQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.DownloadAndUploadService.GetIRUploadTaskDicomStudyList(IRaCIS.Core.Application.Contracts.CRCUploadTaskStudyQuery)">
<summary>
IR 上传任务 dicom 列表 后处理的数据不能排序
</summary>
<param name="inQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.DownloadAndUploadService.GetIRUploadTaskNoneDicomStudyList(IRaCIS.Core.Application.Contracts.CRCUploadTaskStudyQuery)">
<summary>
IR 上传任务 nonedicom 列表 后处理的数据不能排序
</summary>
<param name="inQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.DownloadAndUploadService.GetCRCUploadedStudyInfo(IRaCIS.Core.Application.Contracts.CRCUploadedStudyQuqry)">
<summary>
IQC 获取CRC 上传到某一个访视的的检查信息 (原始影像信息 包含dicom 非dicom)
</summary>
<param name="inQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.DownloadAndUploadService.GetSubjectImageDownloadSelectList(IRaCIS.Core.Application.Contracts.IRReadingDownloadQuery)">
<summary>
IR 阅片页面 和IR 任务列表页面下载 勾选下载列表(后端要考虑到一致性分析 subjectCode的问题
</summary>
<param name="inQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.DownloadAndUploadService.GetIRReadingDownloadStudyInfo(IRaCIS.Core.Application.Contracts.IRDownloadQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Subject})">
<summary>
IR 阅片页面获取下载检查的信息 会根据标准进行过滤检查,(后端要考虑到一致性分析 subjectCode的问题
</summary>
<param name="inQuery"></param>
<param name="_subjectRepository"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.StudyService.Preview(System.Guid)">
<summary> 指定资源Id渲染Dicom检查的Jpeg预览图像 </summary>
<param name="studyId"> Dicom检查的Id </param>
@ -10299,6 +10349,11 @@
子数据Lable
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.FrontAuditConfigAddOrEdit.ChildDataEnLabel">
<summary>
前端渲染数组 数组名 和数组值 英文名称
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.FrontAuditConfigAddOrEdit.ChildDataValue">
<summary>
子数据Value
@ -10334,6 +10389,11 @@
外键Text
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.FrontAuditConfigAddOrEdit.ForeignKeyEnText">
<summary>
英文的翻译
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.FrontAuditConfigAddOrEdit.InterfaceName">
<summary>
接口名
@ -11434,6 +11494,23 @@
ISystemDocumentService
</summary>
</member>
<member name="T:IRaCIS.Core.Application.Contracts.NoneDicomStudyService">
<summary>
NoneDicomStudyService
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.NoneDicomStudyService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudyFile},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},Medallion.Threading.IDistributedLockProvider,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Application.Service.QCCommon)">
<summary>
NoneDicomStudyService
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.NoneDicomStudyService.GetNoneDicomStudyFileList(System.Guid)">
<summary>
非Dicom检查 文件列表
</summary>
<param name="noneDicomStudyId"></param>
<returns></returns>
</member>
<member name="T:IRaCIS.Core.Application.Contracts.UserTypeRoleView">
<summary> UserTypeRoleView 列表视图模型 </summary>
</member>
@ -11744,23 +11821,6 @@
语言类型
</summary>
</member>
<member name="T:IRaCIS.Core.Application.Contracts.NoneDicomStudyService">
<summary>
NoneDicomStudyService
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.NoneDicomStudyService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.NoneDicomStudyFile},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial},Medallion.Threading.IDistributedLockProvider,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.SubjectVisit},IRaCIS.Core.Application.Service.QCCommon)">
<summary>
NoneDicomStudyService
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Contracts.NoneDicomStudyService.GetNoneDicomStudyFileList(System.Guid)">
<summary>
非Dicom检查 文件列表
</summary>
<param name="noneDicomStudyId"></param>
<returns></returns>
</member>
<member name="T:IRaCIS.Core.Application.Contracts.QCQuestionConfigureService">
<summary>
系统QC 问题管理
@ -15419,7 +15479,7 @@
<param name="trialAddModel"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Application.Services.TrialService.DeleteTrial(System.Guid)">
<member name="M:IRaCIS.Application.Services.TrialService.DeleteTrial(System.Guid,IRaCIS.Core.Infra.EFCore.IRepository)">
<summary> 真删除项目 方便清理测试数据 </summary>
<param name="trialId">临床试验项目Id</param>
</member>

View File

@ -25,6 +25,7 @@ using System.Reflection.Metadata;
namespace IRaCIS.Core.Infra.EFCore
{
#region 连接池废弃
/// <summary>
/// 报错添加subject 报错,重复添加访视
/// </summary>
@ -47,6 +48,8 @@ namespace IRaCIS.Core.Infra.EFCore
// return context;
// }
//}
#endregion
public class IRaCISDBContext : DbContext
{
@ -72,42 +75,7 @@ namespace IRaCIS.Core.Infra.EFCore
builder.HasNoKey();
});
modelBuilder.Entity<NoneDicomStudy>().HasMany(t => t.NoneDicomFileList).WithOne(s => s.NoneDicomStudy).HasForeignKey(t => t.NoneDicomStudyId);
modelBuilder.Entity<NoneDicomStudy>().HasMany(t => t.TaskNoneDicomFileList).WithOne(s => s.OriginNoneDicomStudy).HasForeignKey(t => t.OriginNoneDicomStudyId);
modelBuilder.Entity<ReadingQuestionTrial>().HasQueryFilter(p => p.IsAdditional == false);
modelBuilder.Entity<User>().HasMany(t => t.VisitTaskList).WithOne(t => t.DoctorUser).HasForeignKey(t => t.DoctorUserId).IsRequired(false);
//modelBuilder.Entity<TaskMedicalReviewRule>().HasMany(t => t.DoctorTrialVisitTaskList).WithOne(t => t.DoctorTaskMedicalReviewRule).HasForeignKey(t => new { t.DoctorUserId, t.TrialId }).HasPrincipalKey(u => new { u.DoctorUserId, u.TrialId });
//modelBuilder.Entity<TaskMedicalReviewRule>().HasMany(t => t.TaskMedicalReviewList).WithOne(t => t.TaskMedicalReviewRule).HasForeignKey(t => new { t.DoctorUserId, t.TrialId }).HasPrincipalKey(u => new { u.DoctorUserId, u.TrialId });
//会导致级联删除
//modelBuilder.Entity<SubjectUser>().HasMany(t => t.SubjectArmVisitTaskList).WithOne(t => t.SujectArm).HasForeignKey(t => new { t.SubjectId, t.ArmEnum }).HasPrincipalKey(u => new { u.SubjectId, u.ArmEnum })
// ./*IsRequired(false)*/OnDelete(DeleteBehavior.NoAction);
// modelBuilder.Entity<VisitTask>().HasOne(t => t.SujectArm).WithMany(s => s.SubjectArmVisitTaskList).HasForeignKey(t => new { t.SubjectId, t.ArmEnum }).HasPrincipalKey(u => new { u.SubjectId, u.ArmEnum });
modelBuilder.Entity<VisitTask>().HasMany(t => t.JudgeVisitList).WithOne(t => t.JudgeVisitTask);
modelBuilder.Entity<VisitTask>().HasMany(t => t.TaskMedicalReviewList).WithOne(t => t.VisitTask).HasForeignKey(t => t.VisitTaskId);
modelBuilder.Entity<VisitTask>().HasOne(t => t.Subject).WithMany(s => s.SubjectVisitTaskList).HasForeignKey(t => t.SubjectId);
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<Dictionary>().HasMany(t => t.ChildList).WithOne(t => t.Parent);
modelBuilder.Entity<SubjectUser>().HasMany(t => t.EarlierSubjectUserList).WithOne(t => t.OrignalSubjectUser);
modelBuilder.Entity<VisitTask>().HasQueryFilter(b => b.Subject.IsDeleted == false);
//遍历实体模型手动配置
var typesToRegister = Assembly.GetExecutingAssembly().GetTypes().Where(q => q.GetInterface(typeof(IEntityTypeConfiguration<>).FullName) != null);
foreach (var type in typesToRegister)
@ -138,7 +106,7 @@ namespace IRaCIS.Core.Infra.EFCore
}
#region
#region 存储过程或者视图
public IQueryable<TableList> GetTableList()
{
return Set<TableList>().FromSqlRaw("EXEC dbo.procGetTableList");
@ -150,6 +118,92 @@ namespace IRaCIS.Core.Infra.EFCore
}
#endregion
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
{
// 采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId 稽查实体里面没有这四个字段的值 因为先后顺序的原因
await AddAudit();
try
{
return await base.SaveChangesAsync(cancellationToken);
}
catch (UniqueConstraintException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("该唯一键已经存在于数据库中。");
}
catch (TimeoutException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("数据库操作已经超时,请稍后重试。");
}
catch (CannotInsertNullException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("无法在非空列上插入空值。");
}
catch (MaxLengthExceededException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("字符串超过了数据库列的最大长度。");
}
catch (NumericOverflowException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("数值超过了数据类型的范围。");
}
catch (SyntaxErrorException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("SQL 查询中存在语法错误。");
}
catch (ReferenceConstraintException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("无法进行当前操作,当前数据不符合外键约束。");
}
catch (DbUpdateConcurrencyException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("SQL 事务失败,请检查环境。");
}
}
public async Task AddAudit()
{
//触发器里面提交事务 业务方法里面提交事务 会记录两次
var inspectionGeneralIdList = ChangeTracker.Entries().Where(t => typeof(DataInspection).IsAssignableFrom(t.Entity.GetType())).Select(t => ((DataInspection)t.Entity).GeneralId).ToList();
var entities = ChangeTracker.Entries().Where(u => (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added))
.Where(t => !typeof(DataInspection).IsAssignableFrom(t.Entity.GetType()) && !inspectionGeneralIdList.Contains(((Entity)t.Entity).Id))
.ToList();
AuditingData auditingData = new AuditingData(this, _userInfo);
//await auditingData.IncomingEntitys(entities);
if (entities.Count > 0)
{
await auditingData.InsertAddEntitys(entities);
}
}
#region Doctor
public virtual DbSet<Dictionary> Dictionary { get; set; }
public virtual DbSet<Doctor> Doctor { get; set; }
@ -400,8 +454,6 @@ namespace IRaCIS.Core.Infra.EFCore
#endregion
#region Document
public virtual DbSet<SystemDocument> SystemDocument { get; set; }
public virtual DbSet<TrialDocument> TrialDocument { get; set; }
@ -414,41 +466,7 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet<TrialDocConfirmedUser> TrialDocConfirmedUser { get; set; }
#endregion
#region 暂时未用
#region 工作量分配
//public virtual DbSet<WorkloadTP> WorkloadTPs { get; set; }
//public virtual DbSet<WorkloadGlobal> WorkloadGlobals { get; set; }
//public virtual DbSet<WorkloadAD> WorkloadADs { get; set; }
//public virtual DbSet<WorkloadDetail> WorkloadDetails { get; set; }
#endregion
//public virtual DbSet<Message> SysMessages { get; set; }
//public virtual DbSet<TrialAttachment> TrialAttachment { get; set; }
//public virtual DbSet<SystemLog> SystemLogs { get; set; }
//public virtual DbSet<TU> TU { get; set; }
//public virtual DbSet<TR> TR { get; set; }
//public virtual DbSet<RS> RS { get; set; }
//public virtual DbSet<Report> Reports { get; set; }
//public virtual DbSet<StudyReviewer> StudyReviewer { get; set; }
//public virtual DbSet<KeyInstance> KeyInstances { get; set; }
//public virtual DbSet<GlobalRS> GlobalRS { get; set; }
//public virtual DbSet<GlobalResult> GlobalResult { get; set; }
//public virtual DbSet<ImageLabel> ImageLabels { get; set; }
//public virtual DbSet<QATemplateItem> QaTemplateItem { get; set; }
//public virtual DbSet<QATemplateItemDictionary> QaTemplateItemDictionary { get; set; }
//public virtual DbSet<QATemplateTemplateItem> QaTemplateTemplateItem { get; set; }
//public virtual DbSet<QATrialTemplate> QATrailTemplate { get; set; }
//public virtual DbSet<QATrialTemplateItem> QATrialTemplateItem { get; set; }
//public virtual DbSet<QAAboutTrialTemplateItem> QARecordTrialTemplateItem { get; set; }
//public virtual DbSet<QARecordTemplateItemDetail> QARecordTemplateItemDetail { get; set; }
//public virtual DbSet<QATemplate> QATemplate { get; set; }
//public virtual DbSet<QANoticeUser> QANoticeUser { get; set; }
//public virtual DbSet<QANotice> QANotice { get; set; }
//public virtual DbSet<TrialUserPreparation> TrialUserPreparation { get; set; }
#endregion
#region 未分类
public virtual DbSet<ShortcutKey> ShortcutKey { get; set; }
@ -509,96 +527,6 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet<UserFeedBack> UserFeedBack { get; set; }
public override async Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken())
{
// 采用触发器的方式 设置 CreateUserId CreateTime UpdateTime UpdateUserId 稽查实体里面没有这四个字段的值 因为先后顺序的原因
await AddAudit();
try
{
return await base.SaveChangesAsync(cancellationToken);
}
catch (UniqueConstraintException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("该唯一键已经存在于数据库中。");
}
catch (TimeoutException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("数据库操作已经超时,请稍后重试。");
}
catch (CannotInsertNullException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("无法在非空列上插入空值。");
}
catch (MaxLengthExceededException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("字符串超过了数据库列的最大长度。");
}
catch (NumericOverflowException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("数值超过了数据类型的范围。");
}
catch (SyntaxErrorException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("SQL 查询中存在语法错误。");
}
catch (ReferenceConstraintException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("无法进行当前操作,当前数据不符合外键约束。");
}
catch (DbUpdateConcurrencyException ex)
{
_logger.LogError(ex.InnerException is null ? ex.Message : ex.InnerException?.Message);
throw new DBSaveFailedException("SQL 事务失败,请检查环境。");
}
}
public async Task AddAudit()
{
//触发器里面提交事务 业务方法里面提交事务 会记录两次
var inspectionGeneralIdList = ChangeTracker.Entries().Where(t => typeof(DataInspection).IsAssignableFrom(t.Entity.GetType())).Select(t => ((DataInspection)t.Entity).GeneralId).ToList();
var entities = ChangeTracker.Entries().Where(u => (u.State == EntityState.Modified || u.State == EntityState.Deleted || u.State == EntityState.Added))
.Where(t => !typeof(DataInspection).IsAssignableFrom(t.Entity.GetType()) && !inspectionGeneralIdList.Contains(((Entity)t.Entity).Id))
.ToList();
AuditingData auditingData = new AuditingData(this, _userInfo);
//await auditingData.IncomingEntitys(entities);
if (entities.Count > 0)
{
await auditingData.InsertAddEntitys(entities);
}
}
public virtual DbSet<TaskAllocationRule> TaskAllocationRule { get; set; }
public virtual DbSet<VisitTask> VisitTask { get; set; }
@ -627,15 +555,9 @@ namespace IRaCIS.Core.Infra.EFCore
public virtual DbSet<TrialVirtualSiteCodeUpdate> TrialVirtualSiteCodeUpdate { get; set; }
public virtual DbSet<EnrollReadingCriterion> EnrollReadingCriterion { get; set; }
#endregion
}
public class MySequentialGuidValueGenerator : ValueGenerator<Guid>
{
public override Guid Next(EntityEntry entry)
{
return NewId.NextGuid();
}
public override bool GeneratesTemporaryValues => false;
}
}

View File

@ -1,66 +0,0 @@
//using System;
//using System.Threading;
//using System.Threading.Tasks;
//using EntityFrameworkCore.Triggered;
//using IRaCIS.Core.Domain.Models;
//using IRaCIS.Core.Domain.Share;
//namespace IRaCIS.Core.Application.Triggers
//{
// public class AuditAddTrigger: IBeforeSaveTrigger<IAuditAdd>
// {
// private readonly IUserInfo _userInfo;
// public AuditAddTrigger(IUserInfo userInfo)
// {
// _userInfo = userInfo;
// }
// public Task BeforeSave(ITriggerContext<IAuditAdd> context, CancellationToken cancellationToken)
// {
// if (context.ChangeType == ChangeType.Added)
// {
// context.Entity.CreateUserId = _userInfo.Id;
// if (context.Entity.CreateTime == default(DateTime))
// {
// context.Entity.CreateTime = DateTime.Now;
// }
// }
// return Task.CompletedTask;
// }
// }
// public class AuditAddWithUsernameTrigger : IBeforeSaveTrigger<IAuditAddWithUserName>
// {
// private readonly IUserInfo _userInfo;
// public AuditAddWithUsernameTrigger(IUserInfo userInfo)
// {
// _userInfo = userInfo;
// }
// public Task BeforeSave(ITriggerContext<IAuditAddWithUserName> context, CancellationToken cancellationToken)
// {
// if (context.ChangeType == ChangeType.Added)
// {
// context.Entity.CreateUserId = _userInfo.Id;
// context.Entity.CreateUser = _userInfo.UserName;
// if (context.Entity.CreateTime == default(DateTime))
// {
// context.Entity.CreateTime = DateTime.Now;
// }
// }
// return Task.CompletedTask;
// }
// }
//}

View File

@ -1,33 +0,0 @@
//using System;
//using System.Threading;
//using System.Threading.Tasks;
//using EntityFrameworkCore.Triggered;
//using IRaCIS.Core.Domain.Models;
//using IRaCIS.Core.Domain.Share;
//namespace IRaCIS.Core.Application.Triggers
//{
// public class AuditUpdateTrigger : IBeforeSaveTrigger<IAuditUpdate>
// {
// private readonly IUserInfo _userInfo;
// public AuditUpdateTrigger(IUserInfo userInfo)
// {
// _userInfo = userInfo;
// }
// public Task BeforeSave(ITriggerContext<IAuditUpdate> context, CancellationToken cancellationToken)
// {
// if (context.ChangeType == ChangeType.Modified || context.ChangeType == ChangeType.Added)
// {
// context.Entity.UpdateTime = DateTime.Now;
// context.Entity.UpdateUserId = _userInfo.Id;
// }
// return Task.CompletedTask;
// }
// }
//}

View File

@ -1,41 +0,0 @@
//using System;
//using System.Threading;
//using System.Threading.Tasks;
//using EntityFrameworkCore.Triggered;
//using IRaCIS.Core.Domain.Models;
//using IRaCIS.Core.Domain.Share;
//namespace IRaCIS.Core.Application.Triggers
//{
// public class SoftDeleteTrigger : IBeforeSaveTrigger<ISoftDelete>
// {
// private readonly IUserInfo _userInfo;
// public SoftDeleteTrigger(IUserInfo userInfo)
// {
// _userInfo = userInfo;
// }
// //Generator Detached 状态才会进去 误用
// //modelBuilder.Entity(entityType.ClrType).Property(nameof(ISoftDelete.DeletedTime)).HasValueGenerator<DeleteTimeGenerator>().ValueGeneratedOnAddOrUpdate();
// public Task BeforeSave(ITriggerContext<ISoftDelete> context, CancellationToken cancellationToken)
// {
// if (context.ChangeType == ChangeType.Modified)
// {
// if (context.Entity.IsDeleted)
// {
// context.Entity.DeleteUserId = _userInfo.Id;
// context.Entity.DeletedTime = DateTime.Now;
// }
// else
// {
// context.Entity.DeletedTime = null;
// }
// }
// return Task.CompletedTask;
// }
// }
//}

View File

@ -0,0 +1,18 @@
using System;
using IRaCIS.Core.Domain.Models;
using MassTransit;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.ValueGeneration;
namespace IRaCIS.Core.Infra.EFCore
{
public class MySequentialGuidValueGenerator : ValueGenerator<Guid>
{
public override Guid Next(EntityEntry entry)
{
return NewId.NextGuid();
}
public override bool GeneratesTemporaryValues => false;
}
}

View File

@ -1,34 +0,0 @@
//using System;
//using IRaCIS.Core.Domain.Models;
//using Microsoft.EntityFrameworkCore.ChangeTracking;
//using Microsoft.EntityFrameworkCore.ValueGeneration;
//namespace IRaCIS.Core.Infra.EFCore.ValueGenerator
//{
// /// <summary>
// /// 上传监控 时间间隔存储 需要按照这个字段进行排序
// /// </summary>
// public class UploadTotalMillisecondsInterval : ValueGenerator<int>
// {
// //code first must migration dbfirst must config in db and also need config in code
// //modelBuilder.Entity<StudyMonitor>().Property(e => e.TotalMillisecondsInterval).HasComputedColumnSql("datediff(MS,UploadStartTime,UploadFinishedTime)");
// //modelBuilder.Entity<StudyMonitor>().Property(e => e.TestInterval).ValueGeneratedOnAddOrUpdate().HasDefaultValueSql("datediff(MS,UploadStartTime,UploadFinishedTime)");
// public override int Next(EntityEntry entry)
// {
// if (entry.Entity is StudyMonitor entity)
// {
// return (entity.UploadFinishedTime - entity.UploadStartTime)?.Milliseconds;
// }
// else
// {
// throw new ArgumentException("ValueGenerator用在了不适合的实体");
// }
// }
// public override bool GeneratesTemporaryValues => false;
// }
//}

View File

@ -0,0 +1,24 @@
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
{
public class DictionaryConfigration : IEntityTypeConfiguration<Dictionary>
{
public void Configure(EntityTypeBuilder<Dictionary> builder)
{
builder.HasMany(t => t.ChildList).WithOne(t => t.Parent);
}
}
}

View File

@ -2,6 +2,7 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System.Reflection.Emit;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
@ -28,16 +29,5 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
public class DictionaryConfigration : IEntityTypeConfiguration<Dictionary>
{
public void Configure(EntityTypeBuilder<Dictionary> builder)
{
//builder.Property(e => e.MappedValue).Metadata.SetBeforeSaveBehavior(PropertySaveBehavior.Ignore);
// builder.Property(e => e.MappedValue).Metadata.SetAfterSaveBehavior(PropertySaveBehavior.Ignore);
}
}
}

View File

@ -1,6 +1,7 @@
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System.Reflection.Emit;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
@ -12,7 +13,8 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
public void Configure(EntityTypeBuilder<NoneDicomStudy> builder)
{
builder.HasMany(t => t.NoneDicomFileList).WithOne(s => s.NoneDicomStudy).HasForeignKey(t => t.NoneDicomStudyId);
builder.HasMany(t => t.TaskNoneDicomFileList).WithOne(s => s.OriginNoneDicomStudy).HasForeignKey(t => t.OriginNoneDicomStudyId);
}
}
}

View File

@ -1,18 +0,0 @@
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
{
public class ReadingPeriodSiteConfigration : IEntityTypeConfiguration<ReadingPeriodSite>
{
public void Configure(EntityTypeBuilder<ReadingPeriodSite> builder)
{
}
}
}

View File

@ -0,0 +1,25 @@
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
{
public class ReadingQuestionTrialConfigration : IEntityTypeConfiguration<ReadingQuestionTrial>
{
public void Configure(EntityTypeBuilder<ReadingQuestionTrial> builder)
{
builder.HasQueryFilter(p => p.IsAdditional == false);
}
}
}

View File

@ -1,19 +0,0 @@
using IRaCIS.Core.Domain.Models;
//using IRaCIS.Core.Infra.EFCore.ValueGenerator;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
{
public class StudyMonitorConfigration : IEntityTypeConfiguration<StudyMonitor>
{
public void Configure(EntityTypeBuilder<StudyMonitor> builder)
{
}
}
}

View File

@ -20,4 +20,15 @@ namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
}
}
public class UserConfigration : IEntityTypeConfiguration<User>
{
public void Configure(EntityTypeBuilder<User> builder)
{
builder.HasMany(t => t.VisitTaskList).WithOne(t => t.DoctorUser).HasForeignKey(t => t.DoctorUserId).IsRequired(false);
}
}
}

View File

@ -0,0 +1,57 @@
using IRaCIS.Core.Domain.Models;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System.Reflection.Emit;
namespace IRaCIS.Core.Infra.EFCore.EntityConfigration
{
public class VisitTaskConfigration : IEntityTypeConfiguration<VisitTask>
{
public void Configure(EntityTypeBuilder<VisitTask> builder)
{
builder.HasMany(t => t.JudgeVisitList).WithOne(t => t.JudgeVisitTask);
builder.HasMany(t => t.TaskMedicalReviewList).WithOne(t => t.VisitTask).HasForeignKey(t => t.VisitTaskId);
builder.HasOne(t => t.Subject).WithMany(s => s.SubjectVisitTaskList).HasForeignKey(t => t.SubjectId);
builder.HasMany(t => t.TaskInfluenceList).WithOne(s => s.OriginalTask).HasForeignKey(t => t.OriginalTaskId);
builder.HasMany(t => t.GlobalVisitResultList).WithOne(s => s.GlobalVisitTask).HasForeignKey(t => t.GlobalTaskId);
builder.HasQueryFilter(b => b.Subject.IsDeleted == false);
//modelBuilder.Entity<TaskMedicalReviewRule>().HasMany(t => t.DoctorTrialVisitTaskList).WithOne(t => t.DoctorTaskMedicalReviewRule).HasForeignKey(t => new { t.DoctorUserId, t.TrialId }).HasPrincipalKey(u => new { u.DoctorUserId, u.TrialId });
//modelBuilder.Entity<TaskMedicalReviewRule>().HasMany(t => t.TaskMedicalReviewList).WithOne(t => t.TaskMedicalReviewRule).HasForeignKey(t => new { t.DoctorUserId, t.TrialId }).HasPrincipalKey(u => new { u.DoctorUserId, u.TrialId });
//会导致级联删除
//modelBuilder.Entity<SubjectUser>().HasMany(t => t.SubjectArmVisitTaskList).WithOne(t => t.SujectArm).HasForeignKey(t => new { t.SubjectId, t.ArmEnum }).HasPrincipalKey(u => new { u.SubjectId, u.ArmEnum })
// ./*IsRequired(false)*/OnDelete(DeleteBehavior.NoAction);
// builder.HasOne(t => t.SujectArm).WithMany(s => s.SubjectArmVisitTaskList).HasForeignKey(t => new { t.SubjectId, t.ArmEnum }).HasPrincipalKey(u => new { u.SubjectId, u.ArmEnum });
}
}
public class SubjectUserConfigration : IEntityTypeConfiguration<SubjectUser>
{
public void Configure(EntityTypeBuilder<SubjectUser> builder)
{
builder.HasMany(t => t.EarlierSubjectUserList).WithOne(t => t.OrignalSubjectUser);
}
}
}