diff --git a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs index 302351e3d..64e526983 100644 --- a/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs +++ b/IRaCIS.Core.Application/Service/Allocation/DTO/VisitTaskViewModel.cs @@ -211,7 +211,9 @@ namespace IRaCIS.Core.Application.ViewModel { public bool? IsSelfAnalysis { get; set; } - public bool IsReReadingOrBackInfluenceAnalysis { get; set; } + public int ConsistentClinicalDataCount { get; set; } = 0; + + public bool IsReReadingOrBackInfluenceAnalysis { get; set; } } diff --git a/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs b/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs index 2e7d1c183..77e0a2737 100644 --- a/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/TaskConsistentRuleService.cs @@ -20,6 +20,7 @@ using IRaCIS.Core.Infrastructure.Extention; using System; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using NPOI.SS.Formula.Functions; +using IRaCIS.Core.Application.Service.Reading.Dto; namespace IRaCIS.Core.Application.Service { @@ -32,6 +33,8 @@ namespace IRaCIS.Core.Application.Service private readonly IRepository _taskConsistentRuleRepository; private readonly IRepository _visitTaskRepository; + private readonly IRepository _readingConsistentClinicalDataRepository; + private readonly IReadingClinicalDataService _readingClinicalDataService; private readonly IRepository _subjectUserRepository; private readonly IRepository _subjectRepository; private readonly IRepository _enrollRepository; @@ -44,11 +47,16 @@ namespace IRaCIS.Core.Application.Service private readonly IVisitTaskHelpeService _visitTaskCommonService; - public TaskConsistentRuleService(IRepository visitTaskRepository, IRepository enrollRepository, IRepository taskConsistentRuleRepository, IRepository subjectUserRepository, IRepository subjectRepository, IDistributedLockProvider distributedLockProvider, + public TaskConsistentRuleService(IRepository visitTaskRepository, + IRepository readingConsistentClinicalDataRepository, + IReadingClinicalDataService readingClinicalDataService, + IRepository enrollRepository, IRepository taskConsistentRuleRepository, IRepository subjectUserRepository, IRepository subjectRepository, IDistributedLockProvider distributedLockProvider, IRepository trialRepository, IRepository trialSiteRepository, IRepository trialVirtualSiteCodeUpdateRepository, IVisitTaskHelpeService visitTaskCommonService) { _taskConsistentRuleRepository = taskConsistentRuleRepository; _visitTaskRepository = visitTaskRepository; + this._readingConsistentClinicalDataRepository = readingConsistentClinicalDataRepository; + this._readingClinicalDataService = readingClinicalDataService; _subjectUserRepository = subjectUserRepository; _subjectRepository = subjectRepository; _enrollRepository = enrollRepository; @@ -117,6 +125,20 @@ namespace IRaCIS.Core.Application.Service var defalutSortArray = new string[] { nameof(VisitTask.IsUrgent) + " desc", nameof(VisitTask.SubjectId), nameof(VisitTask.VisitTaskNum) }; var pageList = await visitTaskQueryable.ToPagedListAsync(queryVisitTask.PageIndex, queryVisitTask.PageSize, queryVisitTask.SortField, queryVisitTask.Asc, string.IsNullOrWhiteSpace(queryVisitTask.SortField), defalutSortArray); + #region 统计一致性分析临床数据数量 + + foreach (var item in pageList.CurrentPageData) + { + item.ConsistentClinicalDataCount = (await _readingClinicalDataService.GetClinicalDataList(new GetReadingOrTaskClinicalDataListInDto() + { + SubjectId = item.SubjectId, + TrialId = item.TrialId, + SelectIsSign = false, + IsGetAllConsistencyAnalysis = false, + VisitTaskId = item.Id, + })).Count(); + } + #endregion var trialTaskConfig = _repository.Where(t => t.Id == queryVisitTask.TrialId).Select(t => new { IsHaveDoubleReadCriterion = t.TrialReadingCriterionList.Any(t => t.IsSigned && t.IsConfirm && t.ReadingType == ReadingMethod.Double), t.VitrualSiteCode }).FirstOrDefault(); diff --git a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs index 72553ebd3..3be59de67 100644 --- a/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs +++ b/IRaCIS.Core.Application/Service/Allocation/VisitTaskHelpeService.cs @@ -17,6 +17,7 @@ using IRaCIS.Core.Infra.EFCore.Common; using System.Linq.Expressions; using IRaCIS.Core.Domain.Share.Reading; using IRaCIS.Core.Application.Service.Reading.Dto; +using System.Runtime.InteropServices; namespace IRaCIS.Core.Application.Service { @@ -26,7 +27,7 @@ namespace IRaCIS.Core.Application.Service /// 访视读片任务 /// [ApiExplorerSettings(GroupName = "Trial")] - public class VisitTaskHelpeService : IVisitTaskHelpeService + public class VisitTaskHelpeService : BaseService, IVisitTaskHelpeService { private readonly IRepository _visitTaskRepository; @@ -450,6 +451,19 @@ namespace IRaCIS.Core.Application.Service } + /// + /// 获取GetIsClinicalDataSignTest + /// + /// + /// + public async Task GetIsClinicalDataSignTest(Guid visitTask) + { + var taskinfo = await _visitTaskRepository.Where(x => x.Id == visitTask).FirstNotNullAsync(); + var clinicalDataConfirmList = _trialClinicalDataSetRepository.Where(t => t.TrialId == taskinfo.TrialId && t.IsConfirm).Include(t => t.TrialClinicalDataSetCriteriaList).ToList(); + + Guid readingid = taskinfo.SourceSubjectVisitId == null ? taskinfo.SouceReadModuleId!.Value : taskinfo.SourceSubjectVisitId.Value; + return IsClinicalDataSign(taskinfo.ReadingCategory, taskinfo.VisitTaskNum == 0m, taskinfo.TrialReadingCriterionId, clinicalDataConfirmList, readingid, taskinfo.TrialId); ; + } // 有可能在任务生成之前 就签名完了临床数据 private bool IsClinicalDataSign(ReadingCategory readingCategory, bool isbaseLine, Guid trialReadingCriterionId, List trialClinicalDataSetList, Guid readingId, Guid trialId) @@ -468,7 +482,9 @@ namespace IRaCIS.Core.Application.Service //CRC 的自动签名 不用管 只用处理PM的就好 var haveSignedCount = _readingClinicalDataRepository - .Where(t => t.TrialId == trialId && t.IsSign && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count(); + .Where(t => t.TrialId == trialId && t.IsSign + && t.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList.Any(x=>x.TrialReadingCriterionId== trialReadingCriterionId) + && t.ReadingClinicalDataState == ReadingClinicalDataStatus.HaveSigned && t.ReadingId == readingId && t.ClinicalDataTrialSet.UploadRole == UploadRole.PM).Count(); var readModule = _readModuleRepository.Where(t => t.Id == readingId).FirstOrDefault(); diff --git a/IRaCIS.Core.Application/Service/Fixed/CriterionAdditionalAssessment.cs b/IRaCIS.Core.Application/Service/Fixed/CriterionAdditionalAssessment.cs index 2cb4b236a..54ba91882 100644 --- a/IRaCIS.Core.Application/Service/Fixed/CriterionAdditionalAssessment.cs +++ b/IRaCIS.Core.Application/Service/Fixed/CriterionAdditionalAssessment.cs @@ -66,7 +66,7 @@ namespace IRaCIS.Core.Application.Service { GroupId=gropId, LimitEdit=LimitEdit.OnlyBaseLine, - DictionaryCode="YesOrNoOrNa", + DictionaryCode="YesOrNoOrNE", IsJudgeQuestion=false, IsShowInDicom=false, GlobalReadingShowType=GlobalReadingShowType.NotShow, diff --git a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs index b3f13a70b..c73aa2032 100644 --- a/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs +++ b/IRaCIS.Core.Application/Service/Inspection/InspectionService.cs @@ -3,6 +3,7 @@ using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Application.Service.Inspection.DTO; using IRaCIS.Core.Application.Service.Inspection.Interface; using IRaCIS.Core.Domain.Share; +using IRaCIS.Core.Infra.EFCore.Common; using IRaCIS.Core.Infrastructure; using Panda.DynamicWebApi.Attributes; @@ -58,8 +59,11 @@ namespace IRaCIS.Core.Application.Service.Inspection join usertype in _repository.GetQueryable().IgnoreQueryFilters() on leftuser.UserTypeId equals usertype.Id into usertypetemp from leftusertype in usertypetemp.DefaultIfEmpty() - //join trialCriterion in _repository.GetQueryable().IgnoreQueryFilters() on data.TrialReadingCriterionId equals trialCriterion.Id into criterion - //from leftCriterion in criterion.DefaultIfEmpty() + join visttask in _repository.GetQueryable().IgnoreQueryFilters() on data.VisitTaskId equals visttask.Id into visttasktemp + from leftvisttask in visttasktemp.DefaultIfEmpty() + + //join trialCriterion in _repository.GetQueryable().IgnoreQueryFilters() on data.TrialReadingCriterionId equals trialCriterion.Id into criterion + //from leftCriterion in criterion.DefaultIfEmpty() //join moduleTyped in _repository.GetQueryable().Where(x => x.Code == "ModuleType") on 1 equals 1 //join moduleTypec in _repository.GetQueryable() on new { ParentId = moduleTyped.Id, ModuleType = data.ModuleType } equals new { ParentId = moduleTypec.ParentId.Value, ModuleType = moduleTypec.Value } into moduleTypectemp @@ -131,7 +135,7 @@ namespace IRaCIS.Core.Application.Service.Inspection ExperimentName = leftrial.ExperimentName, - SubjectCode = leftsubject.Code, + SubjectCode = leftvisttask.BlindSubjectCode.IsNullOrEmpty()? leftsubject.Code: leftvisttask.BlindSubjectCode, SiteCode = lefttrialSite.TrialSiteCode, ResearchProgramNo = leftrial.ResearchProgramNo, diff --git a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs index 3f22371f2..7c2b014d7 100644 --- a/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs +++ b/IRaCIS.Core.Application/Service/Management/DTO/UserModel.cs @@ -41,6 +41,7 @@ namespace IRaCIS.Application.Contracts public string RealName { get; set; } = string.Empty; public int? Sex { get; set; } // 1-男 2-女 + /// /// LastLoginIP /// diff --git a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs index 934262818..e5ea2ae3e 100644 --- a/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/ClinicalData/ReadingClinicalDataService.cs @@ -255,7 +255,7 @@ namespace IRaCIS.Application.Services var query = _readingClinicalDataRepository.AsQueryable(); if (inDto.StudyId != null) { - query = query.Where(x => x.StudyId == inDto.StudyId.Value); + query = query.Where(x => x.StudyId == inDto.StudyId.Value && x.TrialId==inDto.TrialId&&x.SubjectId==inDto.SubjectId); } else { @@ -1227,6 +1227,7 @@ namespace IRaCIS.Application.Services entity.ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded; entity.IsSign = false; entity.FileCount = fileCount; + entity.CreateTime=DateTime.Now; var success = await _readingConsistentClinicalDataRepository.SaveChangesAsync(); return ResponseOutput.Ok(entity.Id); diff --git a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs index 521a9d843..24c4a39ad 100644 --- a/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs +++ b/IRaCIS.Core.Application/Service/Reading/Interface/IReadingClinicalDataService.cs @@ -31,5 +31,6 @@ namespace IRaCIS.Core.Application.Contracts Task DealVisiTaskClinicalDataSignedAsync(Guid trialId, Guid subjectId, Guid readingId, bool isVisit, Guid trialReadingCritrialId); Task SignConsistencyAnalysisReadingClinicalData(SignConsistencyAnalysisReadingClinicalDataInDto inDto); + } } \ No newline at end of file diff --git a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs index 742a51a72..be961736e 100644 --- a/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs +++ b/IRaCIS.Core.Infra.EFCore/Common/AuditingData.cs @@ -158,7 +158,8 @@ namespace IRaCIS.Core.Infra.EFCore.Common t.IsTrialBasicLogicConfirmed, t.IsTrialProcessConfirmed, t.IsTrialUrgentConfirmed, - t.IsConfigureEmail + t.IsConfigureEmail, + t.IsTrialPACSConfirmed, }).FirstOrDefaultAsync(); switch (_userInfo.RequestUrl) { @@ -172,6 +173,9 @@ namespace IRaCIS.Core.Infra.EFCore.Common case "configTrialBasicInfo/ConfigTrialUrgentInfoConfirm": extraIdentification = $"/{oldentity.IsTrialUrgentConfirmed.ToString()}"; break; + case "configTrialBasicInfo/ConfigTrialPACSInfoConfirm": + extraIdentification = $"/{oldentity.IsTrialPACSConfirmed.ToString()}"; + break; case "TrialEmailNoticeConfig/setTrialEmail":