diff --git a/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs b/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs index 633faa1de..4eb7bb947 100644 --- a/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/FrontAuditConfigService.cs @@ -195,7 +195,7 @@ namespace IRaCIS.Core.Application.Service var currentInspection = await _dataInspectionRepository.Where(t => t.Id == id).Select(t => new { t.GeneralId, t.ObjectRelationParentId, t.CreateTime }).FirstOrDefaultAsync(); - var beforeId = await _dataInspectionRepository.Where(x => x.GeneralId == currentInspection.GeneralId && x.ObjectRelationParentId == currentInspection.ObjectRelationParentId && x.CreateTime <= currentInspection.CreateTime && x.Id != id).OrderByDescending(x => x.CreateTime).Select(t => t.Id) + var beforeId = await _dataInspectionRepository.Where(x => x.GeneralId == currentInspection.GeneralId /*&& x.ObjectRelationParentId == currentInspection.ObjectRelationParentId*/ && x.CreateTime <= currentInspection.CreateTime && x.Id != id).OrderByDescending(x => x.CreateTime).Select(t => t.Id) .FirstOrDefaultAsync(); List searchGuidList = new List() { id }; @@ -245,7 +245,7 @@ namespace IRaCIS.Core.Application.Service var objectLsit = new List(); - var commonDataObjList = await GetRelationParentData(item.ObjectRelationParentId, item.ObjectRelationParentId2, item.CreateTime, item.BatchId, objectLsit); + var commonDataObjList = await GetRelationParentData( item.Id,item.ObjectRelationParentId, item.ObjectRelationParentId2, item.CreateTime, item.BatchId, objectLsit); var currentDic = JsonConvert.DeserializeObject>(jsonDict[nameof(InspectionJsonDetail.CommonData)].ToJsonStr()); @@ -347,12 +347,12 @@ namespace IRaCIS.Core.Application.Service - private async Task AddJsonObjectToDic(Guid? objectRelationParentId, DateTime createTime, Guid batchId, List objectLsit) + private async Task AddJsonObjectToDic(Guid id, Guid? objectRelationParentId, DateTime createTime, Guid batchId, List objectLsit) { if (objectRelationParentId != null) { //父子层级的数据可能在同一个批次 进行更新 但是后插入的是父层级的数据 找父层级的稽查应该优先同一批次的 - var relationParentInspection = await _dataInspectionRepository.Where(t => t.GeneralId == objectRelationParentId && (t.CreateTime <= createTime || t.BatchId == batchId)).OrderByDescending(x => x.CreateTime).Select(t => new { t.ObjectRelationParentId, t.CreateTime, t.JsonDetail, t.BatchId, t.ObjectRelationParentId2, t.EntityName }).FirstOrDefaultAsync(); + var relationParentInspection = await _dataInspectionRepository.Where(t => t.GeneralId == objectRelationParentId && (t.CreateTime <= createTime || t.BatchId == batchId) && t.Id !=id).OrderByDescending(x => x.CreateTime).Select(t => new { t.ObjectRelationParentId, t.CreateTime, t.JsonDetail, t.BatchId, t.ObjectRelationParentId2, t.EntityName ,t.Id}).FirstOrDefaultAsync(); if (relationParentInspection != null) @@ -386,8 +386,8 @@ namespace IRaCIS.Core.Application.Service - await AddJsonObjectToDic(relationParentInspection.ObjectRelationParentId, relationParentInspection.CreateTime, relationParentInspection.BatchId, objectLsit); - await AddJsonObjectToDic( relationParentInspection.ObjectRelationParentId2, relationParentInspection.CreateTime, relationParentInspection.BatchId, objectLsit); + await AddJsonObjectToDic(relationParentInspection.Id, relationParentInspection.ObjectRelationParentId, relationParentInspection.CreateTime, relationParentInspection.BatchId, objectLsit); + await AddJsonObjectToDic(relationParentInspection.Id, relationParentInspection.ObjectRelationParentId2, relationParentInspection.CreateTime, relationParentInspection.BatchId, objectLsit); } else @@ -405,10 +405,10 @@ namespace IRaCIS.Core.Application.Service - private async Task> GetRelationParentData(Guid? objectRelationParentId, Guid? objectRelationParentId2, DateTime createTime, Guid batchId, List objectLsit) + private async Task> GetRelationParentData(Guid id,Guid? objectRelationParentId, Guid? objectRelationParentId2, DateTime createTime, Guid batchId, List objectLsit) { - await AddJsonObjectToDic(objectRelationParentId, createTime, batchId, objectLsit); - await AddJsonObjectToDic(objectRelationParentId2, createTime, batchId, objectLsit); + await AddJsonObjectToDic(id,objectRelationParentId, createTime, batchId, objectLsit); + await AddJsonObjectToDic(id,objectRelationParentId2, createTime, batchId, objectLsit); #region 废弃 //if (objectRelationParentId != null) diff --git a/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs b/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs index 837807120..341302222 100644 --- a/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs +++ b/IRaCIS.Core.Application/Service/WorkLoad/DoctorWorkloadService.cs @@ -121,7 +121,16 @@ namespace IRaCIS.Application.Services } - await _enrollReadingCategoryRepository.BatchDeleteNoTrackingAsync(x => x.EnrollId == inDto.EnrollId); + if (inDto.ReadingCategorys.Count > 0) + { + await _enrollReadingCategoryRepository.BatchDeleteNoTrackingAsync(x => x.EnrollId == inDto.EnrollId); + + } + else + { + await _enrollReadingCategoryRepository.DeleteFromQueryAsync(x => x.EnrollId == inDto.EnrollId); + } + List enrollReadings = inDto.ReadingCategorys.Select(x => new EnrollReadingCategory() { diff --git a/IRaCIS.Core.Domain/Trial/Enroll.cs b/IRaCIS.Core.Domain/Trial/Enroll.cs index 63b383223..078b906e3 100644 --- a/IRaCIS.Core.Domain/Trial/Enroll.cs +++ b/IRaCIS.Core.Domain/Trial/Enroll.cs @@ -9,10 +9,10 @@ namespace IRaCIS.Core.Domain.Models public partial class Enroll : Entity,IAuditUpdate,IAuditAdd { - + [JsonIgnore] [ForeignKey("TrialId")] public virtual Trial Trial { get; set; } - + [JsonIgnore] public virtual Doctor Doctor { get; set; } //public TrialPaymentPrice TrialPaymentPrice { get; set; } @@ -71,7 +71,7 @@ namespace IRaCIS.Core.Domain.Models - + [JsonIgnore] public List EnrollReadingCategoryList { get; set; } } diff --git a/IRaCIS.Core.Domain/Trial/EnrollReadingCategory.cs b/IRaCIS.Core.Domain/Trial/EnrollReadingCategory.cs index 5b4d47fdf..e0698b1a0 100644 --- a/IRaCIS.Core.Domain/Trial/EnrollReadingCategory.cs +++ b/IRaCIS.Core.Domain/Trial/EnrollReadingCategory.cs @@ -35,6 +35,7 @@ namespace IRaCIS.Core.Domain.Models /// public DateTime CreateTime { get; set; } + [JsonIgnore] [ForeignKey("EnrollId")] public Enroll Enroll { get; set; } } diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index e72766a2f..e1f0e80d3 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -608,15 +608,15 @@ namespace IRaCIS.Core.Infra.EFCore.Common { entity.Site = await _dbContext.Site.Where(x => x.Id == entity.SiteId).FirstOrDefaultAsync(); } - await InsertInspection(entity, type, x => new InspectionConvertDTO() + await InsertInspection(entity, type, x => new InspectionConvertDTO() { TrialId = x.TrialId, - ObjectRelationParentId=x.TrialId + ObjectRelationParentId = x.TrialId }, new - { + { //兼容之前的配置 冗余该字段 - SiteCode=entity.TrialSiteCode, + SiteCode = entity.TrialSiteCode, //Site 没记录稽查 必须查询存 SiteName = entity.Site.SiteName, @@ -637,7 +637,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common { TrialId = x.TrialId, ObjectRelationParentId = x.TrialId, - ObjectRelationParentId2=x.UserId, + ObjectRelationParentId2 = x.UserId, }); } @@ -715,14 +715,10 @@ namespace IRaCIS.Core.Infra.EFCore.Common }); } - - #endregion - - - #region 阅片人入组 - //阅片人入组 + + //阅片人入组 父层级未记录稽查(医生) foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(Enroll))) { @@ -738,39 +734,109 @@ namespace IRaCIS.Core.Infra.EFCore.Common Name = doctor.FullName, ChineseName = doctor.ChineseName, Email = doctor.EMail, - - IsUploadedACKSOW = entity.AttachmentId != Guid.Empty, + + //子层级的数据 记录到父层级 必须查询 不然找上一条时数据不准 ReadingCategoryList = readingCategoryList }); } - //独立阅片人 状态修改 上传SoW 子对象稽查记录到父对象 要求 记录的数据一致 + //独立阅片人 设置阅片类型 这里对于操作人 不区分 添加 编辑 删除 只有设置(相当于更新) if (entitys.Any(x => x.Entity.GetType() == typeof(EnrollReadingCategory))) { var list = entitys.Where(x => x.Entity.GetType() == typeof(EnrollReadingCategory)).Select(t => t.Entity as EnrollReadingCategory).ToList(); - var enrollId = list.Select(t => t.EnrollId).FirstOrDefault(); - var enroll = await _dbContext.Enroll.Include(t => t.Doctor).FirstAsync(t => t.Id == enrollId); - await InsertInspection(enroll, type, x => new InspectionConvertDTO() + var first = list.FirstOrDefault(); + + var enrollId = first.EnrollId; + + Guid? trialId = Guid.Empty; + + if (first.Enroll != null) { - GeneralId = enroll.Id, - ObjectRelationParentId = x.TrialId + trialId = first.Enroll.TrialId; + } + else + { + trialId = await _dbContext.Enroll.Where(x => x.Id == enrollId).Select(t => t.TrialId).FirstOrDefaultAsync(); + } + + + await InsertInspection(first, type, x => new InspectionConvertDTO() + { + //GeneralId 和ObjectRelationParentId 一样 会成环 所以查询的时候 需要排除自身 + GeneralId = enrollId, + + TrialId = trialId, + + ObjectRelationParentId = enrollId }, new { - //父层级的数据 暂时没有记录稽查 所以这里必须查 - Name = enroll.Doctor.FullName, - ChineseName = enroll.Doctor.ChineseName, - Email = enroll.Doctor.EMail, - IsUploadedACKSOW = enroll.AttachmentId != Guid.Empty, - ReadingCategoryList = list.Select(t => t.ReadingCategory).ToList() + //子层级只需要记录自己这边的信息就好了 + ReadingCategoryList = type == AuditOpt.Deleted ? null : list.Select(t => t.ReadingCategory).ToList(), }); } #endregion + + #region 阅片期临床数据 + + //阅片期临床数据 父层级未记录稽查(项目临床数据设置) + + foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingClinicalData))) + { + var entity = item.Entity as ReadingClinicalData; + + if (entity.ClinicalDataTrialSet == null && entity.ClinicalDataTrialSetId != Guid.Empty) + { + entity.ClinicalDataTrialSet = await _dbContext.ClinicalDataTrialSet.FindAsync(entity.ClinicalDataTrialSetId); + } + + var fileCount = await _dbContext.ReadingClinicalDataPDF.Where(x => x.ReadingClinicalDataId == entity.Id).CountAsync(); + + await InsertInspection(item.Entity as ReadingClinicalData, type, x => new InspectionConvertDTO() + { + SubjectVisitId = x.IsVisit ? x.ReadingId : null, + + ObjectRelationParentId = entity.ClinicalDataTrialSetId, + }, new + { + entity.ClinicalDataTrialSet.ClinicalUploadType, + entity.ClinicalDataTrialSet.ClinicalDataSetName, + entity.ClinicalDataTrialSet.ClinicalDataLevel, + }); + } + + foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingClinicalDataPDF))) + { + var entity = item.Entity as ReadingClinicalDataPDF; + + var fileCount = await _dbContext.ReadingClinicalDataPDF.Where(x => x.ReadingClinicalDataId == entity.Id).CountAsync(); + + await InsertInspection(item.Entity as ReadingClinicalDataPDF, type, x => new InspectionConvertDTO() + { + SubjectId = x.SubjectId, + IsDistinctionInterface = false, + + ObjectRelationParentId = entity.ReadingClinicalDataId + }, new + { + IsCRCUpload = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator + }); + } + + #endregion + + #endregion + + + + + + #region Subject 阅片期和 临床数据 //阅片期计划 @@ -839,45 +905,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common }); } - //阅片期临床数据 - foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingClinicalData))) - { - var entity = item.Entity as ReadingClinicalData; - - if (entity.ClinicalDataTrialSet == null && entity.ClinicalDataTrialSetId != Guid.Empty) - { - entity.ClinicalDataTrialSet = await _dbContext.ClinicalDataTrialSet.FindAsync(entity.ClinicalDataTrialSetId); - } - - await InsertInspection(item.Entity as ReadingClinicalData, type, x => new InspectionConvertDTO() - { - SubjectVisitId = x.IsVisit ? x.ReadingId : null, - - ObjectRelationParentId = entity.ClinicalDataTrialSetId, - }, new - { - entity.ClinicalDataTrialSet.ClinicalUploadType, - entity.ClinicalDataTrialSet.ClinicalDataSetName, - entity.ClinicalDataTrialSet.ClinicalDataLevel, - }); - } - - foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingClinicalDataPDF))) - { - var entity = item.Entity as ReadingClinicalDataPDF; - - await InsertInspection(item.Entity as ReadingClinicalDataPDF, type, x => new InspectionConvertDTO() - { - SubjectId = x.SubjectId, - IsDistinctionInterface = false, - - ObjectRelationParentId = entity.ReadingClinicalDataId - }, new - { - IsCRCUpload = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator - }); - } #endregion @@ -894,9 +922,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common IsDistinctionInterface = false }, new { - UserFullName = entity.FullName, - entity.UserCode, - entity.UserName + UserRealName = entity.FullName, } ); } @@ -942,7 +968,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common await InsertInspection(entity, type, x => new InspectionConvertDTO() { - VisitTaskId=x.Id, + VisitTaskId = x.Id, IsDistinctionInterface = type == AuditOpt.Update ? true : false, @@ -960,9 +986,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common await InsertInspection(entity, type, x => new InspectionConvertDTO() { - VisitTaskId=entity.OriginalReReadingTaskId, + VisitTaskId = entity.OriginalReReadingTaskId, - Reason=entity.RequestReReadingReason, + Reason = entity.RequestReReadingReason, ObjectRelationParentId = entity.OriginalReReadingTaskId, @@ -983,8 +1009,6 @@ namespace IRaCIS.Core.Infra.EFCore.Common ObjectRelationParentId = entity.VisitTaskId, ObjectRelationParentId2 = entity.MedicalManagerUserId - - }); } @@ -996,9 +1020,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common await InsertInspection(entity, type, x => new InspectionConvertDTO() { - ObjectRelationParentId = entity.TrialId - }); } @@ -1162,13 +1184,13 @@ namespace IRaCIS.Core.Infra.EFCore.Common if (inspection.VisitTaskId != null) { - var info = (await _dbContext.VisitTask.Where(x => x.Id == inspection.VisitTaskId).Select(x => new { SubjectId = x.SubjectId, x.Subject.SiteId, x.TrialId,x.SourceSubjectVisitId, ReadModuleSubjectVisitId= (Guid?)x.ReadModule.SubjectVisitId }).FirstOrDefaultAsync()).IfNullThrowException(); + var info = (await _dbContext.VisitTask.Where(x => x.Id == inspection.VisitTaskId).Select(x => new { SubjectId = x.SubjectId, x.Subject.SiteId, x.TrialId, x.SourceSubjectVisitId, ReadModuleSubjectVisitId = (Guid?)x.ReadModule.SubjectVisitId }).FirstOrDefaultAsync()).IfNullThrowException(); - generalData.TrialId = info.TrialId; - generalData.SubjectId = info.SubjectId; - generalData.SiteId = info.SiteId; - generalData.SubjectVisitId = info.SourceSubjectVisitId!=null ?info.SourceSubjectVisitId: (info.ReadModuleSubjectVisitId != null ? info.ReadModuleSubjectVisitId : null ) ; + generalData.TrialId = info?.TrialId ?? generalData.TrialId; + generalData.SubjectId = info?.SubjectId ?? generalData.SubjectId; + generalData.SiteId = info?.SiteId ?? generalData.SiteId; + generalData.SubjectVisitId = info?.SourceSubjectVisitId != null ? info?.SourceSubjectVisitId : (info?.ReadModuleSubjectVisitId != null ? info?.ReadModuleSubjectVisitId : null); } // Suject visit 都进行了设置 不用处理 @@ -1182,22 +1204,22 @@ namespace IRaCIS.Core.Infra.EFCore.Common generalData.TrialId = info?.TrialId ?? generalData.TrialId; generalData.SiteId = info?.SiteId ?? generalData.SiteId; - generalData.SubjectId = info?.SubjectId?? generalData.SubjectId; + generalData.SubjectId = info?.SubjectId ?? generalData.SubjectId; } if (generalData.SubjectId != null) { - var info = await _dbContext.Subject.Where(x => x.Id == generalData.SubjectId).Select(x => new { SubjectId = x.Id, x.SiteId ,x.TrialId }).FirstOrDefaultAsync(); + var info = await _dbContext.Subject.Where(x => x.Id == generalData.SubjectId).Select(x => new { SubjectId = x.Id, x.SiteId, x.TrialId }).FirstOrDefaultAsync(); - generalData.TrialId = info?.TrialId?? generalData.TrialId; - generalData.SiteId = info?.SiteId?? generalData.SiteId; + generalData.TrialId = info?.TrialId ?? generalData.TrialId; + generalData.SiteId = info?.SiteId ?? generalData.SiteId; } - + return generalData; } - + @@ -1349,7 +1371,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common //区分任务类型 type = type + "/" + (int)visitTask.ReadingCategory; - + } break;