修改任务查询
							parent
							
								
									6baae40a38
								
							
						
					
					
						commit
						0e55c50d4c
					
				| 
						 | 
				
			
			@ -265,7 +265,7 @@ namespace IRaCIS.Core.Application.ViewModel
 | 
			
		|||
 | 
			
		||||
        public bool ExistReadingApply { get; set; }
 | 
			
		||||
 | 
			
		||||
        public DateTime? SuggesteFinishedTime => UnReadTaskList.Max(t => t.SuggesteFinishedTime);
 | 
			
		||||
        public DateTime? SuggesteFinishedTime { get; set; }
 | 
			
		||||
 | 
			
		||||
        public List<IRUnreadTaskView> UnReadCanReadTaskList => UnReadTaskList.Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)).ToList();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -15,6 +15,11 @@ using IRaCIS.Core.Infra.EFCore.Common;
 | 
			
		|||
using System.Linq.Expressions;
 | 
			
		||||
using IRaCIS.Application.Contracts;
 | 
			
		||||
using IRaCIS.Core.Application.Filter;
 | 
			
		||||
using DocumentFormat.OpenXml.Office2010.Word;
 | 
			
		||||
using System.Linq.Dynamic.Core;
 | 
			
		||||
using System.Linq;
 | 
			
		||||
using DocumentFormat.OpenXml.Bibliography;
 | 
			
		||||
using Org.BouncyCastle.Crypto;
 | 
			
		||||
 | 
			
		||||
namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -82,7 +87,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
 | 
			
		||||
            });
 | 
			
		||||
 | 
			
		||||
           return await _visitTaskRepository.SaveChangesAsync();
 | 
			
		||||
            return await _visitTaskRepository.SaveChangesAsync();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public async Task<List<TrialReadingCriterionDto>> GetTrialCriterionList(Guid trialId, bool isHaveSigned = true)
 | 
			
		||||
| 
						 | 
				
			
			@ -710,7 +715,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
        public async Task<PageOutput<ReadingTaskView>/*, object?)*/> GetReadingTaskList(VisitTaskQuery queryVisitTask)
 | 
			
		||||
        {
 | 
			
		||||
            var visitTaskQueryable = _visitTaskRepository.Where(t => t.TrialId == queryVisitTask.TrialId && t.IsAnalysisCreate == false)
 | 
			
		||||
                //.Where(t => t.IsAnalysisCreate == false && t.DoctorUserId != null)
 | 
			
		||||
               //.Where(t => t.IsAnalysisCreate == false && t.DoctorUserId != null)
 | 
			
		||||
 | 
			
		||||
               .WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
 | 
			
		||||
               .WhereIf(queryVisitTask.SiteId != null, t => t.Subject.SiteId == queryVisitTask.SiteId)
 | 
			
		||||
| 
						 | 
				
			
			@ -723,8 +728,8 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
               .WhereIf(queryVisitTask.TrialReadingCriterionId != null, t => t.TrialReadingCriterionId == queryVisitTask.TrialReadingCriterionId)
 | 
			
		||||
               .WhereIf(queryVisitTask.ReReadingApplyState != null, t => t.ReReadingApplyState == queryVisitTask.ReReadingApplyState)
 | 
			
		||||
 | 
			
		||||
                .WhereIf(queryVisitTask.CompleteClinicalDataEnum == CompleteClinicalDataEnum.Complete , t => t.IsClinicalDataSign && t.IsNeedClinicalDataSign == true)
 | 
			
		||||
                .WhereIf(queryVisitTask.CompleteClinicalDataEnum == CompleteClinicalDataEnum.NotComplete, t => t.IsClinicalDataSign==false && t.IsNeedClinicalDataSign==true)
 | 
			
		||||
                .WhereIf(queryVisitTask.CompleteClinicalDataEnum == CompleteClinicalDataEnum.Complete, t => t.IsClinicalDataSign && t.IsNeedClinicalDataSign == true)
 | 
			
		||||
                .WhereIf(queryVisitTask.CompleteClinicalDataEnum == CompleteClinicalDataEnum.NotComplete, t => t.IsClinicalDataSign == false && t.IsNeedClinicalDataSign == true)
 | 
			
		||||
                .WhereIf(queryVisitTask.CompleteClinicalDataEnum == CompleteClinicalDataEnum.NA, t => t.IsNeedClinicalDataSign == false)
 | 
			
		||||
               .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
 | 
			
		||||
               .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
 | 
			
		||||
| 
						 | 
				
			
			@ -773,10 +778,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
 | 
			
		||||
                .WhereIf(queryVisitTask.RequestReReadingResultEnum != null, t => t.RequestReReadingResultEnum == queryVisitTask.RequestReReadingResultEnum)
 | 
			
		||||
 | 
			
		||||
                  
 | 
			
		||||
 | 
			
		||||
                 .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.OriginalReReadingTask.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate) || (t.OriginalReReadingTask.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate == false))
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.OriginalReReadingTask.TaskName.Contains(queryVisitTask.TaskName) || t.OriginalReReadingTask.TaskBlindName.Contains(queryVisitTask.TaskName))
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.OriginalReReadingTask.Subject.Code.Contains(queryVisitTask.SubjectCode)&& t.OriginalReReadingTask.IsAnalysisCreate==false) || (t.OriginalReReadingTask.BlindSubjectCode.Contains(queryVisitTask.SubjectCode)&& t.OriginalReReadingTask.IsAnalysisCreate))
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.OriginalReReadingTask.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate == false) || (t.OriginalReReadingTask.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate))
 | 
			
		||||
                .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime > queryVisitTask.BeginAllocateDate)
 | 
			
		||||
                .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
 | 
			
		||||
                .ProjectTo<ReReadingTaskView>(_mapper.ConfigurationProvider);
 | 
			
		||||
| 
						 | 
				
			
			@ -785,7 +790,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
 | 
			
		||||
            var defalutSortArray = new string[] { nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.TaskState),
 | 
			
		||||
                nameof(ReReadingTaskView.RequestReReadingResultEnum) ,
 | 
			
		||||
                nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.IsUrgent) + " desc", 
 | 
			
		||||
                nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.IsUrgent) + " desc",
 | 
			
		||||
                nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.SubjectId),nameof(ReReadingTaskView.OriginalReReadingTask) + "." + nameof(ReReadingTaskView.OriginalReReadingTask.VisitTaskNum) };
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -825,7 +830,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
 | 
			
		||||
                 .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.OriginalReReadingTask.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate) || (t.OriginalReReadingTask.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate == false))
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.OriginalReReadingTask.TaskName.Contains(queryVisitTask.TaskName) || t.NewReReadingTask.TaskBlindName.Contains(queryVisitTask.TaskName))
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode),  t => (t.OriginalReReadingTask.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate == false) || (t.OriginalReReadingTask.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate))
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.OriginalReReadingTask.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate == false) || (t.OriginalReReadingTask.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate))
 | 
			
		||||
                .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime > queryVisitTask.BeginAllocateDate)
 | 
			
		||||
                .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
 | 
			
		||||
                .ProjectTo<ReReadingTaskView>(_mapper.ConfigurationProvider);
 | 
			
		||||
| 
						 | 
				
			
			@ -860,7 +865,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
              .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.OriginalReReadingTask.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate) || (t.OriginalReReadingTask.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.OriginalReReadingTask.IsAnalysisCreate == false))
 | 
			
		||||
 | 
			
		||||
              .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.OriginalReReadingTask.TaskName.Contains(queryVisitTask.TaskName) || t.NewReReadingTask.TaskBlindName.Contains(queryVisitTask.TaskName))
 | 
			
		||||
              .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode),  t => (t.OriginalReReadingTask.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate == false) || (t.OriginalReReadingTask.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate))
 | 
			
		||||
              .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.OriginalReReadingTask.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate == false) || (t.OriginalReReadingTask.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.OriginalReReadingTask.IsAnalysisCreate))
 | 
			
		||||
              .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime > queryVisitTask.BeginAllocateDate)
 | 
			
		||||
              .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.OriginalReReadingTask.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
 | 
			
		||||
              .ProjectTo<ReReadingTaskView>(_mapper.ConfigurationProvider);
 | 
			
		||||
| 
						 | 
				
			
			@ -997,6 +1002,9 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
 | 
			
		||||
            var visitGroupQuery = _visitTaskRepository.Where(x => x.TrialId == inDto.TrialId && x.DoctorUserId == _userInfo.Id
 | 
			
		||||
            && x.TaskState == TaskState.Effect /*&& x.TrialReadingCriterionId== inDto.TrialReadingCriterionId*/)
 | 
			
		||||
 | 
			
		||||
                //.Where(t => t.VisitTaskNum < t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) )
 | 
			
		||||
                .Where(t => t.Subject.SubjectVisitList.Any(t => t.CheckState != CheckStateEnum.CVPassed) ? t.VisitTaskNum < t.Subject.SubjectVisitList.Where(t => t.CheckState != CheckStateEnum.CVPassed).Min(t => t.VisitNum) : true)
 | 
			
		||||
                //满足前序访视不存在 需要签署但是未签署  sql  相当复杂    同时想查询所有未读的统计数字 就无法统计   byzhouhang  
 | 
			
		||||
                //但是加字段 IsFrontTaskNeedSignButNotSign   那么签名临床数据的时候,要对该subject 该标准的有效的任务  这个字段需要在签名的时候维护   采取这种方式   统计数字灵活
 | 
			
		||||
                //.Where(t => t.Subject.SubjectVisitTaskList.AsQueryable().Where(visitTaskLambda).Any(c => c.IsNeedClinicalDataSign == true && c.IsClinicalDataSign == false && c.VisitTaskNum < t.VisitTaskNum))
 | 
			
		||||
| 
						 | 
				
			
			@ -1008,8 +1016,10 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
                SubjectId = x.Key.SubjectId,
 | 
			
		||||
                SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode,
 | 
			
		||||
 | 
			
		||||
                SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime),
 | 
			
		||||
 | 
			
		||||
                //未读任务量
 | 
			
		||||
                UnReadTaskCount = x.Where(y => y.TrialReadingCriterionId== trialReadingCriterionId &&   y.ReadingTaskState != ReadingTaskState.HaveSigned).Count(),
 | 
			
		||||
                UnReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Count(),
 | 
			
		||||
 | 
			
		||||
                //未读 里可读任务量   
 | 
			
		||||
                UnReadCanReadTaskCount = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned && y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)
 | 
			
		||||
| 
						 | 
				
			
			@ -1024,7 +1034,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
                ExistReadingApply = x.Any(y => y.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed || y.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed),
 | 
			
		||||
 | 
			
		||||
                //查出所有未读的  未读的可读的  在这个列表基础上 过滤下   y.IsFrontTaskNeedSignButNotSign==false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)  这样容易排错 确认这三个字段是否维护有误
 | 
			
		||||
                UnReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned ).OrderBy(x => x.VisitTaskNum)
 | 
			
		||||
                UnReadTaskList = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).OrderBy(x => x.VisitTaskNum)
 | 
			
		||||
                .Select(u => new IRUnreadTaskView()
 | 
			
		||||
                {
 | 
			
		||||
                    Id = u.Id,
 | 
			
		||||
| 
						 | 
				
			
			@ -1035,30 +1045,31 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
                    SuggesteFinishedTime = u.SuggesteFinishedTime,
 | 
			
		||||
                    ReadingCategory = u.ReadingCategory,
 | 
			
		||||
                    IsAnalysisCreate = u.IsAnalysisCreate,
 | 
			
		||||
                    ArmEnum= u.ArmEnum,
 | 
			
		||||
                    ArmEnum = u.ArmEnum,
 | 
			
		||||
                    TrialReadingCriterionId = u.TrialReadingCriterionId,
 | 
			
		||||
                    IsNeedClinicalDataSign =u.IsNeedClinicalDataSign,
 | 
			
		||||
                    IsClinicalDataSign=u.IsClinicalDataSign,
 | 
			
		||||
                    IsFrontTaskNeedSignButNotSign=u.IsFrontTaskNeedSignButNotSign
 | 
			
		||||
                    IsNeedClinicalDataSign = u.IsNeedClinicalDataSign,
 | 
			
		||||
                    IsClinicalDataSign = u.IsClinicalDataSign,
 | 
			
		||||
                    IsFrontTaskNeedSignButNotSign = u.IsFrontTaskNeedSignButNotSign
 | 
			
		||||
                })
 | 
			
		||||
                .ToList(),
 | 
			
		||||
            }).Where(x => x.UnReadCanReadTaskCount > 0).OrderBy(x => x.UnReadCanReadTaskCount);
 | 
			
		||||
            }).Where(x => x.UnReadCanReadTaskCount > 0)/*.OrderBy(x => x.UnReadCanReadTaskCount)*/;
 | 
			
		||||
            // 有序阅片需要找到最小需要
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var count = visitGroupQuery.Count();
 | 
			
		||||
 | 
			
		||||
            var result = new List<IRUnReadSubjectView>();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            var visitTaskOrderQuery = inDto.Page.Asc ? visitTaskQuery.OrderBy(inDto.Page.SortField) : visitTaskQuery.OrderBy(inDto.Page.SortField + " desc");
 | 
			
		||||
            if (inDto.Page != null)
 | 
			
		||||
            {
 | 
			
		||||
                result = await visitTaskQuery
 | 
			
		||||
                result = await visitTaskOrderQuery
 | 
			
		||||
                     .Skip((inDto.Page.PageIndex - 1) * inDto.Page.PageSize)
 | 
			
		||||
                     .Take(inDto.Page.PageSize).ToListAsync();
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                result = await visitTaskQuery.ToListAsync();
 | 
			
		||||
                result = await visitTaskOrderQuery.ToListAsync();
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1091,7 +1102,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
                .WhereIf(queryVisitTask.TaskState != null, t => t.TaskState == queryVisitTask.TaskState)
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TrialSiteCode), t => (t.BlindTrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate) || (t.Subject.TrialSite.TrialSiteCode.Contains(queryVisitTask.TrialSiteCode!) && t.IsAnalysisCreate == false))
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryVisitTask.TaskName), t => t.TaskName.Contains(queryVisitTask.TaskName) || t.TaskBlindName.Contains(queryVisitTask.TaskName))
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate==false) || (t.BlindSubjectCode.Contains(queryVisitTask.SubjectCode)&& t.IsAnalysisCreate))
 | 
			
		||||
                .WhereIf(!string.IsNullOrEmpty(queryVisitTask.SubjectCode), t => (t.Subject.Code.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(queryVisitTask.SubjectCode) && t.IsAnalysisCreate))
 | 
			
		||||
                .WhereIf(queryVisitTask.BeginAllocateDate != null, t => t.AllocateTime > queryVisitTask.BeginAllocateDate)
 | 
			
		||||
                .WhereIf(queryVisitTask.EndAllocateDate != null, t => t.AllocateTime < queryVisitTask.EndAllocateDate!.Value.AddDays(1))
 | 
			
		||||
                .ProjectTo<IRHaveReadView>(_mapper.ConfigurationProvider);
 | 
			
		||||
| 
						 | 
				
			
			@ -1940,7 +1951,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
 | 
			
		||||
            var criterionConfig = (await _trialReadingCriterionRepository.Where(x => x.Id == task.TrialReadingCriterionId).Select(x => new { x.ReadingTool, x.IsReadingTaskViewInOrder }).FirstOrDefaultAsync()).IfNullThrowException();
 | 
			
		||||
 | 
			
		||||
            if (task.TaskState != TaskState.Effect || task.ReadingCategory != ReadingCategory.Visit || task.ReadingTaskState == ReadingTaskState.HaveSigned )
 | 
			
		||||
            if (task.TaskState != TaskState.Effect || task.ReadingCategory != ReadingCategory.Visit || task.ReadingTaskState == ReadingTaskState.HaveSigned)
 | 
			
		||||
            {
 | 
			
		||||
                return ResponseOutput.NotOk("仅仅允许针对生效、未完成的访视任务进行退回操作,请刷新页面数据");
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -2266,13 +2277,18 @@ namespace IRaCIS.Core.Application.Service.Allocation
 | 
			
		|||
 | 
			
		||||
            if (sv.IsBaseLine)
 | 
			
		||||
            {
 | 
			
		||||
                await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && (t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit),c=>new ReadingClinicalData() { IsSign=false,ReadingClinicalDataState=ReadingClinicalDataStatus.HaveUploaded});
 | 
			
		||||
                await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && (t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.Subject || t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit), c => new ReadingClinicalData() { IsSign = false, ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded });
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id &&  t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit, c => new ReadingClinicalData() { 
 | 
			
		||||
                    IsSign = false, ReadingClinicalDataState =ReadingClinicalDataStatus.HaveUploaded,IsBlind=null,IsComplete=null });
 | 
			
		||||
                await _readingClinicalDataReposiotry.UpdatePartialFromQueryAsync(t => t.ReadingId == sv.Id && t.ClinicalDataTrialSet.ClinicalDataLevel == ClinicalLevel.SubjectVisit, c => new ReadingClinicalData()
 | 
			
		||||
                {
 | 
			
		||||
                    IsSign = false,
 | 
			
		||||
                    ReadingClinicalDataState = ReadingClinicalDataStatus.HaveUploaded,
 | 
			
		||||
                    IsBlind = null,
 | 
			
		||||
                    IsComplete = null
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,7 +59,7 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
 | 
			
		|||
                             {
 | 
			
		||||
                                 SubjectVisitId = sv.Id,
 | 
			
		||||
                                 SiteCode = trialSite.TrialSiteCode,
 | 
			
		||||
                                 StudyDate = study.StudyTime == null?string.Empty: ((DateTime)study.StudyTime).ToString("yyyy-MM-dd"),
 | 
			
		||||
                                 StudyDate = study.StudyTime == null ? string.Empty : ((DateTime)study.StudyTime).ToString("yyyy-MM-dd"),
 | 
			
		||||
                                 StudyId = study.Id,
 | 
			
		||||
                                 Modality = study.ModalityForEdit,
 | 
			
		||||
                                 SubjectCode = subject.Code,
 | 
			
		||||
| 
						 | 
				
			
			@ -81,143 +81,181 @@ namespace IRaCIS.Core.Application.MediatR.Handlers
 | 
			
		|||
                                    VisitName = sv.VisitName,
 | 
			
		||||
                                };
 | 
			
		||||
 | 
			
		||||
            var dbList = (await dicomQuery.ToListAsync()).Union(await noneDicomQuey.ToListAsync());
 | 
			
		||||
            var dbList = (await dicomQuery.ToListAsync()).Union(await noneDicomQuey.ToListAsync()).ToList();
 | 
			
		||||
 | 
			
		||||
            //处理数据库 大小写
 | 
			
		||||
            dbList.ForEach(t => { t.Modality = t.Modality.ToUpper().Trim(); t.SiteCode = t.SiteCode.ToUpper().Trim(); t.VisitName = t.VisitName.ToUpper().Trim(); t.SubjectCode = t.SubjectCode.ToUpper().Trim(); });
 | 
			
		||||
 | 
			
		||||
            var dbCheckList = _mapper.Map<List<CheckViewModel>>(dbList);
 | 
			
		||||
 | 
			
		||||
            //按照数据库数据访视分组
 | 
			
		||||
            var svGroup = dbList.GroupBy(t => new { t.SubjectVisitId, t.SiteCode, t.SubjectCode, t.VisitName })
 | 
			
		||||
                   .Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, g.Key.SubjectVisitId, StudyList = g.ToList() }).ToList();
 | 
			
		||||
            ////按照数据库数据访视分组   按照数据库的数据 一个个的访视对比 
 | 
			
		||||
            //var svGroup = dbList.GroupBy(t => new { t.SubjectVisitId, t.SiteCode, t.SubjectCode, t.VisitName })
 | 
			
		||||
            //       .Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, g.Key.SubjectVisitId, StudyList = g.ToList() }).ToList();
 | 
			
		||||
 | 
			
		||||
           
 | 
			
		||||
            foreach (var sv in svGroup)
 | 
			
		||||
            //按照Excel数据访视分组   按照数据库的数据 一个个的访视对比 
 | 
			
		||||
            var svExcelGroup = etcList.GroupBy(t => new { t.SiteCode, t.SubjectCode, t.VisitName })
 | 
			
		||||
                   .Select(g => new { g.Key.SubjectCode, g.Key.VisitName, g.Key.SiteCode, ExcelStudyList = g.ToList() }).ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            foreach (var sv in svExcelGroup)
 | 
			
		||||
            {
 | 
			
		||||
 | 
			
		||||
                //找到etc 当前visit  site  和subject 一致的检查列表
 | 
			
		||||
                var etcVisitStudyList = etcList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
 | 
			
		||||
                var dbVisitStudyList = dbCheckList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                StringBuilder dialogMsg = new StringBuilder();
 | 
			
		||||
                dialogMsg.Append("您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下:");
 | 
			
		||||
                var num = 0;
 | 
			
		||||
                List<ParamInfoDto> paramInfoList = new List<ParamInfoDto>();
 | 
			
		||||
                foreach (var item in sv.StudyList)
 | 
			
		||||
                //Excel 的数据 在IRC 中可以找到该访视
 | 
			
		||||
                if (dbCheckList.Any(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName))
 | 
			
		||||
                {
 | 
			
		||||
                    num++;
 | 
			
		||||
                    dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查");
 | 
			
		||||
                    paramInfoList.Add(new ParamInfoDto()
 | 
			
		||||
                    {
 | 
			
		||||
                        Modality= item.Modality,
 | 
			
		||||
                        StudyDate= item.StudyDate,
 | 
			
		||||
                    });
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
                var dbSV = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == sv.SubjectVisitId)).IfNullThrowException();
 | 
			
		||||
                    var dbVisitStudyList = dbList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
 | 
			
		||||
 | 
			
		||||
                    //找到etc 当前visit  site  和subject 一致的检查列表
 | 
			
		||||
                    var etcVisitStudyList = etcList.Where(t => t.SubjectCode == sv.SubjectCode && t.SiteCode == sv.SiteCode && t.VisitName == sv.VisitName).ToList();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                // 该访视 在EDC Excel中没有任何数据
 | 
			
		||||
                if (etcVisitStudyList.Count == 0)
 | 
			
		||||
                {
 | 
			
		||||
                    dialogMsg.AppendLine($"<br/>");
 | 
			
		||||
                    dialogMsg.AppendLine($"<br><span style='color: #f00'>存在问题如下:</span>");
 | 
			
		||||
                    num = 0;
 | 
			
		||||
                    foreach (var item in sv.StudyList)
 | 
			
		||||
 | 
			
		||||
                    StringBuilder dialogMsg = new StringBuilder();
 | 
			
		||||
                    dialogMsg.Append("您好,根据本系统自动识别,该受试者当前访视在IRC系统中已提交的影像检查情况如下:");
 | 
			
		||||
                    var num = 0;
 | 
			
		||||
                    List<ParamInfoDto> paramInfoList = new List<ParamInfoDto>();
 | 
			
		||||
                    foreach (var item in dbVisitStudyList)
 | 
			
		||||
                    {
 | 
			
		||||
                        num++;
 | 
			
		||||
                        dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(EDC 缺少) ");
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    dialogMsg.AppendLine($"<br/>");
 | 
			
		||||
                    dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
 | 
			
		||||
 | 
			
		||||
                    dbSV.CheckResult = "当前访视在EDC表中未找到数据,请核对 SubjectCode、 SiteCode 、VisitName 是否和EDC系统保持一致";
 | 
			
		||||
                    dbSV.CheckState = CheckStateEnum.CVIng;
 | 
			
		||||
                    dbSV.ForwardState = ForwardStateEnum.ToForward;
 | 
			
		||||
                    dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
 | 
			
		||||
                    dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() {
 | 
			
		||||
                        SubjectVisitId = sv.SubjectVisitId, 
 | 
			
		||||
                        IsCRCNeedReply= true,
 | 
			
		||||
                        TalkContent =  dialogMsg.ToString(),
 | 
			
		||||
                        ParamInfo= JsonConvert.SerializeObject(paramInfoList),
 | 
			
		||||
                        UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,CreateTime=DateTime.Now });
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    //etc 和数据库 并集
 | 
			
		||||
                    var unionList = dbVisitStudyList.Union(etcVisitStudyList);
 | 
			
		||||
                    // 数据库存在
 | 
			
		||||
                    var dbExceptExcel = dbVisitStudyList.Except(etcVisitStudyList);
 | 
			
		||||
 | 
			
		||||
                    // excel 存在
 | 
			
		||||
                    var excelExceptDB = etcVisitStudyList.Except(dbCheckList);
 | 
			
		||||
 | 
			
		||||
                    //ETC 和系统的完全一致    两者没有差别
 | 
			
		||||
                    if (dbExceptExcel.Count() == 0 && excelExceptDB.Count()==0)
 | 
			
		||||
                    {
 | 
			
		||||
                        dialogMsg.AppendLine($"<br/>");
 | 
			
		||||
                        dialogMsg.AppendLine($"核对EDC数据,完全一致, 审核通过");
 | 
			
		||||
            
 | 
			
		||||
 | 
			
		||||
                        // dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
 | 
			
		||||
                        dbSV.CheckState = CheckStateEnum.CVPassed;
 | 
			
		||||
                        dbSV.CheckUserId = _userInfo.Id;
 | 
			
		||||
                        dbSV.CheckPassedTime = DateTime.Now;
 | 
			
		||||
                        dbSV.CheckResult = "核对EDC数据,完全一致";
 | 
			
		||||
                        dbSV.ManualPassReason = "自动核查通过";
 | 
			
		||||
 | 
			
		||||
                        //维护状态
 | 
			
		||||
                        dbSV.ReadingStatus = ReadingStatusEnum.TaskAllocate;
 | 
			
		||||
 | 
			
		||||
                        dbSV.RequestBackState = dbSV.RequestBackState== RequestBackStateEnum.CRC_RequestBack? RequestBackStateEnum.PM_NotAgree: RequestBackStateEnum.NotRequest;
 | 
			
		||||
                        dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId,
 | 
			
		||||
                            ParamInfo = JsonConvert.SerializeObject(paramInfoList),
 | 
			
		||||
                            TalkContent = dialogMsg.ToString(), UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt, CreateTime = DateTime.Now });
 | 
			
		||||
                    }
 | 
			
		||||
                    // ETC  和系统的有区别
 | 
			
		||||
                    else
 | 
			
		||||
                    {
 | 
			
		||||
                        dialogMsg.AppendLine($"<br/>");
 | 
			
		||||
                        dialogMsg.AppendLine($"<br><span style='color: #f00'>存在问题如下:</span>");
 | 
			
		||||
 | 
			
		||||
                        num = 0;
 | 
			
		||||
                        foreach (var item in dbExceptExcel)
 | 
			
		||||
                        dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查");
 | 
			
		||||
                        paramInfoList.Add(new ParamInfoDto()
 | 
			
		||||
                        {
 | 
			
		||||
                            num++;
 | 
			
		||||
                            dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(EDC 缺少) ");
 | 
			
		||||
                            Modality = item.Modality,
 | 
			
		||||
                            StudyDate = item.StudyDate,
 | 
			
		||||
                        });
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    var subjectVisitId = dbVisitStudyList.FirstOrDefault().SubjectVisitId;
 | 
			
		||||
                    var dbSV = (await _subjectVisitRepository.FirstOrDefaultAsync(t => t.Id == subjectVisitId)).IfNullThrowException();
 | 
			
		||||
 | 
			
		||||
                    #region 更换核对的顺序 以Excel 数据为准 注释
 | 
			
		||||
                    //// 该访视 在EDC Excel中没有任何数据
 | 
			
		||||
                    //if (etcVisitStudyList.Count == 0)
 | 
			
		||||
                    //{
 | 
			
		||||
                    //    dialogMsg.AppendLine($"<br/>");
 | 
			
		||||
                    //    dialogMsg.AppendLine($"<br><span style='color: #f00'>存在问题如下:</span>");
 | 
			
		||||
                    //    num = 0;
 | 
			
		||||
                    //    foreach (var item in sv.StudyList)
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        num++;
 | 
			
		||||
                    //        dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(EDC 缺少) ");
 | 
			
		||||
                    //    }
 | 
			
		||||
 | 
			
		||||
                    //    dialogMsg.AppendLine($"<br/>");
 | 
			
		||||
                    //    dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
 | 
			
		||||
 | 
			
		||||
                    //    dbSV.CheckResult = "当前访视在EDC表中未找到数据,请核对 SubjectCode、 SiteCode 、VisitName 是否和EDC系统保持一致";
 | 
			
		||||
                    //    dbSV.CheckState = CheckStateEnum.CVIng;
 | 
			
		||||
                    //    dbSV.ForwardState = ForwardStateEnum.ToForward;
 | 
			
		||||
                    //    dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
 | 
			
		||||
                    //    dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog()
 | 
			
		||||
                    //    {
 | 
			
		||||
                    //        SubjectVisitId = sv.SubjectVisitId,
 | 
			
		||||
                    //        IsCRCNeedReply = true,
 | 
			
		||||
                    //        TalkContent = dialogMsg.ToString(),
 | 
			
		||||
                    //        ParamInfo = JsonConvert.SerializeObject(paramInfoList),
 | 
			
		||||
                    //        UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
 | 
			
		||||
                    //        CreateTime = DateTime.Now
 | 
			
		||||
                    //    });
 | 
			
		||||
                    //}
 | 
			
		||||
                    //else
 | 
			
		||||
                    #endregion
 | 
			
		||||
 | 
			
		||||
                    {
 | 
			
		||||
                        //etc 和数据库 并集
 | 
			
		||||
                        var unionList = dbVisitStudyList.Union(etcVisitStudyList);
 | 
			
		||||
                        // 数据库存在
 | 
			
		||||
                        var dbExceptExcel = dbVisitStudyList.Except(etcVisitStudyList);
 | 
			
		||||
 | 
			
		||||
                        // excel 存在
 | 
			
		||||
                        var excelExceptDB = etcVisitStudyList.Except(dbCheckList);
 | 
			
		||||
 | 
			
		||||
                        //ETC 和系统的完全一致    两者没有差别
 | 
			
		||||
                        if (dbExceptExcel.Count() == 0 && excelExceptDB.Count() == 0)
 | 
			
		||||
                        {
 | 
			
		||||
                            dialogMsg.AppendLine($"<br/>");
 | 
			
		||||
                            dialogMsg.AppendLine($"核对EDC数据,完全一致, 审核通过");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                            // dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
 | 
			
		||||
                            dbSV.CheckState = CheckStateEnum.CVPassed;
 | 
			
		||||
                            dbSV.CheckUserId = _userInfo.Id;
 | 
			
		||||
                            dbSV.CheckPassedTime = DateTime.Now;
 | 
			
		||||
                            dbSV.CheckResult = "核对EDC数据,完全一致";
 | 
			
		||||
                            dbSV.ManualPassReason = "自动核查通过";
 | 
			
		||||
 | 
			
		||||
                            //维护状态
 | 
			
		||||
                            dbSV.ReadingStatus = ReadingStatusEnum.TaskAllocate;
 | 
			
		||||
 | 
			
		||||
                            dbSV.RequestBackState = dbSV.RequestBackState == RequestBackStateEnum.CRC_RequestBack ? RequestBackStateEnum.PM_NotAgree : RequestBackStateEnum.NotRequest;
 | 
			
		||||
                            dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog()
 | 
			
		||||
                            {
 | 
			
		||||
                                SubjectVisitId = subjectVisitId,
 | 
			
		||||
                                ParamInfo = JsonConvert.SerializeObject(paramInfoList),
 | 
			
		||||
                                TalkContent = dialogMsg.ToString(),
 | 
			
		||||
                                UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
 | 
			
		||||
                                CreateTime = DateTime.Now
 | 
			
		||||
                            });
 | 
			
		||||
                        }
 | 
			
		||||
                        // ETC  和系统的有区别
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            dialogMsg.AppendLine($"<br/>");
 | 
			
		||||
                            dialogMsg.AppendLine($"<br><span style='color: #f00'>存在问题如下:</span>");
 | 
			
		||||
 | 
			
		||||
                            num = 0;
 | 
			
		||||
                            foreach (var item in dbExceptExcel)
 | 
			
		||||
                            {
 | 
			
		||||
                                num++;
 | 
			
		||||
                                dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(EDC 缺少) ");
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            foreach (var item in excelExceptDB)
 | 
			
		||||
                            {
 | 
			
		||||
                                num++;
 | 
			
		||||
                                dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(IRC 缺少) ");
 | 
			
		||||
                            }
 | 
			
		||||
 | 
			
		||||
                            dialogMsg.AppendLine($"<br/>");
 | 
			
		||||
                            dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
 | 
			
		||||
 | 
			
		||||
                            dbSV.CheckResult = "根据导入的一致性核查数据,请确认本访视以下不一致检查项信息:" + String.Join(" | ", dbExceptExcel.Select(t => $"EDC 缺少:{t.StudyDate} {t.Modality} ")) + "  |  "
 | 
			
		||||
                              + String.Join(" | ", excelExceptDB.Select(t => $"IRC 缺少:{t.StudyDate} {t.Modality}"));
 | 
			
		||||
                            //新增一致性核查质疑记录
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
                            dbSV.CheckState = CheckStateEnum.CVIng;
 | 
			
		||||
                            dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
 | 
			
		||||
 | 
			
		||||
                            //讲核查结果发送消息给CRC
 | 
			
		||||
                            dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog()
 | 
			
		||||
                            {
 | 
			
		||||
                                SubjectVisitId = subjectVisitId,
 | 
			
		||||
                                IsCRCNeedReply = true,
 | 
			
		||||
                                TalkContent = dialogMsg.ToString(),
 | 
			
		||||
                                ParamInfo = JsonConvert.SerializeObject(paramInfoList),
 | 
			
		||||
                                UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt,
 | 
			
		||||
                                CreateTime = DateTime.Now
 | 
			
		||||
                            });
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        foreach (var item in excelExceptDB)
 | 
			
		||||
                        {
 | 
			
		||||
                            num++;
 | 
			
		||||
                            dialogMsg.AppendLine($"<br>{num}.{item.StudyDate}的{item.Modality}影像检查(IRC 缺少) ");
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
                        dialogMsg.AppendLine($"<br/>");
 | 
			
		||||
                        dialogMsg.AppendLine(@$"<br>说明:为高效解决/处理以上全部质疑问题,麻烦您准确核实实际影像检查情况。请注意影像日期与实际检查的日期可能会不一致,部分检查(如PET -CT)可能同时存在多种模态影像。准确核实后,请回复该访视正确的影像检查情况。");
 | 
			
		||||
 | 
			
		||||
                        dbSV.CheckResult = "根据导入的一致性核查数据,请确认本访视以下不一致检查项信息:" + String.Join(" | ", dbExceptExcel.Select(t => $"EDC 缺少:{t.StudyDate} {t.Modality} ")) + "  |  "
 | 
			
		||||
                          + String.Join(" | ", excelExceptDB.Select(t => $"IRC 缺少:{t.StudyDate} {t.Modality}"));
 | 
			
		||||
                        //新增一致性核查质疑记录
 | 
			
		||||
                       
 | 
			
		||||
 | 
			
		||||
                        dbSV.CheckState = CheckStateEnum.CVIng;
 | 
			
		||||
                        dbSV.CheckChallengeState = CheckChanllengeTypeEnum.PMWaitCRCReply;
 | 
			
		||||
 | 
			
		||||
                        //讲核查结果发送消息给CRC
 | 
			
		||||
                        dbSV.CheckChallengeDialogList.Add(new CheckChallengeDialog() { SubjectVisitId = sv.SubjectVisitId, IsCRCNeedReply = true, TalkContent = dialogMsg.ToString(),
 | 
			
		||||
                            ParamInfo = JsonConvert.SerializeObject(paramInfoList),
 | 
			
		||||
                            UserTypeEnum = (UserTypeEnum)_userInfo.UserTypeEnumInt, CreateTime = DateTime.Now });
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                    dbSV.CheckTime = DateTime.Now;
 | 
			
		||||
                }
 | 
			
		||||
                dbSV.CheckTime = DateTime.Now;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
               
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            await _subjectVisitRepository.SaveChangesAsync();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -310,6 +310,8 @@ namespace IRaCIS.Core.Domain.Models
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        [JsonIgnore]
 | 
			
		||||
 | 
			
		||||
        public Trial Trial { get; set; }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue