irc-netcore-api/IRaCIS.Core.Application/Service/ImageAndDoc/StudyxxService.cs

1052 lines
46 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

//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<DicomStudy> _studyRepository;
// private readonly IRepository<SubjectVisit> _subjectVisitRepository;
// private readonly IRepository<DicomInstance> _dicomInstanceRepository;
// private readonly IRepository<DicomSeries> _dicomSeriesRepository;
// private readonly IMapper _mapper;
// private static string _fileStorePath = string.Empty;
// private readonly IRepository<StudyMonitor> _dicomStudyMonitorRepository;
// public StudyService(IRepository<DicomStudy> studyRepository,
// IRepository<SubjectVisit> subjectVisitRepository,
// IRepository<DicomInstance> dicomInstanceRepository,
// IRepository<DicomSeries> dicomSeriesRepository,
// IInspectionService inspectionService,
// IUserInfo userInfo,
// IRepository<StudyMonitor> dicomStudyMonitorRepository,
// IMapper mapper)
// {
// _dicomStudyMonitorRepository = dicomStudyMonitorRepository;
// _userInfo = userInfo;
// _studyRepository = studyRepository;
// _subjectVisitRepository = subjectVisitRepository;
// _dicomInstanceRepository = dicomInstanceRepository;
// _dicomSeriesRepository = dicomSeriesRepository;
// this._inspectionService = inspectionService;
// _mapper = mapper;
// }
// /// <summary>
// /// 获取保存到Dicom文件中的信息
// /// </summary>
// /// <param name="subjectVisitId"></param>
// /// <returns></returns>
// public DicomTrialSiteSubjectInfo GetSaveToDicomInfo(Guid subjectVisitId)
// {
// //6表连接 subject trial trialSite sponsor subjectVisit site
// var info = _subjectVisitRepository.Where(t => t.Id == subjectVisitId).ProjectTo<DicomTrialSiteSubjectInfo>(_mapper.ConfigurationProvider).FirstOrDefault().IfNullThrowException();
// return info;
// }
// public (List<string> SeriesInstanceUid, List<string> 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<Guid> archiveStudyIds, ref DicomArchiveResult result, StudyMonitor monitor)
// {
// var archivedStudyId = archiveStudyIds[0];
// //result.ArchivedDicomStudies = _studyRepository.Where(t => t.SubjectVisitId == archiveStudyCommand.SubjectVisitId)
// // .ProjectTo<DicomStudyBasicDTO>(_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<DicomSeriesDTO> GetSeriesList(Guid studyId)
// //{
// // return _dicomSeriesRepository.Where(s => s.StudyId == studyId).OrderBy(s => s.SeriesNumber).
// // ThenBy(s => s.SeriesTime).ThenBy(s => s.CreateTime)
// // .ProjectTo<DicomSeriesDTO>(_mapper.ConfigurationProvider);
// //}
// //public IEnumerable<ImageLabelDTO> GetImageLabel(string tpCode)
// //{
// // return _imageLabelRepository.Where(s => s.TpCode == tpCode)
// // .ProjectTo<ImageLabelDTO>(_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<DicomStudyDTO>(_studyRepository.FirstOrDefault(s => s.Id == studyId));
// //}
// //public virtual async Task<IResponseOutput> 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<RelationStudyDTO> 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<RelationStudyDTO>(_mapper.ConfigurationProvider).ToList();
// // return query.OrderBy(u => u.VisitName).ThenBy(s => s.StudyCode).ToList();
// //}
// ///// <summary>
// ///// 检查列表
// ///// </summary>
// ///// <param name="queryDto"></param>
// ///// <returns></returns>
// //public PageOutput<StudyDTO> 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<StudyDTO>(_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<string>($"{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
// //}
// ///// <summary>
// ///// 上传完检查后,处理检查 汇总 Series的Modality 更新到检查里面 检查状态 上传人
// ///// </summary>
// ///// <param name="studyId"></param>
// //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<SubjectVisitStudyDTO> 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<StudyStatusDetailDTO> GetStudyStatusDetailList(Guid studyId)
// //{
// // return _studyStatusDetailRepository.Where(s => s.StudyId == studyId).OrderByDescending(s => s.OptTime)
// // .ProjectTo<StudyStatusDetailDTO>(_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<ReviewerDistributionDTO> 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<DistributeReviewerStudyStatusDTO> GetDistributeStudyList(
// // StudyStatusQueryDTO studyStatusQueryDto)
// //{
// // Expression<Func<StudyReviewer, bool>> 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<RelationVisitDTO> 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<QANoticeDTO> 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<QANoticeDTO>(_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<string, string> 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<NoneDicomFile>();
// // 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
// }
//}