Compare commits

..

25 Commits

Author SHA1 Message Date
hang 799c579121 质控 -ivus 空检查过滤
continuous-integration/drone/push Build is running Details
2026-07-29 15:08:06 +08:00
hang 4841a9ac1e Merge branch 'Test_IRC_Net10' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net10
continuous-integration/drone/push Build is running Details
2026-07-29 11:47:27 +08:00
hang 287dd5d0bf 导表拆分查询修改 2026-07-29 11:47:24 +08:00
he 32e23ca0a2 修改字典 加英文 2026-07-29 09:34:37 +08:00
he b7d7b8c815 字典修改
continuous-integration/drone/push Build is passing Details
2026-07-29 09:19:22 +08:00
he 96fd034c5a 必填修改
continuous-integration/drone/push Build is running Details
2026-07-28 14:32:21 +08:00
he 6118e0a4f8 重新发布
continuous-integration/drone/push Build is running Details
2026-07-27 14:06:40 +08:00
he c00d1fb89c 重新发布 2026-07-27 14:03:54 +08:00
he 900f4dfb64 Merge branch 'Test_IRC_Net10' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net10
continuous-integration/drone/push Build is running Details
2026-07-27 13:53:14 +08:00
he 11f8c9ca56 获取单个问题 2026-07-27 13:53:11 +08:00
hang 026f63c730 Merge branch 'Test_IRC_Net10' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net10
continuous-integration/drone/push Build is passing Details
2026-07-27 13:43:00 +08:00
hang e322952ff4 IR下载增加字段记录 2026-07-27 13:42:59 +08:00
he e762da2bf5 IUVS和OCT修改
continuous-integration/drone/push Build is running Details
2026-07-27 13:39:28 +08:00
he 822a4331aa 合并 2026-07-27 11:00:19 +08:00
he 2b2ba2a551 配置文件修改 2026-07-27 10:57:29 +08:00
hang 317fbc2ea7 修改生产配置文件
continuous-integration/drone/push Build is running Details
2026-07-27 10:53:20 +08:00
he 0cd9d666c1 Merge branch 'Test_IRC_Net10' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net10
continuous-integration/drone/push Build is running Details
2026-07-20 16:05:21 +08:00
he 187ea3b92f 配置文件修改 2026-07-20 16:05:18 +08:00
hang d2beb399dd 阅片任务相关 访视信息赋值
continuous-integration/drone/push Build is running Details
2026-07-17 11:08:13 +08:00
he 15623ab515 配置文件修改
continuous-integration/drone/push Build is pending Details
2026-07-16 14:24:03 +08:00
he f771a23c2a Merge branch 'Test_IRC_Net10' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net10 2026-07-16 14:23:04 +08:00
he f20b8708a3 参数修改 2026-07-16 14:23:02 +08:00
hang 536ed731ed 一致性核查绑定模板修改
continuous-integration/drone/push Build is running Details
2026-07-14 17:27:43 +08:00
he 5b10619460 消息通知
continuous-integration/drone/push Build is running Details
2026-07-14 17:12:38 +08:00
he 311ac85419 重复请求code改为-4 取消Get类型验证
continuous-integration/drone/push Build is running Details
2026-07-14 16:58:17 +08:00
25 changed files with 22745 additions and 64 deletions

View File

@ -63,8 +63,8 @@
}
},
"ConnectionStrings": {
"RemoteNew": "Server=106.14.89.110,1435;Database=Test_Rayplus;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=106.14.89.110,1435;Database=Test_Rayplus_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
"RemoteNew": "Server=prod_mssql_standard,1433;Database=Prod_Rayplus;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true",
"Hangfire": "Server=prod_mssql_standard,1433;Database=Prod_Rayplus_Hangfire;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true"
},
"DicomSCPServiceConfig": {
"CalledAEList": [

View File

@ -9,6 +9,7 @@
<Company>上海展影医疗科技有限公司</Company>
<Product>IRC影像系统 (EICS)</Product>
<Copyright>上海展影医疗科技有限公司版权所有</Copyright>
<NoWarn>$(NoWarn);NU1903</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">

View File

@ -34,6 +34,15 @@
},
"applicationUrl": "http://0.0.0.0:6100"
},
"IRaCIS.Uat_Rayplus": {
"commandName": "Project",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Uat_Rayplus",
"ASPNETCORE_OpenSwagger": "true"
},
"applicationUrl": "http://0.0.0.0:6100"
},
"IRaCIS.Test_IRC_PGSQL": {
"commandName": "Project",
"launchBrowser": true,

View File

@ -9,7 +9,7 @@
"ConnectionStrings": {
//"RemoteNew": "Server=10.10.10.49,1434;Database=Prod_IRC;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true",
//"Hangfire": "Server=10.10.10.49,1434;Database=Prod_IRC_Hangfire;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true"
"RemoteNew": "Server=101.132.193.237,1433;Database=Prod_IRC_pidr_restore_2;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"RemoteNew": "Server=prod_mssql_standard,1433;Database=Prod_IRC;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true",
"Hangfire": "Server=prod_mssql_standard,1433;Database=Prod_IRC_Hangfire;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true"
},
"WeComNoticeConfig": {

View File

@ -7,8 +7,8 @@
}
},
"ConnectionStrings": {
"RemoteNew": "Server=101.132.253.119,1435;Database=Uat_Rayplus;User ID=sa;Password=xc@123456;TrustServerCertificate=true",
"Hangfire": "Server=101.132.253.119,1435;Database=Uat_Rayplus_Hangfire;User ID=sa;Password=xc@123456;TrustServerCertificate=true"
"RemoteNew": "Server=prod_mssql_standard,1433;Database=Prod_Rayplus;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true",
"Hangfire": "Server=prod_mssql_standard,1433;Database=Prod_Rayplus_Hangfire;User ID=sa;Password=zhanying@2021;TrustServerCertificate=true"
},
"WeComNoticeConfig": {
"IsOpenWeComNotice": true,
@ -110,9 +110,9 @@
"Imap": "imap.qiye.aliyun.com",
"ImapPort": 993,
"FromEmail": "irc@mail.rayplus.net",
"FromName": "Uat RayPlus Imaging System",
"FromName": "RayPlus Imaging System",
"AuthorizationCode": "QWE1zxcv7632",
"SiteUrl": "https://irc.uat.rayplus.net/login",
"SiteUrl": "https://irc.rayplus.net/login",
"PlatformName": "RayPlus",
"PlatformNameCN": "睿佳影像云平台",
@ -130,7 +130,7 @@
"SystemPacsConfig": {
"Port": "11113",
"IP": "101.132.253.119"
"IP": "47.117.165.18"
},
"RequestDuplicationOptions": {
"IsEnabled": true,

View File

@ -143,7 +143,7 @@ namespace IRaCIS.Core.Application.BusinessFilter.LegacyController
var uri = new Uri(_config["SystemEmailSendConfig:SiteUrl"]);
var baseUrl = uri.GetLeftPart(UriPartial.Authority);
var userList = _config.GetSection("WeComNoticeConfig:APINoticeUserList").Get<string[]>();
var userList = _config.GetSection("WeComNoticeConfig:VueNoticeUserList").Get<string[]>();
var request = accessor?.HttpContext?.Request;

View File

@ -10,6 +10,7 @@
<OutputPath>..\bin\</OutputPath>
<DocumentationFile>.\IRaCIS.Core.Application.xml</DocumentationFile>
<NoWarn>1701;1702;1591</NoWarn>
<NoWarn>$(NoWarn);NU1903</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">

View File

@ -2940,7 +2940,7 @@
<param name="modality"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.DownloadAndUploadService.DownloadImageSuccess(System.Guid)">
<member name="M:IRaCIS.Core.Application.Service.ImageAndDoc.DownloadAndUploadService.DownloadImageSuccess(System.Guid,System.Nullable{System.Guid})">
<summary>
影像下载成功回调
</summary>
@ -9013,6 +9013,11 @@
外弹力膜面积- 管腔面积
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.IVUSMeasuredValue.PlaqueRupture">
<summary>
斑块破裂
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.OCTFCTUploadData.FrameNumber">
<summary>
帧数
@ -9063,6 +9068,16 @@
脂质角度
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.OCTFCTUploadData.PlaqueRupture">
<summary>
斑块破裂
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.OCTFCTUploadData.PlaqueHealing">
<summary>
斑块愈合
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.OCTInfo.PlaqueNum">
<summary>
斑块编号
@ -17543,17 +17558,17 @@
</member>
<member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Question">
<summary>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
质疑
</summary>
</member>
<member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Consistency">
<summary>
һ<EFBFBD><EFBFBD><EFBFBD>Ժ˲<EFBFBD>
一致性核查
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.CopyFrontAuditConfigItemDto">
<summary>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
复制
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.SystemNoticeView">

View File

@ -64,7 +64,7 @@ namespace IRaCIS.Core.Application.MassTransit.Command
//[Required(ErrorMessage = "受试者筛选号不能为空")]
//[ImporterHeader(Name = "Subject ID", AutoTrim = true)]
[ExcelColumnName("Subject ID")]
[ExcelColumnName("Participant ID")]
public string SubjectCode { get; set; } = string.Empty;
//[Required(ErrorMessage = "访视名称不能为空")]

View File

@ -2930,7 +2930,7 @@ namespace IRaCIS.Core.Application.Service.Common
arbitrationRule = criterion.ArbitrationRule,
trialReadingCriterionId = inQuery.TrialReadingCriterionId,
isEn_Us = _userInfo.IsEn_Us
}).ToListAsync();
}).AsSplitQuery().ToListAsync();
}
//肿瘤标准 病灶明细表 按照病灶级别 (OCT 暂时不删除,先看是否能覆盖)
@ -2949,7 +2949,7 @@ namespace IRaCIS.Core.Application.Service.Common
arbitrationRule = criterion.ArbitrationRule,
trialReadingCriterionId = inQuery.TrialReadingCriterionId,
isEn_Us = _userInfo.IsEn_Us
}).ToListAsync();
}).AsSplitQuery().ToListAsync();
}
// 非肿瘤标准 包括自定义,以及系统非肿瘤 会配置到表格层级 问题名称是 表格名称_表格子问题名
@ -2967,7 +2967,7 @@ namespace IRaCIS.Core.Application.Service.Common
arbitrationRule = criterion.ArbitrationRule,
trialReadingCriterionId = inQuery.TrialReadingCriterionId,
isEn_Us = _userInfo.IsEn_Us
}).ToListAsync();
}).AsSplitQuery().ToListAsync();
}
// CDISC 导出 只管到 外层问题层级 和阅片结果表是保持一致
@ -2985,7 +2985,7 @@ namespace IRaCIS.Core.Application.Service.Common
arbitrationRule = criterion.ArbitrationRule,
trialReadingCriterionId = inQuery.TrialReadingCriterionId,
isEn_Us = _userInfo.IsEn_Us
}).ToListAsync();
}).AsSplitQuery().ToListAsync();
}
else
{
@ -2997,7 +2997,7 @@ namespace IRaCIS.Core.Application.Service.Common
arbitrationRule = criterion.ArbitrationRule,
trialReadingCriterionId = inQuery.TrialReadingCriterionId,
isEn_Us = _userInfo.IsEn_Us
}).ToListAsync();
}).AsSplitQuery().ToListAsync();
}
}

View File

@ -58,7 +58,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
{
//subject 随机阅片 或者无序 有上传 才处理任务编号
if (_visitTaskRepository.Any(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId &&
(t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom
(t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom
//||(t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.Random && t.TrialReadingCriterion.ImageDownloadEnum != ReadingImageDownload.None)
)))
{
@ -119,6 +119,12 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var subjectCode = string.Empty;
var subjectId = inQuery.SubjectId;
bool? isIRImageDownloaded = null;
if(inQuery.VisitTaskId != null)
{
isIRImageDownloaded= _visitTaskRepository.Where(t => t.Id == inQuery.VisitTaskId).Select(t => t.IsIRImageDownloaded).FirstOrDefault();
}
if (criterionInfo.IsReadingTaskViewInOrder == ReadingOrder.Random)
{
@ -325,7 +331,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
}
return ResponseOutput.Ok(list, new { TrialModality = criterionInfo.Modalitys , IsReadingTaskViewInOrder = criterionInfo.IsReadingTaskViewInOrder });
return ResponseOutput.Ok(list, new { TrialModality = criterionInfo.Modalitys, IsReadingTaskViewInOrder = criterionInfo.IsReadingTaskViewInOrder, IsIRImageDownloaded= isIRImageDownloaded });
}
@ -899,6 +905,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var subjectCode = inQuery.SubjectCode;
var subjectId = inQuery.SubjectId;
var doctorUserId = _userInfo.UserRoleId;
bool? isIRImageDownloaded = null;
if (inQuery.VisitTaskId != null)
{
@ -910,18 +917,20 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
SubjectCode = t.IsAnalysisCreate ? t.BlindSubjectCode : t.Subject.Code,
SubjectId = t.SubjectId,
t.DoctorUserId,
t.IsAnalysisCreate
t.IsAnalysisCreate,
t.IsIRImageDownloaded,
}).FirstNotNullAsync();
subjectId = taskInfo.SubjectId;
subjectCode = taskInfo.SubjectCode;
doctorUserId = (Guid)taskInfo.DoctorUserId!;
isIRImageDownloaded = taskInfo.IsIRImageDownloaded;
}
var info = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId)
.Select(t => new { t.IsImageFilter, t.CriterionType, t.TrialId, 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();
var config = await _subjectRepository.Where(t => t.Id == subjectId).Select(t => new { t.Trial.ImageFormatList, t.Trial.StudyNameList, t.Trial.IsShowStudyName, IsIRImageDownloaded= isIRImageDownloaded }).FirstOrDefaultAsync();
//靶段标注上传,查看访视级别,上传绑定访视级别
@ -1875,10 +1884,15 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
/// </summary>
/// <param name="trialImageDownloadId"></param>
/// <returns></returns>
public async Task<IResponseOutput> DownloadImageSuccess(Guid trialImageDownloadId)
public async Task<IResponseOutput> DownloadImageSuccess(Guid trialImageDownloadId, Guid? visitTaskId)
{
await _trialImageDownloadRepository.UpdatePartialFromQueryAsync(t => t.Id == trialImageDownloadId, u => new TrialImageDownload()
{ DownloadEndTime = DateTime.Now, IsSuccess = true }, true);
if (visitTaskId != null)
{
await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => t.Id == visitTaskId.Value, u => new VisitTask() { IsIRImageDownloaded = true });
}
return ResponseOutput.Ok();
}

View File

@ -455,6 +455,15 @@ namespace IRaCIS.Core.Application.Image.QA
}
var isFilterIVUSNoneDicom = false;
//ivus-在访视的时候visitTaskId==null 需要过滤掉空检查 ,但是在靶段标注的查看访视级别的时候不能过滤
if (_subjectVisitRepository.Where(t => t.Id == subjectVisitId).SelectMany(t => t.Trial.TrialReadingCriterionList)
.Where(t => (t.CriterionType == CriterionType.IVUS || t.CriterionType == CriterionType.OCT) && t.IsConfirm).Distinct().Count() == 2
)
{
isFilterIVUSNoneDicom = true;
}
return new TrialVisitQADTO
{
IsSupportQCDownloadImage = isSupportQCImageDownload,
@ -467,7 +476,7 @@ namespace IRaCIS.Core.Application.Image.QA
ExistsManual = (await _IReadingImageTaskService.GetManualList(new GetManualListInDto() { TrialId = sv.TrialId })).Count() > 0,
SeriesList = temp.SeriesList,
RelationInfo = await GetVisitQCSubjectInfo(subjectVisitId),
NoneDicomStudyList = await _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: true).ProjectTo<NoneDicomStudyView>(_mapper.ConfigurationProvider).ToListAsync(),
NoneDicomStudyList = await _noneDicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId, ignoreQueryFilters: true).Where(t => isFilterIVUSNoneDicom ? t.Modality != "IVUS" : true).ProjectTo<NoneDicomStudyView>(_mapper.ConfigurationProvider).ToListAsync(),
SubjectClinicalData = await _subjectVisitRepository.Where(t => t.Id == subjectVisitId)
.ProjectTo<SubjectClinicalDataDto>(_mapper.ConfigurationProvider, new { subjectVisitId = subjectVisitId, token = _userInfo.UserToken }).FirstOrDefaultAsync()
};

View File

@ -238,6 +238,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
return this.Emm - this.Lumen;
}
}
/// <summary>
/// 斑块破裂
/// </summary>
public string PlaqueRupture { get; set; }
}
public class TemplateData
@ -300,6 +305,16 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// </summary>
public decimal? LipidAngle { get; set; }
/// <summary>
/// 斑块破裂
/// </summary>
public string PlaqueRupture { get; set; }
/// <summary>
/// 斑块愈合
/// </summary>
public string PlaqueHealing { get; set; }
public decimal? Avg
{

View File

@ -1546,6 +1546,20 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
public QuestionClassify? QuestionClassify { get; set; }
}
public class GetFilterTableQuestionInDto
{
public Guid TrialId { get; set; }
public Guid VisitTaskId { get; set; }
public Guid QuestionId { get; set; }
/// <summary>
/// 问题分类
/// </summary>
public QuestionClassify? QuestionClassify { get; set; }
}
#endregion
public class GetHistoryGlobalInfoOutDto
{

View File

@ -1401,6 +1401,38 @@ namespace IRaCIS.Core.Application.Service
}); ;
}
/// <summary>
/// 获取单个表格问题及答案 过滤问题
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> GetFilterTableQuestion(GetFilterTableQuestionInDto inDto)
{
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
var tableAnswers = await _readingTableQuestionAnswerRepository
.ProjectTo<ReadingTableQuestionAnswerInfo>(_mapper.ConfigurationProvider)
.Where(x => x.VisitTaskId == inDto.VisitTaskId).ToListAsync();
var tableAnsweRowInfos = await _readingTableAnswerRowInfoRepository.Where(x => x.VisitTaskId == inDto.VisitTaskId).ProjectTo<TableAnsweRowInfo>(_mapper.ConfigurationProvider).ToListAsync();
var organIds = tableAnsweRowInfos.Where(x => x.OrganInfoId != null).Select(x => x.OrganInfoId).Distinct().ToList();
var organList = await _organInfoRepository.Where(x => organIds.Contains(x.Id)).ToListAsync();
var questionPage = await GetReadingTableQuestion(
new GetReadingTableQuestionOrAnswerInDto()
{
TrialReadingCriterionId = taskinfo.TrialReadingCriterionId,
TaskId = inDto.VisitTaskId,
TableAnswers = tableAnswers,
TableAnsweRowInfos = tableAnsweRowInfos,
OrganInfos = organList,
QuestionClassify = inDto.QuestionClassify,
});
var result = questionPage.SinglePage.SelectMany(x => x.Childrens).Where(x => x.Id == inDto.QuestionId).FirstOrDefault();
return ResponseOutput.Ok(result);
}
/// <summary>
/// 获取自定义问题以及答案
/// </summary>

View File

@ -298,10 +298,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
//new ReadingCalculateData (){QuestionType=QuestionType.Plaque3PVA,GetDecimalNullFun=GetPlaque3PVA},
// (EEM-Lumen)求和
// 获取EMM求和
new ReadingCalculateData (){QuestionType=QuestionType.EEMSum,GetDecimalNullFun=GetEmmSum},
// 斑块2-PAV
// (EEM-Lumen)求和
new ReadingCalculateData (){QuestionType=QuestionType.EEMSubLumenSum,GetDecimalNullFun=GetEEMLumenSum},
// PAV冠状动脉粥样硬化体积百分比)
@ -494,6 +494,38 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
string getNone(string value)
{
if (value == string.Empty || value == null)
{
return "无";
}
else
{
return value;
}
}
Dictionary<string, string> isPresent = new Dictionary<string, string>()
{
{ "有","1"},
{ "无","0"},
{ "Existence","1"},
{ "Non-existence","0"},
{ string.Empty,string.Empty},
};
Dictionary<string, string> yesOrNo = new Dictionary<string, string>()
{
{ "是","1"},
{ "否","0"},
{ "Yes","1"},
{ "No","0"},
};
List<IVUSMeasuredValue> measuredValueList = new List<IVUSMeasuredValue>();
var errorRow = new List<int> { };
@ -502,12 +534,19 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
IVUSMeasuredValue iVUSMeasuredValue = new IVUSMeasuredValue() { };
try
{
// 手动抛出异常进入catch
if (!yesOrNo.ContainsKey(dataTable.Rows[i]["D"].ToString()))
{
throw new InvalidOperationException("NullError");
}
iVUSMeasuredValue = new IVUSMeasuredValue()
{
//PlaqueNum = int.Parse(dataTable.Rows[i]["A"].ToString()),
FrameNumber = dataTable.Rows[i]["A"].ToString()??string.Empty,
Emm = getdecimalEmptyData(dataTable.Rows[i]["B"].ToString()),
Lumen = getdecimalEmptyData(dataTable.Rows[i]["C"].ToString()),
PlaqueRupture= getNone(dataTable.Rows[i]["D"].ToString()),
};
}
catch (Exception)
@ -623,6 +662,18 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.ElasticAreaDiffValue).Select(x => x.Id).FirstOrDefault(),
});
// 斑块破裂
tableAnswers.Add(new ReadingTableQuestionAnswer()
{
Answer = yesOrNo[item.PlaqueRupture.ToString()],
QuestionId = questionInfo.Id,
TrialId = taskinfo.TrialId,
VisitTaskId = taskinfo.Id,
RowId = newRowId,
RowIndex = maxnum,
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.PlaqueRupture).Select(x => x.Id).FirstOrDefault(),
});
// 添加其他问题答案
foreach (var otherQuestion in tableQuestionList.Where(x => !tableAnswers.Any(y => y.TableQuestionId == x.Id && y.RowId == newRowId)))

View File

@ -336,6 +336,15 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
List<OCTFCTUploadData> measuredValueList = new List<OCTFCTUploadData>();
var errorRow = new List<int> { };
Dictionary<string, string> yesOrNo = new Dictionary<string, string>()
{
{ "是","1"},
{ "否","0"},
{ "Yes","1"},
{ "No","0"},
};
string getNone(string value)
{
if (value == string.Empty || value == null)
@ -351,19 +360,29 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
try
{
// 手动抛出异常进入catch
if (!yesOrNo.ContainsKey(dataTable.Rows[i]["K"].ToString())|| !yesOrNo.ContainsKey(dataTable.Rows[i]["L"].ToString()))
{
throw new InvalidOperationException("NullError");
}
measuredValueList.Add(new OCTFCTUploadData()
{
//PlaqueNum = int.Parse(dataTable.Rows[i]["A"].ToString()),
FrameNumber = dataTable.Rows[i]["A"].ToString() ?? string.Empty,
FirstData = getdecimalEmptyData(dataTable.Rows[i]["B"].ToString()),
SecondData = getdecimalEmptyData(dataTable.Rows[i]["C"].ToString()),
ThirdData = getdecimalEmptyData(dataTable.Rows[i]["D"].ToString()),
MacrophageInfiltrationMeasurement = getNone(dataTable.Rows[i]["E"].ToString()),
MacrophageInfiltrationAngle = getdecimalEmptyData(dataTable.Rows[i]["F"].ToString() ?? string.Empty),
LumenAreaMeasurement = getdecimalEmptyData(dataTable.Rows[i]["B"].ToString()),
LipidAngle = getdecimalEmptyData(dataTable.Rows[i]["C"].ToString() ?? string.Empty),
FirstData = getdecimalEmptyData(dataTable.Rows[i]["D"].ToString()),
SecondData = getdecimalEmptyData(dataTable.Rows[i]["E"].ToString()),
ThirdData = getdecimalEmptyData(dataTable.Rows[i]["F"].ToString()),
MicrochannelMeasurement = getNone(dataTable.Rows[i]["G"].ToString()),
CholesterolCrystalMeasurement = getNone(dataTable.Rows[i]["H"].ToString()),
LumenAreaMeasurement = getdecimalEmptyData(dataTable.Rows[i]["I"].ToString()),
LipidAngle = getdecimalEmptyData(dataTable.Rows[i]["J"].ToString() ?? string.Empty),
MacrophageInfiltrationMeasurement = getNone(dataTable.Rows[i]["I"].ToString()),
MacrophageInfiltrationAngle = getdecimalEmptyData(dataTable.Rows[i]["J"].ToString() ?? string.Empty),
PlaqueRupture = getNone(dataTable.Rows[i]["K"].ToString()),
PlaqueHealing = getNone(dataTable.Rows[i]["L"].ToString()),
});
}
catch (Exception)
@ -598,6 +617,30 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.LipidAngle).Select(x => x.Id).FirstOrDefault(),
});
// 斑块破裂
tableAnswers.Add(new ReadingTableQuestionAnswer()
{
Answer = yesOrNo[item.PlaqueRupture.ToString()],
QuestionId = questionInfo.Id,
TrialId = taskinfo.TrialId,
VisitTaskId = taskinfo.Id,
RowId = newRowId,
RowIndex = maxnum,
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.PlaqueRupture).Select(x => x.Id).FirstOrDefault(),
});
// 斑块愈合
tableAnswers.Add(new ReadingTableQuestionAnswer()
{
Answer = yesOrNo[item.PlaqueHealing.ToString()],
QuestionId = questionInfo.Id,
TrialId = taskinfo.TrialId,
VisitTaskId = taskinfo.Id,
RowId = newRowId,
RowIndex = maxnum,
TableQuestionId = tableQuestionList.Where(x => x.ReadingQuestionId == questionInfo.Id && x.QuestionMark == QuestionMark.PlaqueHealing).Select(x => x.Id).FirstOrDefault(),
});
}
catch (Exception)
{

View File

@ -2518,6 +2518,16 @@ namespace IRaCIS.Core.Domain.Share
/// </summary>
FrameNumber =1032,
/// <summary>
/// 斑块破裂
/// </summary>
PlaqueRupture = 1033,
/// <summary>
/// 斑块愈合
/// </summary>
PlaqueHealing = 1034,
/// <summary>
/// 第一次测量
/// </summary>

View File

@ -324,4 +324,10 @@ public class VisitTask : BaseFullAuditEntity
#endregion
#region 支持控制IR 下载影像
public bool? IsIRImageDownloaded { get; set; }
#endregion
}

View File

@ -1,6 +1,7 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<OutputPath>..\bin</OutputPath>
<NoWarn>$(NoWarn);NU1903</NoWarn>
</PropertyGroup>
<ItemGroup>

View File

@ -112,7 +112,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
return string.Empty;
}
if (answerType == "upload")
@ -144,7 +144,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
transList.Add(item + string.Empty + unitDataList.Where(y => y.Unit == unit).Select(x => x.UnitName).FirstIsNullReturnEmpty());
}
}
return string.Join(",", transList);
@ -1979,7 +1979,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
await InsertInspection<Subject>(entity, type, x => new InspectionConvertDTO()
{
SubjectId = x.Id,
Reason= entity.SuspendReason,
Reason = entity.SuspendReason,
TrialSiteId = x.TrialSiteId,
//项目的信息 找离的最近的项目稽查信息
@ -2447,6 +2447,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common
Reason = reason,
ExtraIndentification = extraIdentification,
SubjectVisitId = entity.SourceSubjectVisitId,
ObjectRelationParentId = entity.SourceSubjectVisitId != null ? entity.SourceSubjectVisitId : entity.SouceReadModuleId,
ObjectRelationParentId2 = entity.DoctorUserId,
@ -2477,7 +2479,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
break;
case "Study/amendmentPatientInfo":
reason=entity.Reason;
reason = entity.Reason;
break;
}
@ -2578,7 +2580,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
if (entity.VisitTaskId != null)
{
extraIdentification = "/VisitTask";
var obj = await _dbContext.VisitTask.FindAsync( entity.VisitTaskId);
var obj = await _dbContext.VisitTask.FindAsync(entity.VisitTaskId);
armEnum = obj?.ArmEnum;
subjectVisitId = obj.SourceSubjectVisitId;
}
@ -2598,7 +2600,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
{
SubjectVisitId = subjectVisitId,
//SubjectId = noneDicomStudy.SubjectId,
VisitTaskId= x.VisitTaskId,
VisitTaskId = x.VisitTaskId,
ObjectRelationParentId = subjectVisitId,
ObjectRelationParentId2 = x.NoneDicomStudyId,
ObjectRelationParentId3 = x.OriginNoneDicomStudyId,
@ -2821,7 +2823,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
SubjectVisitId = x.IsVisit ? x.ReadingId : null,
ObjectRelationParentId = entity.ClinicalDataTrialSetId,
AuditIdentification= extraIndentification,
AuditIdentification = extraIndentification,
//ObjectRelationParentId2 = x.IsVisit == false?x.ReadingId:null
},
@ -3655,7 +3657,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
await InsertInspection<Segment>(entity, type, x => new InspectionConvertDTO()
{
SubjectId= segmentation != null ? segmentation.SubjectId : null,
SubjectId = segmentation != null ? segmentation.SubjectId : null,
SubjectVisitId = segmentation != null ? segmentation.SubjectVisitId : null,
TrialReadingCriterionId = visitTask != null ? visitTask.TrialReadingCriterionId : null,
});
@ -3705,7 +3707,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
}
else
{
var questionAnswer= entitys.Where(x => x.Entity.GetType() == typeof(ReadingTaskQuestionAnswer)).Select(x => x.Entity as ReadingTaskQuestionAnswer)
var questionAnswer = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTaskQuestionAnswer)).Select(x => x.Entity as ReadingTaskQuestionAnswer)
.Where(x => x.VisitTaskId == entity.VisitTaskId && x.ReadingQuestionTrialId == entity.QuestionId).FirstOrDefault();
if (questionAnswer != null)
@ -3734,9 +3736,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common
var segmentation = await _dbContext.Segmentation.Where(x => x.Id == entity.SegmentationId).Include(x=>x.VisitTask).FirstOrDefaultAsync()?? new Segmentation() { };
var segmentation = await _dbContext.Segmentation.Where(x => x.Id == entity.SegmentationId).Include(x => x.VisitTask).FirstOrDefaultAsync() ?? new Segmentation() { };
var segment= await _dbContext.Segment.Where(x => x.Id == entity.SegmentId).FirstOrDefaultAsync()?? new Segment() { };
var segment = await _dbContext.Segment.Where(x => x.Id == entity.SegmentId).FirstOrDefaultAsync() ?? new Segment() { };
var tableQuestionName = await _dbContext.ReadingTableQuestionTrial.Where(x => x.Id == entity.TableQuestionId).Select(x => _userInfo.IsEn_Us ? x.QuestionEnName : x.QuestionName).FirstOrDefaultAsync();
var questionName = await _dbContext.ReadingQuestionTrial.Where(x => x.Id == entity.QuestionId).Select(x => _userInfo.IsEn_Us ? x.QuestionEnName : x.QuestionName).FirstOrDefaultAsync();
@ -3745,15 +3747,15 @@ namespace IRaCIS.Core.Infra.EFCore.Common
Guid? trialReadingCriterionId = null;
if (segmentation.VisitTask != null)
{
trialReadingCriterionId= segmentation.VisitTask.TrialReadingCriterionId;
trialReadingCriterionId = segmentation.VisitTask.TrialReadingCriterionId;
}
await InsertInspection<SegmentBinding>(entity, type, x => new InspectionConvertDTO()
{
TrialReadingCriterionId= trialReadingCriterionId,
},new
TrialReadingCriterionId = trialReadingCriterionId,
}, new
{
segmentation.SegmentationName,
segmentation.SEGUrl,
@ -3783,11 +3785,11 @@ namespace IRaCIS.Core.Infra.EFCore.Common
await InsertInspection<ReadingNoneDicomMark>(entity, type, x => new InspectionConvertDTO()
{
SelfDefineIdentification= selfDefineIdentification + type
SelfDefineIdentification = selfDefineIdentification + type
}, new
{
});
}
@ -3799,9 +3801,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common
var selfDefineIdentification = string.Empty;
var answer = string.Empty;
Guid? questionId=Guid.Empty;
Guid? questionId = Guid.Empty;
string tableQuestionName = string.Empty;
var rowMark= string.Empty;
var rowMark = string.Empty;
if (entity.TableQuestionId == null)
{
switch (type)
@ -3835,15 +3837,15 @@ namespace IRaCIS.Core.Infra.EFCore.Common
break;
}
questionId = entity.QuestionId;
tableQuestionName= _dbContext.ReadingTableQuestionTrial.Where(x => x.Id == entity.TableQuestionId).Select(x => _userInfo.IsEn_Us ? x.QuestionEnName : x.QuestionName).FirstOrDefault();
tableQuestionName = _dbContext.ReadingTableQuestionTrial.Where(x => x.Id == entity.TableQuestionId).Select(x => _userInfo.IsEn_Us ? x.QuestionEnName : x.QuestionName).FirstOrDefault();
answer = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionAnswer)).Select(x => x.Entity as ReadingTableQuestionAnswer).Select(x => x.Answer).FirstOrDefault();
rowMark= _dbContext.ReadingTableAnswerRowInfo.Where(x => x.Id == entity.RowId).Select(x => x.RowMark).FirstOrDefault();
rowMark = _dbContext.ReadingTableAnswerRowInfo.Where(x => x.Id == entity.RowId).Select(x => x.RowMark).FirstOrDefault();
}
var mark = entitys.Where(x => x.Entity.GetType() == typeof(ReadingNoneDicomMark)).Select(x => x.Entity as ReadingNoneDicomMark).FirstOrDefault();
var mark = entitys.Where(x => x.Entity.GetType() == typeof(ReadingNoneDicomMark)).Select(x => x.Entity as ReadingNoneDicomMark).FirstOrDefault();
if (mark == null)
{
mark = await _dbContext.ReadingNoneDicomMark.Where(x => x.Id == entity.NoneDicomMarkId).FirstOrDefaultAsync();
@ -3852,7 +3854,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
var QuestionName = string.Empty;
if (answer != null)
{
QuestionName= _dbContext.ReadingQuestionTrial.Where(x => x.Id == questionId).Select(x => _userInfo.IsEn_Us ? x.QuestionEnName : x.QuestionName).FirstOrDefault();
QuestionName = _dbContext.ReadingQuestionTrial.Where(x => x.Id == questionId).Select(x => _userInfo.IsEn_Us ? x.QuestionEnName : x.QuestionName).FirstOrDefault();
}
await InsertInspection<ReadingNoneDicomMarkBinding>(entity, type, x => new InspectionConvertDTO()
@ -3861,12 +3863,12 @@ namespace IRaCIS.Core.Infra.EFCore.Common
}, new
{
RowMark= rowMark,
RowMark = rowMark,
TableQuestionName = tableQuestionName,
MarkName = mark==null|| type== "Deleted" ? string.Empty: mark.OrderMarkName,
PicturePath= mark == null ? string.Empty : mark.PicturePath,
MarkName = mark == null || type == "Deleted" ? string.Empty : mark.OrderMarkName,
PicturePath = mark == null ? string.Empty : mark.PicturePath,
QuestionName = QuestionName,
QuestinonAnswer= answer
QuestinonAnswer = answer
});
}
@ -4152,7 +4154,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
//if (_userInfo.RequestUrl == " ReadingImageTask/splitLesion")
var originalRowMark = string.Empty;
var mergeRowMark = string.Empty;
var mergeRowMark = string.Empty;
if (entity.SplitRowId != null)
{
@ -4203,7 +4205,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
}, new
{
OriginalRowMark = originalRowMark,
MergeRowMark= mergeRowMark,
MergeRowMark = mergeRowMark,
//TableName = tableName,
QuestionAnswerList =
@ -4481,7 +4483,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
//var generalData = await GetInspectionGeneralDataAsync(inspection);
var generalData = await GetInspectionGeneralGuidAsync(inspection);
//不可少 因为稽查实体可能某些Id没有
MapEntityPropertyToAuditEntity(generalData, inspection);
@ -4546,7 +4548,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
inspection.EntityName = entityName;
inspection.RealUrlAndEntity = _userInfo.RequestUrl + "/" + entityName + "/" + type;
inspection.Reason=inspection.Reason==string.Empty&&reason!=string.Empty?reason:inspection.Reason;
inspection.Reason = inspection.Reason == string.Empty && reason != string.Empty ? reason : inspection.Reason;
await _dbContext.DataInspection.AddAsync(inspection);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,28 @@
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace IRaCIS.Core.Infra.EFCore.Migrations
{
/// <inheritdoc />
public partial class addIRDownload : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AddColumn<bool>(
name: "IsIRImageDownloaded",
table: "VisitTask",
type: "bit",
nullable: true);
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropColumn(
name: "IsIRImageDownloaded",
table: "VisitTask");
}
}
}

View File

@ -16668,6 +16668,9 @@ namespace IRaCIS.Core.Infra.EFCore.Migrations
.HasColumnType("bit")
.HasComment("重阅重置任务的 标注是转化之前的 还是转化之后的");
b.Property<bool?>("IsIRImageDownloaded")
.HasColumnType("bit");
b.Property<bool>("IsNeedClinicalDataSign")
.HasColumnType("bit")
.HasComment("临床数据");

View File

@ -2,6 +2,7 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<OutputPath>..\bin</OutputPath>
<NoWarn>$(NoWarn);NU1903</NoWarn>
</PropertyGroup>
<ItemGroup>