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 _trialRepository; private readonly IRepository _trialUserRepository; private readonly IRepository _trialDocumentRepository; private readonly IRepository _systemDocumentRepository; public PersonalWorkstation(IRepository trialRepository, IRepository trialUserRepository, IRepository trialDocumentRepository, IRepository systemDocumentRepository) { _trialRepository = trialRepository; _trialUserRepository = trialUserRepository; _trialDocumentRepository = trialDocumentRepository; _systemDocumentRepository = systemDocumentRepository; } /// /// 个人面板 统计值 /// /// public async Task 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.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.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), }; } /// /// Site 调研 每个项目 需要处理的审批统计 /// /// /// [HttpPost] public async Task> GetSiteSurveyApprovalList(TrialSiteSurveyStatQuery query) { return await _trialRepository.ProjectTo(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id }) .OrderByDescending(t=>t.ApprovalRequiredCount).ToPagedListAsync(query.PageIndex, query.PageSize, query.SortField, query.Asc); } /// /// 需要签署文件数量 系统级别的在第一行 /// /// /// [HttpPost] public async Task> GetTrialDocStatList(TrialSiteSurveyStatQuery query) { if (_userInfo.IsAdmin) { return new PageOutput(query.PageIndex, query.PageSize, 0, new List()); } else { var trialDocStat = await _trialRepository .WhereIf(_userInfo.UserTypeEnumInt != (int)UserTypeEnum.SuperAdmin, 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(_mapper.ConfigurationProvider, new { userTypeEnumInt = _userInfo.UserTypeEnumInt, userId = _userInfo.Id, userTypeId = _userInfo.UserTypeId }) .OrderByDescending(t => t.WaitSignCount) .ToPagedListAsync(query.PageIndex, query.PageSize - 1, 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; return trialDocStat; } } } }