From f97df34b652bbb5791eeef23b8c7debee00c756d Mon Sep 17 00:00:00 2001 From: hang <87227557@qq.com> Date: Mon, 30 Dec 2024 21:39:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=88=97=E8=A1=A8=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Document/DTO/SystemDocumentViewModel.cs | 2 +- .../Service/Document/TrialDocumentService.cs | 151 ++++++++++-------- 2 files changed, 82 insertions(+), 71 deletions(-) diff --git a/IRaCIS.Core.Application/Service/Document/DTO/SystemDocumentViewModel.cs b/IRaCIS.Core.Application/Service/Document/DTO/SystemDocumentViewModel.cs index a06143a17..560681283 100644 --- a/IRaCIS.Core.Application/Service/Document/DTO/SystemDocumentViewModel.cs +++ b/IRaCIS.Core.Application/Service/Document/DTO/SystemDocumentViewModel.cs @@ -65,7 +65,7 @@ namespace IRaCIS.Core.Application.Contracts //public string DocNeedSignUserTypes { get; set; } - public List UserConfirmedUserTypeList => IdentityUserTypeList.Intersect(DocNeedSignUserTypeList).ToList(); + //public List UserConfirmedUserTypeList => IdentityUserTypeList.Intersect(DocNeedSignUserTypeList).ToList(); [JsonIgnore] diff --git a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs index 230b413ee..ec1531d9e 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs @@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using NPOI.SS.Formula.Functions; using System.Linq; +using System.Linq.Dynamic.Core; namespace IRaCIS.Core.Application.Services { @@ -224,12 +225,14 @@ namespace IRaCIS.Core.Application.Services var trialInfo = await (_trialRepository.Where(t => t.Id == inQuery.TrialId, ignoreQueryFilters: true).Select(t => new { t.TrialFinishedTime, t.TrialStatusStr }).FirstNotNullAsync()); - #region 统一用户修改 + #region 统一用户修改 var systemDocQuery = - from sysDoc in _systemDocumentRepository.WhereIf(trialInfo.TrialFinishedTime != null, u => u.CreateTime < trialInfo.TrialFinishedTime) - from trialUser in _trialIdentityUserRepository.Where(t => t.TrialId == inQuery.TrialId && t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => sysDoc.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId)), false, false) - + from sysDoc in _systemDocumentRepository.AsQueryable(false).Where(t => t.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == _userInfo.UserTypeId)) + from trialUser in _trialIdentityUserRepository.AsQueryable(false) + .Where(t => t.TrialId == inQuery.TrialId && t.IdentityUserId == _userInfo.IdentityUserId + && t.TrialUserRoleList.Any(t => sysDoc.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId))) + join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = trialUser.IdentityUserId, SystemDocumentId = sysDoc.Id } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc from confirm in cc.DefaultIfEmpty() select new UnionDocumentWithConfirmInfoView() @@ -259,9 +262,13 @@ namespace IRaCIS.Core.Application.Services FullFilePath = sysDoc.Path }; + //项目文档查询 - var trialDocQuery = from trialDoc in _trialDocumentRepository.Where(t => t.TrialId == inQuery.TrialId) - from trialUser in _trialIdentityUserRepository.Where(t => t.TrialId == inQuery.TrialId && t.IdentityUserId == _userInfo.IdentityUserId && t.TrialUserRoleList.Any(t => trialDoc.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId)), false, false) + var trialDocQuery = + from trialDoc in _trialDocumentRepository.AsQueryable(false).Where(t => t.TrialId == inQuery.TrialId) + from trialUser in _trialIdentityUserRepository.AsQueryable(false).Where(t => t.TrialId == inQuery.TrialId && t.IdentityUserId == _userInfo.IdentityUserId + && t.TrialUserRoleList.Any(t => trialDoc.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId))) + join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on new { trialUser.IdentityUserId, TrialDocumentId = trialDoc.Id } equals new { IdentityUserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc from confirm in cc.DefaultIfEmpty() @@ -302,7 +309,7 @@ namespace IRaCIS.Core.Application.Services #region 废弃 ////系统文档查询 - //var systemDocumentQueryable = from needConfirmedUserType in _systemDocNeedConfirmedUserTypeRepository.Where(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId, ignoreQueryFilters: true) + //var systemDocQuery = from needConfirmedUserType in _systemDocNeedConfirmedUserTypeRepository.Where(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId, ignoreQueryFilters: true) // .WhereIf(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime) // .WhereIf(!_userInfo.IsAdmin, t => t.SystemDocument.IsDeleted == false || (t.SystemDocument.IsDeleted == true && t.SystemDocument.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.IdentityUserId))) @@ -334,7 +341,7 @@ namespace IRaCIS.Core.Application.Services - // IdentityUserTypeList = trialUser.TrialUser.TrialUserRoleList.Select(t => t.UserRole.UserTypeRole.UserTypeShortName), + // //IdentityUserTypeList = trialUser.TrialUser.TrialUserRoleList.Select(t => t.UserRole.UserTypeRole.UserTypeShortName), // //DocNeedSignUserTypeList = needConfirmedUserType.SystemDocument.NeedConfirmedUserTypeList.Select(t => t.UserTypeRole.UserTypeShortName).ToList(), @@ -343,7 +350,7 @@ namespace IRaCIS.Core.Application.Services // }; ////项目文档查询 - //var trialDocQueryable = from trialDoc in _trialDocumentRepository.AsQueryable(true).Where(t => t.TrialId == inQuery.TrialId) + //var trialDocQuery = from trialDoc in _trialDocumentRepository.AsQueryable(true).Where(t => t.TrialId == inQuery.TrialId) // .WhereIf(!_userInfo.IsAdmin, t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId)) // .WhereIf(!_userInfo.IsAdmin, t => t.IsDeleted == false || (t.IsDeleted == true && t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.IdentityUserId))) @@ -375,7 +382,7 @@ namespace IRaCIS.Core.Application.Services // //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName - // IdentityUserTypeList = trialUser.TrialUser.TrialUserRoleList.Select(t => t.UserRole.UserTypeRole.UserTypeShortName).ToList(), + // //IdentityUserTypeList = trialUser.TrialUser.TrialUserRoleList.Select(t => t.UserRole.UserTypeRole.UserTypeShortName).ToList(), // //DocNeedSignUserTypeList = trialDoc.NeedConfirmedUserTypeList.Select(t => t.UserTypeRole.UserTypeShortName).ToList(), // }; @@ -383,12 +390,13 @@ namespace IRaCIS.Core.Application.Services #endregion #region 报错 奇怪的bug + + var unionQuery = systemDocQuery.Union(trialDocQuery) .WhereIf(!string.IsNullOrEmpty(inQuery.Name), t => t.Name.Contains(inQuery.Name)) .WhereIf(inQuery.FileTypeId != null, t => t.FileTypeId == inQuery.FileTypeId) .WhereIf(inQuery.IsSign == true, t => t.ConfirmTime != null) - .WhereIf(inQuery.IsSign == false, t => t.ConfirmTime == null) - ; + .WhereIf(inQuery.IsSign == false, t => t.ConfirmTime == null); @@ -416,8 +424,6 @@ namespace IRaCIS.Core.Application.Services #endregion - - var needSignTrialDocCount = await _trialDocumentRepository.AsQueryable(true).Where(t => t.TrialId == inQuery.TrialId && t.Trial.TrialStatusStr != StaticData.TrialState.TrialStopped) .Where(t => t.Trial.TrialIdentityUserList.Any(t => t.IdentityUserId == _userInfo.IdentityUserId)) .Where(t => t.IsDeleted == false && !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.IdentityUserId && t.ConfirmTime != null) && t.NeedConfirmedUserTypeList.Any(u => u.NeedConfirmUserTypeId == _userInfo.UserTypeId)) @@ -436,7 +442,7 @@ namespace IRaCIS.Core.Application.Services 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(); - return ResponseOutput.Ok>(result, new { NeedSignCount = needSignTrialDocCount + needSignSystemDocCount, NeedSignTrialDocCount = needSignTrialDocCount, NeedSignSystemDocCount = needSignSystemDocCount, IsAdditionalAssessment = isAdditionalAssessment && isManualGenerateTask, TrialStatusStr = trialInfo.TrialStatusStr, TrialConfig = trialTaskConfig }); + return ResponseOutput.Ok(result, new { NeedSignCount = needSignTrialDocCount + needSignSystemDocCount, NeedSignTrialDocCount = needSignTrialDocCount, NeedSignSystemDocCount = needSignSystemDocCount, IsAdditionalAssessment = isAdditionalAssessment && isManualGenerateTask, TrialStatusStr = trialInfo.TrialStatusStr, TrialConfig = trialTaskConfig }); } @@ -455,78 +461,83 @@ namespace IRaCIS.Core.Application.Services var trialInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId, ignoreQueryFilters: true).Select(t => new { t.TrialFinishedTime, t.TrialStatusStr }).FirstNotNullAsync()); - var trialDocQuery = from trialDoc in _trialDocumentRepository.Where(t => t.TrialId == inQuery.TrialId) - .WhereIf(inQuery.UserTypeId != null, t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == inQuery.UserTypeId)) - from trialUser in _trialIdentityUserRepository.Where(t => t.TrialId == inQuery.TrialId && t.TrialUserRoleList.Any(t => trialDoc.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId)), false, false) - .WhereIf(inQuery.UserId != null, t => t.IdentityUserId == inQuery.UserId) + var trialDocQuery = + from trialDoc in _trialDocumentRepository.AsQueryable(false).Where(t => t.TrialId == inQuery.TrialId) + .Where(t => inQuery.UserTypeId != null ? t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == inQuery.UserTypeId) : true) + from trialUser in _trialIdentityUserRepository.AsQueryable(false).Where(t => t.TrialId == inQuery.TrialId + && t.TrialUserRoleList.AsQueryable().Any(t => trialDoc.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId)) + ) + .Where(t => inQuery.UserId != null ? t.IdentityUserId == inQuery.UserId : true) + join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on + new { trialUser.IdentityUserId, TrialDocumentId = trialDoc.Id } equals new { IdentityUserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc + from confirm in cc.DefaultIfEmpty() + select new UnionDocumentWithConfirmInfoView() + { + IsSystemDoc = false, - join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on - new { trialUser.IdentityUserId, TrialDocumentId = trialDoc.Id } equals new { IdentityUserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc - from confirm in cc.DefaultIfEmpty() - select new UnionDocumentWithConfirmInfoView() - { - IsSystemDoc = false, - - Id = trialDoc.Id, - CreateTime = trialDoc.CreateTime, - IsDeleted = trialDoc.IsDeleted, - SignViewMinimumMinutes = trialDoc.SignViewMinimumMinutes, - Name = trialDoc.Name, - Path = trialDoc.Path, - FileTypeId = trialDoc.FileTypeId, - FileType = _userInfo.IsEn_Us ? trialDoc.FileType.Value : trialDoc.FileType.ValueCN, - UpdateTime = trialDoc.UpdateTime, - //IsConfirmed= confirm.ConfirmTime!=null, + Id = trialDoc.Id, + CreateTime = trialDoc.CreateTime, + IsDeleted = trialDoc.IsDeleted, + SignViewMinimumMinutes = trialDoc.SignViewMinimumMinutes, + Name = trialDoc.Name, + Path = trialDoc.Path, + FileTypeId = trialDoc.FileTypeId, + FileType = _userInfo.IsEn_Us ? trialDoc.FileType.Value : trialDoc.FileType.ValueCN, + UpdateTime = trialDoc.UpdateTime, + //IsConfirmed= confirm.ConfirmTime!=null, - ConfirmUserId = confirm.ConfirmUserId, - ConfirmTime = confirm.ConfirmTime, - RealName = trialUser.IdentityUser.FullName, - UserName = trialUser.IdentityUser.UserName, + ConfirmUserId = confirm.ConfirmUserId, + ConfirmTime = confirm.ConfirmTime, + RealName = trialUser.IdentityUser.FullName, + UserName = trialUser.IdentityUser.UserName, - //UserTypeId = trialUser.UserRole.UserTypeId, - //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName, + //UserTypeId = trialUser.UserRole.UserTypeId, + //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName, - FullFilePath = trialDoc.Path - }; + FullFilePath = trialDoc.Path + }; var systemDocQuery = - from sysDoc in _systemDocumentRepository.WhereIf(trialInfo.TrialFinishedTime != null, u => u.CreateTime < trialInfo.TrialFinishedTime) - from trialUser in _trialIdentityUserRepository.Where(t => t.TrialId == inQuery.TrialId && t.TrialUserRoleList.Any(t => sysDoc.NeedConfirmedUserTypeList.Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId)), false, false) - .WhereIf(inQuery.UserId != null, t => t.IdentityUserId == inQuery.UserId) + from sysDoc in _systemDocumentRepository.AsQueryable(false).Where(u => trialInfo.TrialFinishedTime != null ? u.CreateTime < trialInfo.TrialFinishedTime : true) + from trialUser in _trialIdentityUserRepository.AsQueryable(false).Where(t => t.TrialId == inQuery.TrialId + && t.TrialUserRoleList.Any(t => sysDoc.NeedConfirmedUserTypeList.AsQueryable().Any(c => c.NeedConfirmUserTypeId == t.UserRole.UserTypeId))) + .Where(t => inQuery.UserId != null ? t.IdentityUserId == inQuery.UserId : true) - join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = trialUser.IdentityUserId, SystemDocumentId = sysDoc.Id } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc - from confirm in cc.DefaultIfEmpty() - select new UnionDocumentWithConfirmInfoView() - { - IsSystemDoc = true, + join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = trialUser.IdentityUserId, SystemDocumentId = sysDoc.Id } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc + from confirm in cc.DefaultIfEmpty() + select new UnionDocumentWithConfirmInfoView() + { + IsSystemDoc = true, - Id = sysDoc.Id, - CreateTime = sysDoc.CreateTime, - IsDeleted = sysDoc.IsDeleted, - SignViewMinimumMinutes = sysDoc.SignViewMinimumMinutes, - Name = sysDoc.Name, - Path = sysDoc.Path, - FileType = _userInfo.IsEn_Us ? sysDoc.FileType.Value : sysDoc.FileType.ValueCN, - FileTypeId = sysDoc.FileTypeId, - UpdateTime = sysDoc.UpdateTime, - //IsConfirmed = confirm.ConfirmTime != null, + Id = sysDoc.Id, + CreateTime = sysDoc.CreateTime, + IsDeleted = sysDoc.IsDeleted, + SignViewMinimumMinutes = sysDoc.SignViewMinimumMinutes, + Name = sysDoc.Name, + Path = sysDoc.Path, + FileType = _userInfo.IsEn_Us ? sysDoc.FileType.Value : sysDoc.FileType.ValueCN, + FileTypeId = sysDoc.FileTypeId, + UpdateTime = sysDoc.UpdateTime, + //IsConfirmed = confirm.ConfirmTime != null, - ConfirmUserId = confirm.ConfirmUserId, - ConfirmTime = confirm.ConfirmTime, + ConfirmUserId = confirm.ConfirmUserId, + ConfirmTime = confirm.ConfirmTime, - RealName = trialUser.IdentityUser.FullName, - UserName = trialUser.IdentityUser.UserName, + RealName = trialUser.IdentityUser.FullName, + UserName = trialUser.IdentityUser.UserName, - //UserTypeId = trialUser.UserRole.UserTypeId, - //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName, + //UserTypeId = trialUser.UserRole.UserTypeId, + //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName, - FullFilePath = sysDoc.Path - }; + FullFilePath = sysDoc.Path + }; + + var tt = await trialDocQuery.ToPagedListAsync(inQuery); var unionQuery = trialDocQuery.Union(systemDocQuery).IgnoreQueryFilters().Where(t => !(t.IsDeleted == true && t.ConfirmUserId == null)) .WhereIf(!string.IsNullOrEmpty(inQuery.Name), t => t.Name.Contains(inQuery.Name))