Merge branch 'Test_HIR_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_HIR_Net8
continuous-integration/drone/push Build is passing Details

Test_HIR_Net8
he 2025-09-25 13:33:21 +08:00
commit 05124428ad
6 changed files with 110 additions and 3 deletions

View File

@ -18531,6 +18531,17 @@
<member name="M:IRaCIS.Application.Interfaces.ITrialEnrollmentService.ConfirmReviewer(System.Guid,System.Guid[],System.Int32)">
<summary>入组流程-向CRO提交医生[Submit]</summary>
</member>
<member name="M:IRaCIS.Application.Services.PatientService.VisitImageBack(IRaCIS.Application.Contracts.VisitImageBackCommand,IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomStudy},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomSeries},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.DicomInstance},IRaCIS.Core.Infra.EFCore.IRepository)">
<summary>
阅片任务退回,删除影像数据,解除访视和检查绑定关系
</summary>
<param name="inCommand"></param>
<param name="_dicomStudyRepository"></param>
<param name="_dicomSeriesRepository"></param>
<param name="_dicomInstanceRepository"></param>
<param name="_repository"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Application.Services.PatientService.GetHospitalInfo">
<summary>
获取医院的配置信息

View File

@ -346,6 +346,8 @@ namespace IRaCIS.Application.Contracts
public DateTime UpdateTime { get; set; } = DateTime.Now;
public Guid CreateUserId { get; set; }
public DateTime CreateTime { get; set; } = DateTime.Now;
public int? SCPStudyCount { get; set; }
}
public class UpdateSubjectVisitStudyBindingCommand
@ -1225,4 +1227,15 @@ namespace IRaCIS.Application.Contracts
public string Path { get; set; }
public long? FileSize { get; set; }
}
public class VisitImageBackCommand
{
[NotDefault]
public Guid TrialId { get; set; }
[NotDefault]
public Guid SubjectId { get; set; }
[NotDefault]
public Guid SubjectVisitId { get; set; }
}
}

View File

@ -74,7 +74,83 @@ namespace IRaCIS.Application.Services
) : BaseService
{
#region 访视提交生成任务了,但是需要退回
/// <summary>
/// 阅片任务退回,删除影像数据,解除访视和检查绑定关系
/// </summary>
/// <param name="inCommand"></param>
/// <param name="_dicomStudyRepository"></param>
/// <param name="_dicomSeriesRepository"></param>
/// <param name="_dicomInstanceRepository"></param>
/// <param name="_repository"></param>
/// <returns></returns>
[HttpPut]
public async Task<IResponseOutput> VisitImageBack(VisitImageBackCommand inCommand,
[FromServices] IRepository<DicomStudy> _dicomStudyRepository,
[FromServices] IRepository<DicomSeries> _dicomSeriesRepository,
[FromServices] IRepository<DicomInstance> _dicomInstanceRepository,
[FromServices] IRepository _repository)
{
var minVisitNum = _subjectVisitRepository.Where(t => t.Id == inCommand.SubjectVisitId).Select(t => t.VisitNum).FirstOrDefault();
//修改提交状态
await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.SubjectId == inCommand.SubjectId && t.VisitNum >= minVisitNum && t.SubmitState == SubmitStateEnum.Submitted, t => new SubjectVisit()
{
SubmitState = SubmitStateEnum.ToSubmit,
SubmitTime = null,
SubmitUserId = null,
AuditState = AuditStateEnum.None,
CheckState = CheckStateEnum.None,
});
//清理影像检查
await _dicomStudyRepository.BatchDeleteNoTrackingAsync(t => t.SubjectId == inCommand.SubjectId && t.SubjectVisit.VisitNum >= minVisitNum);
await _dicomSeriesRepository.BatchDeleteNoTrackingAsync(t => t.SubjectId == inCommand.SubjectId && t.SubjectVisit.VisitNum >= minVisitNum);
await _dicomInstanceRepository.BatchDeleteNoTrackingAsync(t => t.SubjectId == inCommand.SubjectId && t.SubjectVisit.VisitNum >= minVisitNum);
//解除当前以及后续访视检查绑定关系
await _studySubjectVisitRepository.BatchUpdateNoTrackingAsync(t => t.SubjectVisit.VisitNum >= minVisitNum && t.SubjectVisit.SubjectId == inCommand.SubjectId, u => new SCPStudySubjectVisit() { StudyId = null });
await _subjectPatientRepository.BatchUpdateNoTrackingAsync(t => t.SubjectId == inCommand.SubjectId, u => new SubjectPatient() { IsBinded = false });
//清理任务
var deleteVisitTaskIdList = _repository.Where<VisitTask>(t => t.SubjectId == inCommand.SubjectId && t.SourceSubjectVisit.VisitNum >= minVisitNum).Select(t => t.Id).ToList();
await _repository.BatchDeleteNoTrackingAsync<VisitTask>(t => t.SubjectId == inCommand.SubjectId && t.SourceSubjectVisit.VisitNum >= minVisitNum);
await _repository.BatchDeleteNoTrackingAsync<ReadingCustomTag>(t => deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingGlobalTaskInfo>(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.TaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingJudgeInfo>(t => t.TrialId == inCommand.TrialId && (deleteVisitTaskIdList.Contains(t.TaskIdOne) || deleteVisitTaskIdList.Contains(t.TaskIdTwo)));
await _repository.BatchDeleteNoTrackingAsync<ReadingOncologyTaskInfo>(t => deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingTaskQuestionAnswer>(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingTableAnswerRowInfo>(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingTableQuestionAnswer>(t => t.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingTaskQuestionMark>(t => t.VisitTask.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.VisitTaskId));
await _repository.BatchDeleteNoTrackingAsync<ReadingTaskRelation>(t => t.VisitTask.TrialId == inCommand.TrialId && deleteVisitTaskIdList.Contains(t.TaskId));
await _subjectVisitRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}
#endregion
#region 医院信息管理
@ -649,7 +725,7 @@ namespace IRaCIS.Application.Services
#region new ok
var query = _patientRepository.Where(t => isAdminOrOA ? true : t.SCPStudyList.Any(c => c.HospitalGroupList.Any(c => currentUserHospitalGroupIdList.Contains(c.HospitalGroupId))))
.WhereIf(inQuery.CalledAEList.Any(), t => t.SCPStudyList.Any(c=> inQuery.CalledAEList.Contains(c.CalledAE)))
.WhereIf(inQuery.CalledAEList.Any(), t => t.SCPStudyList.Any(c => inQuery.CalledAEList.Contains(c.CalledAE)))
.WhereIf(inQuery.HospitalGroupIdList.Any(), t => t.SCPStudyList.Any(c => c.HospitalGroupList.Any(c => inQuery.HospitalGroupIdList.Contains(c.HospitalGroupId))))
.WhereIf(inQuery.PatientHospitalGroupTagIdList.Any(), t => t.PatientHospitalGroupTagList.Any(k => inQuery.PatientHospitalGroupTagIdList.Contains(k.HospitalGroupTagId)))
.WhereIf(!string.IsNullOrWhiteSpace(inQuery.PatientIdStr), t => t.PatientIdStr.Contains(inQuery.PatientIdStr))
@ -858,7 +934,7 @@ namespace IRaCIS.Application.Services
SeriesCount = scpStudy.SeriesCount,
StudyTime = scpStudy.StudyTime,
StudyIdStr = scpStudy.StudyId,
StudyInstanceUid= scpStudy.StudyInstanceUid,
StudyInstanceUid = scpStudy.StudyInstanceUid,
HospitalGroupList = scpStudy.HospitalGroupList.Select(t => new SCPStudyHospitalGroupInfo()
{

View File

@ -112,7 +112,8 @@ namespace IRaCIS.Core.Application.Service
CreateMap<SCPPatient, PatientQueryView>()
.ForMember(d => d.CalledAEList, u => u.MapFrom(s => s.SCPStudyList.Select(t => t.CalledAE).Distinct()))
.ForMember(d => d.CallingAEList, u => u.MapFrom(s => s.SCPStudyList.Select(t => t.CallingAE).Distinct()))
.ForMember(d => d.PatientId, u => u.MapFrom(s => s.Id));
.ForMember(d => d.PatientId, u => u.MapFrom(s => s.Id))
.ForMember(d => d.SCPStudyCount, u => u.MapFrom(s => s.SCPStudyList.Count()));
CreateMap<SCPStudySubjectVisit, VisitPatientStudyView>().IncludeMembers(t => t.SCPStudy)
.ForMember(d => d.VisitName, u => u.MapFrom(s => s.SubjectVisit.VisitName));

View File

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

View File

@ -12,6 +12,9 @@ public class DicomSeries : BaseFullDeleteAuditEntity, IEntitySeqId
[JsonIgnore]
public List<DicomInstance> DicomInstanceList { get; set; }
[JsonIgnore]
public SubjectVisit SubjectVisit { get; set; }
[JsonIgnore]
public List<SubjectCriteriaEvaluationVisitStudyFilter> SubjectCriteriaEvaluationVisitStudyFilterList { get; set; }
#endregion