diff --git a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs index 3d8cc1088..230b413ee 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs @@ -10,6 +10,8 @@ using IRaCIS.Core.Domain.Models; using IRaCIS.Core.Domain.Share; using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; +using NPOI.SS.Formula.Functions; +using System.Linq; namespace IRaCIS.Core.Application.Services { @@ -221,87 +223,167 @@ 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 systemDocumentQueryable = 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))) - join trialUser in _trialUserRoleRepository.Where(t => t.TrialId == inQuery.TrialId && t.UserRole.IdentityUserId == _userInfo.IdentityUserId) - on needConfirmedUserType.NeedConfirmUserTypeId equals trialUser.UserRole.UserTypeId - join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmedUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc - from confirm in cc.DefaultIfEmpty() - select new UnionDocumentWithConfirmInfoView() - { - IsSystemDoc = true, + #region 统一用户修改 - Id = needConfirmedUserType.SystemDocument.Id, - CreateTime = needConfirmedUserType.SystemDocument.CreateTime, - IsDeleted = needConfirmedUserType.SystemDocument.IsDeleted, - SignViewMinimumMinutes = needConfirmedUserType.SystemDocument.SignViewMinimumMinutes, - Name = needConfirmedUserType.SystemDocument.Name, - Path = needConfirmedUserType.SystemDocument.Path, - FileTypeId = needConfirmedUserType.SystemDocument.FileTypeId, - FileType = _userInfo.IsEn_Us ? needConfirmedUserType.SystemDocument.FileType.Value : needConfirmedUserType.SystemDocument.FileType.ValueCN, - UpdateTime = needConfirmedUserType.SystemDocument.UpdateTime, + 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) - FullFilePath = needConfirmedUserType.SystemDocument.Path, + 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, - //IsConfirmed = confirm.ConfirmTime != null, - ConfirmUserId = confirm.ConfirmUserId, - ConfirmTime = confirm.ConfirmTime, - RealName = trialUser.UserRole.FullName, - UserName = trialUser.UserRole.IdentityUser.UserName, + 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, + RealName = trialUser.IdentityUser.FullName, + UserName = trialUser.IdentityUser.UserName, - IdentityUserTypeList = trialUser.TrialUser.TrialUserRoleList.Select(t => t.UserRole.UserTypeRole.UserTypeShortName), + //UserTypeId = trialUser.UserRole.UserTypeId, + //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName, - //DocNeedSignUserTypeList = needConfirmedUserType.SystemDocument.NeedConfirmedUserTypeList.Select(t => t.UserTypeRole.UserTypeShortName).ToList(), - - //UserTypeId = trialUser.UserRole.UserTypeId, - //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName - }; + FullFilePath = sysDoc.Path + }; //项目文档查询 - var trialDocQueryable = 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))) + 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) + 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 trialUser in _trialUserRoleRepository.Where(t => t.TrialId == inQuery.TrialId && t.UserRole.IdentityUserId == _userInfo.IdentityUserId) on trialDoc.TrialId equals trialUser.TrialId - join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on - new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc - from confirm in cc.DefaultIfEmpty() - select new UnionDocumentWithConfirmInfoView() - { - Id = trialDoc.Id, - IsSystemDoc = false, - CreateTime = trialDoc.CreateTime, - FullFilePath = trialDoc.Path, - IsDeleted = trialDoc.IsDeleted, - Name = trialDoc.Name, - Path = trialDoc.Path, - FileTypeId = trialDoc.FileTypeId, - FileType = _userInfo.IsEn_Us ? trialDoc.FileType.Value : trialDoc.FileType.ValueCN, - UpdateTime = trialDoc.UpdateTime, - SignViewMinimumMinutes = trialDoc.SignViewMinimumMinutes, - - //IsConfirmed = confirm.ConfirmTime != null, - ConfirmUserId = confirm.ConfirmUserId, - ConfirmTime = confirm.ConfirmTime, - RealName = trialUser.UserRole.FullName, - UserName = trialUser.UserRole.IdentityUser.UserName, - - //UserTypeId = trialUser.UserRole.UserTypeId, - //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName + 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, - IdentityUserTypeList = trialUser.TrialUser.TrialUserRoleList.Select(t => t.UserRole.UserTypeRole.UserTypeShortName).ToList(), - //DocNeedSignUserTypeList = trialDoc.NeedConfirmedUserTypeList.Select(t => t.UserTypeRole.UserTypeShortName).ToList(), - }; + ConfirmUserId = confirm.ConfirmUserId, + ConfirmTime = confirm.ConfirmTime, + RealName = trialUser.IdentityUser.FullName, + UserName = trialUser.IdentityUser.UserName, + + //UserTypeId = trialUser.UserRole.UserTypeId, + //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName, + + FullFilePath = trialDoc.Path + }; + + + + #endregion + + + + #region 废弃 + + ////系统文档查询 + //var systemDocumentQueryable = 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))) + + // join trialUser in _trialUserRoleRepository.Where(t => t.TrialId == inQuery.TrialId && t.UserRole.IdentityUserId == _userInfo.IdentityUserId) + // on needConfirmedUserType.NeedConfirmUserTypeId equals trialUser.UserRole.UserTypeId + // join confirm in _systemDocConfirmedUserRepository.Where() on new { ConfirmUserId = trialUser.UserId, SystemDocumentId = needConfirmedUserType.SystemDocumentId } equals new { confirm.ConfirmUserId, confirm.SystemDocumentId } into cc + // from confirm in cc.DefaultIfEmpty() + // select new UnionDocumentWithConfirmInfoView() + // { + // IsSystemDoc = true, + + // Id = needConfirmedUserType.SystemDocument.Id, + // CreateTime = needConfirmedUserType.SystemDocument.CreateTime, + // IsDeleted = needConfirmedUserType.SystemDocument.IsDeleted, + // SignViewMinimumMinutes = needConfirmedUserType.SystemDocument.SignViewMinimumMinutes, + // Name = needConfirmedUserType.SystemDocument.Name, + // Path = needConfirmedUserType.SystemDocument.Path, + // FileTypeId = needConfirmedUserType.SystemDocument.FileTypeId, + // FileType = _userInfo.IsEn_Us ? needConfirmedUserType.SystemDocument.FileType.Value : needConfirmedUserType.SystemDocument.FileType.ValueCN, + // UpdateTime = needConfirmedUserType.SystemDocument.UpdateTime, + + // FullFilePath = needConfirmedUserType.SystemDocument.Path, + + // //IsConfirmed = confirm.ConfirmTime != null, + // ConfirmUserId = confirm.ConfirmUserId, + // ConfirmTime = confirm.ConfirmTime, + // RealName = trialUser.UserRole.FullName, + // UserName = trialUser.UserRole.IdentityUser.UserName, + + + + // IdentityUserTypeList = trialUser.TrialUser.TrialUserRoleList.Select(t => t.UserRole.UserTypeRole.UserTypeShortName), + + // //DocNeedSignUserTypeList = needConfirmedUserType.SystemDocument.NeedConfirmedUserTypeList.Select(t => t.UserTypeRole.UserTypeShortName).ToList(), + + // //UserTypeId = trialUser.UserRole.UserTypeId, + // //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName + // }; + + ////项目文档查询 + //var trialDocQueryable = 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))) + + // join trialUser in _trialUserRoleRepository.Where(t => t.TrialId == inQuery.TrialId && t.UserRole.IdentityUserId == _userInfo.IdentityUserId) on trialDoc.TrialId equals trialUser.TrialId + // join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on + // new { trialUser.UserId, TrialDocumentId = trialDoc.Id } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc + // from confirm in cc.DefaultIfEmpty() + // select new UnionDocumentWithConfirmInfoView() + // { + // Id = trialDoc.Id, + // IsSystemDoc = false, + // CreateTime = trialDoc.CreateTime, + // FullFilePath = trialDoc.Path, + // IsDeleted = trialDoc.IsDeleted, + // Name = trialDoc.Name, + // Path = trialDoc.Path, + // FileTypeId = trialDoc.FileTypeId, + // FileType = _userInfo.IsEn_Us ? trialDoc.FileType.Value : trialDoc.FileType.ValueCN, + // UpdateTime = trialDoc.UpdateTime, + // SignViewMinimumMinutes = trialDoc.SignViewMinimumMinutes, + + // //IsConfirmed = confirm.ConfirmTime != null, + // ConfirmUserId = confirm.ConfirmUserId, + // ConfirmTime = confirm.ConfirmTime, + // RealName = trialUser.UserRole.FullName, + // UserName = trialUser.UserRole.IdentityUser.UserName, + + // //UserTypeId = trialUser.UserRole.UserTypeId, + // //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName + + + // IdentityUserTypeList = trialUser.TrialUser.TrialUserRoleList.Select(t => t.UserRole.UserTypeRole.UserTypeShortName).ToList(), + + // //DocNeedSignUserTypeList = trialDoc.NeedConfirmedUserTypeList.Select(t => t.UserTypeRole.UserTypeShortName).ToList(), + // }; + + #endregion #region 报错 奇怪的bug - var unionQuery = systemDocumentQueryable.Union(trialDocQueryable)/*.Distinct()*/ + 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) @@ -375,10 +457,9 @@ namespace IRaCIS.Core.Application.Services 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)) - join trialUser in _trialIdentityUserRepository.Where(t => t.TrialId == inQuery.TrialId) - .WhereIf(inQuery.UserId != null, t => t.IdentityUserId == inQuery.UserId) + 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) - on trialDoc.TrialId equals trialUser.TrialId 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 @@ -412,57 +493,47 @@ namespace IRaCIS.Core.Application.Services }; - //var result = from sysDoc in _systemDocumentRepository.AsQueryable() - // from trialUser in _trialIdentityUserRepository.AsQueryable() // 无条件笛卡尔积 - - // select new - // { + 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) - // Table2Id = sysDoc, - // }; + 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, + ConfirmUserId = confirm.ConfirmUserId, + ConfirmTime = confirm.ConfirmTime, - //var systemDocQuery = - // from sysDoc in _systemDocumentRepository.AsQueryable() - // from trialUser in _trialIdentityUserRepository.Where(t => t.TrialId == inQuery.TrialId) + RealName = trialUser.IdentityUser.FullName, + UserName = trialUser.IdentityUser.UserName, - // 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, + //UserTypeId = trialUser.UserRole.UserTypeId, + //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName, - // 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, + FullFilePath = sysDoc.Path + }; - // ConfirmUserId = confirm.ConfirmUserId, - // ConfirmTime = confirm.ConfirmTime, - - // RealName = trialUser.IdentityUser.FullName, - // UserName = trialUser.IdentityUser.UserName, - - // //UserTypeId = trialUser.UserRole.UserTypeId, - // //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName, - - // FullFilePath = sysDoc.Path - // }; - - //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)) - // .WhereIf(inQuery.FileTypeId != null, t => t.FileTypeId == inQuery.FileTypeId) - // .WhereIf(inQuery.IsConfirmed == true, t => t.ConfirmTime != null) - // .WhereIf(inQuery.IsConfirmed == false, t => t.ConfirmTime == null) - // .WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted); + 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)) + .WhereIf(inQuery.FileTypeId != null, t => t.FileTypeId == inQuery.FileTypeId) + .WhereIf(inQuery.IsConfirmed == true, t => t.ConfirmTime != null) + .WhereIf(inQuery.IsConfirmed == false, t => t.ConfirmTime == null) + .WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted); var result = await trialDocQuery.ToPagedListAsync(inQuery);