上线前 整理代码

This commit is contained in:
2022-06-01 10:01:57 +08:00
parent 7ace793235
commit bd44ac3b2c
20 changed files with 183 additions and 765 deletions
@@ -13,6 +13,8 @@ namespace IRaCIS.Application.Contracts
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
public string FullName { get; set; } = string.Empty;
public string ReviewerCode { get; set; } = string.Empty;
public int Pending { get; set; }
@@ -114,6 +116,8 @@ namespace IRaCIS.Application.Contracts
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
public string FullName { get; set; } = string.Empty;
public string ReviewerCode { get; set; } = string.Empty;
public int Training { get; set; }
@@ -7,7 +7,7 @@ namespace IRaCIS.Application.Interfaces
{
public interface IStatisticsService
{
PageOutput<WorkloadByTrialAndReviewerDTO> GetWorkloadByTrialAndReviewer(StatisticsWorkloadQueryParam param);
Task<PageOutput<WorkloadByTrialAndReviewerDTO>> GetWorkloadByTrialAndReviewer(StatisticsWorkloadQueryParam param);
PageOutput<EnrollStatByTrialDTO> GetEnrollStatByTrial(EnrollStatByTrialQueryDTO param);
@@ -38,6 +38,6 @@ namespace IRaCIS.Application.Interfaces
List<LatestWorkLoadDTO> GetLatestWorkLoadList( int searchCount);
#endregion
PageOutput<EnrollStatByReviewerDTO> GetEnrollStatByReviewer(EnrollStatByReviewerQueryDTO enrollTrialStatisticsQueryParam);
Task<PageOutput<EnrollStatByReviewerDTO>> GetEnrollStatByReviewer(EnrollStatByReviewerQueryDTO enrollTrialStatisticsQueryParam);
}
}
@@ -1,12 +1,9 @@
using IRaCIS.Core.Infrastructure.ExpressionExtend;
using IRaCIS.Application.Interfaces;
using IRaCIS.Application.Interfaces;
using IRaCIS.Application.Contracts;
using IRaCIS.Core.Infra.EFCore;
using IRaCIS.Core.Domain.Models;
using IRaCIS.Core.Domain.Share;
using System.Linq.Expressions;
using System.Linq.Dynamic.Core;
using IRaCIS.Core.Infrastructure.Extention;
using Microsoft.AspNetCore.Mvc;
namespace IRaCIS.Application.Services
@@ -14,12 +11,12 @@ namespace IRaCIS.Application.Services
/// Dashboard统计、全局工作量统计、入组两个维度统计(按照项目、按照人)
/// </summary>
[ ApiExplorerSettings(GroupName = "Dashboard&Statistics")]
[ApiExplorerSettings(GroupName = "Dashboard&Statistics")]
public class StatisticsService : BaseService, IStatisticsService
{
private readonly IRepository<Doctor> _doctorRepository;
private readonly IRepository<Trial> _trialRepository;
private readonly IRepository<Enroll> _enrollRepository;
private readonly IRepository<Enroll> _enrollRepository;
private readonly IRepository<Workload> _workloadRepository;
private readonly IRepository<CRO> _croCompanyRepository;
private readonly IRepository<Dictionary> _dictionaryRepository;
@@ -27,7 +24,7 @@ namespace IRaCIS.Application.Services
private readonly IRepository<EnrollDetail> _enrollDetailRepository;
private readonly IRepository<User> _userRepository;
private readonly IRepository<TrialUser> _userTrialRepository;
public StatisticsService(IRepository<Doctor> doctorRepository, IRepository<Trial> trialRepository,
IRepository<Enroll> intoGroupRepository, IRepository<Workload> workloadRepository,
@@ -47,16 +44,16 @@ namespace IRaCIS.Application.Services
_enrollDetailRepository = enrollDetailRepository;
_userRepository = userRepository;
_userTrialRepository = userTrialRepository;
}
/// <summary> 根据项目和医生,分页获取工作量统计[New] </summary>
[HttpPost]
public PageOutput<WorkloadByTrialAndReviewerDTO> GetWorkloadByTrialAndReviewer(
public async Task<PageOutput<WorkloadByTrialAndReviewerDTO>> GetWorkloadByTrialAndReviewer(
StatisticsWorkloadQueryParam param)
{
var bDate = new DateTime(param.BeginDate.Year, param.BeginDate.Month, param.BeginDate.Day);
var eDate = new DateTime(param.EndDate.Year, param.EndDate.Month, param.EndDate.Day);
@@ -65,14 +62,14 @@ namespace IRaCIS.Application.Services
workloadLambda = workloadLambda.And(x => x.WorkTime >= bDate && x.WorkTime < eDate);
Expression<Func<Trial, bool>> trialLambda = x => true;
if (_userInfo.UserTypeEnumInt ==(int) UserTypeEnum.SuperAdmin) //超级管理员按照条件查询所有
if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.SuperAdmin) //超级管理员按照条件查询所有
{
if ( param.CroId != null)
if (param.CroId != null)
{
trialLambda = trialLambda.And(u => u.CROId == param.CroId);
}
}
else //不管是精鼎的pm还是我们的pm 还是运维人员 只能看到自己参与项目的统计
{
List<Guid> trialIdList = _userTrialRepository.Where(u => u.UserId == _userInfo.Id).Select(u => u.TrialId).ToList();
@@ -140,6 +137,7 @@ namespace IRaCIS.Application.Services
ChineseName = doctorItem.ChineseName,
FirstName = doctorItem.FirstName,
LastName = doctorItem.LastName,
FullName = doctorItem.FullName,
Training = w.Training,
Timepoint = w.Timepoint,
TimepointIn24H = w.TimepointIn24H,
@@ -155,31 +153,36 @@ namespace IRaCIS.Application.Services
w.AdjudicationIn48H + w.Global
};
var propName = param.SortField == "" ? "ReviewerCode" : param.SortField;
query = param.Asc
? query.OrderBy(propName).ThenBy(t => t.TrialCode).ThenBy(u => u.ReviewerCode)
: query.OrderByDescending(propName).ThenBy(t => t.TrialCode).ThenBy(u => u.ReviewerCode);
if (propName == "FirstName" || propName == "LastName")
{
query = param.Asc
? query.OrderBy(t => t.LastName).ThenBy(t => t.FirstName)
: query.OrderByDescending(t => t.LastName).ThenBy(t => t.FirstName);
}
var count = query.Count();
query = query
.Skip((param.PageIndex - 1) * param.PageSize)
.Take(param.PageSize);
var doctorViewList = query.ToList();
return await query.ToPagedListAsync(param.PageIndex, param.PageSize, string.IsNullOrWhiteSpace(param.SortField) ? "ReviewerCode" : param.SortField, param.Asc);
return new PageOutput<WorkloadByTrialAndReviewerDTO>(param.PageIndex, param.PageSize, count, doctorViewList);
//var propName = param.SortField == "" ? "ReviewerCode" : param.SortField;
//query = param.Asc
// ? query.OrderBy(propName).ThenBy(t => t.TrialCode).ThenBy(u => u.ReviewerCode)
// : query.OrderByDescending(propName).ThenBy(t => t.TrialCode).ThenBy(u => u.ReviewerCode);
//if (propName == "FirstName" || propName == "LastName")
//{
// query = param.Asc
// ? query.OrderBy(t => t.LastName).ThenBy(t => t.FirstName)
// : query.OrderByDescending(t => t.LastName).ThenBy(t => t.FirstName);
//}
//var count = query.Count();
//query = query
// .Skip((param.PageIndex - 1) * param.PageSize)
// .Take(param.PageSize);
//var doctorViewList = query.ToList();
//return new PageOutput<WorkloadByTrialAndReviewerDTO>(param.PageIndex, param.PageSize, count, doctorViewList);
}
/// <summary> 项目入组 医生维度统计[New] </summary>
[HttpPost]
public PageOutput<EnrollStatByReviewerDTO> GetEnrollStatByReviewer(EnrollStatByReviewerQueryDTO param)
public async Task<PageOutput<EnrollStatByReviewerDTO>> GetEnrollStatByReviewer(EnrollStatByReviewerQueryDTO param)
{
var bDate = new DateTime(param.BeginDate.Year, param.BeginDate.Month, 1);
var eDate = new DateTime(param.EndDate.Year, param.EndDate.Month, 1);
@@ -236,6 +239,7 @@ namespace IRaCIS.Application.Services
ChineseName = doctor.ChineseName,
FirstName = doctor.FirstName,
LastName = doctor.LastName,
FullName = doctor.FullName,
Pending = w.Submitted,
Approved = w.Approved,
Reading = w.Reading,
@@ -244,35 +248,30 @@ namespace IRaCIS.Application.Services
Total = w.Submitted + w.Approved + w.Reading + w.Finished
};
if (param.SortField != "EntryRate")
{
var propName = param.SortField == "" ? "ReviewerCode" : param.SortField;
query = param.Asc
? query.OrderBy(propName).ThenBy(u => u.ReviewerCode)
: query.OrderByDescending(propName).ThenBy(u => u.ReviewerCode);
if (propName == "FirstName" || propName == "LastName")
{
query = param.Asc
? query.OrderBy(t => t.LastName).ThenBy(t => t.FirstName)
: query.OrderByDescending(t => t.LastName).ThenBy(t => t.FirstName);
}
}
var count = query.Count();
query = query
.Skip((param.PageIndex - 1) * param.PageSize)
.Take(param.PageSize);
var list = query.ToList();
var pageData = await query.ToPagedListAsync(param.PageIndex, param.PageIndex, param.SortField == "" ? "ReviewerCode" : param.SortField, param.Asc);
if (param.SortField == "EntryRate")
{
list = param.Asc
? list.OrderBy(t => t.EntryRate).ToList()
: list.OrderByDescending(t => t.EntryRate).ToList();
pageData.CurrentPageData.OrderBy(t => t.EntryRate);
}
return new PageOutput<EnrollStatByReviewerDTO>(param.PageIndex, param.PageSize, count, list);
return pageData;
//var count = query.Count();
//query = query
// .Skip((param.PageIndex - 1) * param.PageSize)
// .Take(param.PageSize);
//var list = query.ToList();
//if (param.SortField == "EntryRate")
//{
// list = param.Asc
// ? list.OrderBy(t => t.EntryRate).ToList()
// : list.OrderByDescending(t => t.EntryRate).ToList();
//}
//return new PageOutput<EnrollStatByReviewerDTO>(param.PageIndex, param.PageSize, count, list);
}
[HttpPost]
@@ -300,7 +299,7 @@ namespace IRaCIS.Application.Services
trialLambda = trialLambda.And(o => o.Indication.Contains(indication));
}
if ( param.CROId != null)
if (param.CROId != null)
{
trialLambda = trialLambda.And(o => o.CROId == param.CROId);
}
@@ -344,7 +343,7 @@ namespace IRaCIS.Application.Services
var propName = param.SortField == "" ? "TrialCode" : param.SortField;
trialQuery = param.Asc
? trialQuery.OrderBy(propName)
: trialQuery.OrderByDescending(propName);
: trialQuery.OrderBy(propName + " desc");
var count = trialQuery.Count();
@@ -396,7 +395,7 @@ namespace IRaCIS.Application.Services
{
Expression<Func<User, bool>> userLambda = x => true;
Expression<Func<TrialUser, bool>> userTrialLambda = x =>true;
Expression<Func<TrialUser, bool>> userTrialLambda = x => true;
if (!string.IsNullOrEmpty(param.UserInfo))
{
var userInfo = param.UserInfo.Trim();
@@ -417,9 +416,9 @@ namespace IRaCIS.Application.Services
if (userTypeEnumStr == UserTypeEnum.ProjectManager.ToString())
{
//参与到的项目
var trialFilter = _userTrialRepository.Where(t => t.UserId == userId)
.Select(u => u.TrialId);
userTrialLambda = userTrialLambda.And(t => trialFilter.Contains(t.TrialId));
var trialFilter = _userTrialRepository.Where(t => t.UserId == userId)
.Select(u => u.TrialId);
userTrialLambda = userTrialLambda.And(t => trialFilter.Contains(t.TrialId));
}
//.Select(u => new { u.TrialId, u.UserId }).Distinct()
var trialStatQuery = _userTrialRepository.Where(userTrialLambda)
@@ -431,23 +430,23 @@ namespace IRaCIS.Application.Services
});
var userQuery = from trialStat in trialStatQuery
join user in _userRepository.Where(userLambda) on trialStat.UserId equals user.Id
select new UserParticipateTrialStat
{
Email = user.EMail,
Name = user.LastName + ' ' + user.FirstName,
UserName = user.UserName,
OrganizationName = user.OrganizationName,
Phone = user.Phone,
TrialCount = trialStat.TrialCount,
UserCode = user.UserCode,
UserId = user.Id
};
join user in _userRepository.Where(userLambda) on trialStat.UserId equals user.Id
select new UserParticipateTrialStat
{
Email = user.EMail,
Name = user.LastName + ' ' + user.FirstName,
UserName = user.UserName,
OrganizationName = user.OrganizationName,
Phone = user.Phone,
TrialCount = trialStat.TrialCount,
UserCode = user.UserCode,
UserId = user.Id
};
var propName = param.SortField == "" ? "OrganizationName" : param.SortField;
userQuery = param.Asc
? userQuery.OrderBy(propName)
: userQuery.OrderByDescending(propName);
: userQuery.OrderBy(propName + " desc");
var count = userQuery.Count();
@@ -462,8 +461,8 @@ namespace IRaCIS.Application.Services
[HttpGet("{userId:guid}")]
public List<UserParticipateTrialDetail> GetParticipateTrialList(Guid userId)
{
Expression<Func<TrialUser, bool>> userTrialLambda = x => x.UserId== userId;
Expression<Func<TrialUser, bool>> userTrialLambda = x => x.UserId == userId;
var userTypeEnum = _userInfo.UserTypeEnumStr;
var loginUserId = _userInfo.Id;
@@ -473,29 +472,29 @@ namespace IRaCIS.Application.Services
if (userTypeEnum == UserTypeEnum.ProjectManager.ToString())
{
//参与到的项目
var trialFilter = _userTrialRepository.Where(t => t.UserId == loginUserId)
.Select(u => u.TrialId);
var trialFilter = _userTrialRepository.Where(t => t.UserId == loginUserId)
.Select(u => u.TrialId);
userTrialLambda = userTrialLambda.And(t => trialFilter.Contains(t.TrialId));
}
var query = from userTrial in _userTrialRepository.Where(userTrialLambda)
join trial in _trialRepository.AsQueryable() on userTrial.TrialId equals trial.Id
join cro in _croCompanyRepository.AsQueryable() on trial.CROId equals cro.Id into cc
from cro in cc.DefaultIfEmpty()
select new UserParticipateTrialDetail()
{
Code = trial.TrialCode,
CROName = cro.CROName,
Expedited = trial.Expedited,
Indication = trial.Indication,
UserType = userTrial.User.UserTypeRole.UserTypeShortName,
TrialId = trial.Id
join trial in _trialRepository.AsQueryable() on userTrial.TrialId equals trial.Id
join cro in _croCompanyRepository.AsQueryable() on trial.CROId equals cro.Id into cc
from cro in cc.DefaultIfEmpty()
select new UserParticipateTrialDetail()
{
Code = trial.TrialCode,
CROName = cro.CROName,
Expedited = trial.Expedited,
Indication = trial.Indication,
UserType = userTrial.User.UserTypeRole.UserTypeShortName,
TrialId = trial.Id
};
};
return query.ToList();
}
#region Dashboard
/// <summary> 读片数分类统计[New] </summary>
@@ -604,10 +603,10 @@ namespace IRaCIS.Application.Services
Timepoint = w.Timepoint,
Adjudication = w.Adjudication,
Global = w.Global,
ReviewerCode = doctorItem.ReviewerCode,
ReviewerCode = doctorItem.ReviewerCode,
FirstName = doctorItem.FirstName,
LastName = doctorItem.LastName,
ChineseName = doctorItem.ChineseName
LastName = doctorItem.LastName,
ChineseName = doctorItem.ChineseName
};
return reviewerList.ToList();
}
@@ -835,8 +834,8 @@ namespace IRaCIS.Application.Services
Global = w.Global,
ReviewerCode = doctorItem.ReviewerCode,
FirstName = doctorItem.FirstName,
LastName = doctorItem.LastName,
ChineseName = doctorItem.ChineseName,
LastName = doctorItem.LastName,
ChineseName = doctorItem.ChineseName,
TrialCode = trialItem.TrialCode
};