//using AutoMapper; //using IRaCIS.Application.Interfaces; //using IRaCIS.Core.Application.Contracts.Dicom.DTO; //using IRaCIS.Core.Domain.Share; //using IRaCIS.Core.Application.Contracts; //using IRaCIS.Core.Application.Service.Inspection.Interface; //namespace IRaCIS.Application.Services //{ // //[Intercept(typeof(QANoticeAOP))] // public class StudyService : IStudyService // { // private readonly IRepository _studyRepository; // private readonly IRepository _subjectVisitRepository; // private readonly IRepository _dicomInstanceRepository; // private readonly IRepository _dicomSeriesRepository; // private readonly IMapper _mapper; // private static string _fileStorePath = string.Empty; // private readonly IRepository _dicomStudyMonitorRepository; // public StudyService(IRepository studyRepository, // IRepository subjectVisitRepository, // IRepository dicomInstanceRepository, // IRepository dicomSeriesRepository, // IInspectionService inspectionService, // IUserInfo userInfo, // IRepository dicomStudyMonitorRepository, // IMapper mapper) // { // _dicomStudyMonitorRepository = dicomStudyMonitorRepository; // _userInfo = userInfo; // _studyRepository = studyRepository; // _subjectVisitRepository = subjectVisitRepository; // _dicomInstanceRepository = dicomInstanceRepository; // _dicomSeriesRepository = dicomSeriesRepository; // this._inspectionService = inspectionService; // _mapper = mapper; // } // /// // /// 获取保存到Dicom文件中的信息 // /// // /// // /// // public DicomTrialSiteSubjectInfo GetSaveToDicomInfo(Guid subjectVisitId) // { // //6表连接 subject trial trialSite sponsor subjectVisit site // var info = _subjectVisitRepository.Where(t => t.Id == subjectVisitId).ProjectTo(_mapper.ConfigurationProvider).FirstOrDefault().IfNullThrowException(); // return info; // } // public (List SeriesInstanceUid, List SopInstanceUid) GetHasUploadSeriesAndInstance(Guid studyId) // { // var seriesInstanceUidList = _dicomSeriesRepository.Where(t => t.StudyId == studyId).Select(t => t.SeriesInstanceUid).ToList(); // var sopInstanceUidList = _dicomInstanceRepository.Where(t => t.StudyId == studyId).Select(t => t.SopInstanceUid).ToList(); // return (seriesInstanceUidList, sopInstanceUidList); // } // public void UploadOrReUploadNeedTodo(ArchiveStudyCommand archiveStudyCommand, List archiveStudyIds, ref DicomArchiveResult result, StudyMonitor monitor) // { // var archivedStudyId = archiveStudyIds[0]; // //result.ArchivedDicomStudies = _studyRepository.Where(t => t.SubjectVisitId == archiveStudyCommand.SubjectVisitId) // // .ProjectTo(_mapper.ConfigurationProvider).ToList(); // #region 更新受试者访视信息 及访视状态为待提交 最早最晚拍片时间 访视已执行 // var subjectVisit = _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == archiveStudyCommand.SubjectVisitId).Result; // #endregion // //按照访视维度,上传只存在重传同一份,和上传新的(不存在之前检查维度 重传同一份 和重传不同的) // if (archiveStudyCommand.AbandonStudyId != null && archiveStudyCommand.AbandonStudyId == archivedStudyId) // { // result.ReuploadNewStudyId = archivedStudyId; // // 1、普通上传后重传 // // 2、QC后重传 // //_studyService.ReUploadSameStudy(archiveStudyCommand.SubjectVisitId, archivedDicomStudy.Id); // }//上传 // else // { // //汇总 Series的Modality 更新到检查里面 检查状态 上传人 // var seriesModalityList = _dicomSeriesRepository.Where(t => t.StudyId == archivedStudyId).Select(u => u.Modality).Distinct(); // string ModaliyStr = string.Join('、', seriesModalityList.ToList()); // var study = _studyRepository.FirstOrDefaultAsync(t => t.Id == archivedStudyId).Result.IfNullThrowException(); // study.Status = (int)StudyStatus.Uploaded; // study.Modalities = ModaliyStr; // } // _ = _dicomStudyMonitorRepository.AddAsync(monitor).Result; // _ = _studyRepository.SaveChangesAsync().Result; // } // //public virtual IResponseOutput ForwardStudy(Guid studyId) // //{ // // var study = _studyRepository.FirstOrDefault(u => u.Id == studyId); // // //数据库状态,其他人已经操作过了,此时提醒 // // if (study.Status != (int)StudyStatus.Anonymized) // // { // // ResponseOutput.NotOk($"当前界面Study:{study.StudyCode} 状态被其他人已变更,不允许该操作,请刷新界面"); // // } // // _studyRepository.Update(t => t.Id == studyId, u => new DicomStudy() // // { // // Status = (int)StudyStatus.Forwarding // // }); // // var subject = _subjectRepository.FirstOrDefault(u => u.Id == study.SubjectId); // // var trial = _trialRepository.FirstOrDefault(u => u.Id == study.TrialId); // // var subjectVisit = _subjectVisitRepository.FirstOrDefault(u => u.Id == study.SubjectVisitId); // // var targetPath = Path.Combine("/IMPORT-IMAGES", // // trial.TrialCode + "_" + subject.Code + "_" + subjectVisit.VisitName + "_" + study.StudyCode); // // var path = Path.Combine(_fileStorePath, study.CreateTime.Year.ToString(), study.TrialId.ToString(), // // study.SiteId.ToString(), study.SubjectId.ToString(), study.SubjectVisitId.ToString(), study.Id.ToString(), "Data"); // // try // // { // // // 主机及端口信息后面可以改到 配置文件 // // SessionOptions sessionOptions = new SessionOptions // // { // // Protocol = Protocol.Sftp, // // PortNumber = 8022, // // HostName = "CS-690-sftp.mint-imaging.com", // // UserName = "zdong", // // Password = "Everest@2021", // // //GiveUpSecurityAndAcceptAnySshHostKey = true, // // SshHostKeyFingerprint = @"ecdsa-sha2-nistp384 384 59gkjJ5lMwv3jsB8Wz2B35tBAIor5pSd8PcJYtoamPo=" // // }; // // using (Session session = new Session()) // // { // // session.Open(sessionOptions); // // if (!session.FileExists(targetPath)) // // { // // session.CreateDirectory(targetPath); // // } // // var files = (new DirectoryInfo(path)).GetFiles(); // // foreach (var file in files) // // { // // if (file.Name.Contains("Anonymize") && file.Extension.Contains("dcm")) // // { // // string remoteFilePath = // // RemotePath.TranslateLocalPathToRemote(file.FullName, path, targetPath); // // var result = session.PutFiles(file.FullName, remoteFilePath, false); // // if (!result.IsSuccess) // // { // // return ResponseOutput.NotOk("Forward Failed"); // // } // // } // // } // // //_studyStatusDetailRepository.Add(new StudyStatusDetail // // //{ // // // Status = (int)StudyStatus.Forwarded, // // // StudyId = studyId, // // // Note = string.Empty, // // // OptUserName = _userInfo.RealName, // // // OptTime = DateTime.Now // // //}); // // study.Status = (int)StudyStatus.Forwarded; // // _studyRepository.Update(study); // // //_workloadTPRepository.Add(new WorkloadTP // // //{ // // // SiteId = study.SiteId, // // // StudyId = study.Id, // // // SubjectId = study.SubjectId, // // // SubjectVisitId = study.SubjectVisitId, // // // Status = 0, // // // ReviewerId = Guid.Empty, // // // TrialId = study.TrialId, // // // UpdateTime = DateTime.Now, // // // TimepointCode = study.StudyCode + "_T01" // // //}); // // //if (study.IsDoubleReview) //双重阅片,则再添加一条,编号变为T02 // // //{ // // // _workloadTPRepository.Add(new WorkloadTP // // // { // // // SiteId = study.SiteId, // // // StudyId = study.Id, // // // SubjectId = study.SubjectId, // // // SubjectVisitId = study.SubjectVisitId, // // // Status = 0, // // // ReviewerId = Guid.Empty, // // // TrialId = study.TrialId, // // // UpdateTime = DateTime.Now, // // // TimepointCode = study.StudyCode + "_T02" // // // }); // // //} // // return ResponseOutput.Result(_studyRepository.SaveChanges()); // // } // // } // // catch (Exception e) // // { // // _studyRepository.Update(t => t.Id == studyId, u => new DicomStudy() // // { // // Status = (int)StudyStatus.ForwardFailed // // }); // // return ResponseOutput.NotOk("Forward Failed " + e.Message); // // } // //} // #region 暂存 读片 // //public IEnumerable GetSeriesList(Guid studyId) // //{ // // return _dicomSeriesRepository.Where(s => s.StudyId == studyId).OrderBy(s => s.SeriesNumber). // // ThenBy(s => s.SeriesTime).ThenBy(s => s.CreateTime) // // .ProjectTo(_mapper.ConfigurationProvider); // //} // //public IEnumerable GetImageLabel(string tpCode) // //{ // // return _imageLabelRepository.Where(s => s.TpCode == tpCode) // // .ProjectTo(_mapper.ConfigurationProvider); // //} // //public bool SaveImageLabelList(ImageLabelCommand imageLabelCommand) // //{ // // var success = _imageLabelRepository.Delete(u => u.TpCode == imageLabelCommand.TpCode); // // _keyInstanceRepository.Delete(u => u.TpCode == imageLabelCommand.TpCode); // // if (imageLabelCommand.ImageLabelList.Count == 0) // // { // // return true; // // } // // else // // { // // foreach (var label in imageLabelCommand.ImageLabelList) // // { // // _imageLabelRepository.Add(new ImageLabel // // { // // TpCode = imageLabelCommand.TpCode, // // StudyId = label.StudyId, // // SeriesId = label.SeriesId, // // InstanceId = label.InstanceId, // // LabelValue = label.LabelValue // // }); // // _keyInstanceRepository.Add(new KeyInstance // // { // // TpCode = imageLabelCommand.TpCode, // // SeriesId = label.SeriesId, // // InstanceId = label.InstanceId, // // }); // // } // // success = _imageLabelRepository.SaveChanges(); // // return success; // // } // //} // #endregion // #region 废弃 // //public DicomStudyDTO GetStudyItem(Guid studyId) // //{ // // return _mapper.Map(_studyRepository.FirstOrDefault(s => s.Id == studyId)); // //} // //public virtual async Task DicomAnonymize(Guid studyId, string optUserName) // //{ // // var study = _studyRepository.FirstOrDefault(t => t.Id == studyId); // // //数据库状态,其他人已经操作过了,此时提醒 // // if (study.Status != (int)StudyStatus.QAFinish) // // { // // ResponseOutput.NotOk($"当前界面Study:{study.StudyCode} 状态被其他人已变更,不允许该操作,请刷新界面"); // // } // // var subject = _subjectRepository.Select(t => new { Id = t.Id, Code = t.Code }).FirstOrDefault(u => u.Id == study.SubjectId).IfNullThrowException(); // // var trial = _trialRepository.Select(t => new { Id = t.Id, Code = t.TrialCode }).FirstOrDefault(u => u.Id == study.TrialId).IfNullThrowException(); // // study.Status = (int)StudyStatus.Anonymizing; // // // 查询受试者 信息 // // //string subjectCde = string.Empty; // // //string subjectSex = string.Empty; // // //读取Dicom 文件,匿名化 // // //按照配置文件 匿名化 // // var dicomSeries = _dicomSeriesRepository.Where(s => s.StudyId == studyId).ToList(); // // foreach (var seriesItem in dicomSeries) // // { // // var dicomInstances = _dicomInstanceRepository.Where(s => s.SeriesId == seriesItem.Id).ToList(); // // foreach (var instanceItem in dicomInstances) // // { // // _dicomInstanceRepository.Attach(instanceItem); // // try // // { // // string filePath = _dicomFileStoreHelper.CreateInstanceFilePath(study, seriesItem.Id, instanceItem.Id); // // DicomFile dicomFile = await DicomFile.OpenAsync(filePath, Encoding.Default); // // #region 废弃 // // //if (SystemConfig.AddClinicalInfo) //是否需要写入临床信息 // // //{ // // // dicomFile.Dataset.AddOrUpdate(DicomTag.ClinicalTrialSubjectID, subjectCde + " " + subjectSex);//SubjectId // // //} // // //DicomDataset dataset = dicomFile.Dataset; // // #endregion // // foreach (var anonymizeItem in AppSettings.AnonymizeTagList) // // { // // if (anonymizeItem.Enable) // // { // // ushort group = Convert.ToUInt16(anonymizeItem.Group, 16); // // ushort element = Convert.ToUInt16(anonymizeItem.Element, 16); // // dicomFile.Dataset.AddOrUpdate(new DicomTag(group, element), anonymizeItem.ReplaceValue); // // } // // } // // dicomFile.Dataset.AddOrUpdate(DicomTag.PatientID, trial.Code + "_" + subject.Code); // // //_dicomFileStoreHelper.CreateInstanceFilePath(study, seriesItem.Id, instanceItem.Id); // // string path = Path.Combine(_fileStorePath, study.CreateTime.Year.ToString(), // // study.TrialId.ToString(), // // study.SiteId.ToString(), study.SubjectId.ToString(), study.SubjectVisitId.ToString(), study.Id.ToString(), "Data"); // // //await dicomFile.SaveAsync(Path.Combine(path, instanceItem.Id.ToString() + ".dcm")); // // await dicomFile.SaveAsync( // // Path.Combine(path, instanceItem.Id.ToString() + ".Anonymize" + ".dcm")); // // instanceItem.Anonymize = true; // // //_dicomInstanceRepository.Update(instanceItem); // // } // // catch (Exception ex) // // { // // study.Status = (int)StudyStatus.AnonymizeFailed; // // _dicomInstanceRepository.SaveChanges(); // // //这个地方返回没用 // // return ResponseOutput.NotOk(ex.Message); // // } // // } // // } // // study.Status = (int)StudyStatus.Anonymized; // // var success = _dicomInstanceRepository.SaveChanges(); // // return ResponseOutput.Result(success); // //} // //public string GetStudyPreview(Guid studyId) // //{ // // DicomInstance dicomInstance = _dicomInstanceRepository.FirstOrDefault(s => s.StudyId == studyId); // // if (dicomInstance != null) // // { // // DicomStudy dicomStudy = _studyRepository.FirstOrDefault(s => s.Id == dicomInstance.StudyId); // // if (dicomStudy != null) // // { // // return _dicomFileStoreHelper.GetInstanceFilePath(dicomStudy, dicomInstance.SeriesId, dicomInstance.Id.ToString()); // // } // // } // // return string.Empty; // //} // //public IEnumerable GetAllRelationStudyList(Guid subjectVisitId) // //{ // // #region 废弃 // // //var studylist = _studyRepository.Where(u => u.SubjectVisitId == subjectVisitId && u.IsDeleted == false).Select(t => new { StudyId = t.Id, t.SubjectId, t.TrialId }).ToList(); // // //var subjectId = studylist.FirstOrDefault().SubjectId; // // //var trialId = studylist.FirstOrDefault().TrialId; // // //var studyIds = studylist.Select(t => t.StudyId).ToList(); // // //var query = from studyItem in _studyRepository.Where(u => u.SubjectId == subjectId // // // && u.TrialId == trialId && u.IsDeleted == false && // // // !studyIds.Contains(u.Id) // // // /* && u.Status != (int)StudyStatus.Abandon*/) // // // join visitItem in _subjectVisitRepository.AsQueryable() // // // on studyItem.SubjectVisitId equals visitItem.Id // // // select new RelationStudyDTO // // // { // // // StudyId = studyItem.Id, // // // StudyCode = studyItem.StudyCode, // // // VisitName = visitItem.VisitName, // // // Modalities = studyItem.Modalities, // // // Description = studyItem.Description, // // // SeriesCount = studyItem.SeriesCount // // // }; // // #endregion // // var studyInfo = _studyRepository.Where(u => u.SubjectVisitId == subjectVisitId).Select(t => new { t.SubjectId, t.TrialId }).FirstOrDefault().IfNullThrowException(); // // var query = _studyRepository.Where(t => t.SubjectVisitId != subjectVisitId && t.TrialId == studyInfo.TrialId && t.SubjectId == studyInfo.SubjectId) // // .ProjectTo(_mapper.ConfigurationProvider).ToList(); // // return query.OrderBy(u => u.VisitName).ThenBy(s => s.StudyCode).ToList(); // //} // ///// // ///// 检查列表 // ///// // ///// // ///// // //public PageOutput GetStudyList(StudyQueryDTO queryDto) // //{ // // var query = _studyRepository.Where(x => x.TrialId == queryDto.TrialId) // // .WhereIf(queryDto.SubjectId != null, t => t.SubjectId == queryDto.SubjectId) // // .WhereIf(queryDto.SubjectVisitId != null, t => t.SubjectId == queryDto.SubjectVisitId) // // .WhereIf(!string.IsNullOrEmpty(queryDto.VisitPlanInfo), queryDto.VisitPlanInfo.Contains('.') ? t => t.SubjectVisit.VisitNum.ToString().Contains(".") : t => t.SubjectVisit.VisitNum == decimal.Parse(queryDto.VisitPlanInfo)) // // .WhereIf(queryDto.StudyTimeBegin != null, t => t.StudyTime >= queryDto.StudyTimeBegin) // // .WhereIf(queryDto.StudyTimeEnd != null, t => t.StudyTime <= queryDto.StudyTimeEnd) // // .WhereIf(queryDto.UpdateTimeBegin != null, t => t.StudyTime >= queryDto.UpdateTimeBegin) // // .WhereIf(queryDto.UpdateTimeEnd != null, t => t.StudyTime <= queryDto.UpdateTimeEnd) // // .WhereIf(queryDto.SiteId != null, t => t.SiteId == queryDto.SiteId) // // .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator, t => t.TrialSite.CRCUserList.Any(t => t.UserId == _userInfo.Id)) // // .WhereIf(!string.IsNullOrWhiteSpace(queryDto.SubjectInfo), t => t.Subject.Code.Contains(queryDto.SubjectInfo)) // // .ProjectTo(_mapper.ConfigurationProvider); // // var list = query.ToPagedList(queryDto.PageIndex, queryDto.PageSize, queryDto.SortField == string.Empty ? "StudyCode" : queryDto.SortField, queryDto.Asc); // // foreach (var item in list.CurrentPageData) // // { // // if (item.PatientBirthDate.Length == 8) // // { // // item.PatientBirthDate = // // $"{item.PatientBirthDate[0]}{item.PatientBirthDate[1]}{item.PatientBirthDate[2]}{item.PatientBirthDate[3]}-{item.PatientBirthDate[4]}{item.PatientBirthDate[5]}-{item.PatientBirthDate[6]}{item.PatientBirthDate[7]}"; // // } // // } // // return list; // //} // //public IResponseOutput DeleteStudy(Guid id) // //{ // // var needDelete = _studyRepository.FirstOrDefault(t => t.Id == id); // // if (needDelete == null) // // { // // return ResponseOutput.DBNotExistIfNUll(needDelete); // // } // // else //移除内存中缓存的StudyCode 这样刚上传的,删除 再上传还是用同样的Code // // { // // if (_provider.Get($"{needDelete.TrialId }_{ StaticData.StudyMaxCode}").Value == needDelete.StudyCode) // // { // // _provider.Remove($"{needDelete.TrialId }_{ StaticData.StudyMaxCode}"); // // } // // } // // //if (study.Status != (int)StudyStatus.Uploaded) // // //{ // // // return ResponseOutput.NotOk("This study has been quality controlled and couldn't be deleted "); // // //} // // #region 废弃的直接删除了 这里不用处理了 // // ////处理废弃的Study 如果有的话 // // //var oldStudy = _studyRepository.FirstOrDefault(t => t.StudyCode == study.StudyCode && t.Id != id); // // //if (oldStudy != null) // // //{ // // // _studyRepository.Delete(t => t.Id == oldStudy.Id); // // // _dicomInstanceRepository.Delete(t => t.StudyId == oldStudy.Id); // // // _dicomSeriesRepository.Delete(t => t.StudyId == oldStudy.Id); // // //} // // //处理废弃的Study // // //var success5 = _studyRepository.Delete(t => t.StudyCode == study.StudyCode); // // #endregion // // //清除现有Study记录 // // var success1 = _studyRepository.Delete(t => t.Id == id); // // var succeess2 = _dicomInstanceRepository.Delete(t => t.StudyId == id); // // var success3 = _dicomSeriesRepository.Delete(t => t.StudyId == id); // // //一个访视下面有多个检查,所以需要检测 没有的时候才清空 // // if (_studyRepository.Count(t => t.SubjectVisitId == needDelete.SubjectVisitId) == 0) // // { // // _subjectVisitRepository.Update(t => t.Id == needDelete.SubjectVisitId, // // u => new SubjectVisit() { VisitExecuted = VisitExecutedEnum.UnExecuted, SVENDTC = null, SVSTDTC = null }); // // _qcChallengeRepository.Delete(t => t.SubjectVisitId == needDelete.SubjectVisitId); // // //_qcChallengeRepository.Delete(t => t.SubjectVisitId == subjectVisitId); // // //_trialQCQuestionAnswerRepository.Delete(t => t.SubjectVisitId == subjectVisitId); // // } // // return ResponseOutput.Result(success1 || succeess2 || success3); // //} // //public void ClearStudyInstanceAndSeriseData(Guid studyId) // //{ // // //重新开始计数,怕数据库又脏数据,影响数量 // // _studyRepository.Update(t => t.Id == studyId, u => new DicomStudy() // // { // // InstanceCount = 0, // // SeriesCount = 0 // // }); // // _dicomSeriesRepository.Delete(t => t.StudyId == studyId); // // _dicomInstanceRepository.Delete(t => t.StudyId == studyId); // //} // //public bool ReUploadDifferentStudy(Guid subjectVisitId, Guid abandonStudyId, Guid newStudyId) // //{ // // //_qcChallengeRepository.Update(t => t.SubjectVisitId == subjectVisitId && t.NeedReUpload == true, u => new QCChallenge() { ReUploadedTime = DateTime.Now, ReUploader = _userInfo.RealName }); // // //注意这里不是用SeqId 主键查询,因为Seq id 是后续加的,为了不改变代码和前端接口参数 // // var study = _studyRepository.FirstOrDefault(t => t.Id == abandonStudyId); // // var code = study.StudyCode; // // //清理以前的数据 // // _studyRepository.Delete(t => t.Id == abandonStudyId); // // _dicomInstanceRepository.Delete(t => t.StudyId == abandonStudyId); // // _dicomSeriesRepository.Delete(t => t.StudyId == abandonStudyId); // // ////将以前的qa记录数据绑定到现在新生成的Study上 // // //_qaNoticeRepository.Update(t => t.SubjectVisitId == abandonStudyId, u => new QANotice() { SubjectVisitId = newStudyId }); // // //_qaNoticeUserRepository.Update(t => t.SubjectVisitId == abandonStudyId, // // // u => new QANoticeUser() { SubjectVisitId = newStudyId }); // // //_qaRecordRepository.Update(t => t.SubjectVisitId == abandonStudyId, u => new QARecord() { SubjectVisitId = newStudyId }); // // var success = false; // // if (study.Status == (int)StudyStatus.Uploading) // // { // // success = _studyRepository.Update(t => t.Id == newStudyId, u => new DicomStudy() // // { // // Status = (int)StudyStatus.Uploaded, // // StudyCode = code // // }); // // } // // else // // { // // //新一份的影像状态为旧影像的状态 不改变 // // success = _studyRepository.Update(t => t.Id == newStudyId, u => new DicomStudy() // // { // // Status = study.Status, // // StudyCode = code // // }); // // } // // #region 废弃之前的Study记录 讲新产生的记录的StudyCode 变更为老的 这样可以关联在一起 // // //var realName = _userInfo.RealName; // // //var code = _studyRepository.GetAll().First(t => t.Id == abandonStudyId).StudyCode; // // //_studyRepository.Update(t => t.Id == abandonStudyId, u => new DicomStudy() // // //{ // // // Status = (int)StudyStatus.Abandon // // //}); // // //_studyRepository.Update(t => t.Id == newStudyId, u => new DicomStudy() // // //{ // // // Status = (int)StudyStatus.Uploaded, // // // StudyCode = code // // //}); // // //_studyStatusDetailRepository.Add(new StudyStatusDetail // // //{ // // // Status = (int)StudyStatus.Abandon, // // // StudyId = abandonStudyId, // // // Note = string.Empty, // // // OptUserName = realName, // // // OptTime = DateTime.Now // // //}); // // //_studyStatusDetailRepository.Add(new StudyStatusDetail // // //{ // // // Status = (int)StudyStatus.Uploaded, // // // StudyId = newStudyId, // // // Note = string.Empty, // // // OptUserName = realName, // // // OptTime = DateTime.Now // // //}); // // //_studyStatusDetailRepository.SaveChanges(); // // #endregion // // return success; // //} // //public virtual void ReUploadSameStudy(Guid subjectVisitId, Guid studyId) // //{ // // //_qcChallengeRepository.Update(t => t.SubjectVisitId == subjectVisitId && t.NeedReUpload == true, u => new QCChallenge() { ReUploadedTime = DateTime.Now, ReUploader = _userInfo.RealName }); // // #region 之前整个上传过程操作没有放在一个整体事务 会有脏数据 现在整体一个事务,不会产生,废弃 但是切入AOP 所以保留空方法 // // //var study = _studyRepository.FirstOrDefault(t=>t.Id== studyId); // // //var status = study.Status; // // //if (status == (int)StudyStatus.Uploading) // // //{ // // // _studyRepository.Update(t => t.Id == studyId, u => new DicomStudy() // // // { // // // Status = (int)StudyStatus.Uploaded // // // }); // // //} // // #endregion // //} // ///// // ///// 上传完检查后,处理检查 汇总 Series的Modality 更新到检查里面 检查状态 上传人 // ///// // ///// // //public void UploadStudyDeal(Guid studyId) // //{ // // var seriesModalityList = _dicomSeriesRepository.Where(t => t.StudyId == studyId).Select(u => u.Modality).Distinct(); // // string ModaliyStr = string.Join('、', seriesModalityList.ToList()); // // var study = _studyRepository.FirstOrDefault(t => t.Id == studyId); // // study.Status = (int)StudyStatus.Uploaded; // // study.Modalities = ModaliyStr; // // _studyRepository.SaveChanges(); // //} // //public List GetSubjectVisitStudyList(Guid trialId, Guid siteId, Guid subjectId, Guid subjectVisitId) // //{ // // var query = _studyRepository.Where(t => t.TrialId == trialId && t.SiteId == siteId && t.SubjectId == t.SubjectId && t.SubjectVisitId == subjectVisitId) // // .Select(u => new SubjectVisitStudyDTO() { Modalities = u.Modalities, StudyCode = u.StudyCode, StudyId = u.Id, Status = u.Status }); // // return query.ToList(); // //} // ////此处有AOP操作,不要更改为动态Api // //public virtual IResponseOutput UpdateStudyStatus(StudyStatusDetailCommand studyStatus) // //{ // // //注意这里不是用SeqId 主键查询,因为Seq id 是后续加的,为了不改变代码和前端接口参数 // // var study = _studyRepository.FirstOrDefault(t => t.Id == studyStatus.StudyId); // // //数据库状态,其他人已经操作过了,此时提醒 // // if (study.Status > studyStatus.Status) // // { // // ResponseOutput.NotOk($"当前界面Study:{study.StudyCode} 状态被其他人已变更,不允许该操作,请刷新界面"); // // } // // ////防止多次调用,更新 没必要 // // //if (study.Status == studyStatus.Status) // // //{ // // // return ResponseOutput.Ok(); // // //} // // study.Status = studyStatus.Status; // // study.UpdateTime = DateTime.Now; // // //if (studyStatus.Status == (int)StudyStatus.Uploaded) // // //{ // // // study.UploadedTime = DateTime.Now; // // // study.Uploader = _userInfo.RealName; // // //} // // //if (study.Status == (int)StudyStatus.QAing) // // //{ // // // study.DeadlineTime = studyStatus.DeadlineTime; // // //} // // if (studyStatus.Status == (int)StudyStatus.QAFInishNotPass) // // { // // study.QAComment = studyStatus.QAComment; // // } // // return ResponseOutput.Ok(_studyRepository.SaveChanges()); // //} // //public List GetStudyStatusDetailList(Guid studyId) // //{ // // return _studyStatusDetailRepository.Where(s => s.StudyId == studyId).OrderByDescending(s => s.OptTime) // // .ProjectTo(_mapper.ConfigurationProvider).ToList(); // //} // //public bool DistributeStudy(StudyReviewerCommand studyReviewer) // //{ // // //更新Study表中,总的状态 // // // 插入中间表 // // studyReviewer.StudyList.ForEach(study => // // { // // var workloadType = 1; // // StudyStatus studyStatus = StudyStatus.Distributed; // // if (study.Status >= (int)StudyStatus.NeedAd) // // { // // workloadType = 2; // // studyStatus = StudyStatus.AdDistributed; // // } // // var tempStudy = _studyRepository.FirstOrDefault(s => s.Id == study.StudyId); // // tempStudy.Status = (int)studyStatus; // // _studyRepository.Update(tempStudy); // // _studyReviewerRepository.Add(new StudyReviewer() // // { // // ReviewerId = studyReviewer.ReviewerId, // // StudyId = study.StudyId, // // WorkloadType = workloadType, // // TrialId = studyReviewer.TrialId, // // Status = (int)studyStatus // // }); // // }); // // return _studyReviewerRepository.SaveChanges(); // //} // //public IResponseOutput EditStudyReviewer(StudyReviewerEditCommand studyReviewerEditCommand) // //{ // // _studyReviewerRepository.Delete(t => studyReviewerEditCommand.StudyId == t.StudyId); // // if (studyReviewerEditCommand.IsDoubleReview) // // { // // if (studyReviewerEditCommand.ReviewerId1 != null) // // { // // _studyReviewerRepository.Add( // // new StudyReviewer() // // { // // StudyId = studyReviewerEditCommand.StudyId, // // TrialId = studyReviewerEditCommand.TrialId, // // ReviewerId = studyReviewerEditCommand.ReviewerId1.Value, // // WorkloadType = 1 // // }); // // } // // if (studyReviewerEditCommand.ReviewerId2 != null) // // { // // _studyReviewerRepository.Add( // // new StudyReviewer() // // { // // StudyId = studyReviewerEditCommand.StudyId, // // TrialId = studyReviewerEditCommand.TrialId, // // ReviewerId = studyReviewerEditCommand.ReviewerId2.Value, // // WorkloadType = 1 // // }); // // } // // if (studyReviewerEditCommand.ReviewerIdForAD != null) // // { // // _studyReviewerRepository.Add( // // new StudyReviewer() // // { // // StudyId = studyReviewerEditCommand.StudyId, // // TrialId = studyReviewerEditCommand.TrialId, // // ReviewerId = studyReviewerEditCommand.ReviewerIdForAD.Value, // // WorkloadType = 2 // // }); // // } // // if (studyReviewerEditCommand.ReviewerId2 == null || studyReviewerEditCommand.ReviewerId1 == null) // // { // // _studyRepository.Update(t => t.Id == studyReviewerEditCommand.StudyId, // // u => new DicomStudy() // // { // // Status = (int)StudyStatus.QAFinish // // }); // // } // // } // // else // // { // // if (studyReviewerEditCommand.ReviewerId1 != null) // // { // // _studyReviewerRepository.Add( // // new StudyReviewer() // // { // // StudyId = studyReviewerEditCommand.StudyId, // // TrialId = studyReviewerEditCommand.TrialId, // // ReviewerId = studyReviewerEditCommand.ReviewerId1.Value, // // WorkloadType = 1 // // }); // // } // // else // // { // // _studyRepository.Update(t => t.Id == studyReviewerEditCommand.StudyId, // // u => new DicomStudy() // // { // // Status = (int)StudyStatus.QAFinish // // }); // // } // // } // // var success = _studyReviewerRepository.SaveChanges(); // // return ResponseOutput.Result(success); // //} // //public List GetReviewerListByTrialId(Guid trialId) // //{ // // var query = from enrollItem in _enrollRepository // // .Where(t => t.TrialId == trialId && t.EnrollStatus >= 10) // // join doctorItem in _doctorRepository.AsQueryable() // // on enrollItem.DoctorId equals doctorItem.Id into g // // from doctor in g.DefaultIfEmpty() // // select new // // { // // ReviewerCode = doctor.ReviewerCode, // // FirstName = doctor.FirstName, // // LastName = doctor.LastName, // // ReviewerId = enrollItem.DoctorId, // // ActivelyReading = doctor.ActivelyReading, // // }; // // return query.Where(s => s.ActivelyReading).Select(s => new ReviewerDistributionDTO // // { // // ReviewerCode = s.ReviewerCode, // // FirstName = s.FirstName, // // LastName = s.LastName, // // ReviewerId = s.ReviewerId, // // }).ToList(); // //} // //public PageOutput GetDistributeStudyList( // // StudyStatusQueryDTO studyStatusQueryDto) // //{ // // Expression> studyReviewerLambda = x => x.TrialId == studyStatusQueryDto.TrialId; // // if (studyStatusQueryDto.ReviewerId != null) // // { // // studyReviewerLambda = studyReviewerLambda.And(t => t.ReviewerId == studyStatusQueryDto.ReviewerId); // // } // // if (studyStatusQueryDto.StudyStatus != null) // // { // // studyReviewerLambda = studyReviewerLambda.And(t => t.Status == studyStatusQueryDto.StudyStatus); // // } // // var query = from studyReviewer in _studyReviewerRepository.Where(studyReviewerLambda) // // join doctor in _doctorRepository.AsQueryable() on studyReviewer.ReviewerId equals doctor.Id // // join study in _studyRepository.AsQueryable() on studyReviewer.StudyId equals study.Id // // select new DistributeReviewerStudyStatusDTO() // // { // // Name = doctor.LastName + " / " + doctor.FirstName, // // NameCN = doctor.ChineseName, // // ReviewerCode = doctor.ReviewerCode, // // Status = studyReviewer.Status, // // StudyCode = study.StudyCode // // }; // // return query.ToPagedList(studyStatusQueryDto.PageIndex, // // studyStatusQueryDto.PageSize, studyStatusQueryDto.SortField == string.Empty // // ? "ReviewerCode" // // : studyStatusQueryDto.SortField, studyStatusQueryDto.Asc); // //} // //public IEnumerable GetRelationVisitList(decimal visitNum, string tpCode) // //{ // // string tpGroup = tpCode.Substring(tpCode.Length - 3, 3); // // var tp = _workloadTPRepository.FirstOrDefault(u => u.TimepointCode == tpCode); // // var query = from workloadTp in _workloadTPRepository.Where(u => u.SubjectId == tp.SubjectId // // && u.TrialId == tp.TrialId && // // u.TimepointCode.Contains(tpGroup)) // // join subjectVisit in _subjectVisitRepository.Where(u => u.VisitNum <= visitNum) // // on workloadTp.SubjectVisitId equals subjectVisit.Id // // select new RelationVisitDTO // // { // // StudyId = workloadTp.StudyId, // // TpCode = workloadTp.TimepointCode, // // VisitName = subjectVisit.VisitName // // }; // // return query.ToList(); // //} // //public List GetQANoticeList(Guid subjectVisitId) // //{ // // var query = from noticeUser in _qaNoticeUserRepository.AsQueryable() // // .Where(t => t.ToUserId == _userInfo.Id && t.SubjectVisitId == subjectVisitId) // // join notice in _qaNoticeRepository.Where(u => u.NeedDeal == true && u.SubjectVisitId == subjectVisitId) on // // noticeUser.QANoticeId equals notice.Id // // select notice.Id; // // var noticeUserList = query.ToList(); // // //待处理的消息数量 // // var count = noticeUserList.Count; // // var list = _qaNoticeRepository.Where(t => t.SubjectVisitId == subjectVisitId) // // .ProjectTo(_mapper.ConfigurationProvider).OrderByDescending(t => t.SendTime).ToList(); // // list.ForEach(t => t.IsMessageReceiver = count > 0 && noticeUserList.Contains(t.Id) ? t.NeedDeal : false); // // return list; // //} // //public IResponseOutput DealNonDicomFile(Dictionary filePathDic, // // ArchiveStudyCommand archiveStudyCommand) // //{ // // var savedInfo = GetSaveToDicomInfo(archiveStudyCommand.SubjectVisitId); // // var dicomStudy = new DicomStudy // // { // // Id = Guid.NewGuid(), // // //SiteId = addtionalInfo.SiteId, // // //TrialId = addtionalInfo.TrialId, // // //SubjectId = addtionalInfo.SubjectId, // // //SubjectVisitId = addtionalInfo.SubjectVisitId, // // IsDoubleReview = savedInfo.IsDoubleReview, // // Comment = savedInfo.Comment // // }; // // #region Setting Code // // //var last = _studyRepository.Where(s => s.TrialId == addtionalInfo.TrialId) // // // .OrderByDescending(c => c.StudyCode).FirstOrDefault(); // // //if (last != null) // // //{ // // // var len = last.StudyCode.Length; // // // if (len > 5 && int.TryParse(last.StudyCode.Substring(len - 5, 5), out var num)) // // // { // // // dicomStudy.StudyCode = "ST" + (++num).ToString().PadLeft(5, '0'); // // // } // // // else // // // { // // // return ResponseOutput.NotOk("Generate StudyCode failed"); // // // } // // //} // // //else // // //{ // // // dicomStudy.StudyCode = "ST" + 1.ToString().PadLeft(5, '0'); // // //} // // #endregion // // var study = _studyRepository.Add(dicomStudy); // // var saveFileList = new List(); // // foreach (var key in filePathDic.Keys) // // { // // saveFileList.Add(new NoneDicomFile() { FileName = filePathDic[key], StudyId = study.Id, Path = key }); // // } // // _noneDicomFileRepository.AddRange(saveFileList); // // var success = _noneDicomFileRepository.SaveChanges(); // // UpdateStudyStatus(new StudyStatusDetailCommand // // { // // StudyId = study.Id, // // Status = (int)StudyStatus.Uploaded, // // Note = string.Empty // // }); // // return ResponseOutput.Result(success); // //} // #endregion // } //}