using AutoMapper; using AutoMapper.EquivalencyExpression; using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Contracts.DTO; using IRaCIS.Core.Application.MediatR.CommandAndQueries; namespace IRaCIS.Core.Application.Service { public class QCConfig : Profile { public QCConfig() { string token = string.Empty; //一致性核查 CreateMap<CheckDBModel, CheckViewModel>(); CreateMap<QCChallengeCommand, QCChallenge>(); CreateMap<QADialogCommand, QCChallengeDialog>(); #region QA 废弃 //CreateMap<QaTemplateCommand, QATemplate>(); //CreateMap<QaTemplateItemCommand, QATemplateItem>(); //CreateMap<QARecordTrialTemplateItemCommand, QARecordTemplateItemDetail>(); //CreateMap<QaTemplateConfigCommand, QANotice>(); //CreateMap<TrialQATemplateAddCommand, QATrialTemplate>(); //CreateMap<UpdateQATemplateItemCommand, QATrialTemplateItem>(); //CreateMap<AddQATemplateItemCommand, QATrialTemplateItem>(); //CreateMap<TrialQATemplateUpdateCommand, QATrialTemplate>(); //CreateMap<QARecordTrialTemplateItemCommand, QAAboutTrialTemplateItem>(); //CreateMap<QATemplate, QaTemplateCommand>(); //CreateMap<QATemplate, QaTemplateDto>(); //CreateMap<QARecordTemplateItemDetail, TemplateItemProblem>(); #endregion CreateMap<QCChallenge, QCChallengeCommand>(); CreateMap<QCQuestionAddOrEdit, QCQuestion>(); CreateMap<TrialQCQuestionAddOrEdit, TrialQCQuestion>(); CreateMap<TrialQCQuestionConfigureBatchAdd, TrialQCQuestion>(); CreateMap<TrialQCQuestion, TrialQCQuestionSelect>(); CreateMap<TrialQCQuestion, QCQuestionView>(); CreateMap<QCQuestion, QCQuestionView>(); CreateMap<QCQuestion, QCQuestionConfigureView>() .ForMember(d => d.ParentShowOrder, u => u.MapFrom(s => s.ParentQuestion.ShowOrder)) .ForMember(d => d.ParentQuestionName, u => u.MapFrom(s => s.ParentQuestion.QuestionName)); CreateMap<QCQuestion, QCQuestionAddOrEdit>(); CreateMap<TrialQCQuestion, TrialQCQuestionAddOrEdit>(); CreateMap<TrialQCQuestion, TrialQCQuestionConfigureView>() .ForMember(d => d.ParentShowOrder, u => u.MapFrom(s => s.ParentQCQuestion.ShowOrder)); CreateMap<TrialQCQuestionSelect, TrialQCQuestionConfigureView>(); CreateMap<CheckChallengeDialogCommand, CheckChallengeDialog>(); CreateMap<PreviousPDFAddOrEdit, PreviousPDF>().ReverseMap(); //受试者临床数据 添加编辑 CreateMap<PreviousHistoryAddOrEdit, PreviousHistory>().ReverseMap(); CreateMap<PreviousOtherAddOrEdit, PreviousOther>().ReverseMap(); CreateMap<PreviousSurgeryAddOrEdit, PreviousSurgery>().ReverseMap(); // 受试者临床数据 视图映射 Guid subjectVisitId = Guid.Empty; CreateMap<SubjectVisit, SubjectClinicalDataDto>() .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code)) .ForMember(d => d.SubjectVisitId, u => u.MapFrom(s => s.Id)) .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)) .ForMember(d => d.PreviousHistoryList, u => u.MapFrom(s => s.PreviousHistoryList.Where(t => t.SubjectVisitId == subjectVisitId || t.IsSubjectLevel))) .ForMember(d => d.PreviousOtherList, u => u.MapFrom(s => s.PreviousOtherList.Where(t => t.SubjectVisitId == subjectVisitId || t.IsSubjectLevel))) .ForMember(d => d.PreviousSurgeryList, u => u.MapFrom(s => s.PreviousSurgeryList.Where(t => t.SubjectVisitId == subjectVisitId || t.IsSubjectLevel))); CreateMap<SubjectVisit, SubjectVisitDTO>(); CreateMap<SubjectVisit, SubjectVisitSelectItem>() .ForMember(d => d.IsUploadedImage, u => u.MapFrom(s => s.StudyList.Count() > 0 || s.NoneDicomStudyList.SelectMany(u => u.NoneDicomFileList).Count() > 0)); CreateMap<PreviousPDF, PreviousPDFView>() .ForMember(d => d.FullFilePath, u => u.MapFrom(s => s.Path + "?access_token=" + token)); //影像质控 CreateMap<SubjectVisit, QCVisitViewModel>() .ForMember(d => d.ChallengeCount, u => u.MapFrom(s => s.QCChallengeList.Count())) //.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code)) //.ForMember(d => d.IsEnrollmentConfirm, u => u.MapFrom(s => s.Subject.IsEnrollmentConfirm)) //.ForMember(d => d.FistGiveMedicineTime, u => u.MapFrom(s => s.Subject.FistGiveMedicineTime)) //.ForMember(d => d.SubjectVisitId, u => u.MapFrom(s => s.Id)) .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)) .ForMember(d => d.QCProcessEnum, u => u.MapFrom(s => s.Trial.QCProcessEnum)) .ForMember(d => d.SubjectStatus, u => u.MapFrom(s => s.Subject.Status)) .ForMember(d => d.StudyCount, u => u.MapFrom(s => s.StudyList.Count())) .ForMember(d => d.CurrentActionUserName, u => u.MapFrom(s => s.CurrentActionUser.UserName)) .ForMember(d => d.PreliminaryAuditUserName, u => u.MapFrom(s => s.PreliminaryAuditUser.UserName)) .ForMember(d => d.ReviewAuditUserName, u => u.MapFrom(s => s.ReviewAuditUser.UserName)) .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.IsBaseLine ? t.PreviousHistoryList.Any() || t.PreviousOtherList.Any() || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count() > 0) || t.PreviousSurgeryList.Any() : false)) .ForMember(d => d.DicomStudyCount, u => u.MapFrom(t => t.StudyList.Count())) .ForMember(d => d.NoneDicomStudyCount, u => u.MapFrom(t => t.NoneDicomStudyList.Count(t => t.NoneDicomFileList.Any()))); //CRC 上传列表 CreateMap<SubjectVisit, QCCRCVisitViewModel>()/*.IncludeMembers(t=>t.Subject)*/ //.ForMember(d => d.SubjectStatus, u => u.MapFrom(s => s.Subject.Status)) //.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code)) // .ForMember(d => d.SubejctIsEnrollmentConfirm, u => u.MapFrom(t => t.Subject.IsEnrollmentConfirm)) // .ForMember(d => d.SubejctFistGiveMedicineTime, u => u.MapFrom(t => t.Subject.FistGiveMedicineTime)) .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)) .ForMember(d => d.QCProcessEnum, u => u.MapFrom(s => s.Trial.QCProcessEnum)) .ForMember(d => d.SubjectId, u => u.MapFrom(t => t.Subject.Id)) .ForMember(d => d.MedicalNo, u => u.MapFrom(s => s.Subject.MedicalNo)) .ForMember(d => d.Sex, u => u.MapFrom(s => s.Subject.Sex)) .ForMember(d => d.Age, u => u.MapFrom(t => t.Subject.Age)) .ForMember(d => d.IsHaveClinicalData, u => u.MapFrom(t => t.IsBaseLine ? t.PreviousHistoryList.Any() || t.PreviousOtherList.Any() || t.ReadingClinicalDataList.Any(x => x.ClinicalDataTrialSet.UploadRole == Domain.Share.UploadRole.CRC && x.ReadingClinicalDataPDFList.Count() > 0) || t.PreviousSurgeryList.Any() : false)) //.ForMember(d => d.VisitName, u => u.MapFrom(t =>t.InPlan? t.VisitStage.VisitName : t.VisitName)) //.ForMember(d => d.VisitNum, u => u.MapFrom(t => t.InPlan ? t.VisitStage.VisitNum : t.VisitNum)) //.ForMember(d => d.VisitDay, u => u.MapFrom(t => t.InPlan ? t.VisitStage.VisitDay : t.VisitDay)) .ForMember(d => d.DicomStudyCount, u => u.MapFrom(t => t.StudyList.Count())) .ForMember(d => d.NoneDicomStudyCount, u => u.MapFrom(t => t.NoneDicomStudyList.Count(t => t.NoneDicomFileList.Any()))); //.ForMember(d => d.StudyCount, u => u.MapFrom(s => s.StudyList.Count())); CreateMap<Subject, QCCRCVisitViewModel>(); //一致性核查 CreateMap<SubjectVisit, QCCheckViewModel>() .ForMember(d => d.TalkContent, u => u.MapFrom(s => s.CheckChallengeDialogList.OrderByDescending(y => y.CreateTime).Select(x => x.TalkContent).FirstOrDefault())) .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code)) .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)); //一致性核查 质疑对话 CreateMap<CheckChallengeDialog, CheckChanllengeDialogDTO>() .ForMember(d => d.CreateUserName, u => u.MapFrom(t => t.CreateUser.UserName)) .ForMember(d => d.CreateUserFullName, u => u.MapFrom(t => t.CreateUser.FullName)); CreateMap<SubjectVisit, CheckDialogDTO>() .ForMember(d => d.SubjectVisitCheck, u => u.MapFrom(t => t)) .ForMember(d => d.DialogList, u => u.MapFrom(t => t.CheckChallengeDialogList.OrderBy(t => t.CreateTime))); CreateMap<SubjectVisit, ForWardViewModel>() .ForMember(d => d.ForwardUserName, u => u.MapFrom(s => s.ForwardUser.UserName)) .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.Subject.Code)) .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.TrialSite.TrialSiteCode)); //QC 界面 受试者 site 基本信息 展平的属性 比如 SubjectAge => Subject.Age CreateMap<SubjectVisit, QARelationInfo>().IncludeMembers(t => t.Subject) .ForMember(d => d.SubjectVisitId, u => u.MapFrom(s => s.Id)) .ForMember(d => d.SubjectName, u => u.MapFrom(s => s.Subject.ShortName)) .ForMember(d => d.IsHaveFirstGiveMedicineDate, u => u.MapFrom(s => s.Trial.IsHaveFirstGiveMedicineDate)) //.ForMember(d => d.ChangeDefalutDays, u => u.MapFrom(s => s.Trial.ChangeDefalutDays)) .ForMember(d => d.SubjectFirstGiveMedicineTime, u => u.MapFrom(s => s.Subject.FirstGiveMedicineTime)) .ForMember(d => d.SiteName, u => u.MapFrom(s => s.Site.SiteName)) .ForMember(d => d.TotalChallengeCount, u => u.MapFrom(s => s.QCChallengeList.Count())) .ForMember(d => d.NotClosedChallengeCount, u => u.MapFrom(s => s.QCChallengeList.Count(c => c.IsClosed == false))); CreateMap<Subject, QARelationInfo>(MemberList.None); // 临床数据上传 路径拼接返回 CreateMap<PreviousHistory, PreviousHistoryView>() .ForMember(d => d.FullFilePath, u => u.MapFrom(s => s.Path + "?access_token=" + token)); CreateMap<PreviousOther, PreviousOtherView>() .ForMember(d => d.FullFilePath, u => u.MapFrom(s => s.Path + "?access_token=" + token)); CreateMap<PreviousSurgery, PreviousSurgeryView>() .ForMember(d => d.FullFilePath, u => u.MapFrom(s => s.Path + "?access_token=" + token)); //QC 质疑对话 var currentUserId = Guid.Empty; CreateMap<QCChallengeDialog, QCChanllengeDialogDTO>() .ForMember(d => d.CreateUserName, u => u.MapFrom(t => t.CreateUser.UserName)) .ForMember(d => d.CreateUserFullName, u => u.MapFrom(t => t.CreateUser.FullName)) .ForMember(d => d.IsCurrentUser, u => u.MapFrom(s => s.CreateUserId == currentUserId)); //质疑编号 CreateMap<QCChallenge, QCChallengeWithUser>() .ForMember(d => d.LatestReplyUserName, u => u.MapFrom(t => t.LatestReplyUser.UserName)) .ForMember(d => d.CreateUserName, u => u.MapFrom(t => t.CreateUser.UserName)) .ForMember(d => d.CurrentActionUserId, u => u.MapFrom(t => t.SubjectVisit.CurrentActionUserId)) .ForMember(d => d.CurrentActionUserName, u => u.MapFrom(t => t.SubjectVisit.CurrentActionUser.UserName)) .ForMember(d => d.SubjectId, u => u.MapFrom(t => t.SubjectVisit.SubjectId)) .ForMember(d => d.ChallengeCode, u => u.MapFrom(s => s.ChallengeCode)); CreateMap<QCChallenge, ChallengeAndDialog>() .ForMember(d => d.LatestReplyUserName, u => u.MapFrom(t => t.LatestReplyUser.UserName)) .ForMember(d => d.CreateUserName, u => u.MapFrom(t => t.CreateUser.UserName)) .ForMember(d => d.CurrentActionUserId, u => u.MapFrom(t => t.SubjectVisit.CurrentActionUserId)) .ForMember(d => d.CurrentActionUserName, u => u.MapFrom(t => t.SubjectVisit.CurrentActionUser.UserName)) .ForMember(d => d.SubjectId, u => u.MapFrom(t => t.SubjectVisit.SubjectId)) .ForMember(d => d.DialogList, u => u.MapFrom(t => t.DialogList.OrderBy(t => t.CreateTime))) .ForMember(d => d.ChallengeCode, u => u.MapFrom(s => s.ChallengeCode)); // 一致性核查文件 CreateMap<ConsistencyCheckFile, GetConsistencyCheckFileDto>() .ForMember(d => d.CreateUserName, u => u.MapFrom(t => t.User.FirstName +"/"+ t.User.LastName)); //CRC 质疑列表 CreateMap<QCChallenge, QCCRCChallengeViewModel>() .ForMember(d => d.PreliminaryAuditUserName, u => u.MapFrom(s => s.SubjectVisit.PreliminaryAuditUser.UserName)) .ForMember(d => d.PreliminaryAuditUserId, u => u.MapFrom(s => s.SubjectVisit.PreliminaryAuditUserId)) .ForMember(d => d.CurrentActionUserId, u => u.MapFrom(s => s.SubjectVisit.CurrentActionUserId)) .ForMember(d => d.CurrentActionUserName, u => u.MapFrom(s => s.SubjectVisit .CurrentActionUser.UserName)) .ForMember(d => d.SubmitState, u => u.MapFrom(s => s.SubjectVisit.SubmitState)) .ForMember(d => d.SiteId, u => u.MapFrom(s => s.SubjectVisit.SiteId)) .ForMember(d => d.AuditState, u => u.MapFrom(s => s.SubjectVisit.AuditState)) .ForMember(d => d.IsUrgent, u => u.MapFrom(s => s.SubjectVisit.IsUrgent)) .ForMember(d => d.IsBaseLine, u => u.MapFrom(s => s.SubjectVisit.IsBaseLine)) .ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code)) .ForMember(d => d.SubjectId, u => u.MapFrom(t => t.SubjectVisit.SubjectId)) .ForMember(d => d.TrialSiteCode, u => u.MapFrom(s => s.SubjectVisit.TrialSite.TrialSiteCode)) .ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName)) .ForMember(d => d.RequestBackState, u => u.MapFrom(s => s.SubjectVisit.RequestBackState)) .ForMember(d => d.VisitNum, u => u.MapFrom(s => s.SubjectVisit.VisitNum)) .ForMember(d => d.BlindName, u => u.MapFrom(s => s.SubjectVisit.BlindName)) //.ForMember(d => d.ClosedUserUserName, u => u.MapFrom(s => s.ClosedUser.UserName)) .ForMember(d => d.IsQCConfirmedReupload, u => u.MapFrom(s => s.SubjectVisit.IsQCConfirmedReupload)) .ForMember(d => d.CreateUserName, u => u.MapFrom(s => s.CreateUser.UserName)) .ForMember(d => d.LatestReplyUserName, u => u.MapFrom(t => t.LatestReplyUser.UserName)) .ForMember(d => d.ChallengeCode, u => u.MapFrom(s => s.ChallengeCode)); //排序的时候有坑 把这个带到sql 中去了 //.AfterMap((src, dest) => dest.ChallengeCode = "Q" + src.ChallengeCode.ToString("D5"));//实测没有效果 //质疑问题答案 CreateMap<QCQuestionAnswerCommand, TrialQCQuestionAnswer>().EqualityComparison((odto, o) => odto.Id == o.Id) .ForAllMembers(opt => opt.Condition((src, dest, srcMember) => srcMember != null)); //.ForMember(d => d.TrialQCQuestionConfigureId, opt => opt.Ignore())//前端更新的时候不会传递这个参数,但是添加的时候会传递 //.ForMember(d => d.SubjectVisitId, opt => opt.Ignore()); //更新的时候,因为前端没有传递TrialQCQuestionConfigureId 导致映射后的数据变为 Guid.Empty,明明配置了 如果source 为null 就不映射 但是没生效 临时解决 //.BeforeMap((src, dest) => src.TrialQCQuestionConfigureId = dest.TrialQCQuestionConfigureId == System.Guid.Empty ? src.TrialQCQuestionConfigureId : dest.TrialQCQuestionConfigureId); CreateMap<TrialQCQuestionAnswer, QCQuestionAnswerItemDto>().IncludeMembers(t => t.TrialQCQuestionConfigure) .ForMember(d => d.ParentShowOrder, u => u.MapFrom(s => s.TrialQCQuestionConfigure.ParentQCQuestion.ShowOrder)); CreateMap<TrialQCQuestion, QCQuestionAnswerItemDto>() .ForMember(d => d.Id, u => u.Ignore()) .ForMember(d => d.ParentShowOrder, u => u.MapFrom(s => s.ParentQCQuestion.ShowOrder)) .ForMember(d => d.TrialQCQuestionConfigureId, u => u.MapFrom(s => s.Id)); CreateMap<NoneDicomStudyAddOrEdit, NoneDicomStudy>().ReverseMap(); CreateMap<NoneDicomStudyFile, NoneDicomStudyFileView>() .ForMember(d => d.FullFilePath, u => u.MapFrom(s => s.Path + "?access_token=" + token)); CreateMap<NoneDicomStudy, NoneDicomStudyView>() //.ForMember(d => d.FileCount, u => u.MapFrom(s => s.NoneDicomFileList.Count)) .ForMember(d => d.NoneDicomStudyFileList, u => u.MapFrom(s => s.NoneDicomFileList)) .ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode)); } } }