Merge branch '中心影像_Test环境' of http://192.168.1.2:8033/IRaCIS_Core_Api into 中心影像_Test环境
commit
42e64d77cb
|
@ -276,7 +276,7 @@ namespace IRaCIS.Core.Application.ViewModel
|
||||||
|
|
||||||
public Guid? ClaimUserId { get; set; }
|
public Guid? ClaimUserId { get; set; }
|
||||||
|
|
||||||
|
public string? ClaimUserName { get; set; }
|
||||||
public bool IsUrgent => UnReadTaskList.Any(t => t.IsUrgent);
|
public bool IsUrgent => UnReadTaskList.Any(t => t.IsUrgent);
|
||||||
|
|
||||||
public int UnReadTaskCount { get; set; }
|
public int UnReadTaskCount { get; set; }
|
||||||
|
|
|
@ -618,13 +618,15 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
var visitQuery = _visitTaskRepository
|
var visitQuery = _visitTaskRepository
|
||||||
.Where(x => x.TrialId == inDto.TrialId && x.TaskState == TaskState.Effect)
|
.Where(x => x.TrialId == inDto.TrialId && x.TaskState == TaskState.Effect)
|
||||||
|
|
||||||
//PI 读基线的时候,subject 如果基线没阅片完,SR就不能看
|
//PI 读基线的时候,subject 如果PI基线没阅片完,SR就不能看
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR && piReadingScopenEnum == PIReadingScopenEnum.AllBaseline,
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR && piReadingScopenEnum == PIReadingScopenEnum.AllBaseline,
|
||||||
t => t.Subject.SubjectVisitTaskList.Any(c => c.SourceSubjectVisit.IsBaseLine == true && c.ReadingTaskState == ReadingTaskState.HaveSigned))
|
t => t.Subject.SubjectVisitTaskList.Any(c => c.SourceSubjectVisit.IsBaseLine == true && c.ReadingTaskState == ReadingTaskState.HaveSigned && c.TaskState == TaskState.Effect))
|
||||||
|
|
||||||
//PI 读随访的时候, subject 如果基线没阅片完,SR就不能看
|
//PI 读随访的时候, subject 如果SR基线没阅片完,PI就不能看
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.PI && piReadingScopenEnum == PIReadingScopenEnum.AllVisit,
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.PI && piReadingScopenEnum == PIReadingScopenEnum.AllVisit,
|
||||||
t => t.Subject.SubjectVisitTaskList.Any(c => c.SourceSubjectVisit.IsBaseLine == true && c.ReadingTaskState == ReadingTaskState.HaveSigned && t.TaskState == TaskState.Effect))
|
t => t.Subject.SubjectVisitTaskList.Any(c => c.SourceSubjectVisit.IsBaseLine == true && c.ReadingTaskState == ReadingTaskState.HaveSigned && c.TaskState == TaskState.Effect))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR, t => t.Subject.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR, t => t.Subject.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id))
|
||||||
// 仅仅SR阅片 PI 没有任务列表
|
// 仅仅SR阅片 PI 没有任务列表
|
||||||
|
@ -639,7 +641,7 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
t => true)
|
t => true)
|
||||||
|
|
||||||
.WhereIf(readingDivisionEnum == ReadingDivisionEnum.PIandSR && _userInfo.UserTypeEnumInt == (int)UserTypeEnum.PI && piReadingScopenEnum == PIReadingScopenEnum.AllVisit,
|
.WhereIf(readingDivisionEnum == ReadingDivisionEnum.PIandSR && _userInfo.UserTypeEnumInt == (int)UserTypeEnum.PI && piReadingScopenEnum == PIReadingScopenEnum.AllVisit,
|
||||||
t => t.SourceSubjectVisit.IsBaseLine == false)
|
t => t.SourceSubjectVisit.IsBaseLine == false )
|
||||||
|
|
||||||
.WhereIf(readingDivisionEnum == ReadingDivisionEnum.PIandSR && _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR && piReadingScopenEnum == PIReadingScopenEnum.AllBaseline,
|
.WhereIf(readingDivisionEnum == ReadingDivisionEnum.PIandSR && _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR && piReadingScopenEnum == PIReadingScopenEnum.AllBaseline,
|
||||||
t => t.SourceSubjectVisit.IsBaseLine == false)
|
t => t.SourceSubjectVisit.IsBaseLine == false)
|
||||||
|
@ -651,21 +653,24 @@ namespace IRaCIS.Core.Application.Service.Allocation
|
||||||
.WhereIf(readingDivisionEnum == ReadingDivisionEnum.PIandSR && _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR && piReadingScopenEnum == PIReadingScopenEnum.AllVisit,
|
.WhereIf(readingDivisionEnum == ReadingDivisionEnum.PIandSR && _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SR && piReadingScopenEnum == PIReadingScopenEnum.AllVisit,
|
||||||
t => t.SourceSubjectVisit.IsBaseLine == true)
|
t => t.SourceSubjectVisit.IsBaseLine == true)
|
||||||
|
|
||||||
//前序 不存在 未生成任务的访视
|
|
||||||
.WhereIf(critrion.IsAutoCreate == false, t => !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(t => t.TrialReadingCriterionId == trialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum))
|
|
||||||
|
|
||||||
// 前序 不存在 未一致性核查未通过的
|
// 前序 不存在 未一致性核查未通过的 并且前序不存在未完成阅片的有效任务
|
||||||
.Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum))
|
.Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum ))
|
||||||
|
|
||||||
|
//.WhereIf(piReadingScopenEnum == PIReadingScopenEnum.AllVisit,t =>
|
||||||
|
// !t.Subject.SubjectVisitTaskList.Any(tk => tk.ReadingTaskState != ReadingTaskState.HaveSigned && tk.TaskState == TaskState.Effect && tk.VisitTaskNum < t.VisitTaskNum))
|
||||||
|
|
||||||
.WhereIf(!string.IsNullOrEmpty(inDto.SubjectCode), t => (t.Subject.Code.Contains(inDto.SubjectCode) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inDto.SubjectCode) && t.IsAnalysisCreate));
|
.WhereIf(!string.IsNullOrEmpty(inDto.SubjectCode), t => (t.Subject.Code.Contains(inDto.SubjectCode) && t.IsAnalysisCreate == false) || (t.BlindSubjectCode.Contains(inDto.SubjectCode) && t.IsAnalysisCreate));
|
||||||
|
|
||||||
|
|
||||||
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode, x.Subject.ClaimUserId });
|
var visitGroupQuery = visitQuery.GroupBy(x => new { x.SubjectId, x.Subject.Code, x.BlindSubjectCode, x.Subject.ClaimUserId ,x.Subject.ClaimUser.UserName });
|
||||||
|
|
||||||
var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView()
|
var visitTaskQuery = visitGroupQuery.Select(x => new IRUnReadSubjectView()
|
||||||
{
|
{
|
||||||
SubjectId = x.Key.SubjectId,
|
SubjectId = x.Key.SubjectId,
|
||||||
SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode,
|
SubjectCode = x.Key.BlindSubjectCode == string.Empty ? x.Key.Code : x.Key.BlindSubjectCode,
|
||||||
ClaimUserId = x.Key.ClaimUserId,
|
ClaimUserId = x.Key.ClaimUserId,
|
||||||
|
ClaimUserName=x.Key.UserName,
|
||||||
|
|
||||||
SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime),
|
SuggesteFinishedTime = x.Where(y => y.TrialReadingCriterionId == trialReadingCriterionId && y.ReadingTaskState != ReadingTaskState.HaveSigned).Min(x => x.SuggesteFinishedTime),
|
||||||
|
|
||||||
|
|
|
@ -88,7 +88,6 @@ namespace IRaCIS.Core.Application.Service
|
||||||
await _internationalizationRepository.SaveChangesAsync();
|
await _internationalizationRepository.SaveChangesAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -106,7 +105,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
if (addOrEditInternationalization.InternationalizationType == 1)
|
if (addOrEditInternationalization.InternationalizationType == 1)
|
||||||
{
|
{
|
||||||
await InternationalizationHelper.AddOrUpdateJsonKeyValueAsync(entity.Code, entity.Value, entity.ValueCN);
|
await InternationalizationHelper.AddOrUpdateJsonKeyValueAsync(entity.Code, addOrEditInternationalization.Value, addOrEditInternationalization.ValueCN);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -235,7 +235,17 @@ namespace IRaCIS.Core.Application.Services
|
||||||
var isAdditionalAssessment = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId && t.IsSigned && t.IsAdditionalAssessment == true
|
var isAdditionalAssessment = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId && t.IsSigned && t.IsAdditionalAssessment == true
|
||||||
&&t.TrialCriterionAdditionalAssessmentTypeList.Any(c=>/*c.AdditionalAssessmentType==Domain.Share.Reading.AdditionalAssessmentType.BrainMetastasis &&*/ c.IsSelected==true)).Any();
|
&&t.TrialCriterionAdditionalAssessmentTypeList.Any(c=>/*c.AdditionalAssessmentType==Domain.Share.Reading.AdditionalAssessmentType.BrainMetastasis &&*/ c.IsSelected==true)).Any();
|
||||||
|
|
||||||
return ResponseOutput.Ok<PageOutput<UnionDocumentWithConfirmInfoView>>( result, new { NeedSignCount = needSignTrialDocCount + needSignSystemDocCount, NeedSignTrialDocCount = needSignTrialDocCount, NeedSignSystemDocCount = needSignSystemDocCount, IsAdditionalAssessment = isAdditionalAssessment && isManualGenerateTask, TrialStatusStr = trialInfo.TrialStatusStr,TrialConfig= trialTaskConfig });
|
|
||||||
|
var isAllOnlySRReading = _readingQuestionCriterionTrialRepository.Where(t => t.TrialId == trialId && t.IsSigned).All(t => t.ReadingDivisionEnum == ReadingDivisionEnum.OnlySR);
|
||||||
|
|
||||||
|
return ResponseOutput.Ok<PageOutput<UnionDocumentWithConfirmInfoView>>( result, new {
|
||||||
|
NeedSignCount = needSignTrialDocCount + needSignSystemDocCount,
|
||||||
|
NeedSignTrialDocCount = needSignTrialDocCount,
|
||||||
|
NeedSignSystemDocCount = needSignSystemDocCount,
|
||||||
|
IsAllOnlySRReading= isAllOnlySRReading,
|
||||||
|
IsAdditionalAssessment = isAdditionalAssessment && isManualGenerateTask,
|
||||||
|
TrialStatusStr = trialInfo.TrialStatusStr,
|
||||||
|
TrialConfig= trialTaskConfig });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -35,9 +35,7 @@ namespace IRaCIS.Core.Application.Service
|
||||||
.ForMember(d => d.SiteName, u => u.MapFrom(s => s.Site.SiteName))
|
.ForMember(d => d.SiteName, u => u.MapFrom(s => s.Site.SiteName))
|
||||||
.ForMember(d => d.UploaderFirstName, u => u.MapFrom(s => s.Uploader.FirstName))
|
.ForMember(d => d.UploaderFirstName, u => u.MapFrom(s => s.Uploader.FirstName))
|
||||||
.ForMember(d => d.UploaderLastName, u => u.MapFrom(s => s.Uploader.LastName))
|
.ForMember(d => d.UploaderLastName, u => u.MapFrom(s => s.Uploader.LastName))
|
||||||
.ForMember(d => d.UploadedTime, u => u.MapFrom(s => s.CreateTime))
|
.ForMember(d => d.UploadedTime, u => u.MapFrom(s => s.CreateTime));
|
||||||
|
|
||||||
.ForMember(d => d.DTFCount, u => u.MapFrom(s => s.StudyDTFList.Count()));
|
|
||||||
|
|
||||||
CreateMap<Subject, StudyDTO>();
|
CreateMap<Subject, StudyDTO>();
|
||||||
|
|
||||||
|
@ -61,7 +59,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
CreateMap<DicomStudy, QAStudyInfoDTO>()
|
CreateMap<DicomStudy, QAStudyInfoDTO>()
|
||||||
.ForMember(o => o.UploadedTime, t => t.MapFrom(u => u.CreateTime))
|
.ForMember(o => o.UploadedTime, t => t.MapFrom(u => u.CreateTime))
|
||||||
.ForMember(o => o.Uploader, t => t.MapFrom(u => u.Uploader.LastName + " / " + u.Uploader.FirstName))
|
.ForMember(o => o.Uploader, t => t.MapFrom(u => u.Uploader.LastName + " / " + u.Uploader.FirstName))
|
||||||
.ForMember(o => o.StudyId, t => t.MapFrom(u => u.Id));
|
.ForMember(o => o.StudyId, t => t.MapFrom(u => u.Id))
|
||||||
|
.ForMember(o => o.Modalities, t => t.MapFrom(u => string.Join('、', u.SeriesList.Select(t => t.Modality).Distinct()) ));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -100,6 +100,10 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
|
|
||||||
public string TaskBlindName { get; set; }
|
public string TaskBlindName { get; set; }
|
||||||
|
|
||||||
|
public string TaskName { get; set; }
|
||||||
|
|
||||||
|
public UserTypeEnum UserTypeEnum { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 阅片类别
|
/// 阅片类别
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -614,7 +618,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
||||||
public Arm ArmEnum { get; set; }
|
public Arm ArmEnum { get; set; }
|
||||||
|
|
||||||
|
|
||||||
|
public UserTypeEnum UserTypeEnum { get; set; }
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 评估结果
|
/// 评估结果
|
||||||
|
|
|
@ -180,6 +180,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
//JudgeVisitTaskId = x.JudgeVisitTaskId,
|
//JudgeVisitTaskId = x.JudgeVisitTaskId,
|
||||||
JudgeResultArm = x.JudgeResultTask.ArmEnum,
|
JudgeResultArm = x.JudgeResultTask.ArmEnum,
|
||||||
SubjectId = x.SubjectId,
|
SubjectId = x.SubjectId,
|
||||||
|
|
||||||
|
UserTypeEnum=x.DoctorUser.UserTypeEnum
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
@ -204,6 +206,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
TaskName = x.TaskName,
|
TaskName = x.TaskName,
|
||||||
SouceReadModuleId = x.SouceReadModuleId,
|
SouceReadModuleId = x.SouceReadModuleId,
|
||||||
SourceSubjectVisitId = x.SourceSubjectVisitId,
|
SourceSubjectVisitId = x.SourceSubjectVisitId,
|
||||||
|
|
||||||
|
UserTypeEnum = x.DoctorUser.UserTypeEnum
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
medicalReviewInfo.TaskList.ForEach(x =>
|
medicalReviewInfo.TaskList.ForEach(x =>
|
||||||
|
@ -234,6 +238,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
SouceReadModuleId = x.SouceReadModuleId,
|
SouceReadModuleId = x.SouceReadModuleId,
|
||||||
SourceSubjectVisitId = x.SourceSubjectVisitId,
|
SourceSubjectVisitId = x.SourceSubjectVisitId,
|
||||||
SubjectId = x.SubjectId,
|
SubjectId = x.SubjectId,
|
||||||
|
|
||||||
|
UserTypeEnum = x.DoctorUser.UserTypeEnum
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
List<TaskInfo> otherTask = await _visitTaskRepository.Where(x =>
|
List<TaskInfo> otherTask = await _visitTaskRepository.Where(x =>
|
||||||
|
@ -258,6 +264,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
TaskName = x.TaskName,
|
TaskName = x.TaskName,
|
||||||
SouceReadModuleId = x.SouceReadModuleId,
|
SouceReadModuleId = x.SouceReadModuleId,
|
||||||
SourceSubjectVisitId = x.SourceSubjectVisitId,
|
SourceSubjectVisitId = x.SourceSubjectVisitId,
|
||||||
|
|
||||||
|
UserTypeEnum = x.DoctorUser.UserTypeEnum
|
||||||
}).ToListAsync();
|
}).ToListAsync();
|
||||||
|
|
||||||
medicalReviewInfo.TaskList.ForEach(x =>
|
medicalReviewInfo.TaskList.ForEach(x =>
|
||||||
|
@ -693,20 +701,20 @@ namespace IRaCIS.Core.Application.Service
|
||||||
|
|
||||||
var result = await _taskMedicalReviewRepository.SaveChangesAsync();
|
var result = await _taskMedicalReviewRepository.SaveChangesAsync();
|
||||||
|
|
||||||
//自动发送邮件逻辑
|
////自动发送邮件逻辑
|
||||||
if (medicalReviewInfo.IsAutoGenerate)
|
//if (medicalReviewInfo.IsAutoGenerate)
|
||||||
{
|
//{
|
||||||
|
|
||||||
var allMedicalAuditList= await _taskMedicalReviewRepository.Where(x => medicalReviewInfo.PDRelationTaskIdList.Contains(x.VisitTaskId) && x.IsAutoGenerate && x.IsInvalid==false).ToListAsync();
|
// var allMedicalAuditList= await _taskMedicalReviewRepository.Where(x => medicalReviewInfo.PDRelationTaskIdList.Contains(x.VisitTaskId) && x.IsAutoGenerate && x.IsInvalid==false).ToListAsync();
|
||||||
|
|
||||||
if (allMedicalAuditList.All(t => t.IsApplyHeavyReading == false && t.AuditSignTime!=null && t.AuditState == MedicalReviewAuditState.HaveSigned))
|
// if (allMedicalAuditList.All(t => t.IsApplyHeavyReading == false && t.AuditSignTime!=null && t.AuditState == MedicalReviewAuditState.HaveSigned))
|
||||||
{
|
// {
|
||||||
//自动发送
|
// //自动发送
|
||||||
await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(medicalReviewInfo.VisitTaskId, false);
|
// await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(medicalReviewInfo.VisitTaskId, false);
|
||||||
}
|
// }
|
||||||
|
|
||||||
|
|
||||||
}
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -786,6 +794,8 @@ namespace IRaCIS.Core.Application.Service
|
||||||
AuditState = x.AuditState,
|
AuditState = x.AuditState,
|
||||||
SubjectCode = x.VisitTask.BlindSubjectCode == string.Empty ? x.VisitTask.Subject.Code : x.VisitTask.BlindSubjectCode,
|
SubjectCode = x.VisitTask.BlindSubjectCode == string.Empty ? x.VisitTask.Subject.Code : x.VisitTask.BlindSubjectCode,
|
||||||
TaskBlindName = x.VisitTask.TaskBlindName,
|
TaskBlindName = x.VisitTask.TaskBlindName,
|
||||||
|
TaskName=x.VisitTask.TaskName,
|
||||||
|
UserTypeEnum=x.VisitTask.DoctorUser.UserTypeEnum,
|
||||||
ReadingCategory = x.VisitTask.ReadingCategory,
|
ReadingCategory = x.VisitTask.ReadingCategory,
|
||||||
FirstReplyTime = x.ReadingMedicalReviewDialogList.Min(x => x.CreateTime),
|
FirstReplyTime = x.ReadingMedicalReviewDialogList.Min(x => x.CreateTime),
|
||||||
LastReplyTime = x.ReadingMedicalReviewDialogList.Max(x => x.CreateTime),
|
LastReplyTime = x.ReadingMedicalReviewDialogList.Max(x => x.CreateTime),
|
||||||
|
|
|
@ -2586,7 +2586,7 @@ namespace IRaCIS.Application.Services
|
||||||
|
|
||||||
await _visitTaskRepository.SaveChangesAsync();
|
await _visitTaskRepository.SaveChangesAsync();
|
||||||
|
|
||||||
await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(visitTaskId);
|
//await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(visitTaskId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -453,7 +453,7 @@ namespace IRaCIS.Application.Services
|
||||||
// 创建任务关联关系
|
// 创建任务关联关系
|
||||||
await this.CreateTaskRelated(inDto.VisitTaskId);
|
await this.CreateTaskRelated(inDto.VisitTaskId);
|
||||||
|
|
||||||
await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(inDto.VisitTaskId);
|
//await _trialEmailNoticeConfigService.BaseBusinessScenarioSendEmailAsync(inDto.VisitTaskId);
|
||||||
return ResponseOutput.Ok(result);
|
return ResponseOutput.Ok(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -559,40 +559,14 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
var messageToSend = new MimeMessage();
|
var messageToSend = new MimeMessage();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (await _repository.AnyAsync<TrialSiteSurvey>(t => t.State == TrialSiteSurveyEnum.PMCreatedAndLock && t.Id == trialSiteSurveyId))
|
if (await _repository.AnyAsync<TrialSiteSurvey>(t => t.State == TrialSiteSurveyEnum.PMCreatedAndLock && t.Id == trialSiteSurveyId))
|
||||||
{
|
{
|
||||||
//---中心调研已锁定,不允许操作。
|
//---中心调研已锁定,不允许操作。
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
|
return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
|
||||||
}
|
}
|
||||||
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager )
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM)
|
|
||||||
{
|
{
|
||||||
|
|
||||||
//SPM 给填表人发
|
|
||||||
messageToSend.To.Add(new MailboxAddress(String.Empty, survey.Email));
|
|
||||||
|
|
||||||
survey.State = TrialSiteSurveyEnum.ToSubmit;
|
|
||||||
}
|
|
||||||
else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM)
|
|
||||||
{
|
|
||||||
var hasSPMOrCPM = await _trialSiteSurveyRepository.AnyAsync(t => t.TrialId == trialSiteSubmitBackCommand.TrialId && t.Trial.TrialUserList.Any(u => u.User.UserTypeEnum == UserTypeEnum.SPM || u.User.UserTypeEnum == UserTypeEnum.CPM));
|
|
||||||
|
|
||||||
if (hasSPMOrCPM)
|
|
||||||
{
|
|
||||||
|
|
||||||
//PM 给SPM发 (初审人)
|
|
||||||
user = await _userRepository.FirstOrDefaultAsync(t => t.Id == survey.PreliminaryUserId);
|
|
||||||
|
|
||||||
messageToSend.To.Add(new MailboxAddress(String.Empty, survey.PreliminaryUserId == null ? survey.Email : user.EMail));
|
|
||||||
|
|
||||||
survey.State = TrialSiteSurveyEnum.CRCSubmitted;
|
|
||||||
|
|
||||||
survey.ReviewerUserId = null;
|
|
||||||
survey.ReviewerTime = null;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
//没有SPM 给填表人发
|
//没有SPM 给填表人发
|
||||||
messageToSend.To.Add(new MailboxAddress(String.Empty, survey.Email));
|
messageToSend.To.Add(new MailboxAddress(String.Empty, survey.Email));
|
||||||
|
|
||||||
|
@ -604,7 +578,6 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
survey.ReviewerTime = null;
|
survey.ReviewerTime = null;
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -649,9 +622,6 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
await _IMailVerificationService.SiteSurveyRejectEmail(messageToSend);
|
await _IMailVerificationService.SiteSurveyRejectEmail(messageToSend);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
await _trialSiteSurveyRepository.SaveChangesAsync();
|
await _trialSiteSurveyRepository.SaveChangesAsync();
|
||||||
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
@ -674,24 +644,9 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
|
return ResponseOutput.NotOk(_localizer["TrialSiteSurvey_Locked"]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM)
|
|
||||||
{
|
|
||||||
await _repository.BatchUpdateAsync<TrialSiteSurvey>(t => t.Id == trialSiteSurveyId, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.ToSubmit });
|
|
||||||
}
|
|
||||||
else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM)
|
|
||||||
{
|
|
||||||
var hasSPMOrCPM = await _trialSiteSurveyRepository.AnyAsync(t => t.TrialId == trialId && t.Trial.TrialUserList.Any(u => u.User.UserTypeEnum == UserTypeEnum.SPM || u.User.UserTypeEnum == UserTypeEnum.CPM));
|
|
||||||
|
|
||||||
if (hasSPMOrCPM)
|
await _trialSiteSurveyRepository.BatchUpdateNoTrackingAsync(t => t.Id == trialSiteSurveyId, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.ToSubmit });
|
||||||
{
|
|
||||||
await _trialSiteSurveyRepository.BatchUpdateNoTrackingAsync(t => t.Id == trialSiteSurveyId, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.CRCSubmitted });
|
|
||||||
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
await _trialSiteSurveyRepository.BatchUpdateNoTrackingAsync(t => t.Id == trialSiteSurveyId, u => new TrialSiteSurvey() { State = TrialSiteSurveyEnum.ToSubmit });
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ResponseOutput.Ok();
|
return ResponseOutput.Ok();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -736,23 +691,31 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
var trialSiteSurvey = (await _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId).FirstOrDefaultAsync()).IfNullThrowException();
|
var trialSiteSurvey = (await _trialSiteSurveyRepository.Where(t => t.Id == trialSiteSurveyId).FirstOrDefaultAsync()).IfNullThrowException();
|
||||||
|
|
||||||
var siteUserList = await _trialSiteUserSurveyRepository.Where(t => t.TrialSiteSurvey.TrialId==trialId && t.TrialSiteSurvey.SiteId == trialSiteSurvey.SiteId && t.TrialSiteSurvey.IsDeleted==false).Select(t =>
|
var siteUserList = await _trialSiteUserSurveyRepository.Where(t => t.TrialSiteSurvey.TrialId == trialId && t.TrialSiteSurvey.SiteId == trialSiteSurvey.SiteId && t.TrialSiteSurvey.IsDeleted == false).Select(t =>
|
||||||
new { t.TrialSiteSurveyId, t.IsGenerateAccount, t.IsGenerateSuccess, t.UserTypeId,
|
new
|
||||||
UserTypeEnum= (UserTypeEnum?) t.UserTypeRole.UserTypeEnum , t.TrialRoleName.Code,t.Email }).ToListAsync();
|
{
|
||||||
|
t.TrialSiteSurveyId,
|
||||||
|
t.IsGenerateAccount,
|
||||||
|
t.IsGenerateSuccess,
|
||||||
|
t.UserTypeId,
|
||||||
|
UserTypeEnum = (UserTypeEnum?)t.UserTypeRole.UserTypeEnum,
|
||||||
|
t.TrialRoleName.Code,
|
||||||
|
t.Email
|
||||||
|
}).ToListAsync();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.Undefined)
|
|
||||||
|
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.Undefined)
|
||||||
{
|
{
|
||||||
//是第一次
|
//是第一次
|
||||||
if(!siteUserList.Any(t=>t.IsGenerateSuccess))
|
if (!siteUserList.Any(t => t.IsGenerateSuccess))
|
||||||
{
|
{
|
||||||
var currentUserList = siteUserList.Where(t => t.TrialSiteSurveyId == trialSiteSurveyId).ToList();
|
var currentUserList = siteUserList.Where(t => t.TrialSiteSurveyId == trialSiteSurveyId).ToList();
|
||||||
|
|
||||||
if(!currentUserList.Any(t=>t.Code=="1") || !currentUserList.Any(t => t.Code == "4"))
|
if (!currentUserList.Any(t => t.Code == "1") || !currentUserList.Any(t => t.Code == "5"))
|
||||||
{
|
{
|
||||||
throw new BusinessValidationFailedException("本次提交,必须有CRC和影像负责人信息");
|
throw new BusinessValidationFailedException("本次提交,必须有CRC和影像阅片人信息");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -762,7 +725,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager)
|
else if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager)
|
||||||
{
|
{
|
||||||
foreach (var group in (siteUserList.Where(t=>t.IsGenerateAccount && t.TrialSiteSurveyId==trialSiteSurveyId)
|
foreach (var group in (siteUserList.Where(t => t.IsGenerateAccount && t.TrialSiteSurveyId == trialSiteSurveyId)
|
||||||
.GroupBy(t => new { t.Email, t.IsGenerateAccount, t.UserTypeId })))
|
.GroupBy(t => new { t.Email, t.IsGenerateAccount, t.UserTypeId })))
|
||||||
{
|
{
|
||||||
if (group.Count() > 1)
|
if (group.Count() > 1)
|
||||||
|
|
|
@ -48,7 +48,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
if (addOrEditTrialSiteUserSurvey.UserTypeId != null && ( _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM))
|
if (addOrEditTrialSiteUserSurvey.UserTypeId != null && ( _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM))
|
||||||
{
|
{
|
||||||
var existSysUser = await _repository.FirstOrDefaultAsync<User>(t => t.EMail == addOrEditTrialSiteUserSurvey.Email && t.UserTypeId == addOrEditTrialSiteUserSurvey.UserTypeId);
|
var existSysUser = await _repository.Where<User>(t => t.EMail == addOrEditTrialSiteUserSurvey.Email && t.UserTypeId == addOrEditTrialSiteUserSurvey.UserTypeId).Include(d=>d.UserTypeRole).FirstOrDefaultAsync();
|
||||||
|
|
||||||
|
|
||||||
if (existSysUser != null)
|
if (existSysUser != null)
|
||||||
|
@ -56,7 +56,7 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
if (existSysUser.LastName != addOrEditTrialSiteUserSurvey.LastName || existSysUser.FirstName != addOrEditTrialSiteUserSurvey.FirstName)
|
if (existSysUser.LastName != addOrEditTrialSiteUserSurvey.LastName || existSysUser.FirstName != addOrEditTrialSiteUserSurvey.FirstName)
|
||||||
{
|
{
|
||||||
//$"该用户在系统中账户名为:{existSysUser.LastName + " / " + existSysUser.FirstName} ,与填写信息存在不一致项, 现将界面信息修改为与系统一致,可进行保存"
|
//$"该用户在系统中账户名为:{existSysUser.LastName + " / " + existSysUser.FirstName} ,与填写信息存在不一致项, 现将界面信息修改为与系统一致,可进行保存"
|
||||||
return ResponseOutput.NotOk(_localizer["TrialSiteUser_InconsistentInfo", existSysUser.LastName + " / " + existSysUser.FirstName,existSysUser.Phone],
|
return ResponseOutput.NotOk(_localizer["TrialSiteUser_InconsistentInfo", existSysUser.UserTypeRole.UserTypeShortName, existSysUser.EMail, existSysUser.LastName + " / " + existSysUser.FirstName,existSysUser.Phone],
|
||||||
new { existSysUser.LastName, existSysUser.FirstName, existSysUser.Phone,existSysUser.IsTestUser,existSysUser.IsZhiZhun }, ApiResponseCodeEnum.NeedTips);
|
new { existSysUser.LastName, existSysUser.FirstName, existSysUser.Phone,existSysUser.IsTestUser,existSysUser.IsZhiZhun }, ApiResponseCodeEnum.NeedTips);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -222,6 +222,8 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
public TrialQCProcess QCProcessEnum { get; set; } = TrialQCProcess.DoubleAudit;
|
public TrialQCProcess QCProcessEnum { get; set; } = TrialQCProcess.DoubleAudit;
|
||||||
|
|
||||||
public bool IsImageConsistencyVerification { get; set; } = true;
|
public bool IsImageConsistencyVerification { get; set; } = true;
|
||||||
|
|
||||||
|
public bool IsMedicalReview { get; set;}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class TrialTaskConfigView : TrialTaskConfig
|
public class TrialTaskConfigView : TrialTaskConfig
|
||||||
|
|
|
@ -132,8 +132,8 @@ namespace IRaCIS.Application.Services
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt==(int)UserTypeEnum.TA, t => t.UserTypeEnum== UserTypeEnum.ProjectManager)
|
.WhereIf(_userInfo.UserTypeEnumInt==(int)UserTypeEnum.TA, t => t.UserTypeEnum== UserTypeEnum.ProjectManager)
|
||||||
|
|
||||||
//PM 不审 只能加IM IQC
|
//PM 不审 只能加IM IQC
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && qcProcessEnum == TrialQCProcess.NotAudit, t => t.UserTypeEnum == UserTypeEnum.IM)
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && qcProcessEnum == TrialQCProcess.NotAudit, t => (t.UserTypeEnum == UserTypeEnum.IM ||t.UserTypeEnum==UserTypeEnum.QA))
|
||||||
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && qcProcessEnum != TrialQCProcess.NotAudit, t =>( t.UserTypeEnum == UserTypeEnum.IM|| t.UserTypeEnum == UserTypeEnum.IQC))
|
.WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager && qcProcessEnum != TrialQCProcess.NotAudit, t =>( t.UserTypeEnum == UserTypeEnum.IM|| t.UserTypeEnum == UserTypeEnum.IQC || t.UserTypeEnum == UserTypeEnum.QA))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -55,7 +55,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return this.PIAuditImagePath?.Trim().Split('|').ToList();
|
return this.PIAuditImagePath?.Trim().Split('|', StringSplitOptions.RemoveEmptyEntries).ToList();
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
|
|
|
@ -437,7 +437,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
return this.PIAuditImagePath?.Trim().Split('|').ToList();
|
return this.PIAuditImagePath?.Trim().Split('|',StringSplitOptions.RemoveEmptyEntries).ToList();
|
||||||
}
|
}
|
||||||
catch (Exception)
|
catch (Exception)
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,7 +13,8 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List<StudyMonitor> DicomStudyMonitorList { get; set; } = new List<StudyMonitor>();
|
public List<StudyMonitor> DicomStudyMonitorList { get; set; } = new List<StudyMonitor>();
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public List <StudyDTF> StudyDTFList { get; set;} = new List<StudyDTF>();
|
public List<DicomSeries> SeriesList { get; set; }
|
||||||
|
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
public TrialSite TrialSite { get; set; }
|
public TrialSite TrialSite { get; set; }
|
||||||
[JsonIgnore]
|
[JsonIgnore]
|
||||||
|
|
|
@ -231,12 +231,12 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// QC流程 0 不审,1 单审,2双审
|
/// QC流程 0 不审,1 单审,2双审
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public TrialQCProcess QCProcessEnum { get; set; } = TrialQCProcess.DoubleAudit;
|
public TrialQCProcess QCProcessEnum { get; set; } = TrialQCProcess.NotAudit;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 影像一致性核查
|
/// 影像一致性核查
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public bool IsImageConsistencyVerification { get; set; } = true;
|
public bool IsImageConsistencyVerification { get; set; } = false;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 影像导出
|
/// 影像导出
|
||||||
|
@ -359,7 +359,7 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
public bool IsDeclaration { get; set; }
|
public bool IsDeclaration { get; set; }
|
||||||
|
|
||||||
public bool IsMedicalReview { get; set; }
|
public bool IsMedicalReview { get; set; } = false;
|
||||||
|
|
||||||
public UserTypeEnum? EnrollConfirmDefaultUserType { get; set; }
|
public UserTypeEnum? EnrollConfirmDefaultUserType { get; set; }
|
||||||
|
|
||||||
|
|
|
@ -125,6 +125,8 @@ namespace IRaCIS.Core.Domain.Models
|
||||||
|
|
||||||
public Guid? ClaimUserId { get; set; }
|
public Guid? ClaimUserId { get; set; }
|
||||||
|
|
||||||
|
[JsonIgnore]
|
||||||
|
public User ClaimUser { get; set;}
|
||||||
|
|
||||||
//是否分配了读片医生
|
//是否分配了读片医生
|
||||||
//public bool IsAssignDoctorUser{get;set;}
|
//public bool IsAssignDoctorUser{get;set;}
|
||||||
|
|
Loading…
Reference in New Issue