Uat_Study
commit
38538ca358
|
@ -1,7 +1,9 @@
|
||||||
using EasyCaching.Core;
|
using EasyCaching.Core;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
|
using Microsoft.AspNetCore.Authentication;
|
||||||
using Microsoft.AspNetCore.Authorization;
|
using Microsoft.AspNetCore.Authorization;
|
||||||
using Microsoft.AspNetCore.Http;
|
using Microsoft.AspNetCore.Http;
|
||||||
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Filters;
|
using Microsoft.AspNetCore.Mvc.Filters;
|
||||||
using Microsoft.Extensions.Localization;
|
using Microsoft.Extensions.Localization;
|
||||||
using Microsoft.Extensions.Options;
|
using Microsoft.Extensions.Options;
|
||||||
|
@ -51,7 +53,9 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter
|
||||||
context.HttpContext.Response.ContentType = "application/json";
|
context.HttpContext.Response.ContentType = "application/json";
|
||||||
context.HttpContext.Response.StatusCode = StatusCodes.Status200OK;
|
context.HttpContext.Response.StatusCode = StatusCodes.Status200OK;
|
||||||
//---当前请求未从Header/Url取到用户Token,请联系开发者
|
//---当前请求未从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、在这里取缓存 进行比较 看是否有其他人进行了登陆,如果其他人登陆了,就把之前用户挤掉
|
//2、在这里取缓存 进行比较 看是否有其他人进行了登陆,如果其他人登陆了,就把之前用户挤掉
|
||||||
|
@ -78,7 +82,12 @@ public class LimitUserRequestAuthorization : IAsyncAuthorizationFilter
|
||||||
context.HttpContext.Response.ContentType = "application/json";
|
context.HttpContext.Response.ContentType = "application/json";
|
||||||
context.HttpContext.Response.StatusCode = StatusCodes.Status403Forbidden;
|
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)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,8 +17,5 @@ namespace IRaCIS.Application.Contracts
|
||||||
public string AwardsHonorsCN { get; set; } = String.Empty;
|
public string AwardsHonorsCN { get; set; } = String.Empty;
|
||||||
|
|
||||||
|
|
||||||
public string BlindPublications { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.ComponentModel.DataAnnotations;
|
||||||
using IRaCIS.Application.Contracts;
|
using IRaCIS.Application.Contracts;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
|
|
||||||
|
@ -290,7 +291,75 @@ namespace IRaCIS.Core.Application.Contracts
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public class TrialUserToBeDoneQuery
|
||||||
|
{
|
||||||
|
[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 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
|
public class TrialBaseInfoDto
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,7 +3,10 @@ using IRaCIS.Core.Application.Contracts;
|
||||||
using IRaCIS.Core.Domain.Models;
|
using IRaCIS.Core.Domain.Models;
|
||||||
using IRaCIS.Core.Domain.Share;
|
using IRaCIS.Core.Domain.Share;
|
||||||
using IRaCIS.Core.Infrastructure.Extention;
|
using IRaCIS.Core.Infrastructure.Extention;
|
||||||
|
using MathNet.Numerics;
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Linq.Dynamic.Core;
|
||||||
|
|
||||||
namespace IRaCIS.Core.Application
|
namespace IRaCIS.Core.Application
|
||||||
{
|
{
|
||||||
|
@ -193,7 +196,7 @@ namespace IRaCIS.Core.Application
|
||||||
ToBeCheckedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck).Count(),
|
ToBeCheckedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.ToCheck).Count(),
|
||||||
|
|
||||||
ToBeRepliedCount = t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng &&
|
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 +401,13 @@ namespace IRaCIS.Core.Application
|
||||||
ResearchProgramNo = t.ResearchProgramNo,
|
ResearchProgramNo = t.ResearchProgramNo,
|
||||||
ExperimentName = t.ExperimentName,
|
ExperimentName = t.ExperimentName,
|
||||||
TrialCode = t.TrialCode,
|
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(),
|
.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(),
|
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count(),
|
||||||
|
|
||||||
|
@ -411,6 +417,7 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
var toBeDealedCount = _subjectVisitRepository
|
var toBeDealedCount = _subjectVisitRepository
|
||||||
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
|
.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)
|
.SelectMany(c => c.QCChallengeList)
|
||||||
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count();
|
.Where(u => u.IsClosed == false && u.LatestReplyUser.UserTypeEnum == UserTypeEnum.IQC).Count();
|
||||||
|
|
||||||
|
@ -438,8 +445,12 @@ namespace IRaCIS.Core.Application
|
||||||
ResearchProgramNo = t.ResearchProgramNo,
|
ResearchProgramNo = t.ResearchProgramNo,
|
||||||
ExperimentName = t.ExperimentName,
|
ExperimentName = t.ExperimentName,
|
||||||
TrialCode = t.TrialCode,
|
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 +461,7 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
var toBeDealedCount = _subjectVisitRepository
|
var toBeDealedCount = _subjectVisitRepository
|
||||||
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
|
.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();
|
.Where(u => u.CheckState == CheckStateEnum.CVIng && u.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply).Count();
|
||||||
|
|
||||||
return ResponseOutput.Ok(result, new { TotalToBeReplyedCount = toBeDealedCount });
|
return ResponseOutput.Ok(result, new { TotalToBeReplyedCount = toBeDealedCount });
|
||||||
|
@ -478,8 +490,13 @@ namespace IRaCIS.Core.Application
|
||||||
ResearchProgramNo = t.ResearchProgramNo,
|
ResearchProgramNo = t.ResearchProgramNo,
|
||||||
ExperimentName = t.ExperimentName,
|
ExperimentName = t.ExperimentName,
|
||||||
TrialCode = t.TrialCode,
|
TrialCode = t.TrialCode,
|
||||||
UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent && u.IsPMBackOrReReading).Count(),
|
UrgentCount = t.SubjectVisitList
|
||||||
ToBeReUploadCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsPMBackOrReReading).Count(),
|
.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 +533,14 @@ namespace IRaCIS.Core.Application
|
||||||
ResearchProgramNo = t.ResearchProgramNo,
|
ResearchProgramNo = t.ResearchProgramNo,
|
||||||
ExperimentName = t.ExperimentName,
|
ExperimentName = t.ExperimentName,
|
||||||
TrialCode = t.TrialCode,
|
TrialCode = t.TrialCode,
|
||||||
UrgentCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit && u.IsUrgent).Count(),
|
UrgentCount = t.SubjectVisitList
|
||||||
ToBeDealedCount = t.SubjectVisitList.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count(),
|
.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 +548,7 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
var toBeDealedCount = _subjectVisitRepository
|
var toBeDealedCount = _subjectVisitRepository
|
||||||
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
|
.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();
|
.Where(u => u.SubmitState == SubmitStateEnum.ToSubmit).Count();
|
||||||
|
|
||||||
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
|
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
|
||||||
|
@ -566,7 +590,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提交之间的 已领取 待审核 审核中 (审核完成 领取人就会清理 所以只用查询当前领取人是自己的就好了)
|
//待审核通过,统计从已领取到QC提交之间的 已领取 待审核 审核中 (审核完成 领取人就会清理 所以只用查询当前领取人是自己的就好了)
|
||||||
ToBeReviewedCount = t.SubjectVisitList.Where(u => u.CurrentActionUserId == _userInfo.Id).Count()
|
ToBeReviewedCount = t.SubjectVisitList.Where(u => u.CurrentActionUserId == _userInfo.Id).Count()
|
||||||
|
@ -585,7 +609,7 @@ namespace IRaCIS.Core.Application
|
||||||
.Where(u => u.CurrentActionUserId == _userInfo.Id).Count();
|
.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 +635,10 @@ namespace IRaCIS.Core.Application
|
||||||
ExperimentName = t.ExperimentName,
|
ExperimentName = t.ExperimentName,
|
||||||
TrialCode = t.TrialCode,
|
TrialCode = t.TrialCode,
|
||||||
UrgentCount = t.SubjectVisitList.SelectMany(c => c.QCChallengeList)
|
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)
|
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 +647,7 @@ namespace IRaCIS.Core.Application
|
||||||
var toBeDealedCount = _subjectVisitRepository
|
var toBeDealedCount = _subjectVisitRepository
|
||||||
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
|
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
|
||||||
.SelectMany(c => c.QCChallengeList)
|
.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 });
|
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
|
||||||
|
|
||||||
|
@ -817,7 +842,7 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
var toBeDealedCount = _taskMedicalReviewRepository
|
var toBeDealedCount = _taskMedicalReviewRepository
|
||||||
.Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
|
.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();
|
.Where(u => u.ReadingMedicalReviewDialogList.OrderByDescending(l => l.CreateTime).First().UserTypeEnumInt == (int)UserTypeEnum.MIM).Count();
|
||||||
|
|
||||||
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
|
return ResponseOutput.Ok(result, new { TotalToBeReUploadCount = toBeDealedCount });
|
||||||
|
@ -884,7 +909,7 @@ namespace IRaCIS.Core.Application
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
#region 项目列表查询
|
#region 项目列表查询 + 待办详情
|
||||||
|
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
|
@ -892,7 +917,7 @@ namespace IRaCIS.Core.Application
|
||||||
[FromServices] IRepository<TaskMedicalReview> _taskMedicalReviewRepository)
|
[FromServices] IRepository<TaskMedicalReview> _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 isCRC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ClinicalResearchCoordinator;
|
||||||
var isIQC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC;
|
var isIQC = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.IQC;
|
||||||
var isMIM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.MIM;
|
var isMIM = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.MIM;
|
||||||
|
@ -912,17 +937,17 @@ namespace IRaCIS.Core.Application
|
||||||
ResearchProgramNo = t.ResearchProgramNo,
|
ResearchProgramNo = t.ResearchProgramNo,
|
||||||
ExperimentName = t.ExperimentName,
|
ExperimentName = t.ExperimentName,
|
||||||
TrialCode = t.TrialCode,
|
TrialCode = t.TrialCode,
|
||||||
CreateTime=t.CreateTime,
|
CreateTime = t.CreateTime,
|
||||||
Sponsor= _userInfo.IsEn_Us? t.Sponsor.SponsorName:t.Sponsor.SponsorNameCN,
|
Sponsor = _userInfo.IsEn_Us ? t.Sponsor.SponsorName : t.Sponsor.SponsorNameCN,
|
||||||
TrialStatusStr=t.TrialStatusStr,
|
TrialStatusStr = t.TrialStatusStr,
|
||||||
|
|
||||||
ExpetiedTaskCount= isPM ? t.VisitTaskList.Where(t=>t.IsUrgent).Count():0,
|
ExpetiedTaskCount = isPM ? t.VisitTaskList.Where(t => t.IsUrgent).Count() : 0,
|
||||||
|
|
||||||
ReReadingApprovalCount= isPM? t.VisitTaskReReadingList.Where(t=>t.OriginalReReadingTask.ReReadingApplyState==ReReadingApplyState.DocotorHaveApplyed).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,
|
PendingReconciliationCount = isPM ? t.SubjectVisitList.Where(t => t.CheckState == CheckStateEnum.ToCheck).Count() : 0,
|
||||||
|
|
||||||
PendingResponseCount=isPM? t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng &&
|
PendingResponseCount = isPM ? t.SubjectVisitList.Where(u => u.CheckState == CheckStateEnum.CVIng &&
|
||||||
u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0
|
u.CheckChallengeDialogList.OrderByDescending(t => t.CreateTime).First().UserTypeEnum == UserTypeEnum.ClinicalResearchCoordinator).Count() : 0
|
||||||
|
|
||||||
|
|
||||||
|
@ -933,14 +958,172 @@ namespace IRaCIS.Core.Application
|
||||||
|
|
||||||
//.ProjectTo<TrialDetailDTO>(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id });
|
//.ProjectTo<TrialDetailDTO>(_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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#region 项目维度 统计每个人的待办
|
||||||
|
|
||||||
|
[HttpPost]
|
||||||
|
public async Task<IResponseOutput<List<TrialUserToBeDoneDto>>> GetTrialUserToBeDoneList(TrialUserToBeDoneQuery inQuery,
|
||||||
|
[FromServices] IRepository<TrialUser> _trialUserRepository)
|
||||||
|
{
|
||||||
|
|
||||||
|
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,
|
||||||
|
|
||||||
|
//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,
|
||||||
|
|
||||||
|
//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();
|
||||||
|
|
||||||
|
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(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#region 废弃
|
||||||
|
#region 上传影像
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region QC
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 一致性核查
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#region 阅片
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,40 +7,37 @@ INNER JOIN VisitTask ON VisitTaskReReading.OriginalReReadingTaskId = VisitTask.I
|
||||||
|
|
||||||
delete VisitTaskReReading where TrialId is NULL
|
delete VisitTaskReReading where TrialId is NULL
|
||||||
|
|
||||||
-- 查询
|
|
||||||
|
|
||||||
SELECT
|
--数据库列字符串列 长度
|
||||||
TableName = d.name, --表名称
|
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.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
|
||||||
|
|
||||||
ColumnNumber = a.colorder, --列序号
|
--带维护sql 的查询
|
||||||
ColumnName = a.name, --列名称
|
|
||||||
IsNotCanNull = case when a.isnullable=1 then 0 else 1 end, --允许空
|
|
||||||
Columntype = b.name, --类型
|
|
||||||
ColumnLength = COLUMNPROPERTY(a.id,a.name,'PRECISION') --长度
|
|
||||||
|
|
||||||
|
SELECT t.name AS table_name,
|
||||||
FROM
|
c.name AS column_name,
|
||||||
syscolumns a
|
d.name AS constraint_name,
|
||||||
left join
|
ty.Name as typeName,
|
||||||
systypes b
|
c.max_length as length,
|
||||||
on
|
'ALTER TABLE ' + QUOTENAME(t.name) + ' DROP CONSTRAINT [' + d.name + ']' AS drop_constraint_sql,
|
||||||
a.xusertype=b.xusertype
|
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
|
||||||
inner join
|
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
|
||||||
sysobjects d
|
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
|
||||||
on
|
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
|
||||||
a.id=d.id and d.xtype in ('U') and d.name<>'dtproperties'
|
END AS AlterColumnSQL,
|
||||||
left join
|
'ALTER TABLE ' + QUOTENAME(t.name) + ' ADD CONSTRAINT ' +'DF_'+t.name+ '_'+ c.name + ' DEFAULT ' + d.definition + ' FOR ' + QUOTENAME(c.name) AS add_constraint_sql
|
||||||
syscomments e
|
FROM sys.tables t
|
||||||
on
|
INNER JOIN sys.columns c ON c.object_id = t.object_id
|
||||||
a.cdefault=e.id
|
LEFT JOIN sys.default_constraints d ON d.parent_object_id = c.object_id AND d.parent_column_id = c.column_id
|
||||||
left join
|
INNER JOIN sys.types ty on ty.system_type_id = c.system_type_id
|
||||||
sys.extended_properties g
|
AND ty.name in ('nvarchar', 'varchar', 'char', 'nchar')
|
||||||
on
|
and (ty.name != 'nvarchar' or (ty.name = 'nvarchar' and (c.max_length = -1 or (c.max_length < 100 and c.max_length > 0))))
|
||||||
a.id=G.major_id and a.colid=g.minor_id
|
|
||||||
left join
|
|
||||||
sys.extended_properties f
|
|
||||||
on
|
|
||||||
d.id=f.major_id and f.minor_id=0
|
|
||||||
where (b.name='nvarchar' or b.name='varchar') and COLUMNPROPERTY(a.id,a.name,'PRECISION') <100 and COLUMNPROPERTY(a.id,a.name,'PRECISION') !=-1
|
|
||||||
order by
|
|
||||||
a.id,a.colorder
|
|
Loading…
Reference in New Issue