187 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			187 lines
		
	
	
		
			9.6 KiB
		
	
	
	
		
			C#
		
	
	
| using IRaCIS.Core.Application.Contracts;
 | |
| using IRaCIS.Core.Domain.Share;
 | |
| using Microsoft.AspNetCore.Mvc;
 | |
| 
 | |
| namespace IRaCIS.Core.Application
 | |
| {
 | |
|     [ApiExplorerSettings(GroupName = "Trial")]
 | |
|     public class PersonalWorkstation : BaseService
 | |
|     {
 | |
|         private readonly IRepository<Trial> _trialRepository;
 | |
|         private readonly IRepository<TrialUser> _trialUserRepository;
 | |
|         private readonly IRepository<TrialDocument> _trialDocumentRepository;
 | |
|         private readonly IRepository<SystemDocument> _systemDocumentRepository;
 | |
|         private readonly IRepository<SystemNotice> _systemNoticeRepository;
 | |
| 
 | |
|         public PersonalWorkstation(IRepository<Trial> trialRepository, IRepository<TrialUser> trialUserRepository, IRepository<TrialDocument> trialDocumentRepository, 
 | |
|             IRepository<SystemDocument> systemDocumentRepository,IRepository<SystemNotice> systemNoticeRepository)
 | |
|         {
 | |
|             _trialRepository = trialRepository;
 | |
|             _trialUserRepository = trialUserRepository;
 | |
|             _trialDocumentRepository = trialDocumentRepository;
 | |
|             _systemDocumentRepository = systemDocumentRepository;
 | |
|             _systemNoticeRepository = systemNoticeRepository;
 | |
|         }
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 个人面板 统计值
 | |
|         /// </summary>
 | |
|         /// <returns></returns>
 | |
|         public async Task<PersonalStataDTO> GetBasicStat()
 | |
|         {
 | |
| 
 | |
|             return new PersonalStataDTO()
 | |
|             {
 | |
|                 //正参与的数量
 | |
|                 TrialCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
 | |
|                     ? await _trialRepository.CountAsync()
 | |
|                     : await _trialUserRepository.Where(t => t.UserId == _userInfo.Id).CountAsync(),
 | |
| 
 | |
|                 DeletedCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
 | |
|                     ? await _trialRepository.AsQueryable(true).CountAsync(t => t.IsDeleted)
 | |
|                     : await _trialUserRepository.AsQueryable(true).Where(t => t.UserId == _userInfo.Id && t.IsDeleted)
 | |
|                         .CountAsync(),
 | |
| 
 | |
| 
 | |
|                 TotalNeedSignTrialDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
 | |
|                     ? 0
 | |
|                     : await _trialDocumentRepository.AsQueryable(true)
 | |
|                         .Where(t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
 | |
|                         .Where(t => t.IsDeleted == false || (t.IsDeleted == true && t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id)))
 | |
| 
 | |
|                         .SelectMany(t => t.NeedConfirmedUserTypeList)
 | |
|                         .CountAsync(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId),
 | |
| 
 | |
|                 HaveSignedTrialDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
 | |
|                     ? 0
 | |
|                     : await _trialDocumentRepository
 | |
|                         .Where( t => t.Trial.TrialUserList.Any(t => t.UserId == _userInfo.Id))
 | |
|                         .Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
 | |
|                         .SelectMany(t => t.TrialDocConfirmedUserList)
 | |
|                         .CountAsync(t => t.ConfirmUserId == _userInfo.Id),
 | |
| 
 | |
|                 TotalNeedSignSystemDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
 | |
|                     ? 0
 | |
|                     : await _systemDocumentRepository
 | |
|                         .Where(t => t.IsDeleted == false || (t.IsDeleted == true && t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id)))
 | |
|                         .SelectMany(t => t.NeedConfirmedUserTypeList)
 | |
|                         .CountAsync(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId),
 | |
| 
 | |
| 
 | |
|                 HaveSignedSystemDocCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
 | |
|                     ? 0
 | |
|                     : await _systemDocumentRepository
 | |
|                         .Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId))
 | |
|                         .SelectMany(t => t.SystemDocConfirmedUserList)
 | |
|                         .CountAsync(t => t.ConfirmUserId == _userInfo.Id),
 | |
| 
 | |
|                 TotalApprovalRequiredCount= 
 | |
|                     _userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM ?
 | |
|                     _trialRepository.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)).SelectMany(t=>t.TrialSiteSurveyList).Where(t => t.State == TrialSiteSurveyEnum.SPMApproved).Count()
 | |
|                     : _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM|| _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM
 | |
|                     ?  _trialRepository.Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id)).SelectMany(t => t.TrialSiteSurveyList).Where(t => t.State == TrialSiteSurveyEnum.CRCSubmitted).Count()
 | |
|                     :0,
 | |
| 
 | |
| 
 | |
|                     TotalSystemNoticeCount= _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
 | |
|                     ? 0:await _systemNoticeRepository.Where(t => t.NoticeUserTypeList.Any(t => t.UserTypeId == _userInfo.UserTypeId) && t.NoticeStateEnum== Domain.Share.Management.SystemNotice_NoticeStateEnum.HavePublished)
 | |
|                      
 | |
|                     .CountAsync(),
 | |
| 
 | |
|                     NeedReadSystemNoticeCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
 | |
|                     ? 0 : await _systemNoticeRepository.Where(t => t.NoticeUserTypeList.Any(t => t.UserTypeId == _userInfo.UserTypeId) && t.NoticeStateEnum == Domain.Share.Management.SystemNotice_NoticeStateEnum.HavePublished
 | |
|                      && !t.NoticeUserReadList.Any(t=>t.CreateUserId==_userInfo.Id))
 | |
|                     .Where(t => t.EndDate == null || t.EndDate != null && t.EndDate > DateTime.Now)
 | |
|                     .CountAsync(),
 | |
| 
 | |
| 
 | |
|             };
 | |
| 
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         /// Site 调研 每个项目 需要处理的审批统计
 | |
|         /// </summary>
 | |
|         /// <param name="query"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<PageOutput<TrialSiteSurveyStat>> GetSiteSurveyApprovalList(TrialSiteSurveyStatQuery query)
 | |
|         {
 | |
| 
 | |
| 
 | |
|             if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager ||
 | |
|                 _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM ||
 | |
|                 _userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM ||
 | |
|                 _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM)
 | |
|             {
 | |
|                 return await _trialRepository
 | |
|                     .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
 | |
|                     .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM, c => c.TrialSiteSurveyList.Where(t => t.State == TrialSiteSurveyEnum.SPMApproved).Count() > 0)
 | |
|                     .WhereIf(_userInfo.UserTypeEnumInt == (int)UserTypeEnum.CPM || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SPM, c => c.TrialSiteSurveyList.Where(t => t.State == TrialSiteSurveyEnum.CRCSubmitted).Count() > 0)
 | |
|                     .ProjectTo<TrialSiteSurveyStat>(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id })
 | |
|                     .OrderByDescending(t => t.ApprovalRequiredCount).ToPagedListAsync(query.PageIndex, query.PageSize, query.SortField, query.Asc);
 | |
|             }
 | |
| 
 | |
|             else
 | |
|             {
 | |
|                 return new PageOutput<TrialSiteSurveyStat>(query.PageIndex, query.PageSize, 0, new List<TrialSiteSurveyStat>());
 | |
| 
 | |
|             }
 | |
| 
 | |
|         }
 | |
| 
 | |
| 
 | |
|         /// <summary>
 | |
|         ///  需要签署文件数量  系统级别的在第一行
 | |
|         /// </summary>
 | |
|         /// <param name="query"></param>
 | |
|         /// <returns></returns>
 | |
|         [HttpPost]
 | |
|         public async Task<PageOutput<DocSignStat>> GetTrialDocStatList(TrialSiteSurveyStatQuery query)
 | |
|         {
 | |
|             if (_userInfo.IsAdmin)
 | |
|             {
 | |
|                 return new PageOutput<DocSignStat>(query.PageIndex, query.PageSize, 0, new List<DocSignStat>());
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 var trialDocStat = await _trialRepository
 | |
|                     .Where(t => t.TrialUserList.Any(t => t.UserId == _userInfo.Id))
 | |
|                     .WhereIf(!_userInfo.IsAdmin, c => c.TrialDocumentList.Where(t => t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) && !t.TrialDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id)).Count() > 0)
 | |
|                     .ProjectTo<DocSignStat>(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id, userTypeId = _userInfo.UserTypeId })
 | |
|                     .OrderByDescending(t => t.WaitSignCount)
 | |
|                     .ToPagedListAsync(query.PageIndex, query.PageSize , query.SortField, query.Asc);
 | |
| 
 | |
|                 //var sysDocStat = new DocSignStat()
 | |
|                 //{
 | |
|                 //    IsSystemDoc = true,
 | |
|                 //    WaitSignCount = _userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin
 | |
|                 //        ? 0
 | |
|                 //        : await _systemDocumentRepository
 | |
|                 //            .Where(t =>
 | |
|                 //                t.NeedConfirmedUserTypeList.Any(t => t.NeedConfirmUserTypeId == _userInfo.UserTypeId) &&
 | |
|                 //                !t.SystemDocConfirmedUserList.Any(t => t.ConfirmUserId == _userInfo.Id))
 | |
|                 //            .CountAsync()
 | |
|                 //};
 | |
|                 //var list = trialDocStat.CurrentPageData.ToList();
 | |
|                 //list.Insert(0, sysDocStat);
 | |
|                 //trialDocStat.CurrentPageData = list;
 | |
|                 //trialDocStat.TotalCount++;
 | |
| 
 | |
| 
 | |
|                 return trialDocStat;
 | |
|             }
 | |
| 
 | |
|            
 | |
| 
 | |
|         }
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
| 
 | |
|     }
 | |
| }
 |