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 Details

Uat_IRC_Net8
he 2025-07-21 14:19:51 +08:00
commit a86448a5c1
5 changed files with 70 additions and 17 deletions

View File

@ -4,7 +4,7 @@ namespace IRaCIS.Core.Application.Contracts
{ {
public interface IStudyService public interface IStudyService
{ {
IResponseOutput<List<RelationStudyDTO>> GetAllRelationStudyList(Guid subjectVisitId); IResponseOutput<List<RelationStudyDTO>> GetAllRelationStudyList(Guid subjectVisitId,bool? isReading);
Task<PageOutput<UnionStudyViewModel>> GetDicomAndNoneDicomStudyList(StudyQuery studyQuery); Task<PageOutput<UnionStudyViewModel>> GetDicomAndNoneDicomStudyList(StudyQuery studyQuery);
Task<PageOutput<UnionStudyMonitorModel>> GetDicomAndNoneDicomStudyMonitorList(StudyQuery studyQuery); Task<PageOutput<UnionStudyMonitorModel>> GetDicomAndNoneDicomStudyMonitorList(StudyQuery studyQuery);
(List<string> SeriesInstanceUid, List<string> SopInstanceUid) GetHasUploadSeriesAndInstance(Guid studyId); (List<string> SeriesInstanceUid, List<string> SopInstanceUid) GetHasUploadSeriesAndInstance(Guid studyId);

View File

@ -579,7 +579,7 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
/// <returns></returns> /// <returns></returns>
[HttpGet("{subjectVisitId:guid}")] [HttpGet("{subjectVisitId:guid}")]
[AllowAnonymous] [AllowAnonymous]
public IResponseOutput<List<RelationStudyDTO>> GetAllRelationStudyList(Guid subjectVisitId) public IResponseOutput<List<RelationStudyDTO>> GetAllRelationStudyList(Guid subjectVisitId,bool? isReading)
{ {
#region 废弃 #region 废弃
//var studylist = _studyRepository.Where(u => u.SubjectVisitId == subjectVisitId && u.IsDeleted == false).Select(t => new { StudyId = t.Id, t.SubjectId, t.TrialId }).ToList(); //var studylist = _studyRepository.Where(u => u.SubjectVisitId == subjectVisitId && u.IsDeleted == false).Select(t => new { StudyId = t.Id, t.SubjectId, t.TrialId }).ToList();
@ -607,10 +607,18 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
var studyInfo = _dicomStudyRepository.Where(u => u.SubjectVisitId == subjectVisitId).Select(t => new { t.SubjectId, t.TrialId }).FirstOrDefault().IfNullThrowException(); var studyInfo = _dicomStudyRepository.Where(u => u.SubjectVisitId == subjectVisitId).Select(t => new { t.SubjectId, t.TrialId }).FirstOrDefault().IfNullThrowException();
var query = _dicomStudyRepository.Where(t => t.SubjectVisitId != subjectVisitId && t.TrialId == studyInfo.TrialId && t.SubjectId == studyInfo.SubjectId) var list = _dicomStudyRepository.Where(t => t.SubjectVisitId != subjectVisitId && t.TrialId == studyInfo.TrialId && t.SubjectId == studyInfo.SubjectId)
.ProjectTo<RelationStudyDTO>(_mapper.ConfigurationProvider).ToList(); .Select(t=> new RelationStudyDTO()
{
StudyId = t.Id,
StudyCode = t.StudyCode,
VisitName = t.SubjectVisit.VisitName,
Modalities = t.Modalities,
Description = t.Description,
SeriesCount = t.SeriesList.Where(t=> isReading==true? t.IsReading==true:true).Count()
}) .ToList();
var list = query.OrderBy(u => u.VisitName).ThenBy(s => s.StudyCode).ToList(); list = list.Where(t=>t.SeriesCount>0).OrderBy(u => u.VisitName).ThenBy(s => s.StudyCode).ToList();
return ResponseOutput.Ok(list); return ResponseOutput.Ok(list);
} }

View File

@ -865,6 +865,16 @@ namespace IRaCIS.Core.Application
} }
else if (signConfirmDTO.SignCode == ((int)SignEnum.TrialQCQuestionConfirmUpdate).ToString()) else if (signConfirmDTO.SignCode == ((int)SignEnum.TrialQCQuestionConfirmUpdate).ToString())
{ {
var trialConfirmTime = _trialRepository.Where(t => t.Id == signConfirmDTO.TrialId).Select(t => t.QCQuestionConfirmedTime).FirstOrDefault();
if (trialConfirmTime != null)
{
//删除复审中间临时数据
await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.SecondReviewState == SecondReviewState.WaitAudit
&& t.CurrentQCEnum == CurrentQC.SecondReview && t.UpdateTime > trialConfirmTime);
}
await _trialRepository.UpdatePartialFromQueryAsync(t => t.Id == signConfirmDTO.TrialId, u => new Trial() { QCQuestionConfirmedTime = null, QCQuestionConfirmedUserId = null, IsQCQuestionConfirmed = false }); await _trialRepository.UpdatePartialFromQueryAsync(t => t.Id == signConfirmDTO.TrialId, u => new Trial() { QCQuestionConfirmedTime = null, QCQuestionConfirmedUserId = null, IsQCQuestionConfirmed = false });
} }
else if (signConfirmDTO.SignCode == ((int)SignEnum.SecondReviewConfirm).ToString()) else if (signConfirmDTO.SignCode == ((int)SignEnum.SecondReviewConfirm).ToString())
@ -873,9 +883,16 @@ namespace IRaCIS.Core.Application
if (trialConfirmTime != null) if (trialConfirmTime != null)
{ {
//删除复审中间临时数据 //删除复审中间临时数据--没重置,一直点生成复核任务
await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.SecondReviewState == SecondReviewState.WaitAudit await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.SecondReviewState == SecondReviewState.WaitAudit
&& t.CurrentQCEnum == CurrentQC.SecondReview && t.UpdateTime> trialConfirmTime); && t.CurrentQCEnum == CurrentQC.SecondReview && t.UpdateTime > trialConfirmTime);
//删除质控中 临时保存的问题答案 (因为添加那里只会新增 和全部更新,如果不处理,那么有新增,也有更新,稽查那里也会有问题)
await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.AuditState == AuditStateEnum.InPrimaryQC
&& t.CurrentQCEnum == CurrentQC.First);
await _qcQuestionAnswerRepository.BatchDeleteNoTrackingAsync(t => t.SubjectVisit.TrialId == signConfirmDTO.TrialId && t.SubjectVisit.AuditState == AuditStateEnum.InSecondaryQC
&& t.CurrentQCEnum == CurrentQC.Second);
//重复二次复核签名 //重复二次复核签名
await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.TrialId == signConfirmDTO.TrialId && t.AuditState == AuditStateEnum.QCPassed await _subjectVisitRepository.UpdatePartialFromQueryAsync(t => t.TrialId == signConfirmDTO.TrialId && t.AuditState == AuditStateEnum.QCPassed
@ -924,7 +941,6 @@ namespace IRaCIS.Core.Application
//---影像质控审核问题已被其他人员确认,不允许再次确认。 //---影像质控审核问题已被其他人员确认,不允许再次确认。
throw new BusinessValidationFailedException(_localizer["TrialConfig_AuditQuestionConfirmed"]); throw new BusinessValidationFailedException(_localizer["TrialConfig_AuditQuestionConfirmed"]);
} }
//不记录这个稽查,不关注问题上的确认标记 //不记录这个稽查,不关注问题上的确认标记
await _trialQCQuestionRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == signConfirmDTO.TrialId, x => new TrialQCQuestion await _trialQCQuestionRepository.BatchUpdateNoTrackingAsync(t => t.TrialId == signConfirmDTO.TrialId, x => new TrialQCQuestion
{ {

View File

@ -120,7 +120,7 @@ namespace IRaCIS.Core.Application.Service
foreach (var user in userList) foreach (var user in userList)
{ {
var lastLoginRegion = _userLogRepository.Where(t => t.ActionIdentityUserId == user.Id && (t.OptType == UserOptType.Login || t.OptType == UserOptType.LoginLockedAccount)).OrderByDescending(t => t.CreateTime).Select(t => t.IPRegion).FirstOrDefault()??string.Empty; var lastLoginRegion = _userLogRepository.Where(t => t.ActionIdentityUserId == user.Id && (t.OptType == UserOptType.Login || t.OptType == UserOptType.LoginLockedAccount)).OrderByDescending(t => t.CreateTime).Select(t => t.IPRegion).FirstOrDefault() ?? string.Empty;
await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == user.Id, u => new Domain.Models.IdentityUser() { LastLoginIP = lastLoginRegion, UpdateUserId = user.UpdateUserId }); await _identityUserRepository.BatchUpdateNoTrackingAsync(t => t.Id == user.Id, u => new Domain.Models.IdentityUser() { LastLoginIP = lastLoginRegion, UpdateUserId = user.UpdateUserId });
} }
@ -385,6 +385,32 @@ namespace IRaCIS.Core.Application.Service
return ResponseOutput.Ok(); return ResponseOutput.Ok();
} }
[AllowAnonymous]
public async Task<IResponseOutput> DealDicomFileSize([FromServices] IOSSService _oSSService, [FromServices] IRepository<DicomInstance> _dicomInstanceRepository)
{
var instanceList = _dicomInstanceRepository.Where(t => t.TrialId == Guid.Parse("01000000-AC13-0242-3AE4-08DC9B0495C6"))
.Where(t => t.FileSize == 0 || t.FileSize == null)
.Select(t => new { t.Path, t.Id }).ToList();
foreach (var item in instanceList)
{
try
{
var fileSize = await _oSSService.GetObjectSizeAsync(item.Path);
await _dicomInstanceRepository.BatchUpdateNoTrackingAsync(t => t.Id == item.Id, u => new DicomInstance() { FileSize = fileSize });
}
catch (Exception ex)
{
Console.WriteLine(item.Path + " : " + ex.Message);
}
}
return ResponseOutput.Ok();
}
/// <summary> /// <summary>
/// 非dicom 临床数据 /// 非dicom 临床数据
/// </summary> /// </summary>
@ -411,7 +437,7 @@ namespace IRaCIS.Core.Application.Service
} }
catch (Exception ex) catch (Exception ex)
{ {
Console.WriteLine(item.Path+" : " + ex.Message); Console.WriteLine(item.Path + " : " + ex.Message);
} }

View File

@ -2060,6 +2060,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common
extraIdentification = "/DeleteNoneDicomFileZero"; extraIdentification = "/DeleteNoneDicomFileZero";
} }
if(_userInfo.RequestUrl== "QCOperation/addCheckChallengeReply" || _userInfo.RequestUrl == "QCOperation/UploadVisitCheckExcel")
{
if (entity.CheckChallengeState == CheckChanllengeTypeEnum.CRCWaitPMReply || entity.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply) if (entity.CheckChallengeState == CheckChanllengeTypeEnum.CRCWaitPMReply || entity.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply)
{ {
//发送对话 修改质疑状态 不需要区分接口 //发送对话 修改质疑状态 不需要区分接口
@ -2067,6 +2069,7 @@ namespace IRaCIS.Core.Infra.EFCore.Common
extraIdentification = "/ModifyCheckChallengeState"; extraIdentification = "/ModifyCheckChallengeState";
} }
}
if (entity.SubmitState == SubmitStateEnum.ToSubmit) if (entity.SubmitState == SubmitStateEnum.ToSubmit)
{ {