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 running

This commit is contained in:
2026-04-23 14:55:16 +08:00
12 changed files with 22375 additions and 16 deletions
@@ -15488,7 +15488,7 @@
用户WL模板
</summary>
</member>
<member name="M:IRaCIS.Core.Application.Service.UserWLTemplateService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserWLTemplate},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserRole},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)">
<member name="M:IRaCIS.Core.Application.Service.UserWLTemplateService.#ctor(IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserWLTemplate},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.ReadingUserConfig},IRaCIS.Core.Infra.EFCore.IRepository{IRaCIS.Core.Domain.Models.UserRole},AutoMapper.IMapper,IRaCIS.Core.Domain.Share.IUserInfo,Microsoft.Extensions.Localization.IStringLocalizer)">
<summary>
用户WL模板
</summary>
@@ -15514,7 +15514,7 @@
<param name="userWLTemplateId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.UserWLTemplateService.GetAutoCutNextTask">
<member name="M:IRaCIS.Core.Application.Service.UserWLTemplateService.GetAutoCutNextTask(IRaCIS.Core.Application.ViewModel.GetAutoCutNextTaskInDto)">
<summary>
获取自动切换任务配置
</summary>
@@ -17269,17 +17269,17 @@
</member>
<member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Question">
<summary>
质疑
</summary>
</member>
<member name="F:IRaCIS.Core.Application.ViewModel.AccessToDialogueEnum.Consistency">
<summary>
一致性核查
һԺ˲
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.CopyFrontAuditConfigItemDto">
<summary>
复制
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.SystemNoticeView">
@@ -18653,6 +18653,41 @@
受试者ID
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.DTO.QAStudyInfoDTO.PatientSex">
<summary>
性别
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.DTO.QAStudyInfoDTO.PatientWeight">
<summary>
体重
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.DTO.QAStudyInfoDTO.RadionuclideTotalDose">
<summary>
总剂量
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.DTO.QAStudyInfoDTO.RadionuclideHalfLife">
<summary>
半衰期
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.DTO.QAStudyInfoDTO.RadiopharmaceuticalStartTime">
<summary>
注射时间
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.DTO.QAStudyInfoDTO.AcquisitionTime">
<summary>
成像 / 采集时间
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Contracts.DTO.QAStudyInfoDTO.IsHasEmptyPatientInfo">
<summary>
是否存在空字符串字段(PatientSex、PatientWeight、RadionuclideTotalDose、RadionuclideHalfLife、RadiopharmaceuticalStartTime、AcquisitionTime 任意一个为空/空字符串)
</summary>
</member>
<member name="T:IRaCIS.Core.Application.Contracts.DTO.CloseCheckChallengeDto">
<summary>
关闭一致性质疑Dto
@@ -196,7 +196,7 @@ namespace IRaCIS.Core.Application.Contracts
public class EditPatientInfoCommand
{
public Guid StudyId { get; set; }
public Guid Id { get; set; }
/// <summary>
/// 性别
/// </summary>
@@ -236,7 +236,7 @@ namespace IRaCIS.Core.Application.Contracts
public class PatientInfoDto
{
public Guid StudyId { get; set; }
public Guid Id { get; set; }
/// <summary>
/// 性别
@@ -198,7 +198,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
[HttpPost]
public async Task<IResponseOutput> EditPatientInfo(EditPatientInfoCommand command)
{
await _dicomStudyRepository.UpdatePartialFromQueryAsync(command.StudyId, x => new DicomStudy
await _dicomStudyRepository.UpdatePartialFromQueryAsync(command.Id, x => new DicomStudy
{
PatientSex = command.PatientSex,
PatientWeight = command.PatientWeight,
@@ -415,6 +415,52 @@ namespace IRaCIS.Core.Application.Contracts.DTO
public string BodyPartForEditOther { get; set; }
#region
/// <summary>
/// 性别
/// </summary>
public string PatientSex { get; set; } = null!;
/// <summary>
/// 体重
/// </summary>
public string PatientWeight { get; set; }
/// <summary>
/// 总剂量
/// </summary>
public string RadionuclideTotalDose { get; set; } = null!;
/// <summary>
/// 半衰期
/// </summary>
public string RadionuclideHalfLife { get; set; } = null!;
/// <summary>
/// 注射时间
/// </summary>
public string RadiopharmaceuticalStartTime { get; set; } = null!;
/// <summary>
/// 成像 / 采集时间
/// </summary>
public string AcquisitionTime { get; set; } = null!;
#endregion
/// <summary>
/// 是否存在空字符串字段(PatientSex、PatientWeight、RadionuclideTotalDose、RadionuclideHalfLife、RadiopharmaceuticalStartTime、AcquisitionTime 任意一个为空/空字符串)
/// </summary>
public bool IsHasEmptyPatientInfo =>
string.IsNullOrWhiteSpace(PatientSex) ||
string.IsNullOrWhiteSpace(PatientWeight) ||
string.IsNullOrWhiteSpace(RadionuclideTotalDose) ||
string.IsNullOrWhiteSpace(RadionuclideHalfLife) ||
string.IsNullOrWhiteSpace(RadiopharmaceuticalStartTime) ||
string.IsNullOrWhiteSpace(AcquisitionTime);
}
public class QASeriesInfoDto
@@ -1,4 +1,5 @@
using IRaCIS.Core.Application.Contracts;
using DocumentFormat.OpenXml.InkML;
using IRaCIS.Core.Application.Contracts;
using IRaCIS.Core.Application.Contracts.DTO;
using IRaCIS.Core.Application.Filter;
using IRaCIS.Core.Application.Helper;
@@ -1108,6 +1109,23 @@ namespace IRaCIS.Core.Application.Image.QA
{
await VerifyIsCanQCAsync(null, subjectVisitId);
var visit = await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId);
var isExistStudyClinicalData = await _clinicalDataTrialSetRepository.AnyAsync(t => t.TrialId == visit.TrialId && t.ClinicalDataLevel == ClinicalLevel.Study&&t.IsConfirm&&t.IsApply);
if(isExistStudyClinicalData)
{
List<string> modalitieTypes = new List<string>() { "PT、CT", "CT、PT", "PET-CT" };
var studyList=await _dicomStudyRepository.Where(t => t.SubjectVisitId == subjectVisitId&& modalitieTypes.Contains(t.Modalities)).ProjectTo<QAStudyInfoDTO>(_mapper.ConfigurationProvider).ToListAsync();
if (studyList.Any(x => x.IsHasEmptyPatientInfo))
{
return ResponseOutput.NotOk(_localizer["QCOperation_IsHasEmptyPatientInfo"]);
}
}
if (await _qcChallengeRepository.AnyAsync(t => t.SubjectVisitId == subjectVisitId && t.IsClosed == false))
{
//---当前访视有质疑未关闭,不允许该操作
@@ -27,8 +27,16 @@ namespace IRaCIS.Core.Application.ViewModel
}
public class GetAutoCutNextTaskInDto
{
public int ImageToolType { get; set; }
}
public class SetAutoCutNextTaskInDto
{
public int ImageToolType { get; set; }
public bool AutoCutNextTask { get; set; }
/// <summary>
@@ -15,6 +15,7 @@ namespace IRaCIS.Core.Application.Service
/// </summary>
[ApiExplorerSettings(GroupName = "Reading")]
public class UserWLTemplateService(IRepository<UserWLTemplate> _userWLTemplateRepository,
IRepository<ReadingUserConfig> _readingUserConfigRepository,
IRepository<UserRole> _userRoleRepository, IMapper _mapper, IUserInfo _userInfo, IStringLocalizer _localizer) : BaseService
{
@@ -82,15 +83,18 @@ namespace IRaCIS.Core.Application.Service
/// </summary>
/// <returns></returns>
[HttpPost]
public async Task<object> GetAutoCutNextTask()
public async Task<object> GetAutoCutNextTask(GetAutoCutNextTaskInDto inDto)
{
var result = await _userRoleRepository.Where(x => x.Id == _userInfo.UserRoleId).Select(x => new
var result = await _readingUserConfigRepository.Where(x => x.UserRoleId == _userInfo.UserRoleId&&x.ImageToolType==inDto.ImageToolType).Select(x => new
{
AutoCutNextTask = x.AutoCutNextTask,
IsDoubleScreen = x.IsDoubleScreen,
}).FirstOrDefaultAsync();
if (result == null)
{
return new
@@ -112,14 +116,30 @@ namespace IRaCIS.Core.Application.Service
[HttpPost]
public async Task<IResponseOutput> SetAutoCutNextTask(SetAutoCutNextTaskInDto inDto)
{
await _userRoleRepository.UpdatePartialFromQueryAsync(_userInfo.UserRoleId, x => new UserRole()
var userConfig = await _readingUserConfigRepository.FirstOrDefaultAsync(x => x.UserRoleId == _userInfo.UserRoleId && x.ImageToolType == inDto.ImageToolType);
if (userConfig == null)
{
await _readingUserConfigRepository.AddAsync(new ReadingUserConfig
{
UserRoleId = _userInfo.UserRoleId,
ImageToolType = inDto.ImageToolType,
AutoCutNextTask = inDto.AutoCutNextTask,
IsDoubleScreen = inDto.IsDoubleScreen,
});
}
else
{
await _readingUserConfigRepository.UpdatePartialFromQueryAsync(x => x.Id == userConfig.Id, x => new ReadingUserConfig
{
AutoCutNextTask = inDto.AutoCutNextTask,
IsDoubleScreen = inDto.IsDoubleScreen,
});
}
AutoCutNextTask = inDto.AutoCutNextTask,
IsDoubleScreen = inDto.IsDoubleScreen
});
await _userRoleRepository.SaveChangesAsync();
await _userRoleRepository.SaveChangesAsync();
return ResponseOutput.Ok();
}