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 passing Details

Test_IRC_Net8
hang 2025-12-19 17:06:43 +08:00
commit 3ef3586bf7
7 changed files with 75 additions and 47 deletions

View File

@ -100,11 +100,11 @@ namespace IRaCIS.Core.Application.Helper
var dicomFile = new DicomFile(dataset); var dicomFile = new DicomFile(dataset);
// 文件名递增格式IM_00001, IM_00002, ... // 文件名递增格式IM_00001, IM_00002, ...
string filename = $@"IMAGE/IM_{index:D5}"; // :D5 表示补足5位 string filename = $@"IMAGE\IM_{index:D5}"; // :D5 表示补足5位
mappings.Add($"{filename} => {item.InstanceId}"); mappings.Add($"{filename} => {item.InstanceId}");
dic.Add(item.InstanceId.ToString(), Path.GetFileName(filename)); dic.Add(item.InstanceId.ToString(), filename.TrimEnd('/', '\\').Split('/', '\\').Last());
dicomDir.AddFile(dicomFile, filename); dicomDir.AddFile(dicomFile, filename);

View File

@ -1137,6 +1137,8 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var dirDic = new Dictionary<string, string>(); var dirDic = new Dictionary<string, string>();
#region DIR处理导出文件名并将对应关系上传到OSS里面存储 #region DIR处理导出文件名并将对应关系上传到OSS里面存储
var info = await _subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId).Select(t => new { t.Trial.TrialCode }).FirstOrDefaultAsync();
//有传输语法值的导出 才生成DIR //有传输语法值的导出 才生成DIR
if (_subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId).SelectMany(t => t.StudyList.SelectMany(t => t.InstanceList)).All(c => c.TransferSytaxUID != string.Empty)) if (_subjectVisitRepository.Where(t => t.Id == inQuery.SubjectVisitId).SelectMany(t => t.StudyList.SelectMany(t => t.InstanceList)).All(c => c.TransferSytaxUID != string.Empty))
{ {
@ -1148,7 +1150,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
DicomStudyId = t.DicomStudy.Id, DicomStudyId = t.DicomStudy.Id,
PatientId = t.DicomStudy.PatientId, PatientId = info.TrialCode + "-" + t.DicomStudy.PatientId,
PatientName = t.DicomStudy.PatientName, PatientName = t.DicomStudy.PatientName,
PatientBirthDate = t.DicomStudy.PatientBirthDate, PatientBirthDate = t.DicomStudy.PatientBirthDate,
PatientSex = t.DicomStudy.PatientSex, PatientSex = t.DicomStudy.PatientSex,
@ -1508,7 +1510,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
public async Task<IResponseOutput> GetIRReadingDownloadStudyInfo(IRDownloadQuery inQuery) public async Task<IResponseOutput> GetIRReadingDownloadStudyInfo(IRDownloadQuery inQuery)
{ {
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.TrialId, t.IsReadingTaskViewInOrder }).FirstNotNullAsync(); .Select(t => new { t.IsImageFilter, t.CriterionModalitys, t.TrialId, t.IsReadingTaskViewInOrder, t.Trial.TrialCode }).FirstNotNullAsync();
var isQueryDicom = inQuery.DicomStudyIdList.Count > 0; var isQueryDicom = inQuery.DicomStudyIdList.Count > 0;
var isQueryNoneDicom = inQuery.NoneDicomStudyIdList.Count > 0; var isQueryNoneDicom = inQuery.NoneDicomStudyIdList.Count > 0;
@ -1539,7 +1541,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
DicomStudyId = t.DicomStudy.Id, DicomStudyId = t.DicomStudy.Id,
PatientId = t.DicomStudy.PatientId, PatientId = info.TrialCode + "-" + t.DicomStudy.PatientId,
PatientName = t.DicomStudy.PatientName, PatientName = t.DicomStudy.PatientName,
PatientBirthDate = t.DicomStudy.PatientBirthDate, PatientBirthDate = t.DicomStudy.PatientBirthDate,
PatientSex = t.DicomStudy.PatientSex, PatientSex = t.DicomStudy.PatientSex,
@ -1579,7 +1581,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
DicomStudyId = t.TaskStudy.Id, DicomStudyId = t.TaskStudy.Id,
PatientId = t.TaskStudy.PatientId, PatientId = info.TrialCode + "-" + t.TaskStudy.PatientId,
PatientName = t.TaskStudy.PatientName, PatientName = t.TaskStudy.PatientName,
PatientBirthDate = t.TaskStudy.PatientBirthDate, PatientBirthDate = t.TaskStudy.PatientBirthDate,
PatientSex = t.TaskStudy.PatientSex, PatientSex = t.TaskStudy.PatientSex,
@ -2248,7 +2250,6 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
} }
else else
{ {
#region 在下载前先处理DIR文件 #region 在下载前先处理DIR文件
//有传输语法值的导出 才生成DIR //有传输语法值的导出 才生成DIR
@ -2263,7 +2264,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
DicomStudyId = t.DicomStudy.Id, DicomStudyId = t.DicomStudy.Id,
PatientId = t.DicomStudy.PatientId, PatientId = t.Trial.TrialCode + "-" + t.DicomStudy.PatientId,
PatientName = t.DicomStudy.PatientName, PatientName = t.DicomStudy.PatientName,
PatientBirthDate = t.DicomStudy.PatientBirthDate, PatientBirthDate = t.DicomStudy.PatientBirthDate,
PatientSex = t.DicomStudy.PatientSex, PatientSex = t.DicomStudy.PatientSex,

View File

@ -3780,7 +3780,7 @@ namespace IRaCIS.Core.Application.Service
task.ReadingVersionEnum = criterionInfo.ReadingVersionEnum; task.ReadingVersionEnum = criterionInfo.ReadingVersionEnum;
task.ReadingToolList = criterionInfo.ReadingToolList; task.ReadingToolList = criterionInfo.ReadingToolList;
task.IsExistUnprocessedFeedback = await _userFeedBackRepository.AnyAsync(x => x.VisitTaskId == task.VisitTaskId && x.State == 0); task.IsExistUnprocessedFeedback = await _userFeedBackRepository.AnyAsync(x => x.VisitTaskId == task.VisitTaskId && x.State == 0);
task.IsViewStudyPart = visitTaskInfo.ReadingCategory != ReadingCategory.Judge && visitTaskInfo.IsViewStudyPart; task.IsViewStudyPart = visitTaskInfo.IsViewStudyPart;
task.IsReadKeyFile = await _criterionKeyFileReadRepository.AnyAsync(x => x.IdentityUserId == _userInfo.IdentityUserId && x.TrialCriterionId == task.TrialReadingCriterionId); task.IsReadKeyFile = await _criterionKeyFileReadRepository.AnyAsync(x => x.IdentityUserId == _userInfo.IdentityUserId && x.TrialCriterionId == task.TrialReadingCriterionId);
task.IsHaveKeyFile = await _trialCriterionKeyFileRepository.AnyAsync(x => x.TrialCriterionId == task.TrialReadingCriterionId); task.IsHaveKeyFile = await _trialCriterionKeyFileRepository.AnyAsync(x => x.TrialCriterionId == task.TrialReadingCriterionId);
// 添加默认答案 // 添加默认答案

View File

@ -462,38 +462,43 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}; };
List<IVUSMeasuredValue> measuredValueList = new List<IVUSMeasuredValue>(); List<IVUSMeasuredValue> measuredValueList = new List<IVUSMeasuredValue>();
var errorRow = new List<int> { };
for (int i = 3; i < dataTable.Rows.Count; i++)
for (int i = 3; i < dataTable.Rows.Count; i++) {
IVUSMeasuredValue iVUSMeasuredValue = new IVUSMeasuredValue() { };
try
{ {
IVUSMeasuredValue iVUSMeasuredValue = new IVUSMeasuredValue() { }; iVUSMeasuredValue = new IVUSMeasuredValue()
try
{
iVUSMeasuredValue = new IVUSMeasuredValue()
{
PlaqueNum = int.Parse(dataTable.Rows[i]["A"].ToString()),
Emm = getdecimalData(dataTable.Rows[i]["B"].ToString()),
Lumen = getdecimalData(dataTable.Rows[i]["C"].ToString()),
};
}
catch (Exception)
{ {
PlaqueNum = int.Parse(dataTable.Rows[i]["A"].ToString()),
Emm = getdecimalData(dataTable.Rows[i]["B"].ToString()),
Lumen = getdecimalData(dataTable.Rows[i]["C"].ToString()),
};
}
catch (Exception)
{
throw new BusinessValidationFailedException(_localizer["IVUS_UplpadDataError"]); errorRow.Add(i);
}
if (iVUSMeasuredValue.Emm <= iVUSMeasuredValue.Lumen)
{
throw new BusinessValidationFailedException(_localizer["IVUS_EmmBiggerThenLumen"]);
}
measuredValueList.Add(iVUSMeasuredValue);
} }
List<int> nums=new List<int>() { 1,2,3};
if(measuredValueList.Any(x=> !nums.Contains(x.PlaqueNum))) if (iVUSMeasuredValue.Emm <= iVUSMeasuredValue.Lumen)
{ {
throw new BusinessValidationFailedException(_localizer["IVUSOCT_PlaqueNum123"]); throw new BusinessValidationFailedException(_localizer["IVUS_EmmBiggerThenLumen"]);
} }
measuredValueList = measuredValueList.OrderBy(x => x.PlaqueNum).ToList(); measuredValueList.Add(iVUSMeasuredValue);
}
if (errorRow.Count() > 0)
{
var errorRows= string.Join(',', errorRow.Select(i => i.ToString()));
throw new BusinessValidationFailedException(_localizer["Service_TemplateException", errorRows]);
}
List<int> nums = new List<int>() { 1, 2, 3 };
if (measuredValueList.Any(x => !nums.Contains(x.PlaqueNum)))
{
throw new BusinessValidationFailedException(_localizer["IVUSOCT_PlaqueNum123"]);
}
measuredValueList = measuredValueList.OrderBy(x => x.PlaqueNum).ToList();
var questionInfo = await _readingQuestionTrialRepository.Where(x =>x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId&& x.LesionType == LesionType.MatchValues).FirstNotNullAsync(); var questionInfo = await _readingQuestionTrialRepository.Where(x =>x.ReadingQuestionCriterionTrialId == taskinfo.TrialReadingCriterionId&& x.LesionType == LesionType.MatchValues).FirstNotNullAsync();

View File

@ -316,10 +316,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
List<OCTFCTUploadData> measuredValueList = new List<OCTFCTUploadData>(); List<OCTFCTUploadData> measuredValueList = new List<OCTFCTUploadData>();
var errorRow = new List<int> { };
try for (int i = 3; i < dataTable.Rows.Count; i++)
{ {
for (int i = 3; i < dataTable.Rows.Count; i++) try
{ {
measuredValueList.Add(new OCTFCTUploadData() measuredValueList.Add(new OCTFCTUploadData()
{ {
@ -327,20 +328,28 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
FirstData = int.Parse(dataTable.Rows[i]["B"].ToString()), FirstData = int.Parse(dataTable.Rows[i]["B"].ToString()),
SecondData = int.Parse(dataTable.Rows[i]["C"].ToString()), SecondData = int.Parse(dataTable.Rows[i]["C"].ToString()),
ThirdData = int.Parse(dataTable.Rows[i]["D"].ToString()), ThirdData = int.Parse(dataTable.Rows[i]["D"].ToString()),
MacrophageInfiltrationMeasurement= dataTable.Rows[i]["E"].ToString()??string.Empty, MacrophageInfiltrationMeasurement = dataTable.Rows[i]["E"].ToString() ?? string.Empty,
MacrophageInfiltrationAngle = dataTable.Rows[i]["F"].ToString() ?? string.Empty, MacrophageInfiltrationAngle = dataTable.Rows[i]["F"].ToString() ?? string.Empty,
MicrochannelMeasurement = dataTable.Rows[i]["G"].ToString() ?? string.Empty, MicrochannelMeasurement = dataTable.Rows[i]["G"].ToString() ?? string.Empty,
CholesterolCrystalMeasurement = dataTable.Rows[i]["H"].ToString() ?? string.Empty, CholesterolCrystalMeasurement = dataTable.Rows[i]["H"].ToString() ?? string.Empty,
LumenAreaMeasurement = dataTable.Rows[i]["I"].ToString() ?? string.Empty, LumenAreaMeasurement = dataTable.Rows[i]["I"].ToString() ?? string.Empty,
}); });
} }
measuredValueList = measuredValueList.OrderBy(x => x.PlaqueNum).ToList(); catch (Exception)
{
errorRow.Add(i);
}
} }
catch (Exception) measuredValueList = measuredValueList.OrderBy(x => x.PlaqueNum).ToList();
if (errorRow.Count() > 0)
{ {
throw new BusinessValidationFailedException(_localizer["IVUS_UplpadDataError"]); var errorRows = string.Join(',', errorRow.Select(i => i.ToString()));
throw new BusinessValidationFailedException(_localizer["Service_TemplateException", errorRows]);
} }
List<int> nums = new List<int>() { 1, 2, 3 }; List<int> nums = new List<int>() { 1, 2, 3 };
@ -631,25 +640,33 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
} }
List<OCTFCTUploadData> measuredValueList = new List<OCTFCTUploadData>(); List<OCTFCTUploadData> measuredValueList = new List<OCTFCTUploadData>();
var errorRow = new List<int> { };
try for (int i = 3; i < dataTable.Rows.Count; i++)
{ {
for (int i = 3; i < dataTable.Rows.Count; i++) try
{ {
measuredValueList.Add(new OCTFCTUploadData() measuredValueList.Add(new OCTFCTUploadData()
{ {
PlaqueNum = int.Parse(dataTable.Rows[i]["A"].ToString()), PlaqueNum = int.Parse(dataTable.Rows[i]["A"].ToString()),
FirstData = int.Parse(dataTable.Rows[i]["B"].ToString()), FirstData = int.Parse(dataTable.Rows[i]["B"].ToString()),
}); });
} }
catch (Exception)
{
measuredValueList = measuredValueList.OrderBy(x => x.PlaqueNum).ToList(); errorRow.Add(i);
}
} }
catch (Exception)
measuredValueList = measuredValueList.OrderBy(x => x.PlaqueNum).ToList();
if (errorRow.Count() > 0)
{ {
throw new BusinessValidationFailedException(_localizer["IVUS_UplpadDataError"]); var errorRows = string.Join(',', errorRow.Select(i => i.ToString()));
throw new BusinessValidationFailedException(_localizer["Service_TemplateException", errorRows]);
} }

View File

@ -13,6 +13,10 @@ public class DicomInstance : BaseFullDeleteAuditEntity, IEntitySeqId
[ForeignKey("StudyId")] [ForeignKey("StudyId")]
public DicomStudy DicomStudy { get; set; } public DicomStudy DicomStudy { get; set; }
[JsonIgnore]
[ForeignKey("TrialId")]
public Trial Trial { get; set; }
[JsonIgnore] [JsonIgnore]
public List<ReadingTableAnswerRowInfo> ReadingTableAnswerRowInfoList { get; set; } public List<ReadingTableAnswerRowInfo> ReadingTableAnswerRowInfoList { get; set; }
#endregion #endregion

View File

@ -21,6 +21,7 @@ public class DicomStudy : BaseFullDeleteAuditEntity, IEntitySeqId
[ForeignKey("SubjectVisitId")] [ForeignKey("SubjectVisitId")]
public SubjectVisit SubjectVisit { get; set; } public SubjectVisit SubjectVisit { get; set; }
[JsonIgnore] [JsonIgnore]
public List<ReadingClinicalData> ReadingClinicalDataList { get; set; } public List<ReadingClinicalData> ReadingClinicalDataList { get; set; }