Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is failing
Details
continuous-integration/drone/push Build is failing
Details
commit
5716c4169a
|
|
@ -13,6 +13,8 @@ namespace IRaCIS.Core.Application.Helper
|
||||||
|
|
||||||
public class StudyDIRInfo
|
public class StudyDIRInfo
|
||||||
{
|
{
|
||||||
|
public bool IsTaskStudy { get; set; }
|
||||||
|
|
||||||
public Guid SubjectVisitId { get; set; }
|
public Guid SubjectVisitId { get; set; }
|
||||||
// Study
|
// Study
|
||||||
public Guid DicomStudyId { get; set; }
|
public Guid DicomStudyId { get; set; }
|
||||||
|
|
|
||||||
|
|
@ -60,4 +60,16 @@ namespace IRaCIS.Core.Application.Helper
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = false)]
|
||||||
|
public class DateTimeTranaslateAttribute : Attribute
|
||||||
|
{
|
||||||
|
public string Formart { get; set; }
|
||||||
|
|
||||||
|
public DateTimeTranaslateAttribute(string formart)
|
||||||
|
{
|
||||||
|
Formart = formart;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -900,6 +900,14 @@
|
||||||
<param name="_trialRepository"></param>
|
<param name="_trialRepository"></param>
|
||||||
<returns></returns>
|
<returns></returns>
|
||||||
</member>
|
</member>
|
||||||
|
<member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.JointMedicalReviewDialog(IRaCIS.Core.Application.Service.Reading.Dto.GetMedicalReviewDialogOutDto,IRaCIS.Core.Application.Service.Reading.Dto.JointMedicalReviewI18n)">
|
||||||
|
<summary>
|
||||||
|
获取医学审核对话拼接内容
|
||||||
|
</summary>
|
||||||
|
<param name="record"></param>
|
||||||
|
<param name="i18NAndDic"></param>
|
||||||
|
<returns></returns>
|
||||||
|
</member>
|
||||||
<member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.GetTrialDownloadList_Export(IRaCIS.Core.Application.Contracts.TrialIamgeDownQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialImageDownload},IRaCIS.Application.Interfaces.IDictionaryService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
|
<member name="M:IRaCIS.Core.Application.Service.Common.ExcelExportService.GetTrialDownloadList_Export(IRaCIS.Core.Application.Contracts.TrialIamgeDownQuery,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.TrialImageDownload},IRaCIS.Application.Interfaces.IDictionaryService,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.Trial})">
|
||||||
<summary>
|
<summary>
|
||||||
影像下载记录表
|
影像下载记录表
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,8 @@ using System.ComponentModel.Design;
|
||||||
using System.Globalization;
|
using System.Globalization;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
using static IRaCIS.Core.Application.Service.ExcelExportHelper;
|
using static IRaCIS.Core.Application.Service.ExcelExportHelper;
|
||||||
using IDictionaryService = IRaCIS.Application.Interfaces.IDictionaryService;
|
using IDictionaryService = IRaCIS.Application.Interfaces.IDictionaryService;
|
||||||
using TrialIdentityUser = IRaCIS.Core.Domain.Models.TrialIdentityUser;
|
using TrialIdentityUser = IRaCIS.Core.Domain.Models.TrialIdentityUser;
|
||||||
|
|
@ -32,6 +34,8 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
[ApiExplorerSettings(GroupName = "Common")]
|
[ApiExplorerSettings(GroupName = "Common")]
|
||||||
public class ExcelExportService(IRepository<TrialUserRole> _trialUserRoleRepository,
|
public class ExcelExportService(IRepository<TrialUserRole> _trialUserRoleRepository,
|
||||||
IRepository<VisitTask> _visitTaskRepository,
|
IRepository<VisitTask> _visitTaskRepository,
|
||||||
|
IRepository<Dictionary> _dictionaryRepository,
|
||||||
|
IRepository<Internationalization> _internationalizationRepository,
|
||||||
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
IRepository<ReadingQuestionCriterionTrial> _readingQuestionCriterionTrialRepository,
|
||||||
IRepository<SystemDocNeedConfirmedUserType> _systemDocNeedConfirmedUserTypeRepository,
|
IRepository<SystemDocNeedConfirmedUserType> _systemDocNeedConfirmedUserTypeRepository,
|
||||||
IRepository<DicomStudy> _dicomStudyRepository,
|
IRepository<DicomStudy> _dicomStudyRepository,
|
||||||
|
|
@ -1758,6 +1762,80 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
var list = taskMedicalReviewQueryable.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
|
var list = taskMedicalReviewQueryable.OrderBy(t => t.TrialSiteCode).ThenBy(t => t.SubjectCode).ThenBy(t => t.VisitTaskNum).ToList();
|
||||||
|
|
||||||
|
|
||||||
|
#region 处理翻译对话 by he wen tao
|
||||||
|
|
||||||
|
Dictionary<string, string> i18NKeys = new Dictionary<string, string>()
|
||||||
|
{
|
||||||
|
{ "Msg1","trials:medicalFeedback:message:msg1"},
|
||||||
|
{ "Msg2","trials:medicalFeedback:message:msg2"},
|
||||||
|
{ "Msg3","trials:medicalFeedback:message:msg3"},
|
||||||
|
{ "Msg4", "trials:medicalFeedback:message:msg4"},
|
||||||
|
{ "Msg5", "trials:medicalFeedback:message:msg5"},
|
||||||
|
{ "CloseReasonEnum", "trials:medicalFeedback:title:closeReasonEnum"},
|
||||||
|
{ "IsEndorse", "trials:medicalFeedback:title:isEndorse"},
|
||||||
|
{ "Reason", "trials:medicalFeedback:title:reason"},
|
||||||
|
{ "IsRequestReread", "trials:medicalFeedback:title:isRequestReread"},
|
||||||
|
};
|
||||||
|
|
||||||
|
var i18Values = i18NKeys.Select(x => x.Value).ToList();
|
||||||
|
var i18nList = await _internationalizationRepository.Where(x => i18Values.Contains(x.Code))
|
||||||
|
.Select(x => new
|
||||||
|
{
|
||||||
|
Code = x.Code,
|
||||||
|
Value = _userInfo.IsEn_Us ? x.Value : x.ValueCN
|
||||||
|
}).ToListAsync();
|
||||||
|
|
||||||
|
List<string> dictionaryCodeList = new List<string>()
|
||||||
|
{
|
||||||
|
"AuditAdvice",
|
||||||
|
"MedicalDialogCloseEnum",
|
||||||
|
"MedicalReviewDoctorUserIdea",
|
||||||
|
"YesOrNo",
|
||||||
|
};
|
||||||
|
|
||||||
|
var dictionadParents = await _dictionaryRepository.Where(x => dictionaryCodeList.Contains(x.Parent.Code))
|
||||||
|
.Select(x => new
|
||||||
|
{
|
||||||
|
ParentCode = x.Parent.Code,
|
||||||
|
Code = x.Code,
|
||||||
|
Value = _userInfo.IsEn_Us ? x.Value : x.ValueCN
|
||||||
|
}).ToListAsync();
|
||||||
|
|
||||||
|
JointMedicalReviewI18n i18N = new JointMedicalReviewI18n() { };
|
||||||
|
foreach (var kv in i18NKeys)
|
||||||
|
{
|
||||||
|
PropertyInfo? pi = i18N.GetType().GetProperty(kv.Key);
|
||||||
|
if (pi != null && pi.CanWrite)
|
||||||
|
{
|
||||||
|
var value = i18nList.Where(x => x.Code == kv.Value).Select(x => x.Value).FirstOrDefault() ?? string.Empty;
|
||||||
|
object safeValue = Convert.ChangeType(value, pi.PropertyType);
|
||||||
|
pi.SetValue(i18N, safeValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach (var item in dictionaryCodeList)
|
||||||
|
{
|
||||||
|
PropertyInfo? pi = i18N.GetType().GetProperty(item);
|
||||||
|
if (pi != null && pi.CanWrite)
|
||||||
|
{
|
||||||
|
var value = dictionadParents.Where(x => x.ParentCode == item).ToDictionary(x => x.Code, x => x.Value);
|
||||||
|
object safeValue = Convert.ChangeType(value, pi.PropertyType);
|
||||||
|
pi.SetValue(i18N, safeValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
foreach (var item in list)
|
||||||
|
{
|
||||||
|
foreach (var dialog in item.DialogList)
|
||||||
|
{
|
||||||
|
dialog.ResultContent = JointMedicalReviewDialog(dialog, i18N);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo<ExcelExportInfo>(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list, _userInfo.TimeZoneId);
|
||||||
|
|
@ -1767,6 +1845,88 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TaskMedicalReviewExportDto));
|
return await ExcelExportHelper.DataExportAsync(StaticData.Export.TrialMedicalReviewList_Export, exportInfo, $"{exportInfo.ResearchProgramNo}", _commonDocumentRepository, _hostEnvironment, _dictionaryService, typeof(TaskMedicalReviewExportDto));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 获取医学审核对话拼接内容
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="record"></param>
|
||||||
|
/// <param name="i18NAndDic"></param>
|
||||||
|
/// <returns></returns>
|
||||||
|
private string JointMedicalReviewDialog(GetMedicalReviewDialogOutDto record, JointMedicalReviewI18n i18NAndDic)
|
||||||
|
{
|
||||||
|
StringBuilder str = new StringBuilder() { };
|
||||||
|
var userTypes = new List<int>() { 14, 30 };
|
||||||
|
|
||||||
|
// 这里userTypes.Contains(record.UserTypeEnumInt) 可以提出来 但是还是按照前端写吧 免得不好对照
|
||||||
|
|
||||||
|
// v-if="[14, 30].includes(record.UserTypeEnumInt) && record.Questioning
|
||||||
|
if (userTypes.Contains(record.UserTypeEnumInt) && record.Questioning.IsNotNullOrEmpty())
|
||||||
|
{
|
||||||
|
// <!-- 您好,根据医学审核反馈,该阅片任务的评估有如下问题需要您确认或澄清: -->
|
||||||
|
str.AppendLine(i18NAndDic.Msg1);
|
||||||
|
|
||||||
|
str.AppendLine(record.Questioning);
|
||||||
|
|
||||||
|
if (record.FileList.Count() > 0)
|
||||||
|
{
|
||||||
|
str.AppendLine(i18NAndDic.Msg2);
|
||||||
|
record.FileList.ForEach(x =>
|
||||||
|
{
|
||||||
|
str.AppendLine(x.FileName);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
str.AppendLine(i18NAndDic.Msg3);
|
||||||
|
|
||||||
|
str.AppendLine(i18NAndDic.AuditAdvice[record.AuditAdviceEnum.GetEnumInt()]);
|
||||||
|
|
||||||
|
str.AppendLine(i18NAndDic.Msg4);
|
||||||
|
}
|
||||||
|
|
||||||
|
//v-if="[14, 30].includes(record.UserTypeEnumInt) && record.MedicalDialogCloseEnum!== null"
|
||||||
|
if (userTypes.Contains(record.UserTypeEnumInt) && record.MedicalDialogCloseEnum != null)
|
||||||
|
{
|
||||||
|
str.AppendLine(i18NAndDic.CloseReasonEnum + i18NAndDic.MedicalDialogCloseEnum[record.MedicalDialogCloseEnum.Value.GetEnumInt()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// v-if="[14, 30].includes(record.UserTypeEnumInt) && record.Content
|
||||||
|
if (userTypes.Contains(record.UserTypeEnumInt) && record.Content.IsNotNullOrEmpty())
|
||||||
|
{
|
||||||
|
str.AppendLine(record.Content);
|
||||||
|
}
|
||||||
|
|
||||||
|
// v-if="[13].includes(record.UserTypeEnumInt)"
|
||||||
|
|
||||||
|
if (13 == record.UserTypeEnumInt)
|
||||||
|
{
|
||||||
|
str.AppendLine(i18NAndDic.IsEndorse + i18NAndDic.MedicalReviewDoctorUserIdea[record.DoctorUserIdeaEnum.GetEnumInt()]);
|
||||||
|
|
||||||
|
// v-if="record.DoctorUserIdeaEnum===2"
|
||||||
|
if ((int)record.DoctorUserIdeaEnum == 2)
|
||||||
|
{
|
||||||
|
str.AppendLine(i18NAndDic.Reason + record.DisagreeReason);
|
||||||
|
}
|
||||||
|
|
||||||
|
// record.MedicalDialogCloseEnum!== null
|
||||||
|
|
||||||
|
if (record.MedicalDialogCloseEnum != null)
|
||||||
|
{
|
||||||
|
str.AppendLine(i18NAndDic.IsRequestReread + i18NAndDic.YesOrNo[record.IsApplyHeavyReading.ToString()]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// v-if="record.FileList && record.FileList.length > 0"
|
||||||
|
|
||||||
|
if (record.FileList.Count() > 0)
|
||||||
|
{
|
||||||
|
record.FileList.ForEach(x =>
|
||||||
|
{
|
||||||
|
str.AppendLine(x.FileName);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return str.ToString();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 影像下载记录表
|
/// 影像下载记录表
|
||||||
|
|
@ -2605,6 +2765,11 @@ namespace IRaCIS.Core.Application.Service.Common
|
||||||
if (criterion.CriterionType == CriterionType.OCT)
|
if (criterion.CriterionType == CriterionType.OCT)
|
||||||
{
|
{
|
||||||
list.Add(new ExportDocumentDes() { Code = StaticData.Export.OCT_ReadingLession_Export, ExportCatogory = ExportResult.OCT_ReadingLession_Export });
|
list.Add(new ExportDocumentDes() { Code = StaticData.Export.OCT_ReadingLession_Export, ExportCatogory = ExportResult.OCT_ReadingLession_Export });
|
||||||
|
list.Add(new ExportDocumentDes() { Code = StaticData.Export.OCT_CDISC_Export, ExportCatogory = ExportResult.OCT_CDISC_Export });
|
||||||
|
}
|
||||||
|
if (criterion.CriterionType == CriterionType.IVUS)
|
||||||
|
{
|
||||||
|
list.Add(new ExportDocumentDes() { Code = StaticData.Export.IVUS_CDISC_Export, ExportCatogory = ExportResult.IVUS_CDISC_Export });
|
||||||
}
|
}
|
||||||
|
|
||||||
if (criterion.CriterionGroup != CriterionGroup.Tumor)
|
if (criterion.CriterionGroup != CriterionGroup.Tumor)
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ using System.Threading.Tasks;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application.Service.Common;
|
namespace IRaCIS.Core.Application.Service.Common;
|
||||||
|
|
||||||
|
|
||||||
public class TumorCommonQustionInfo
|
public class TumorCommonQustionInfo
|
||||||
{
|
{
|
||||||
//问题标识,肿瘤评估用于区分是什么问题
|
//问题标识,肿瘤评估用于区分是什么问题
|
||||||
|
|
|
||||||
File diff suppressed because it is too large
Load Diff
|
|
@ -120,6 +120,10 @@ namespace IRaCIS.Core.Application.Service
|
||||||
CreateMap<TumorExportBaseModel, TR_Export>();
|
CreateMap<TumorExportBaseModel, TR_Export>();
|
||||||
CreateMap<TumorExportBaseModel, RS_Export>();
|
CreateMap<TumorExportBaseModel, RS_Export>();
|
||||||
CreateMap<TumorExportBaseModel, CO_Export>();
|
CreateMap<TumorExportBaseModel, CO_Export>();
|
||||||
|
|
||||||
|
CreateMap<IVUS_OCTBaseDto, IvusExportDto>();
|
||||||
|
CreateMap<IVUS_OCTBaseDto, OctExportDto>();
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -269,8 +269,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public AddOrUpdateStudyDto Study { get; set; }
|
public AddOrUpdateStudyDto Study { get; set; }
|
||||||
|
|
||||||
[NotDefault]
|
public Guid? VisitTaskId { get; set; }
|
||||||
public Guid VisitTaskId { get; set; }
|
|
||||||
|
|
||||||
public bool? IsImageSegmentLabel { get; set; }
|
public bool? IsImageSegmentLabel { get; set; }
|
||||||
}
|
}
|
||||||
|
|
@ -506,8 +505,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
public class IRTaskUploadedDicomStudyQuery
|
public class IRTaskUploadedDicomStudyQuery
|
||||||
{
|
{
|
||||||
[NotDefault]
|
public Guid? VisitTaskId { get; set; }
|
||||||
public Guid VisitTaskId { get; set; }
|
|
||||||
|
public Guid? SubjectVisitId { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
public class IRUploadTaskDicomStudyDto : DicomStudyBasicInfo
|
public class IRUploadTaskDicomStudyDto : DicomStudyBasicInfo
|
||||||
|
|
|
||||||
|
|
@ -174,6 +174,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
.Select(t => new StudyBasicInfo()
|
.Select(t => new StudyBasicInfo()
|
||||||
{
|
{
|
||||||
Id = t.Id,
|
Id = t.Id,
|
||||||
|
SubjectVisitId = t.SubjectVisitId,
|
||||||
|
|
||||||
StudyInstanceUid = t.StudyInstanceUid,
|
StudyInstanceUid = t.StudyInstanceUid,
|
||||||
ModalityForEdit = t.ModalityForEdit,
|
ModalityForEdit = t.ModalityForEdit,
|
||||||
BodyPartExamined = t.BodyPartExamined,
|
BodyPartExamined = t.BodyPartExamined,
|
||||||
|
|
@ -194,6 +196,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
UploadStudyList = u.TaskStudyList.Select(t => new StudyBasicInfo()
|
UploadStudyList = u.TaskStudyList.Select(t => new StudyBasicInfo()
|
||||||
{
|
{
|
||||||
Id = t.Id,
|
Id = t.Id,
|
||||||
|
SubjectVisitId = t.SubjectVisitId,
|
||||||
StudyInstanceUid = t.StudyInstanceUid,
|
StudyInstanceUid = t.StudyInstanceUid,
|
||||||
ModalityForEdit = t.ModalityForEdit,
|
ModalityForEdit = t.ModalityForEdit,
|
||||||
BodyPartExamined = t.BodyPartExamined,
|
BodyPartExamined = t.BodyPartExamined,
|
||||||
|
|
@ -252,7 +255,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
OrginalStudyList = u.SourceSubjectVisit.StudyList
|
OrginalStudyList = u.SourceSubjectVisit.StudyList
|
||||||
.Where(t => u.TrialReadingCriterion.IsImageFilter ? ("|" + u.TrialReadingCriterion.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
.Where(t => u.TrialReadingCriterion.IsImageFilter ? ("|" + u.TrialReadingCriterion.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
||||||
.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true)
|
.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true)
|
||||||
.Select(t => new StudyBasicInfo()
|
.Select(t => new StudyBasicInfo()
|
||||||
{
|
{
|
||||||
Id = t.Id,
|
Id = t.Id,
|
||||||
|
|
@ -548,9 +551,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
var @uploadLock = _distributedLockProvider.CreateLock($"UploadTaskDicom");
|
var @uploadLock = _distributedLockProvider.CreateLock($"UploadTaskDicom");
|
||||||
|
|
||||||
|
var visiTaskId = incommand.VisitTaskId ?? Guid.Empty;
|
||||||
|
|
||||||
using (await @uploadLock.AcquireAsync())
|
using (await @uploadLock.AcquireAsync())
|
||||||
{
|
{
|
||||||
if (_fusionCache.GetOrDefault<Guid>(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid)) != Guid.Empty)
|
if (_fusionCache.GetOrDefault<Guid>(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid)) != Guid.Empty)
|
||||||
{
|
{
|
||||||
//---当前已有人正在上传和归档该检查!
|
//---当前已有人正在上传和归档该检查!
|
||||||
return ResponseOutput.NotOk(I18n.T("UploadDownLoad_ArchiveInProgress"));
|
return ResponseOutput.NotOk(I18n.T("UploadDownLoad_ArchiveInProgress"));
|
||||||
|
|
@ -558,7 +563,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//在事务未完成前 防止前端重复提交
|
//在事务未完成前 防止前端重复提交
|
||||||
await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid), _userInfo.UserRoleId, TimeSpan.FromMinutes(1));
|
await _fusionCache.SetAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid), _userInfo.UserRoleId, TimeSpan.FromMinutes(1));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -570,7 +575,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
svId = _dicomStudyRepository.Where(t => t.TrialId == incommand.TrialId && t.StudyInstanceUid == incommand.Study.StudyInstanceUid).Select(t => t.SubjectVisitId).FirstOrDefault();
|
svId = _dicomStudyRepository.Where(t => t.TrialId == incommand.TrialId && t.StudyInstanceUid == incommand.Study.StudyInstanceUid).Select(t => t.SubjectVisitId).FirstOrDefault();
|
||||||
}
|
}
|
||||||
|
|
||||||
var visiTaskId = incommand.VisitTaskId;
|
|
||||||
|
|
||||||
var modalitys = string.Empty;
|
var modalitys = string.Empty;
|
||||||
|
|
||||||
|
|
@ -805,8 +809,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
}
|
}
|
||||||
finally
|
finally
|
||||||
{
|
{
|
||||||
await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid));
|
await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidDBLock(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid));
|
||||||
await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidUploading(incommand.TrialId, incommand.VisitTaskId, incommand.Study.StudyInstanceUid));
|
await _fusionCache.RemoveAsync(CacheKeys.TrialTaskStudyUidUploading(incommand.TrialId, visiTaskId, incommand.Study.StudyInstanceUid));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -868,7 +872,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
/// <param name="inQuery"></param>
|
/// <param name="inQuery"></param>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<List<TaskNoneDicomStudyDTO>> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery)
|
public async Task<IResponseOutput<List<TaskNoneDicomStudyDTO>>> GetIRUploadTaskNoneDicomStudyList(IRUploadStudyQuery inQuery)
|
||||||
{
|
{
|
||||||
var subjectCode = inQuery.SubjectCode;
|
var subjectCode = inQuery.SubjectCode;
|
||||||
var subjectId = inQuery.SubjectId;
|
var subjectId = inQuery.SubjectId;
|
||||||
|
|
@ -895,10 +899,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId)
|
var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId)
|
||||||
.Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync();
|
.Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.IsReadingTaskViewInOrder }).FirstNotNullAsync();
|
||||||
|
|
||||||
|
var config = await _subjectRepository.Where(t => t.Id == subjectId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName }).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
//靶段标注上传,查看访视级别,上传绑定访视级别
|
//靶段标注上传,查看访视级别,上传绑定访视级别
|
||||||
if (inQuery.IsImageSegmentLabel == true)
|
if (inQuery.IsImageSegmentLabel == true)
|
||||||
{
|
{
|
||||||
var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId && t.SubjectVisitId == inQuery.SubjectVisitId)
|
var list = _noneDicomStudyReposiotry.Where(t => t.SubjectId == subjectId)
|
||||||
|
.WhereIf(inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId)
|
||||||
//.WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|"))
|
//.WhereIf(info.IsImageFilter, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.Modality + "|"))
|
||||||
.Select(u => new TaskNoneDicomStudyDTO()
|
.Select(u => new TaskNoneDicomStudyDTO()
|
||||||
{
|
{
|
||||||
|
|
@ -950,7 +958,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
item.UploadedFileList = noneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList();
|
item.UploadedFileList = noneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return ResponseOutput.Ok(list, config);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
@ -981,7 +989,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
StudyCode = ns.StudyCode,
|
StudyCode = ns.StudyCode,
|
||||||
|
|
||||||
//靶段标注 阅片IR 上传时IsImageSegmentLabel == false ,正常后处理上传IsImageSegmentLabel 该字段为空
|
//靶段标注 阅片IR 上传时IsImageSegmentLabel == false ,正常后处理上传IsImageSegmentLabel 该字段为空
|
||||||
FileList = (inQuery.IsImageSegmentLabel == false ? ns.NoneDicomFileList : ns.ImageLabelNoneDicomFileList)
|
FileList = (inQuery.IsImageSegmentLabel == false ? ns.ImageLabelNoneDicomFileList : ns.NoneDicomFileList)
|
||||||
.Select(t => new NoneDicomFileInfo()
|
.Select(t => new NoneDicomFileInfo()
|
||||||
{
|
{
|
||||||
FileType = t.FileType,
|
FileType = t.FileType,
|
||||||
|
|
@ -1018,7 +1026,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
item.UploadedFileList = taskNoneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList();
|
item.UploadedFileList = taskNoneDicomStudyList.Where(t => t.OriginNoneDicomStudyId == item.Id).ToList();
|
||||||
}
|
}
|
||||||
|
|
||||||
return list;
|
return ResponseOutput.Ok(list, config);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -1248,7 +1256,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
var dicomStudyList = list.Where(item => item.DicomStudyList.Count > 0)
|
var dicomStudyList = list.Where(item => item.DicomStudyList.Count > 0)
|
||||||
.Select(item => new SubjectVisitMarkStudyDto
|
.Select(item => new SubjectVisitMarkStudyDto
|
||||||
{
|
{
|
||||||
SourceSubjectVisitId=item.SourceSubjectVisitId,
|
SourceSubjectVisitId = item.SourceSubjectVisitId,
|
||||||
VisitTaskId = item.VisitTaskId,
|
VisitTaskId = item.VisitTaskId,
|
||||||
SubjectId = item.SubjectId,
|
SubjectId = item.SubjectId,
|
||||||
SubjectCode = item.SubjectCode,
|
SubjectCode = item.SubjectCode,
|
||||||
|
|
@ -1338,8 +1346,11 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
|
|
||||||
foreach (var item in list)
|
foreach (var item in list)
|
||||||
{
|
{
|
||||||
item.DicomStudyList.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true).ToList()
|
var dicomList = item.DicomStudyList.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true).ToList();
|
||||||
.AddRange(preDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList());
|
|
||||||
|
dicomList.AddRange(preDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList());
|
||||||
|
|
||||||
|
item.DicomStudyList = dicomList;
|
||||||
|
|
||||||
item.NoneDicomStudyList = _mapper.Map<List<NoneDicomStudyBasicInfo>>(preNoneDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList());
|
item.NoneDicomStudyList = _mapper.Map<List<NoneDicomStudyBasicInfo>>(preNoneDicomStudyList.Where(t => t.SubjectVisitId == item.SourceSubjectVisitId).ToList());
|
||||||
}
|
}
|
||||||
|
|
@ -1435,7 +1446,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
var dirInfolist = _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))).SelectMany(t => t.StudyList)
|
var dirInfolist = _subjectRepository.Where(t => t.Id == inQuery.SubjectId).SelectMany(t => t.SubjectVisitList.Where(t => subjectVisitIdList.Contains(t.Id))).SelectMany(t => t.StudyList)
|
||||||
.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
|
.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
|
||||||
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
||||||
.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true)
|
.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true)
|
||||||
.SelectMany(t => t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading))
|
.SelectMany(t => t.InstanceList.Where(t => t.IsReading && t.DicomSerie.IsReading))
|
||||||
.Select(t => new StudyDIRInfo()
|
.Select(t => new StudyDIRInfo()
|
||||||
{
|
{
|
||||||
|
|
@ -1478,6 +1489,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
var taskDirInfolist = _taskInstanceRepository.Where(t => t.SubjectVisitId != null)
|
var taskDirInfolist = _taskInstanceRepository.Where(t => t.SubjectVisitId != null)
|
||||||
.Where(t => subjectVisitIdList.Contains((Guid)t.SubjectVisitId)).Select(t => new StudyDIRInfo()
|
.Where(t => subjectVisitIdList.Contains((Guid)t.SubjectVisitId)).Select(t => new StudyDIRInfo()
|
||||||
{
|
{
|
||||||
|
IsTaskStudy = true,
|
||||||
SubjectVisitId = (Guid)t.SubjectVisitId,
|
SubjectVisitId = (Guid)t.SubjectVisitId,
|
||||||
|
|
||||||
DicomStudyId = t.TaskStudy.Id,
|
DicomStudyId = t.TaskStudy.Id,
|
||||||
|
|
@ -1521,14 +1533,23 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
{
|
{
|
||||||
var visitId = item.First().SubjectVisitId;
|
var visitId = item.First().SubjectVisitId;
|
||||||
|
|
||||||
|
var isTaskStudy = item.First().IsTaskStudy;
|
||||||
|
|
||||||
var ossFolder = $"{pathInfo.TrialId}/Image/{pathInfo.SubjectId}/{visitId}/{item.Key.StudyInstanceUid}";
|
var ossFolder = $"{pathInfo.TrialId}/Image/{pathInfo.SubjectId}/{visitId}/{item.Key.StudyInstanceUid}";
|
||||||
|
|
||||||
var isSucess = await SafeBussinessHelper.RunAsync(async () => await DicomDIRHelper.GenerateStudyDIRAndUploadAsync(item.ToList(), dirDic, ossFolder, _oSSService));
|
var isSucess = await SafeBussinessHelper.RunAsync(async () => await DicomDIRHelper.GenerateStudyDIRAndUploadAsync(item.ToList(), dirDic, ossFolder, _oSSService));
|
||||||
|
|
||||||
|
|
||||||
if (isSucess)
|
if (isSucess)
|
||||||
|
{
|
||||||
|
if (isTaskStudy)
|
||||||
|
{
|
||||||
|
await _taskStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new TaskStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" });
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" });
|
await _dicomStudyRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Key.DicomStudyId, u => new DicomStudy() { StudyDIRPath = $"/{ossFolder}/DICOMDIR" });
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1542,17 +1563,17 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
from leftVisitTask in cc.DefaultIfEmpty()
|
from leftVisitTask in cc.DefaultIfEmpty()
|
||||||
select new ImageDownloadDto()
|
select new ImageDownloadDto()
|
||||||
{
|
{
|
||||||
TrialId=sv.TrialId,
|
TrialId = sv.TrialId,
|
||||||
SubjectId=sv.SubjectId,
|
SubjectId = sv.SubjectId,
|
||||||
TrialSiteCode=sv.TrialSite.TrialSiteCode,
|
TrialSiteCode = sv.TrialSite.TrialSiteCode,
|
||||||
VisitId=sv.Id,
|
VisitId = sv.Id,
|
||||||
|
|
||||||
SubjectCode = inQuery.SubjectCode,
|
SubjectCode = inQuery.SubjectCode,
|
||||||
VisitName = sv.VisitName,
|
VisitName = sv.VisitName,
|
||||||
TaskBlindName = leftVisitTask.TaskBlindName,
|
TaskBlindName = leftVisitTask.TaskBlindName,
|
||||||
StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
|
StudyList = sv.StudyList.Where(t => isQueryDicom ? inQuery.DicomStudyIdList.Contains(t.Id) : false)
|
||||||
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
||||||
.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" : true)
|
.Where(t => inQuery.IsImageSegmentLabel == false ? t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT" : true)
|
||||||
.Select(u => new DownloadDicomStudyDto()
|
.Select(u => new DownloadDicomStudyDto()
|
||||||
{
|
{
|
||||||
PatientId = u.PatientId,
|
PatientId = u.PatientId,
|
||||||
|
|
@ -1696,11 +1717,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IResponseOutput> GetTaskUploadedDicomStudyList(IRTaskUploadedDicomStudyQuery inQuery)
|
public async Task<IResponseOutput> GetTaskUploadedDicomStudyList(IRTaskUploadedDicomStudyQuery inQuery)
|
||||||
{
|
{
|
||||||
var info = await _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId)
|
var info = await _visitTaskRepository
|
||||||
|
.WhereIf(inQuery.VisitTaskId != null, t => t.Id == inQuery.VisitTaskId)//正常后处理
|
||||||
.Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync();
|
.Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync();
|
||||||
|
|
||||||
var query = _taskStudyRepository.Where(t => t.VisitTaskId == inQuery.VisitTaskId)
|
var query = _taskStudyRepository
|
||||||
.Where(t => info.IsImageFilter ? ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
.WhereIf(inQuery.VisitTaskId != null, t => t.VisitTaskId == inQuery.VisitTaskId)//正常后处理
|
||||||
|
.WhereIf(inQuery.VisitTaskId == null && inQuery.SubjectVisitId != null, t => t.SubjectVisitId == inQuery.SubjectVisitId)//靶段标注处理的影像
|
||||||
|
.WhereIf(info.IsImageFilter && inQuery.VisitTaskId != null, t => ("|" + info.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))
|
||||||
.Select(t => new
|
.Select(t => new
|
||||||
{
|
{
|
||||||
StudyId = t.Id,
|
StudyId = t.Id,
|
||||||
|
|
@ -2202,14 +2226,14 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IResponseOutput<PageOutput<SubjectVisitMarkDTO>>> GetTrialSubjectVisitMarkList(SubjectVisitMarkQuery inQuery)
|
public async Task<IResponseOutput<PageOutput<SubjectVisitMarkDTO>>> GetTrialSubjectVisitMarkList(SubjectVisitMarkQuery inQuery)
|
||||||
{
|
{
|
||||||
var list = await _subjectRepository.Where(t => t.TrialId == inQuery.TrialId)
|
var list = await _subjectRepository.Where(t => t.TrialId == inQuery.TrialId && t.SubjectDoctorList.Any())
|
||||||
.WhereIf(inQuery.SubjectCode.IsNotNullOrEmpty(), t => t.Code.Contains(inQuery.SubjectCode))
|
.WhereIf(inQuery.SubjectCode.IsNotNullOrEmpty(), t => t.Code.Contains(inQuery.SubjectCode))
|
||||||
.WhereIf(inQuery.IsUrgent != null, t => t.IsUrgent == inQuery.IsUrgent)
|
.WhereIf(inQuery.IsUrgent != null, t => t.IsUrgent == inQuery.IsUrgent)
|
||||||
.Select(t => new SubjectVisitMarkDTO()
|
.Select(t => new SubjectVisitMarkDTO()
|
||||||
{
|
{
|
||||||
TrialId = t.TrialId,
|
TrialId = t.TrialId,
|
||||||
SubjectId = t.Id,
|
SubjectId = t.Id,
|
||||||
SubjectCode=t.Code,
|
SubjectCode = t.Code,
|
||||||
IsUrgent = t.IsUrgent,
|
IsUrgent = t.IsUrgent,
|
||||||
VisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(),
|
VisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(),
|
||||||
MarkVisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(t => t.TaskStudyList.Any()),
|
MarkVisitCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).Count(t => t.TaskStudyList.Any()),
|
||||||
|
|
@ -2218,7 +2242,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
|
||||||
MarkDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.TaskStudyList).Count(),
|
MarkDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.TaskStudyList).Count(),
|
||||||
|
|
||||||
NoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Count(),
|
NoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Count(),
|
||||||
MarkNoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Where(t=>t.ImageLabelNoneDicomFileList.Any()).Count(),
|
MarkNoneDicomStudyCount = t.SubjectVisitList.Where(t => t.SubmitState == SubmitStateEnum.Submitted).SelectMany(t => t.NoneDicomStudyList).Where(t => t.ImageLabelNoneDicomFileList.Any()).Count(),
|
||||||
}).ToPagedListAsync(inQuery);
|
}).ToPagedListAsync(inQuery);
|
||||||
|
|
||||||
return ResponseOutput.Ok(list);
|
return ResponseOutput.Ok(list);
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
// 对此文件的更改可能会导致不正确的行为,并且如果重新生成代码,这些更改将会丢失。
|
||||||
//--------------------------------------------------------------------
|
//--------------------------------------------------------------------
|
||||||
using IRaCIS.Core.Application.Filter;
|
using IRaCIS.Core.Application.Filter;
|
||||||
|
using IRaCIS.Core.Application.Service.Reading.Dto;
|
||||||
using IRaCIS.Core.Domain.Models;
|
using IRaCIS.Core.Domain.Models;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
using Medallion.Threading;
|
using Medallion.Threading;
|
||||||
|
|
@ -34,7 +35,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
[FromQuery] Guid? nonedicomStudyId,
|
[FromQuery] Guid? nonedicomStudyId,
|
||||||
[FromQuery] bool isFilterZip,
|
[FromQuery] bool isFilterZip,
|
||||||
[FromQuery] Guid? visitTaskId,
|
[FromQuery] Guid? visitTaskId,
|
||||||
[FromQuery] bool isReading)
|
[FromQuery] bool isReading,
|
||||||
|
[FromQuery] bool? isImageSegmentLabel)
|
||||||
{
|
{
|
||||||
var qcAuditState = await _subjectVisitRepository.Where(s => s.Id == subjectVisitId).Select(t => t.AuditState).FirstOrDefaultAsync();
|
var qcAuditState = await _subjectVisitRepository.Where(s => s.Id == subjectVisitId).Select(t => t.AuditState).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
@ -45,21 +47,45 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
var isViewDelete = !isQCFinished;
|
var isViewDelete = !isQCFinished;
|
||||||
|
|
||||||
IQueryable<NoneDicomStudyView> noneDicomStudyQueryable = default;
|
IQueryable<NoneDicomStudyView> noneDicomStudyQueryable = default;
|
||||||
|
if (visitTaskId == null || visitTaskId == Guid.Empty)
|
||||||
|
{
|
||||||
if (visitTaskId == null)
|
if (visitTaskId == null)
|
||||||
{
|
{
|
||||||
|
|
||||||
//质控过程中,需要忽略过滤质控设置删除的检查,以及设置删除的文件,质控通过后才
|
//质控过程中,需要忽略过滤质控设置删除的检查,以及设置删除的文件,质控通过后才
|
||||||
noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete)
|
noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete)
|
||||||
.WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId)
|
.WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId)
|
||||||
.WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
|
.WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
|
||||||
|
|
||||||
|
|
||||||
.ProjectTo<NoneDicomStudyView>(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading });
|
.ProjectTo<NoneDicomStudyView>(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading });
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(t => new { t.BlindSubjectCode, t.TrialReadingCriterionId, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync();
|
//靶段标注上传后查看影像
|
||||||
|
|
||||||
|
noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete)
|
||||||
|
.WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
|
||||||
|
.WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId)
|
||||||
|
.ProjectTo<ImageLabelNoneDicomStudyView>(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, isReading = isReading });
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTaskId).Select(t => new { t.BlindSubjectCode, t.TrialReadingCriterionId, t.TrialReadingCriterion.CriterionType, t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync();
|
||||||
|
|
||||||
|
if ((taskinfo.CriterionType == CriterionType.IVUS || taskinfo.CriterionType == CriterionType.OCT) && isImageSegmentLabel == false)
|
||||||
|
{
|
||||||
|
//后处理原始影像预览
|
||||||
|
noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: isViewDelete)
|
||||||
|
.WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
|
||||||
|
.WhereIf(nonedicomStudyId != null, t => t.Id == nonedicomStudyId)
|
||||||
|
.Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true)
|
||||||
|
.ProjectTo<ImageLabelNoneDicomStudyView>(_mapper.ConfigurationProvider, new { isFilterZip = isFilterZip, visiTaskId = visitTaskId, isReading = isReading });
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.TaskNoneDicomFileList.Any(t => t.VisitTaskId == visitTaskId), ignoreQueryFilters: isViewDelete)
|
noneDicomStudyQueryable = _noneDicomStudyRepository.Where(t => t.TaskNoneDicomFileList.Any(t => t.VisitTaskId == visitTaskId), ignoreQueryFilters: isViewDelete)
|
||||||
.WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
|
.WhereIf(isReading, t => t.IsReading && t.IsDeleted == false)
|
||||||
.Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true)
|
.Where(t => taskinfo.IsImageFilter ? ("|" + taskinfo.CriterionModalitys + "|").Contains("|" + t.Modality + "|") : true)
|
||||||
|
|
@ -68,6 +94,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
var list = await noneDicomStudyQueryable.OrderBy(x => x.ImageDate).ThenBy(x => x.CreateTime).ToListAsync();
|
var list = await noneDicomStudyQueryable.OrderBy(x => x.ImageDate).ThenBy(x => x.CreateTime).ToListAsync();
|
||||||
|
|
||||||
var config = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName, AuditState = qcAuditState }).FirstOrDefaultAsync();
|
var config = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName, AuditState = qcAuditState }).FirstOrDefaultAsync();
|
||||||
|
|
|
||||||
|
|
@ -31,6 +31,11 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class ImageLabelNoneDicomStudyView : NoneDicomStudyView
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
///<summary>NoneDicomStudyQuery 列表查询参数模型</summary>
|
///<summary>NoneDicomStudyQuery 列表查询参数模型</summary>
|
||||||
public class NoneDicomStudyQuery
|
public class NoneDicomStudyQuery
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
|
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
|
||||||
using IRaCIS.Core.Application.Contracts.DTO;
|
using IRaCIS.Core.Application.Contracts.DTO;
|
||||||
using IRaCIS.Core.Application.Helper;
|
using IRaCIS.Core.Application.Helper;
|
||||||
|
using IRaCIS.Core.Application.Service.Reading.Dto;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
using MiniExcelLibs.Attributes;
|
using MiniExcelLibs.Attributes;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
|
|
@ -989,6 +990,13 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
/// </summary>
|
/// </summary>
|
||||||
[DictionaryTranslateAttribute("YesOrNo")]
|
[DictionaryTranslateAttribute("YesOrNo")]
|
||||||
public bool IsInvalid { get; set; }
|
public bool IsInvalid { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
public List<GetMedicalReviewDialogOutDto> DialogList { get; set; }
|
||||||
|
|
||||||
|
public string DialogStr => string.Join("\n\n", DialogList.OrderBy(t => t.CreateTime).Select(c => c.CreateUserName + " (" + ExportExcelConverterDate.DateTimeInternationalToString(c.CreateTime) + ") :" + c.ResultContent));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TrialImageDownloadExportDto
|
public class TrialImageDownloadExportDto
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(o => o.MedicalNo, t => t.MapFrom(u => u.VisitTask.Subject.MedicalNo))
|
.ForMember(o => o.MedicalNo, t => t.MapFrom(u => u.VisitTask.Subject.MedicalNo))
|
||||||
.ForMember(o => o.DoctorUserName, t => t.MapFrom(u => u.VisitTask.DoctorUser.UserName))
|
.ForMember(o => o.DoctorUserName, t => t.MapFrom(u => u.VisitTask.DoctorUser.UserName))
|
||||||
.ForMember(o => o.MedicalManagerUserName, t => t.MapFrom(u => u.MedicalManagerUser.UserName))
|
.ForMember(o => o.MedicalManagerUserName, t => t.MapFrom(u => u.MedicalManagerUser.UserName))
|
||||||
.ForMember(o => o.QuestionContent, t => t.MapFrom(u => string.Join("\n\n", u.ReadingMedicalReviewDialogList.Where(t => t.IsHaveQuestion).Select(t => t.Questioning))));
|
.ForMember(o => o.QuestionContent, t => t.MapFrom(u => string.Join("\n\n", u.ReadingMedicalReviewDialogList.Where(t => t.IsHaveQuestion).Select(t => t.Questioning))))
|
||||||
|
.ForMember(o => o.DialogList, t => t.MapFrom(u => u.ReadingMedicalReviewDialogList));
|
||||||
|
|
||||||
CreateMap<VisitTask, TaskMedicalReviewExportDto>()
|
CreateMap<VisitTask, TaskMedicalReviewExportDto>()
|
||||||
.ForMember(o => o.TrialReadingCriterionName, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionName))
|
.ForMember(o => o.TrialReadingCriterionName, t => t.MapFrom(u => u.TrialReadingCriterion.CriterionName))
|
||||||
|
|
@ -754,6 +755,13 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.OrderBy(t => t.CreateTime).ThenBy(t => t.FileName)))
|
.OrderBy(t => t.CreateTime).ThenBy(t => t.FileName)))
|
||||||
.ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode));
|
.ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode));
|
||||||
|
|
||||||
|
CreateMap<NoneDicomStudy, ImageLabelNoneDicomStudyView>()
|
||||||
|
.ForMember(d => d.NoneDicomStudyFileList, u => u.MapFrom(s =>
|
||||||
|
s.ImageLabelNoneDicomFileList.Where(t => isFilterZip ? !t.FileType.Contains(StaticData.FileType.Zip) : true)
|
||||||
|
.Where(t => isReading ? t.IsReading && t.IsDeleted == false : true)
|
||||||
|
.OrderBy(t => t.CreateTime).ThenBy(t => t.FileName)))
|
||||||
|
.ForMember(d => d.CodeView, u => u.MapFrom(s => s.StudyCode));
|
||||||
|
|
||||||
|
|
||||||
CreateMap<SubjectVisitImageBackRecord, ImageBackViewModel>()
|
CreateMap<SubjectVisitImageBackRecord, ImageBackViewModel>()
|
||||||
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
|
.ForMember(d => d.SubjectCode, u => u.MapFrom(s => s.SubjectVisit.Subject.Code))
|
||||||
|
|
|
||||||
|
|
@ -343,6 +343,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
public List<Domain.Models.OSSImageInfo> FileList { get; set; } = new List<Domain.Models.OSSImageInfo>();
|
public List<Domain.Models.OSSImageInfo> FileList { get; set; } = new List<Domain.Models.OSSImageInfo>();
|
||||||
|
|
||||||
|
|
||||||
|
//存储最后翻译的内容
|
||||||
|
public string ResultContent { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -753,10 +753,13 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
/// 直接查询相关所有数据
|
/// 直接查询相关所有数据
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
[HttpGet("{trialId:guid}/{trialSiteSurveyId:guid}")]
|
[HttpGet("{trialId:guid}")]
|
||||||
public async Task<LoginReturnDTO> GetSiteSurveyInfo(Guid trialSiteSurveyId, Guid trialId)
|
public async Task<LoginReturnDTO> GetSiteSurveyInfo(Guid? trialSiteSurveyId, Guid trialId)
|
||||||
{
|
{
|
||||||
|
LoginReturnDTO result = new LoginReturnDTO();
|
||||||
|
|
||||||
|
if (trialSiteSurveyId != null)
|
||||||
|
{
|
||||||
//有可能填表人提交了,但是此时PM手动对人员信息进行了更改,此时需要将数据同步下(选择在这里同步是因为 不想改动 中心人员哪里的两个接口的逻辑)
|
//有可能填表人提交了,但是此时PM手动对人员信息进行了更改,此时需要将数据同步下(选择在这里同步是因为 不想改动 中心人员哪里的两个接口的逻辑)
|
||||||
var find = await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId, true);
|
var find = await _trialSiteSurveyRepository.FirstOrDefaultAsync(t => t.Id == trialSiteSurveyId, true);
|
||||||
|
|
||||||
|
|
@ -769,9 +772,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
await UnlockSyncSiteUserAsync(find.TrialId, find.TrialSiteId, find.Id, userList);
|
await UnlockSyncSiteUserAsync(find.TrialId, find.TrialSiteId, find.Id, userList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
result = await _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId && t.TrialId == trialId).IgnoreQueryFilters()
|
||||||
var result = await _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId && t.TrialId == trialId).IgnoreQueryFilters()
|
|
||||||
.ProjectTo<LoginReturnDTO>(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us }).FirstOrDefaultAsync().IfNullThrowException();
|
.ProjectTo<LoginReturnDTO>(_mapper.ConfigurationProvider, new { isEn_Us = _userInfo.IsEn_Us }).FirstOrDefaultAsync().IfNullThrowException();
|
||||||
|
}
|
||||||
|
|
||||||
var siteSurveryConfig = _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId).IgnoreQueryFilters().Select(t => t.Trial.TrialExtraConfigJsonStr).FirstOrDefault() ?? string.Empty;
|
var siteSurveryConfig = _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId).IgnoreQueryFilters().Select(t => t.Trial.TrialExtraConfigJsonStr).FirstOrDefault() ?? string.Empty;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -224,12 +224,25 @@ namespace IRaCIS.Core.Application.Services
|
||||||
|
|
||||||
var isImageFilter = false;
|
var isImageFilter = false;
|
||||||
var criterionModalitys = "";
|
var criterionModalitys = "";
|
||||||
|
var criterionType = CriterionType.NoCriterion;
|
||||||
|
|
||||||
|
var isVisitTask = false;
|
||||||
|
|
||||||
|
bool? isImageSegmentLabel = null;
|
||||||
if (visitTaskId != null && visitTaskId != Guid.Empty)
|
if (visitTaskId != null && visitTaskId != Guid.Empty)
|
||||||
{
|
{
|
||||||
|
isVisitTask = true;
|
||||||
var info = await _visitTaskRepository.Where(t => t.Id == visitTaskId)
|
var info = await _visitTaskRepository.Where(t => t.Id == visitTaskId)
|
||||||
.Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys }).FirstNotNullAsync();
|
.Select(t => new { t.TrialReadingCriterion.IsImageFilter, t.TrialReadingCriterion.CriterionModalitys, t.TrialReadingCriterion.CriterionType }).FirstNotNullAsync();
|
||||||
isImageFilter = info.IsImageFilter;
|
isImageFilter = info.IsImageFilter;
|
||||||
criterionModalitys = info.CriterionModalitys;
|
criterionModalitys = info.CriterionModalitys;
|
||||||
|
|
||||||
|
criterionType = info.CriterionType;
|
||||||
|
|
||||||
|
if (criterionType == CriterionType.OCT || criterionType == CriterionType.IVUS)
|
||||||
|
{
|
||||||
|
isImageSegmentLabel = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -237,6 +250,8 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var studyList = await _dicomStudyRepository.Where(t => t.TrialId == trialId && t.SubjectVisitId == sujectVisitId).IgnoreQueryFilters()
|
var studyList = await _dicomStudyRepository.Where(t => t.TrialId == trialId && t.SubjectVisitId == sujectVisitId).IgnoreQueryFilters()
|
||||||
.Where(t => isImageFilter ? ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
.Where(t => isImageFilter ? ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|") : true)
|
||||||
.WhereIf(isReading == 1 || isQCFinished, s => s.IsDeleted == false)
|
.WhereIf(isReading == 1 || isQCFinished, s => s.IsDeleted == false)
|
||||||
|
//预览靶段标注上传的影像 影像后处理 上传了新的影像 还要原始dsa
|
||||||
|
.WhereIf(isImageSegmentLabel == true && isVisitTask && (criterionType == CriterionType.OCT || criterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT")
|
||||||
.Select(k => new VisitStudyDTO()
|
.Select(k => new VisitStudyDTO()
|
||||||
{
|
{
|
||||||
InstanceCount = k.InstanceCount,
|
InstanceCount = k.InstanceCount,
|
||||||
|
|
@ -287,12 +302,29 @@ namespace IRaCIS.Core.Application.Services
|
||||||
t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
t.InstanceCount = t.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//预览靶段标注上传的影像
|
||||||
|
if (isImageSegmentLabel == true && isVisitTask)
|
||||||
|
{
|
||||||
|
var taskStudyList = await _taskStudyRepository.Where(t => t.SubjectVisitId == sujectVisitId)
|
||||||
|
.WhereIf(isImageFilter, t => ("|" + criterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))
|
||||||
|
.ProjectTo<VisitStudyDTO>(_mapper.ConfigurationProvider).ToListAsync();
|
||||||
|
|
||||||
|
foreach (var study in taskStudyList)
|
||||||
|
{
|
||||||
|
study.SeriesList = study.SeriesList.OrderBy(s => s.SeriesNumber).ThenBy(s => s.SeriesTime).ToList();
|
||||||
|
|
||||||
|
study.InstanceCount = study.SeriesList.SelectMany(t => t.InstanceInfoList).Count();
|
||||||
|
}
|
||||||
|
|
||||||
|
studyList.AddRange(taskStudyList);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return studyList.Where(x => x.SeriesList.Count() > 0).ToList();
|
return studyList.Where(x => x.SeriesList.Count() > 0).ToList();
|
||||||
|
|
||||||
//return ResponseOutput.Ok(studyList.Where(t => t.SeriesList.Count > 0).ToList());
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -484,7 +516,7 @@ namespace IRaCIS.Core.Application.Services
|
||||||
.WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))
|
.WhereIf(taskInfo.IsImageFilter == true, t => ("|" + taskInfo.CriterionModalitys + "|").Contains("|" + t.ModalityForEdit + "|"))
|
||||||
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
.WhereIf(isManualGenerate, t => t.SubjectCriteriaEvaluationVisitStudyFilterList.Any(t => t.TrialReadingCriterionId == taskInfo.TrialReadingCriterionId && t.IsConfirmed && t.IsReading))
|
||||||
//影像后处理 上传了新的影像 还要原始dsa
|
//影像后处理 上传了新的影像 还要原始dsa
|
||||||
.WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA")
|
.WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType == CriterionType.OCT || taskInfo.CriterionType == CriterionType.IVUS), t => t.ModalityForEdit == "XA" || t.ModalityForEdit == "OCT")
|
||||||
.WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType != CriterionType.OCT || taskInfo.CriterionType != CriterionType.IVUS), t => false)
|
.WhereIf(taskInfo.TaskStudyCount > 0 && (taskInfo.CriterionType != CriterionType.OCT || taskInfo.CriterionType != CriterionType.IVUS), t => false)
|
||||||
.Select(k => new VisitStudyDTO()
|
.Select(k => new VisitStudyDTO()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -544,6 +544,10 @@ namespace IRaCIS.Core.Domain.Share
|
||||||
|
|
||||||
TumorCDISC_Export=20,
|
TumorCDISC_Export=20,
|
||||||
|
|
||||||
|
IVUS_CDISC_Export = 21,
|
||||||
|
|
||||||
|
OCT_CDISC_Export = 22,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -2383,10 +2387,33 @@ public enum SUVChangeVSBaseline
|
||||||
MaxAvgLipidAngle = 1020,
|
MaxAvgLipidAngle = 1020,
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 待定指标
|
/// 斑块类型
|
||||||
/// </summary>
|
/// </summary>
|
||||||
Undetermined = 1021,
|
Undetermined = 1021,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 巨噬细胞浸润
|
||||||
|
/// </summary>
|
||||||
|
MacrophageInfiltration = 1022,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 巨噬细胞延伸角度
|
||||||
|
/// </summary>
|
||||||
|
MacrophageExtensionAngle = 1023,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 微通道
|
||||||
|
/// </summary>
|
||||||
|
Microchannels = 1024,
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 胆固醇结晶
|
||||||
|
/// </summary>
|
||||||
|
CholesterolCrystallization = 1025,
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 第一次测量
|
/// 第一次测量
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
|
using IRaCIS.Core.API._ServiceExtensions.NewtonsoftJson;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
|
||||||
|
|
@ -75,6 +76,12 @@ namespace IRaCIS.Core.Infrastructure.Extention
|
||||||
|
|
||||||
foreach (PropertyInfo property in properties)
|
foreach (PropertyInfo property in properties)
|
||||||
{
|
{
|
||||||
|
if (typeof(IEnumerable).IsAssignableFrom(property.PropertyType)
|
||||||
|
&& property.PropertyType != typeof(string))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
string propertyName = property.Name;
|
string propertyName = property.Name;
|
||||||
object propertyValue = property.GetValue(obj);
|
object propertyValue = property.GetValue(obj);
|
||||||
// 如果属性的类型是枚举,将其值保留为整数
|
// 如果属性的类型是枚举,将其值保留为整数
|
||||||
|
|
|
||||||
|
|
@ -312,6 +312,10 @@ public static class StaticData
|
||||||
|
|
||||||
public const string TumorCDISC_Export = "TumorCDISC_Export";
|
public const string TumorCDISC_Export = "TumorCDISC_Export";
|
||||||
|
|
||||||
|
public const string IVUS_CDISC_Export = "IVUS_CDISC_Export";
|
||||||
|
|
||||||
|
public const string OCT_CDISC_Export = "OCT_CDISC_Export";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue