From 5706fea2ebe25883d2179457acafc87af57ef2a9 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 14 Jun 2023 14:38:23 +0800 Subject: [PATCH 1/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9reviewer?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Doctor/DTO/ResearchPublicationModel.cs | 3 -- .../TrialSiteUser/PersonalWorkstation.cs | 33 ++++++++++++++++++- 2 files changed, 32 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Doctor/DTO/ResearchPublicationModel.cs b/IRaCIS.Core.Application/Service/Doctor/DTO/ResearchPublicationModel.cs index d1f38df5b..d5a61a587 100644 --- a/IRaCIS.Core.Application/Service/Doctor/DTO/ResearchPublicationModel.cs +++ b/IRaCIS.Core.Application/Service/Doctor/DTO/ResearchPublicationModel.cs @@ -17,8 +17,5 @@ namespace IRaCIS.Application.Contracts public string AwardsHonorsCN { get; set; } = String.Empty; - public string BlindPublications { get; set; } - - } } \ No newline at end of file diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs index 7b9bae7d9..304bf2cfb 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs @@ -884,7 +884,7 @@ namespace IRaCIS.Core.Application #endregion - #region 项目列表查询 + #region 项目列表查询 + 待办详情 [HttpPost] @@ -941,6 +941,37 @@ namespace IRaCIS.Core.Application + #region 项目维度 统计每个人的待办 + + + #region 阅片人筛选 + + //public GetTrialReviewerSelect_Stat(Guid trialId) + + #endregion + + + #region 上传影像 + + #endregion + + #region QC + + #endregion + + #region 一致性核查 + + #endregion + + #region 阅片 + + #endregion + + #endregion + + + + #endregion } } From 851f785f50bf70c4ba8bf7ebe20e1741ddf1abf3 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Wed, 14 Jun 2023 18:20:08 +0800 Subject: [PATCH 2/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=BB=9F=E8=AE=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTO/PersonalWorkstationViewModel.cs | 57 ++++- .../TrialSiteUser/PersonalWorkstation.cs | 211 +++++++++++++++--- 2 files changed, 232 insertions(+), 36 deletions(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs index 6976ac903..3953d640a 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs @@ -1,4 +1,5 @@ using System; +using System.ComponentModel.DataAnnotations; using IRaCIS.Application.Contracts; using IRaCIS.Core.Domain.Share; @@ -160,7 +161,7 @@ namespace IRaCIS.Core.Application.Contracts public int? HaveSignedCount { get; set; } } - + @@ -251,9 +252,9 @@ namespace IRaCIS.Core.Application.Contracts public string ResearchProgramNo { get; set; } = string.Empty; - public Guid? SponsorId { get; set; } + public Guid? SponsorId { get; set; } + - } public class TrialToBeDoneDto : TrialBaseInfoDto @@ -267,7 +268,7 @@ namespace IRaCIS.Core.Application.Contracts public string TrialStatusStr { get; set; } - + public int? ExpetiedTaskCount { get; set; } @@ -290,7 +291,55 @@ namespace IRaCIS.Core.Application.Contracts } + public class TrialUserToBeDoneQuery : PageInput + { + [NotDefault] + public Guid TrialId { get; set; } + } + + public class TrialUserToBeDoneDto + { + public string UserName { get; set; } + + public string FullName { get; set; } + + public UserTypeEnum UserType { get; set; } + + + + + public int? ReviewerSelect_SPM_ToBeApprovalCount { get; set; } + public int? ReviewerSelect_PM_ToBeConfirmCount { get; set; } + + public int? ImageUpload_CRC_ToBeReUploadCount { get; set; } + public int? ImageUpload_CRC_ToBeSubmitCount { get; set; } + + + public int? QC_IQC_ToBeReviewedCount { get; set; } + public int? QC_IQC_ToBeClaimedCount { get; set; } + + public int? QC_IQC_ToBeDealedCount { get; set; } + + public int? QC_CRC_ToBeDealedCount { get; set; } + + + public int? Check_CRC_ToBeDealedCount { get; set; } + + public int? Check_PM_ToBeDealedCount { get; set; } + + public int? Check_PM_ToBeReplyedCount { get; set; } + + public int? Reading_IR_UnReadCount { get; set; } + + public int? Reading_SPM_ToBeApprovalCount { get; set; } + public int? Reading_PM_ToBeApprovalCount { get; set; } + + public int? Medical_MIM_ToBeDealedCount { get; set; } + + public int? Medical_IR_ToBeDealedCount { get; set; } + + } public class TrialBaseInfoDto { diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs index 304bf2cfb..ac2fc4adc 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs @@ -3,7 +3,9 @@ using IRaCIS.Core.Application.Contracts; using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure.Extention; +using MathNet.Numerics; using Microsoft.AspNetCore.Mvc; +using System.Linq.Dynamic.Core; namespace IRaCIS.Core.Application { @@ -193,7 +195,7 @@ namespace IRaCIS.Core.Application ToBeCheckedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck).Count(), ToBeRepliedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && - u.CheckChallengeDialogList.OrderByDescending(t=>t.CreateTime).First().UserTypeEnum== UserTypeEnum.ClinicalResearchCoordinator).Count(), + u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(), }); @@ -398,10 +400,13 @@ namespace IRaCIS.Core.Application ResearchProgramNo = t.ResearchProgramNo, ExperimentName = t.ExperimentName, TrialCode = t.TrialCode, - UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList) + + UrgentCount = t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)) + .SelectMany(c => c.QCChallengeList) .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC && u.SubjectVisit.IsUrgent).Count(), - ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList) + ToBeDealedCount = t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)) + .SelectMany(c => c.QCChallengeList) .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count(), @@ -411,6 +416,7 @@ namespace IRaCIS.Core.Application var toBeDealedCount = _subjectVisitRepository .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id)) + .Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)) .SelectMany(c => c.QCChallengeList) .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count(); @@ -438,8 +444,12 @@ namespace IRaCIS.Core.Application ResearchProgramNo = t.ResearchProgramNo, ExperimentName = t.ExperimentName, TrialCode = t.TrialCode, - UrgentCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply && u.IsUrgent).Count(), - ToBeReplyedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count() + + UrgentCount = t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)) + .Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply && u.IsUrgent).Count(), + + ToBeReplyedCount = t.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)) + .Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count() }); @@ -450,6 +460,7 @@ namespace IRaCIS.Core.Application var toBeDealedCount = _subjectVisitRepository .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id)) + .Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)) .Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count(); return ResponseOutput.Ok(result, new { TotalToBeReplyedCount = toBeDealedCount }); @@ -478,8 +489,13 @@ namespace IRaCIS.Core.Application ResearchProgramNo = t.ResearchProgramNo, ExperimentName = t.ExperimentName, TrialCode = t.TrialCode, - UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent && u.IsPMBackOrReReading).Count(), - ToBeReUploadCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count(), + UrgentCount = t.SubjectVisitList + .Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)) + .Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent && u.IsPMBackOrReReading).Count(), + + ToBeReUploadCount = t.SubjectVisitList + .Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)) + .Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count(), }); @@ -516,8 +532,14 @@ namespace IRaCIS.Core.Application ResearchProgramNo = t.ResearchProgramNo, ExperimentName = t.ExperimentName, TrialCode = t.TrialCode, - UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent).Count(), - ToBeDealedCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count(), + UrgentCount = t.SubjectVisitList + .Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)) + .Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent).Count(), + + + ToBeDealedCount = t.SubjectVisitList + .Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)) + .Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count(), }); @@ -525,6 +547,7 @@ namespace IRaCIS.Core.Application var toBeDealedCount = _subjectVisitRepository .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id)) + .Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == _userInfo.Id)) .Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count(); return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount }); @@ -566,7 +589,7 @@ namespace IRaCIS.Core.Application //待领取量 - ToBeClaimedCount = t.SubjectVisitList.Where(u =>u.CurrentActionUserId==null &&(u.PreliminaryAuditUserId==null ||(u.PreliminaryAuditUserId!=_userInfo.Id && u.ReviewAuditUserId==null)) ).Count(), + ToBeClaimedCount = t.SubjectVisitList.Where(u => u.CurrentActionUserId == null && (u.PreliminaryAuditUserId == null || (u.PreliminaryAuditUserId != _userInfo.Id && u.ReviewAuditUserId == null))).Count(), //待审核通过,统计从已领取到QC提交之间的 已领取 待审核 审核中 (审核完成 领取人就会清理 所以只用查询当前领取人是自己的就好了) ToBeReviewedCount = t.SubjectVisitList.Where(u => u.CurrentActionUserId == _userInfo.Id).Count() @@ -585,7 +608,7 @@ namespace IRaCIS.Core.Application .Where(u => u.CurrentActionUserId == _userInfo.Id).Count(); - return ResponseOutput.Ok(result, new { TotalToBeClaimedCount = toBeClaimedCount, TotalToBeReviewedCount= toBeReviwedCount }); + return ResponseOutput.Ok(result, new { TotalToBeClaimedCount = toBeClaimedCount, TotalToBeReviewedCount = toBeReviwedCount }); } @@ -611,9 +634,10 @@ namespace IRaCIS.Core.Application ExperimentName = t.ExperimentName, TrialCode = t.TrialCode, UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList) - .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(), + .Where(u => u.CreateUserId==_userInfo.Id && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(), + ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList) - .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(), + .Where(u => u.CreateUserId == _userInfo.Id && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(), }); @@ -622,7 +646,7 @@ namespace IRaCIS.Core.Application var toBeDealedCount = _subjectVisitRepository .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id)) .SelectMany(c => c.QCChallengeList) - .Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(); + .Where(u => u.CreateUserId == _userInfo.Id && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(); return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount }); @@ -817,7 +841,7 @@ namespace IRaCIS.Core.Application var toBeDealedCount = _taskMedicalReviewRepository .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id)) - .Where(t => t.IsClosedDialog == false) + .Where(t => t.IsClosedDialog == false && t.VisitTask.DoctorUserId==_userInfo.Id) .Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count(); return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount }); @@ -892,7 +916,7 @@ namespace IRaCIS.Core.Application [FromServices] IRepository _taskMedicalReviewRepository) { - var isPM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager|| _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM; + var isPM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM; var isCRC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator; var isIQC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC; var isMIM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.MIM; @@ -912,17 +936,17 @@ namespace IRaCIS.Core.Application ResearchProgramNo = t.ResearchProgramNo, ExperimentName = t.ExperimentName, TrialCode = t.TrialCode, - CreateTime=t.CreateTime, - Sponsor= _userInfo.IsEn_Us? t.Sponsor.SponsorName:t.Sponsor.SponsorNameCN, - TrialStatusStr=t.TrialStatusStr, + CreateTime = t.CreateTime, + Sponsor = _userInfo.IsEn_Us ? t.Sponsor.SponsorName : t.Sponsor.SponsorNameCN, + TrialStatusStr = t.TrialStatusStr, - ExpetiedTaskCount= isPM ? t.VisitTaskList.Where(t=>t.IsUrgent).Count():0, - - ReReadingApprovalCount= isPM? t.VisitTaskReReadingList.Where(t=>t.OriginalReReadingTask.ReReadingApplyState==ReReadingApplyState.DocotorHaveApplyed).Count():0, - - PendingReconciliationCount=isPM? t.SubjectVisitList.Where(t=>t.CheckState==CheckStateEnum.ToCheck).Count():0, - - PendingResponseCount=isPM? t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && + ExpetiedTaskCount = isPM ? t.VisitTaskList.Where(t => t.IsUrgent).Count() : 0, + + ReReadingApprovalCount = isPM ? t.VisitTaskReReadingList.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed).Count() : 0, + + PendingReconciliationCount = isPM ? t.SubjectVisitList.Where(t => t.CheckState == CheckStateEnum.ToCheck).Count() : 0, + + PendingResponseCount = isPM ? t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0 @@ -930,12 +954,12 @@ namespace IRaCIS.Core.Application }); - + //.ProjectTo(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id }); - var result= await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? "CreateTime" : inQuery.SortField, inQuery.Asc); + var result = await query.ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? "CreateTime" : inQuery.SortField, inQuery.Asc); - return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = 0 }); + return ResponseOutput.Ok(result); } @@ -943,14 +967,135 @@ namespace IRaCIS.Core.Application #region 项目维度 统计每个人的待办 + [HttpPost] + public async Task>> GetTrialUserToBeDoneList(TrialUserToBeDoneQuery inQuery, + [FromServices] IRepository _trialUserRepository) + { - #region 阅片人筛选 + var query = _trialUserRepository.Where(t => t.TrialId == inQuery.TrialId) + .Select(t => new TrialUserToBeDoneDto() + { + UserName = t.User.UserName, + FullName = t.User.FullName, + UserType = t.User.UserTypeEnum, - //public GetTrialReviewerSelect_Stat(Guid trialId) + //SPM 阅片人筛选 + ReviewerSelect_SPM_ToBeApprovalCount = + (t.User.UserTypeEnum == UserTypeEnum.SPM || t.User.UserTypeEnum == UserTypeEnum.CPM) ? + t.Trial.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.HasCommittedToCRO).Count() : 0, - #endregion + //PM 阅片人确认 + ReviewerSelect_PM_ToBeConfirmCount = + (t.User.UserTypeEnum == UserTypeEnum.APM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager) ? + t.Trial.EnrollList.Where(u => u.EnrollStatus == EnrollStatus.InviteIntoGroup).Count() : 0, + + //CRC 重传 --区分人 + ImageUpload_CRC_ToBeReUploadCount = + (t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.User.UserTypeEnum == UserTypeEnum.CRA) ? + t.Trial.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == t.UserId)) + .Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count() : 0, + + //CRC加急待提交 需确认?--区分人 + ImageUpload_CRC_ToBeSubmitCount = + (t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.User.UserTypeEnum == UserTypeEnum.CRA) ? + t.Trial.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == t.UserId)) + .Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count() : 0, + + // QC IQC 待领取 + QC_IQC_ToBeClaimedCount = + (t.User.UserTypeEnum == UserTypeEnum.IQC) ? + t.Trial.SubjectVisitList.Where(u => u.CurrentActionUserId == null && (u.PreliminaryAuditUserId == null || (u.PreliminaryAuditUserId != _userInfo.Id && u.ReviewAuditUserId == null))).Count() : 0, + // CRC 质疑待回复 --区分人 + QC_CRC_ToBeDealedCount = + (t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.User.UserTypeEnum == UserTypeEnum.CRA) ? + t.Trial.SubjectVisitList.Where(c=>c.TrialSite.CRCUserList.Any(u=>u.UserId==t.UserId)) + .SelectMany(c => c.QCChallengeList).Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC ).Count() : 0, + + + //IQC 质疑待处理 --区分人 + QC_IQC_ToBeDealedCount = + (t.User.UserTypeEnum == UserTypeEnum.IQC) ? + t.Trial.SubjectVisitList.SelectMany(c => c.QCChallengeList) + .Where(u => u.CreateUserId==t.UserId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0, + + + + // IQC 待审核 + QC_IQC_ToBeReviewedCount = + (t.User.UserTypeEnum == UserTypeEnum.IQC) ? + t.Trial.SubjectVisitList.Where(u => u.CurrentActionUserId == t.UserId).Count() : 0, + + + + //PM 核查待处理 + Check_PM_ToBeDealedCount = + (t.User.UserTypeEnum == UserTypeEnum.APM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager) ? + t.Trial.SubjectVisitList .Where(u => u.CheckState == CheckStateEnum.ToCheck).Count() : 0, + + //PM 质疑待处理 + Check_PM_ToBeReplyedCount = + (t.User.UserTypeEnum == UserTypeEnum.APM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager) ? + t.Trial.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng && + u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0, + + + // CRC 核查 质疑待处理 --区分人 + Check_CRC_ToBeDealedCount = + (t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.User.UserTypeEnum == UserTypeEnum.CRA) ? + t.Trial.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == t.UserId)) + .Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply ).Count() : 0, + + + //IR 未读 --区分人 + Reading_IR_UnReadCount = + (t.User.UserTypeEnum == UserTypeEnum.IndependentReviewer) ? + t.Trial.VisitTaskList + .Where(c => c.DoctorUserId == t.UserId && c.ReadingTaskState != ReadingTaskState.HaveSigned && c.TaskState == TaskState.Effect) + // 前序 不存在 未一致性核查未通过的 + .Where(t => !t.Subject.SubjectVisitList.Any(sv => sv.CheckState != CheckStateEnum.CVPassed && t.VisitTaskNum > sv.VisitNum)) + //前序 不存在 未生成任务的访视 + .Where(t => t.TrialReadingCriterion.IsAutoCreate == false ? !t.Subject.SubjectCriteriaEvaluationVisitFilterList.Where(d => d.TrialReadingCriterionId == t.TrialReadingCriterionId).Any(f => f.IsGeneratedTask == false && t.VisitTaskNum > f.SubjectVisit.VisitNum) : true) + + .Where(y => y.IsFrontTaskNeedSignButNotSign == false && (y.IsNeedClinicalDataSign == false || y.IsClinicalDataSign == true)).Count() : 0, + + + //SPM PM重阅审批 + Reading_SPM_ToBeApprovalCount = + (t.User.UserTypeEnum == UserTypeEnum.SPM || t.User.UserTypeEnum == UserTypeEnum.CPM) ? + t.Trial.VisitTaskReReadingList.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.TrialGroupHaveApplyed).Count() : 0, + + //PM IR重阅审批 + Reading_PM_ToBeApprovalCount = + (t.User.UserTypeEnum == UserTypeEnum.APM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager) ? + t.Trial.VisitTaskReReadingList.Where(t => t.OriginalReReadingTask.ReReadingApplyState == ReReadingApplyState.DocotorHaveApplyed).Count() : 0, + + //IR 医学审核 --区分人 + Medical_IR_ToBeDealedCount = + (t.User.UserTypeEnum == UserTypeEnum.IndependentReviewer) ? + t.Trial.TaskMedicalReviewList + .Where(c => c.IsClosedDialog == false && c.VisitTask.DoctorUserId==t.UserId) + .Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count() : 0, + + + Medical_MIM_ToBeDealedCount = + (t.User.UserTypeEnum == UserTypeEnum.MIM) ? + t.Trial.TaskMedicalReviewList + .Where(t => t.IsClosedDialog == false) + .Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.IndependentReviewer).Count() : 0, + + + }); + + + var list = await query.ToListAsync(); + + return ResponseOutput.Ok(list); + } + + + #region 废弃 #region 上传影像 #endregion @@ -969,6 +1114,8 @@ namespace IRaCIS.Core.Application #endregion + #endregion + From 355d71769a7b9fef8af84a408cf376fa38b0ae4c Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Thu, 15 Jun 2023 12:03:55 +0800 Subject: [PATCH 3/9] =?UTF-8?q?=E5=9B=BD=E9=99=85=E5=8C=96=E5=AF=BC?= =?UTF-8?q?=E8=87=B4=E6=8C=A4=E8=B4=A6=E5=8F=B7=E5=8A=9F=E8=83=BD=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/appsettings.Development.json | 2 +- .../LimitUserRequestAuthorization.cs | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/IRaCIS.Core.API/appsettings.Development.json b/IRaCIS.Core.API/appsettings.Development.json index e9f58c77f..492bb8a68 100644 --- a/IRaCIS.Core.API/appsettings.Development.json +++ b/IRaCIS.Core.API/appsettings.Development.json @@ -19,7 +19,7 @@ "OpenTrialRelationDelete": true, - "OpenLoginLimit": false + "OpenLoginLimit": true }, "SystemEmailSendConfig": { diff --git a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs index dda88370f..c4d163f8f 100644 --- a/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs +++ b/IRaCIS.Core.Application/BusinessFilter/LimitUserRequestAuthorization.cs @@ -1,7 +1,9 @@ using EasyCaching.Core; using IRaCIS.Core.Domain.Share; +using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Options; @@ -51,7 +53,9 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter context.HttpContext.Response.ContentType = "application/json"; context.HttpContext.Response.StatusCode = StatusCodes.Status200OK; //---当前请求未从Header/Url取到用户Token,请联系开发者 - await context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk(_localizer["LimitUser_AuthTokenMissing"]))); + //await context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk(_localizer["LimitUser_AuthTokenMissing"]))); + + context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["LimitUser_AuthTokenMissing"])); } //2、在这里取缓存 进行比较 看是否有其他人进行了登陆,如果其他人登陆了,就把之前用户挤掉 @@ -77,8 +81,13 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter context.HttpContext.Response.ContentType = "application/json"; context.HttpContext.Response.StatusCode = StatusCodes.Status403Forbidden; - //---您的账户在其他地方已登陆,您被迫下线。 - await context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk(_localizer["LimitUser_AccountLoggedInElsewhere"], ApiResponseCodeEnum.LoginInOtherPlace))); + //---您的账户在其他地方已登陆,您被迫下线。 + + + context.Result = new JsonResult(ResponseOutput.NotOk(_localizer["LimitUser_AccountLoggedInElsewhere"], ApiResponseCodeEnum.LoginInOtherPlace)); + + + //await context.HttpContext.Response.WriteAsync(JsonConvert.SerializeObject(ResponseOutput.NotOk(_localizer["LimitUser_AccountLoggedInElsewhere"], ApiResponseCodeEnum.LoginInOtherPlace))); } From 3cdd9b6af2c9621843a118d34a2fb61d208a9350 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 16 Jun 2023 11:16:02 +0800 Subject: [PATCH 4/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=97sql?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.Domain/SQLFile/20230613.sql | 35 ++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/IRaCIS.Core.Domain/SQLFile/20230613.sql b/IRaCIS.Core.Domain/SQLFile/20230613.sql index 0eafb3ce4..974d778f5 100644 --- a/IRaCIS.Core.Domain/SQLFile/20230613.sql +++ b/IRaCIS.Core.Domain/SQLFile/20230613.sql @@ -5,4 +5,37 @@ SET TrialId = VisitTask.TrialId FROM VisitTaskReReading INNER JOIN VisitTask ON VisitTaskReReading.OriginalReReadingTaskId = VisitTask.Id; -delete VisitTaskReReading where TrialId is NULL \ No newline at end of file +delete VisitTaskReReading where TrialId is NULL + + +--数据库列字符串列 长度 +SELECT t.name AS table_name, c.name AS column_name, d.name AS constraint_name , ty.Name as typeName, c.max_length as length +FROM sys.tables t +INNER JOIN sys.default_constraints d ON t.object_id = d.parent_object_id +INNER JOIN sys.columns c ON d.parent_column_id = c.column_id AND c.object_id = t.object_id +INNER JOIN sys.types ty on ty.system_type_id = c.system_type_id +AND ty.name in ('nvarchar', 'varchar', 'char', 'nchar') + +--带维护sql 的查询 + +SELECT t.name AS table_name, c.name AS column_name, d.name AS constraint_name , ty.Name as typeName, c.max_length as length, +'ALTER TABLE [' + t.name + '] DROP CONSTRAINT [' + d.name + ']' AS drop_constraint_sql, +CASE WHEN c.is_nullable = 1 THEN + 'ALTER TABLE ' + OBJECT_NAME(c.object_id) + ' ALTER COLUMN ' + c.name + + CASE WHEN c.max_length < 100 THEN ' NVARCHAR(100)' ELSE ' NVARCHAR('+ CONCAT('', c.max_length)+')' END + ' NULL' + ELSE + 'ALTER TABLE [' + OBJECT_NAME(c.object_id) + '] ALTER COLUMN ' + c.name + + CASE WHEN c.max_length < 100 THEN ' NVARCHAR(100)' ELSE ' NVARCHAR('+ CONCAT('', c.max_length)+')' END + ' NOT NULL' + END AS AlterColumnSQL, + + 'ALTER TABLE ' + QUOTENAME(t.name) + ' ADD CONSTRAINT ' +'DF_'+t.name+ '_'+c.name + + ' DEFAULT ' + d.definition + ' FOR ' + QUOTENAME(c.name) AS add_constraint_sql + +FROM sys.tables t +INNER JOIN sys.default_constraints d ON t.object_id = d.parent_object_id +INNER JOIN sys.columns c ON d.parent_column_id = c.column_id AND c.object_id = t.object_id +INNER JOIN sys.types ty on ty.system_type_id = c.system_type_id +AND ty.name in ('nvarchar', 'varchar', 'char', 'nchar') + +--不是nvarchar 或者是nvarchar 但是长度小于100 +and (ty.name!='nvarchar' or (ty.name='nvarchar' and c.max_length<100)) \ No newline at end of file From 300b4582ecfce7544aadb409d7fd9e76ce1f5979 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 16 Jun 2023 11:16:25 +0800 Subject: [PATCH 5/9] x --- IRaCIS.Core.Domain/SQLFile/20230613.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/IRaCIS.Core.Domain/SQLFile/20230613.sql b/IRaCIS.Core.Domain/SQLFile/20230613.sql index 974d778f5..00a3a7b10 100644 --- a/IRaCIS.Core.Domain/SQLFile/20230613.sql +++ b/IRaCIS.Core.Domain/SQLFile/20230613.sql @@ -21,10 +21,10 @@ AND ty.name in ('nvarchar', 'varchar', 'char', 'nchar') SELECT t.name AS table_name, c.name AS column_name, d.name AS constraint_name , ty.Name as typeName, c.max_length as length, 'ALTER TABLE [' + t.name + '] DROP CONSTRAINT [' + d.name + ']' AS drop_constraint_sql, CASE WHEN c.is_nullable = 1 THEN - 'ALTER TABLE ' + OBJECT_NAME(c.object_id) + ' ALTER COLUMN ' + c.name + + 'ALTER TABLE [' + OBJECT_NAME(c.object_id) + '] ALTER COLUMN ' + QUOTENAME(c.name) + CASE WHEN c.max_length < 100 THEN ' NVARCHAR(100)' ELSE ' NVARCHAR('+ CONCAT('', c.max_length)+')' END + ' NULL' ELSE - 'ALTER TABLE [' + OBJECT_NAME(c.object_id) + '] ALTER COLUMN ' + c.name + + 'ALTER TABLE [' + OBJECT_NAME(c.object_id) + '] ALTER COLUMN ' + QUOTENAME(c.name) + CASE WHEN c.max_length < 100 THEN ' NVARCHAR(100)' ELSE ' NVARCHAR('+ CONCAT('', c.max_length)+')' END + ' NOT NULL' END AS AlterColumnSQL, From 9baa6e3c851e7a0f1c931db8fc5014e710af7eb8 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 16 Jun 2023 13:35:39 +0800 Subject: [PATCH 6/9] =?UTF-8?q?=E6=94=BE=E5=BC=80=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E9=99=90=E5=88=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- IRaCIS.Core.API/appsettings.Development.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/IRaCIS.Core.API/appsettings.Development.json b/IRaCIS.Core.API/appsettings.Development.json index 492bb8a68..e9f58c77f 100644 --- a/IRaCIS.Core.API/appsettings.Development.json +++ b/IRaCIS.Core.API/appsettings.Development.json @@ -19,7 +19,7 @@ "OpenTrialRelationDelete": true, - "OpenLoginLimit": true + "OpenLoginLimit": false }, "SystemEmailSendConfig": { From 4ab56202f04d677772fafb9bb7a1266643328f72 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 16 Jun 2023 14:30:21 +0800 Subject: [PATCH 7/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E8=BF=94=E5=9B=9E?= =?UTF-8?q?=E5=88=97=E8=A1=A8=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../TrialSiteUser/PersonalWorkstation.cs | 28 +++++++----- IRaCIS.Core.Domain/SQLFile/20230613.sql | 44 ++++++++++--------- 2 files changed, 39 insertions(+), 33 deletions(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs index ac2fc4adc..c400c092f 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs @@ -5,6 +5,7 @@ using IRaCIS.Core.Domain.Share; using IRaCIS.Core.Infrastructure.Extention; using MathNet.Numerics; using Microsoft.AspNetCore.Mvc; +using System.Linq; using System.Linq.Dynamic.Core; namespace IRaCIS.Core.Application @@ -634,7 +635,7 @@ namespace IRaCIS.Core.Application ExperimentName = t.ExperimentName, TrialCode = t.TrialCode, UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList) - .Where(u => u.CreateUserId==_userInfo.Id && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(), + .Where(u => u.CreateUserId == _userInfo.Id && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator && u.SubjectVisit.IsUrgent).Count(), ToBeDealedCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList) .Where(u => u.CreateUserId == _userInfo.Id && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count(), @@ -841,7 +842,7 @@ namespace IRaCIS.Core.Application var toBeDealedCount = _taskMedicalReviewRepository .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id)) - .Where(t => t.IsClosedDialog == false && t.VisitTask.DoctorUserId==_userInfo.Id) + .Where(t => t.IsClosedDialog == false && t.VisitTask.DoctorUserId == _userInfo.Id) .Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count(); return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount }); @@ -968,7 +969,7 @@ namespace IRaCIS.Core.Application #region 项目维度 统计每个人的待办 [HttpPost] - public async Task>> GetTrialUserToBeDoneList(TrialUserToBeDoneQuery inQuery, + public async Task> >> GetTrialUserToBeDoneList(TrialUserToBeDoneQuery inQuery, [FromServices] IRepository _trialUserRepository) { @@ -1010,15 +1011,15 @@ namespace IRaCIS.Core.Application // CRC 质疑待回复 --区分人 QC_CRC_ToBeDealedCount = (t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.User.UserTypeEnum == UserTypeEnum.CRA) ? - t.Trial.SubjectVisitList.Where(c=>c.TrialSite.CRCUserList.Any(u=>u.UserId==t.UserId)) - .SelectMany(c => c.QCChallengeList).Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC ).Count() : 0, + t.Trial.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == t.UserId)) + .SelectMany(c => c.QCChallengeList).Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count() : 0, //IQC 质疑待处理 --区分人 QC_IQC_ToBeDealedCount = (t.User.UserTypeEnum == UserTypeEnum.IQC) ? t.Trial.SubjectVisitList.SelectMany(c => c.QCChallengeList) - .Where(u => u.CreateUserId==t.UserId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0, + .Where(u => u.CreateUserId == t.UserId && u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0, @@ -1029,10 +1030,10 @@ namespace IRaCIS.Core.Application - //PM 核查待处理 + //PM 核查待处理 Check_PM_ToBeDealedCount = (t.User.UserTypeEnum == UserTypeEnum.APM || t.User.UserTypeEnum == UserTypeEnum.ProjectManager) ? - t.Trial.SubjectVisitList .Where(u => u.CheckState == CheckStateEnum.ToCheck).Count() : 0, + t.Trial.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck).Count() : 0, //PM 质疑待处理 Check_PM_ToBeReplyedCount = @@ -1045,10 +1046,10 @@ namespace IRaCIS.Core.Application Check_CRC_ToBeDealedCount = (t.User.UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator || t.User.UserTypeEnum == UserTypeEnum.CRA) ? t.Trial.SubjectVisitList.Where(c => c.TrialSite.CRCUserList.Any(u => u.UserId == t.UserId)) - .Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply ).Count() : 0, + .Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count() : 0, - //IR 未读 --区分人 + //IR 未读 --区分人 Reading_IR_UnReadCount = (t.User.UserTypeEnum == UserTypeEnum.IndependentReviewer) ? t.Trial.VisitTaskList @@ -1075,7 +1076,7 @@ namespace IRaCIS.Core.Application Medical_IR_ToBeDealedCount = (t.User.UserTypeEnum == UserTypeEnum.IndependentReviewer) ? t.Trial.TaskMedicalReviewList - .Where(c => c.IsClosedDialog == false && c.VisitTask.DoctorUserId==t.UserId) + .Where(c => c.IsClosedDialog == false && c.VisitTask.DoctorUserId == t.UserId) .Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count() : 0, @@ -1091,7 +1092,10 @@ namespace IRaCIS.Core.Application var list = await query.ToListAsync(); - return ResponseOutput.Ok(list); + + var result= list.GroupBy(t => t.UserType).ToDictionary(g => g.Key, g => g.ToList()); + + return ResponseOutput.Ok(result); } diff --git a/IRaCIS.Core.Domain/SQLFile/20230613.sql b/IRaCIS.Core.Domain/SQLFile/20230613.sql index 00a3a7b10..217ac6339 100644 --- a/IRaCIS.Core.Domain/SQLFile/20230613.sql +++ b/IRaCIS.Core.Domain/SQLFile/20230613.sql @@ -9,33 +9,35 @@ delete VisitTaskReReading where TrialId is NULL --数据库列字符串列 长度 -SELECT t.name AS table_name, c.name AS column_name, d.name AS constraint_name , ty.Name as typeName, c.max_length as length +SELECT t.name AS table_name, + c.name AS column_name, + d.name AS constraint_name, + ty.Name as typeName, + c.max_length as length FROM sys.tables t -INNER JOIN sys.default_constraints d ON t.object_id = d.parent_object_id -INNER JOIN sys.columns c ON d.parent_column_id = c.column_id AND c.object_id = t.object_id +INNER JOIN sys.columns c ON c.object_id = t.object_id +LEFT JOIN sys.default_constraints d ON d.parent_object_id = c.object_id AND d.parent_column_id = c.column_id INNER JOIN sys.types ty on ty.system_type_id = c.system_type_id AND ty.name in ('nvarchar', 'varchar', 'char', 'nchar') +WHERE c.max_length < 100 AND c.max_length > 0 --带维护sql 的查询 -SELECT t.name AS table_name, c.name AS column_name, d.name AS constraint_name , ty.Name as typeName, c.max_length as length, -'ALTER TABLE [' + t.name + '] DROP CONSTRAINT [' + d.name + ']' AS drop_constraint_sql, -CASE WHEN c.is_nullable = 1 THEN - 'ALTER TABLE [' + OBJECT_NAME(c.object_id) + '] ALTER COLUMN ' + QUOTENAME(c.name) + - CASE WHEN c.max_length < 100 THEN ' NVARCHAR(100)' ELSE ' NVARCHAR('+ CONCAT('', c.max_length)+')' END + ' NULL' - ELSE - 'ALTER TABLE [' + OBJECT_NAME(c.object_id) + '] ALTER COLUMN ' + QUOTENAME(c.name) + - CASE WHEN c.max_length < 100 THEN ' NVARCHAR(100)' ELSE ' NVARCHAR('+ CONCAT('', c.max_length)+')' END + ' NOT NULL' - END AS AlterColumnSQL, - - 'ALTER TABLE ' + QUOTENAME(t.name) + ' ADD CONSTRAINT ' +'DF_'+t.name+ '_'+c.name + - ' DEFAULT ' + d.definition + ' FOR ' + QUOTENAME(c.name) AS add_constraint_sql - +SELECT t.name AS table_name, + c.name AS column_name, + d.name AS constraint_name, + ty.Name as typeName, + c.max_length as length, + 'ALTER TABLE ' + QUOTENAME(t.name) + ' DROP CONSTRAINT [' + d.name + ']' AS drop_constraint_sql, + CASE WHEN c.max_length = -1 THEN 'ALTER TABLE ' + QUOTENAME(t.name) + ' ALTER COLUMN ' + QUOTENAME(c.name) + ' NVARCHAR(MAX)' + CASE WHEN c.is_nullable = 1 THEN ' NULL' ELSE ' NOT NULL' END + WHEN c.max_length > 0 AND c.max_length < 100 THEN 'ALTER TABLE ' + QUOTENAME(t.name) + ' ALTER COLUMN ' + QUOTENAME(c.name) + ' NVARCHAR(' + CAST(100 AS VARCHAR(10)) + ')' + CASE WHEN c.is_nullable = 1 THEN ' NULL' ELSE ' NOT NULL' END + WHEN c.max_length = 8000 THEN 'ALTER TABLE ' + QUOTENAME(t.name) + ' ALTER COLUMN ' + QUOTENAME(c.name) + ' NVARCHAR(' + CAST(4000 AS VARCHAR(10)) + ')' + CASE WHEN c.is_nullable = 1 THEN ' NULL' ELSE ' NOT NULL' END + ELSE 'ALTER TABLE ' + QUOTENAME(t.name) + ' ALTER COLUMN ' + QUOTENAME(c.name) + ' ' + ty.name + '(' + CAST(c.max_length AS VARCHAR(10)) + ')' + CASE WHEN c.is_nullable = 1 THEN ' NULL' ELSE ' NOT NULL' END + END AS AlterColumnSQL, + 'ALTER TABLE ' + QUOTENAME(t.name) + ' ADD CONSTRAINT ' +'DF_'+t.name+ '_'+ c.name + ' DEFAULT ' + d.definition + ' FOR ' + QUOTENAME(c.name) AS add_constraint_sql FROM sys.tables t -INNER JOIN sys.default_constraints d ON t.object_id = d.parent_object_id -INNER JOIN sys.columns c ON d.parent_column_id = c.column_id AND c.object_id = t.object_id +INNER JOIN sys.columns c ON c.object_id = t.object_id +LEFT JOIN sys.default_constraints d ON d.parent_object_id = c.object_id AND d.parent_column_id = c.column_id INNER JOIN sys.types ty on ty.system_type_id = c.system_type_id AND ty.name in ('nvarchar', 'varchar', 'char', 'nchar') - ---不是nvarchar 或者是nvarchar 但是长度小于100 -and (ty.name!='nvarchar' or (ty.name='nvarchar' and c.max_length<100)) \ No newline at end of file +and (ty.name != 'nvarchar' or (ty.name = 'nvarchar' and (c.max_length = -1 or (c.max_length < 100 and c.max_length > 0)))) \ No newline at end of file From b96a1dcefc46b2b1d802f8e268ec40cdc70ef551 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 16 Jun 2023 15:34:44 +0800 Subject: [PATCH 8/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=97=E8=A1=A8?= =?UTF-8?q?=E5=B1=95=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Service/TrialSiteUser/PersonalWorkstation.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs index c400c092f..1e1882d63 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs @@ -969,7 +969,7 @@ namespace IRaCIS.Core.Application #region 项目维度 统计每个人的待办 [HttpPost] - public async Task> >> GetTrialUserToBeDoneList(TrialUserToBeDoneQuery inQuery, + public async Task> > GetTrialUserToBeDoneList(TrialUserToBeDoneQuery inQuery, [FromServices] IRepository _trialUserRepository) { @@ -1093,9 +1093,9 @@ namespace IRaCIS.Core.Application var list = await query.ToListAsync(); - var result= list.GroupBy(t => t.UserType).ToDictionary(g => g.Key, g => g.ToList()); + //var result= list.GroupBy(t => t.UserType).ToDictionary(g => g.Key, g => g.ToList()); - return ResponseOutput.Ok(result); + return ResponseOutput.Ok(list); } From 39fab365410e16a3f07beb19fb12c525c444a826 Mon Sep 17 00:00:00 2001 From: hang <872297557@qq.com> Date: Fri, 16 Jun 2023 16:38:17 +0800 Subject: [PATCH 9/9] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=9F=A5=E8=AF=A2?= =?UTF-8?q?=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DTO/PersonalWorkstationViewModel.cs | 22 ++++++++++++++++++- .../TrialSiteUser/PersonalWorkstation.cs | 5 +++-- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs index 3953d640a..3d6424620 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/DTO/PersonalWorkstationViewModel.cs @@ -291,7 +291,7 @@ namespace IRaCIS.Core.Application.Contracts } - public class TrialUserToBeDoneQuery : PageInput + public class TrialUserToBeDoneQuery { [NotDefault] public Guid TrialId { get; set; } @@ -339,6 +339,26 @@ namespace IRaCIS.Core.Application.Contracts public int? Medical_IR_ToBeDealedCount { get; set; } + public int UserTotalToBeDoneCount => new[] + { + ReviewerSelect_SPM_ToBeApprovalCount ?? 0, + ReviewerSelect_PM_ToBeConfirmCount ?? 0, + ImageUpload_CRC_ToBeReUploadCount ?? 0, + ImageUpload_CRC_ToBeSubmitCount ?? 0, + QC_IQC_ToBeReviewedCount ?? 0, + QC_IQC_ToBeClaimedCount ?? 0, + QC_IQC_ToBeDealedCount ?? 0, + QC_CRC_ToBeDealedCount ?? 0, + Check_CRC_ToBeDealedCount ?? 0, + Check_PM_ToBeDealedCount ?? 0, + Check_PM_ToBeReplyedCount ?? 0, + Reading_IR_UnReadCount ?? 0, + Reading_SPM_ToBeApprovalCount ?? 0, + Reading_PM_ToBeApprovalCount ?? 0, + Medical_MIM_ToBeDealedCount ?? 0, + Medical_IR_ToBeDealedCount ?? 0 + }.Sum(); + } public class TrialBaseInfoDto diff --git a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs index 1e1882d63..d8f1febbb 100644 --- a/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs +++ b/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs @@ -969,7 +969,7 @@ namespace IRaCIS.Core.Application #region 项目维度 统计每个人的待办 [HttpPost] - public async Task> > GetTrialUserToBeDoneList(TrialUserToBeDoneQuery inQuery, + public async Task>> GetTrialUserToBeDoneList(TrialUserToBeDoneQuery inQuery, [FromServices] IRepository _trialUserRepository) { @@ -1092,10 +1092,11 @@ namespace IRaCIS.Core.Application var list = await query.ToListAsync(); + var result = list.Where(t => t.UserTotalToBeDoneCount > 0).ToList(); //var result= list.GroupBy(t => t.UserType).ToDictionary(g => g.Key, g => g.ToList()); - return ResponseOutput.Ok(list); + return ResponseOutput.Ok(result); }