diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 99e019a7b..9dada41a6 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -722,7 +722,7 @@ - + getDocumentConfirmList 培训记录导出--new diff --git a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs index e40bb10a3..5d85f4742 100644 --- a/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs +++ b/IRaCIS.Core.Application/Service/Common/ExcelExportService.cs @@ -20,6 +20,7 @@ using System.Globalization; using System.Linq; using static IRaCIS.Core.Application.Service.ExcelExportHelper; using IDictionaryService = IRaCIS.Application.Interfaces.IDictionaryService; +using TrialIdentityUser = IRaCIS.Core.Domain.Models.TrialIdentityUser; namespace IRaCIS.Core.Application.Service.Common { @@ -359,91 +360,208 @@ namespace IRaCIS.Core.Application.Service.Common [FromServices] IRepository _commonDocumentRepository, [FromServices] IDictionaryService _dictionaryService, [FromServices] IRepository _subjectVisitRepository, - [FromServices] IRepository _trialRepository + [FromServices] IRepository _trialRepository, + [FromServices] IRepository _trialDocumentRepository, + [FromServices] IRepository _trialIdentityUserRepository, + [FromServices] IRepository _systemDocumentRepository ) { - var trialInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => new { t.TrialFinishedTime, t.TrialStatusStr }).FirstNotNullAsync()); - var trialDocQuery = from trialDocumentNeedConfirmedUserType in _trialDocNeedConfirmedUserTypeRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) - join trialUser in _trialUserRoleRepository.Where(t => t.TrialId == inQuery.TrialId) - .WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId) - .WhereIf(inQuery.UserTypeId != null, t => t.UserRole.UserTypeId == inQuery.UserTypeId) - on trialDocumentNeedConfirmedUserType.NeedConfirmUserTypeId equals trialUser.UserRole.UserTypeId - join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on - new { trialUser.UserId, TrialDocumentId = trialDocumentNeedConfirmedUserType.TrialDocumentId } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc - from confirm in cc.DefaultIfEmpty() - select new TrainingRecordExportDTO() - { - IsSystemDoc = false, + #region 导表新 - Id = trialDocumentNeedConfirmedUserType.TrialDocument.Id, - CreateTime = trialDocumentNeedConfirmedUserType.TrialDocument.CreateTime, - IsDeleted = trialDocumentNeedConfirmedUserType.TrialDocument.IsDeleted, - //SignViewMinimumMinutes = trialDocumentNeedConfirmedUserType.TrialDocument.SignViewMinimumMinutes, - Name = trialDocumentNeedConfirmedUserType.TrialDocument.Name, - //Path = trialDocumentNeedConfirmedUserType.TrialDocument.Path, - FileTypeId = trialDocumentNeedConfirmedUserType.TrialDocument.FileTypeId, - FileType = _userInfo.IsEn_Us ? trialDocumentNeedConfirmedUserType.TrialDocument.FileType.Value : trialDocumentNeedConfirmedUserType.TrialDocument.FileType.ValueCN, - //UpdateTime = trialDocumentNeedConfirmedUserType.TrialDocument.UpdateTime, - //IsConfirmed= confirm.ConfirmTime!=null, + 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.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 TrainingRecordExportDTO() + { + IsSystemDoc = false, + + Id = trialDoc.Id, + CreateTime = trialDoc.CreateTime, + IsDeleted = trialDoc.IsDeleted, + Name = trialDoc.Name, + FileTypeId = trialDoc.FileTypeId, + FileType = _userInfo.IsEn_Us ? trialDoc.FileType.Value : trialDoc.FileType.ValueCN, + //IsConfirmed= confirm.ConfirmTime!=null, + + + ConfirmUserId = trialUser.IdentityUserId, + ConfirmTime = confirm.ConfirmTime, + RealName = trialUser.IdentityUser.FullName, + UserName = trialUser.IdentityUser.UserName, + + //UserTypeId = trialUser.UserRole.UserTypeId, + //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName, + //DocNeedSignUserTypeList = trialDoc.NeedConfirmedUserTypeList.Select(t => t.UserTypeRole.UserTypeName), + + }; - //ConfirmUserId = confirm.ConfirmUserId, - ConfirmTime = confirm.ConfirmTime, - RealName = trialUser.UserRole.FullName, - UserName = trialUser.UserRole.IdentityUser.UserName, - UserTypeId = trialUser.UserRole.UserTypeId, - UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName, + var systemDocQuery = + 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) - //FullFilePath = trialDocumentNeedConfirmedUserType.TrialDocument.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 TrainingRecordExportDTO() + { + IsSystemDoc = true, + Id = sysDoc.Id, + CreateTime = sysDoc.CreateTime, + IsDeleted = sysDoc.IsDeleted, + Name = sysDoc.Name, + FileType = _userInfo.IsEn_Us ? sysDoc.FileType.Value : sysDoc.FileType.ValueCN, + FileTypeId = sysDoc.FileTypeId, + //IsConfirmed = confirm.ConfirmTime != null, + ConfirmUserId = trialUser.IdentityUserId, + ConfirmTime = confirm.ConfirmTime, - var systemDocQuery = from needConfirmEdUserType in _systemDocNeedConfirmedUserTypeRepository.WhereIf(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime) + RealName = trialUser.IdentityUser.FullName, + UserName = trialUser.IdentityUser.UserName, - join trialUser in _trialUserRoleRepository.Where(t => t.TrialId == inQuery.TrialId) - .WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId) - 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 TrainingRecordExportDTO() - { - IsSystemDoc = true, + //UserTypeId = trialUser.UserRole.UserTypeId, + //UserTypeShortName = trialUser.UserRole.UserTypeRole.UserTypeShortName, - Id = needConfirmEdUserType.SystemDocument.Id, - CreateTime = needConfirmEdUserType.SystemDocument.CreateTime, - IsDeleted = needConfirmEdUserType.SystemDocument.IsDeleted, - //SignViewMinimumMinutes = needConfirmEdUserType.SystemDocument.SignViewMinimumMinutes, - Name = needConfirmEdUserType.SystemDocument.Name, - //Path = needConfirmEdUserType.SystemDocument.Path, - FileType = _userInfo.IsEn_Us ? needConfirmEdUserType.SystemDocument.FileType.Value : needConfirmEdUserType.SystemDocument.FileType.ValueCN, - FileTypeId = needConfirmEdUserType.SystemDocument.FileTypeId, - //UpdateTime = needConfirmEdUserType.SystemDocument.UpdateTime, - //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, + //var tt = await trialDocQuery.ToPagedListAsync(inQuery); - //FullFilePath = needConfirmEdUserType.SystemDocument.Path - }; - - var unionQuery = trialDocQuery.Union(systemDocQuery) + var unionQuery = trialDocQuery.Union(systemDocQuery).IgnoreQueryFilters().Where(t => !(t.IsDeleted == true && t.ConfirmTime == 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) - .WhereIf(inQuery.UserTypeId != null, t => t.UserTypeId == inQuery.UserTypeId); + .WhereIf(inQuery.IsDeleted != null, t => t.IsDeleted == inQuery.IsDeleted); + #endregion + + #region 废弃 + //var trialInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).Select(t => new { t.TrialFinishedTime, t.TrialStatusStr }).FirstNotNullAsync()); + + //var trialDocQuery = from trialDocumentNeedConfirmedUserType in _trialDocNeedConfirmedUserTypeRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) + // join trialUser in _trialUserRoleRepository.Where(t => t.TrialId == inQuery.TrialId) + // .WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId) + // .WhereIf(inQuery.UserTypeId != null, t => t.UserRole.UserTypeId == inQuery.UserTypeId) + // on trialDocumentNeedConfirmedUserType.NeedConfirmUserTypeId equals trialUser.UserRole.UserTypeId + + // join confirm in _trialDocConfirmedUserRepository.Where(t => t.TrialDocument.TrialId == inQuery.TrialId) on + // new { trialUser.UserId, TrialDocumentId = trialDocumentNeedConfirmedUserType.TrialDocumentId } equals new { UserId = confirm.ConfirmUserId, confirm.TrialDocumentId } into cc + // from confirm in cc.DefaultIfEmpty() + // select new TrainingRecordExportDTO() + // { + // IsSystemDoc = false, + + // Id = trialDocumentNeedConfirmedUserType.TrialDocument.Id, + // CreateTime = trialDocumentNeedConfirmedUserType.TrialDocument.CreateTime, + // IsDeleted = trialDocumentNeedConfirmedUserType.TrialDocument.IsDeleted, + // //SignViewMinimumMinutes = trialDocumentNeedConfirmedUserType.TrialDocument.SignViewMinimumMinutes, + // Name = trialDocumentNeedConfirmedUserType.TrialDocument.Name, + // //Path = trialDocumentNeedConfirmedUserType.TrialDocument.Path, + // FileTypeId = trialDocumentNeedConfirmedUserType.TrialDocument.FileTypeId, + // FileType = _userInfo.IsEn_Us ? trialDocumentNeedConfirmedUserType.TrialDocument.FileType.Value : trialDocumentNeedConfirmedUserType.TrialDocument.FileType.ValueCN, + // //UpdateTime = trialDocumentNeedConfirmedUserType.TrialDocument.UpdateTime, + // //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, + + // //FullFilePath = trialDocumentNeedConfirmedUserType.TrialDocument.Path + // }; + + + + //var systemDocQuery = from needConfirmEdUserType in _systemDocNeedConfirmedUserTypeRepository.WhereIf(trialInfo.TrialFinishedTime != null, u => u.SystemDocument.CreateTime < trialInfo.TrialFinishedTime) + + // join trialUser in _trialUserRoleRepository.Where(t => t.TrialId == inQuery.TrialId) + // .WhereIf(inQuery.UserId != null, t => t.UserId == inQuery.UserId) + // 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 TrainingRecordExportDTO() + // { + // 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, + // FileType = _userInfo.IsEn_Us ? needConfirmEdUserType.SystemDocument.FileType.Value : needConfirmEdUserType.SystemDocument.FileType.ValueCN, + // FileTypeId = needConfirmEdUserType.SystemDocument.FileTypeId, + // //UpdateTime = needConfirmEdUserType.SystemDocument.UpdateTime, + // //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, + + // //FullFilePath = needConfirmEdUserType.SystemDocument.Path + // }; + + //var unionQuery = trialDocQuery.Union(systemDocQuery) + // .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) + // .WhereIf(inQuery.UserTypeId != null, t => t.UserTypeId == inQuery.UserTypeId); + + #endregion var list = await unionQuery.ToListAsync(); + var trialDocIdList = list.Where(t => t.IsSystemDoc == false).Select(t => t.Id).ToList(); + + var sysDocIdList = list.Where(t => t.IsSystemDoc == true).Select(t => t.Id).ToList(); + + var trialIdentityUserIdList = list.Select(t => t.ConfirmUserId).Distinct().ToList(); + + var trialDocUserTypeList = _trialDocNeedConfirmedUserTypeRepository.Where(t => trialDocIdList.Contains(t.TrialDocumentId)).Select(t => new { t.TrialDocumentId, t.UserTypeRole.UserTypeShortName }).ToList(); + + var sysDocUserTypeList = _systemDocNeedConfirmedUserTypeRepository.Where(t => sysDocIdList.Contains(t.SystemDocumentId)).Select(t => new { t.SystemDocumentId, t.UserTypeRole.UserTypeShortName }).ToList(); + + var trialUserUserTypeList = _trialIdentityUserRepository.Where(t => t.TrialId == inQuery.TrialId && trialIdentityUserIdList.Contains(t.IdentityUserId)).Select(t => new { t.IdentityUserId, UserTypeList = t.TrialUserRoleList.Select(c => c.UserRole.UserTypeRole.UserTypeShortName).ToList() }); + + + foreach (var item in list) + { + if (item.IsSystemDoc) + { + item.DocNeedSignUserTypeList = sysDocUserTypeList.Where(t => t.SystemDocumentId == item.Id).Select(t => t.UserTypeShortName).ToList(); + } + else + { + item.DocNeedSignUserTypeList = trialDocUserTypeList.Where(t => t.TrialDocumentId == item.Id).Select(t => t.UserTypeShortName).ToList(); + } + + item.IdentityUserTypeList = trialUserUserTypeList.Where(t => t.IdentityUserId == item.ConfirmUserId).SelectMany(c => c.UserTypeList).ToList(); + } + var exportInfo = (await _trialRepository.Where(t => t.Id == inQuery.TrialId).IgnoreQueryFilters().ProjectTo(_mapper.ConfigurationProvider).FirstOrDefaultAsync()).IfNullThrowException(); diff --git a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs index b2ac2837d..59ffe90e4 100644 --- a/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs +++ b/IRaCIS.Core.Application/Service/Document/TrialDocumentService.cs @@ -545,7 +545,7 @@ namespace IRaCIS.Core.Application.Services //var tt = await trialDocQuery.ToPagedListAsync(inQuery); - var unionQuery = trialDocQuery.Union(systemDocQuery).IgnoreQueryFilters().Where(t => !(t.IsDeleted == true && t.ConfirmUserId == null)) + var unionQuery = trialDocQuery.Union(systemDocQuery).IgnoreQueryFilters().Where(t => !(t.IsDeleted == true && t.ConfirmTime == 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) diff --git a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs index 47918e5c2..9f77a1d9c 100644 --- a/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs +++ b/IRaCIS.Core.Application/Service/QC/DTO/QCListViewModel.cs @@ -182,23 +182,31 @@ namespace IRaCIS.Core.Application.Contracts [DictionaryTranslateAttribute("IsSystemDoc")] public bool IsSystemDoc { get; set; } - [DictionaryTranslateAttribute("YesOrNo")] + [DictionaryTranslateAttribute("TrainingStatus")] public bool IsDeleted { get; set; } //上传时间 public DateTime CreateTime { get; set; } - [DictionaryTranslateAttribute("YesOrNo")] + [DictionaryTranslateAttribute("TrainingStatusEnum")] public bool IsConfirmed => ConfirmTime != null; public string RealName { get; set; } public string UserName { get; set; } - public string UserTypeShortName { get; set; } - + public Guid ConfirmUserId { get; set; } public DateTime? ConfirmTime { get; set; } + + + public string UserTypes => string.Join(',', UserConfirmedUserTypeList); + + public List UserConfirmedUserTypeList => (DocNeedSignUserTypeList != null && IdentityUserTypeList != null) ? IdentityUserTypeList.Intersect(DocNeedSignUserTypeList).ToList() : new List(); + + + public IEnumerable IdentityUserTypeList { get; set; } + public IEnumerable DocNeedSignUserTypeList { get; set; } } public class CRCVisitExportDTO