EI-Image-Viewer-Api/IRaCIS.Core.Application/Service/TrialSiteUser/PersonalWorkstation.cs

170 lines
8.5 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;
public PersonalWorkstation(IRepository<Trial> trialRepository, IRepository<TrialUser> trialUserRepository, IRepository<TrialDocument> trialDocumentRepository, IRepository<SystemDocument> systemDocumentRepository)
{
_trialRepository = trialRepository;
_trialUserRepository = trialUserRepository;
_trialDocumentRepository = trialDocumentRepository;
_systemDocumentRepository = systemDocumentRepository;
}
/// <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
};
}
/// <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;
}
}
}
}