Merge branch 'Test_IRC_Net8' of https://gitea.frp.extimaging.com/XCKJ/irc-netcore-api into Test_IRC_Net8
continuous-integration/drone/push Build is passing Details

IRC_NewDev
he 2024-12-10 17:29:34 +08:00
commit aebc9446ba
1 changed files with 198 additions and 150 deletions

View File

@ -1540,139 +1540,157 @@ namespace IRaCIS.Core.Application.Service.Common
////默认设置为false 只处理为true 和 空的情况
//visitItem.IsJudgeSelect = false;
if (judegeList.Count > 0)
var subjectJudgeList = judegeList.Where(t => t.SubjectCode == visitItem.SubjectCode).ToList();
//阅片期访视号
var subjectReadingPeriondVisitNumList = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode).FirstOrDefault()?.SubjectCriterionReadingPeriodVisitNumList;
//两个人完成最大得任务号(访视+全局)
var subjectMaxFinishedTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode)
.GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max();
var addReadingPeriodNum = isGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0;
var finishedGlobalCount = 0;
//没有配置阅片期
if (subjectReadingPeriondVisitNumList == null)
{
var maxFinishedJudge = judegeList.Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault();
var maxNotFinishedJudge = judegeList.Where(t => t.ReadingTaskState != ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault();
//n个裁判任务都未完成
if (maxFinishedJudge == null && maxNotFinishedJudge != null)
{
if (visitItem.VisitTaskNum < maxNotFinishedJudge.VisitTaskNum)
{
visitItem.IsJudgeSelect = null;
}
else
{
//大于当前未完成的全局裁判 后续 肯定是未知的
visitItem.IsTrigerJudge = null;
visitItem.IsJudgeSelect = null;
}
}
//n个全局裁判都完成了那么以最后一次裁判选择的为准
else if (maxFinishedJudge != null && maxNotFinishedJudge == null)
{
if (visitItem.ArmEnum == maxFinishedJudge.JudgeArmEnum && visitItem.VisitTaskNum < maxFinishedJudge.VisitTaskNum)
{
visitItem.IsJudgeSelect = true;
visitItem.JudgeNote = maxFinishedJudge.JudgeNote;
}
//裁判没选择的人设置为false
else if (visitItem.VisitTaskNum < maxFinishedJudge.VisitTaskNum)
{
visitItem.IsJudgeSelect = false;
}
else
{
//裁判都完成的后续 没有其他裁判任务 肯定也是未知的
visitItem.IsTrigerJudge = null;
visitItem.IsJudgeSelect = null;
}
}
else
{
//两个都不为null 肯定是不同的裁判
//在未完成裁判之后的
if (visitItem.VisitTaskNum > maxNotFinishedJudge.VisitTaskNum)
{
visitItem.IsTrigerJudge = null;
visitItem.IsJudgeSelect = null;
}
//完成裁判之后的 ,和未完成裁判之前的
else if (visitItem.VisitTaskNum < maxNotFinishedJudge.VisitTaskNum && visitItem.VisitTaskNum > maxFinishedJudge.VisitTaskNum)
{
visitItem.IsTrigerJudge = true;
visitItem.IsJudgeSelect = null;
}
else if (visitItem.ArmEnum == maxFinishedJudge.JudgeArmEnum && visitItem.VisitTaskNum < maxFinishedJudge.VisitTaskNum)
{
visitItem.IsJudgeSelect = true;
visitItem.JudgeNote = maxFinishedJudge.JudgeNote;
}
else if (visitItem.VisitTaskNum < maxFinishedJudge.VisitTaskNum)
{
visitItem.IsJudgeSelect = false;
}
}
finishedGlobalCount = 0;
}
else
{
//已完成的全局数量
finishedGlobalCount = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode && subjectReadingPeriondVisitNumList.Any(c => (c + addReadingPeriodNum) == t.VisitTaskNum)
/*&& t.ReadingCategory == ReadingCategory.Global*/)
.GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).Count();
}
//没有产生裁判 有可能一个人没做完,也有可能做完了没产生裁判
//两个人都做了1、两个人都阅片完确实没产生2、两个人都阅片完,还没到阅片期,没产生裁判)
//默认都设置为null 仅仅处理 阅片期读完了没产生裁判 裁判选择标记需要设置的访视
visitItem.IsJudgeSelect = null;
visitItem.IsTrigerJudge = null;
visitItem.IsJudgeSelect = null;
visitItem.IsTrigerJudge = null;
//阅片期访视号
var subjectReadingPeriondVisitNumList = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode).FirstOrDefault()?.SubjectCriterionReadingPeriodVisitNumList;
if (finishedGlobalCount != 0)
{
//最大的全局是否产生裁判
if (subjectReadingPeriondVisitNumList != null && subjectReadingPeriondVisitNumList.Count()>0)
var subjectMaxFinishedGlobalTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode && subjectReadingPeriondVisitNumList.Any(c => (c + addReadingPeriodNum) == t.VisitTaskNum)
/*&& t.ReadingCategory == ReadingCategory.Global*/)
.GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max();
//最大的完成的全局是否产生裁判
if (subjectJudgeList.Any(t => t.VisitTaskNum == (subjectMaxFinishedGlobalTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge])))
{
//两个人完成最大得任务号(访视+全局)
var subjectMaxFinishedTaskNum = resultExceptJudgeList.Where(t => t.SubjectCode == visitItem.SubjectCode)
.GroupBy(t => t.VisitTaskNum).Where(g => g.Count() == 2).Select(g => g.Key).DefaultIfEmpty().Max();
var addReadingPeriodNum = isGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0;
var maxJudge = subjectJudgeList.FirstOrDefault(t => t.VisitTaskNum == (subjectMaxFinishedGlobalTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Judge]));
var minReadingPeriodTaskNum = subjectReadingPeriondVisitNumList.Min() + addReadingPeriodNum;
//最小阅片期 完成访视号
//有阅片期读完了 肯定要读到最小阅片期号后面
if (subjectMaxFinishedTaskNum >= minReadingPeriodTaskNum)
//最大裁判完成了
if (maxJudge.ReadingTaskState == ReadingTaskState.HaveSigned)
{
//找到<= 完成最大访视任务号最近的阅片期号
var latestFinishedReadingPeriodTaskNum = subjectReadingPeriondVisitNumList.Select(t => t + addReadingPeriodNum).Where(t => t <= subjectMaxFinishedTaskNum).Max();
//小于已完成的阅片期的访视 设置触发裁判标志为否 并设置默认的裁判选择标记 (两个人肯定做完了)
if (visitItem.VisitTaskNum <= latestFinishedReadingPeriodTaskNum)
if (visitItem.VisitTaskNum < maxJudge.VisitTaskNum)
{
//触发裁判
visitItem.IsTrigerJudge = true;
//不存在裁判 将R1设置
if (visitItem.ArmEnum == Arm.DoubleReadingArm1)
if (visitItem.ArmEnum == maxJudge.JudgeArmEnum)
{
visitItem.IsJudgeSelect = true;
visitItem.IsTrigerJudge = false;
visitItem.JudgeNote = maxJudge.JudgeNote;
}
//裁判没选择的人设置为false
else
{
visitItem.IsJudgeSelect = false;
visitItem.IsTrigerJudge = false;
}
}
else
{
//后续访视 未知 默认都是null
}
}
else
{
//找到当前未阅最大裁判之前的已完成的最大裁判任务
var maxFinishedJudge = subjectJudgeList.Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned).OrderByDescending(t => t.VisitTaskNum).FirstOrDefault();
if (maxFinishedJudge == null)
{
// 为空 裁判选择标记默认就是null 不用处理
if (visitItem.VisitTaskNum < maxJudge.VisitTaskNum)
{
visitItem.IsTrigerJudge = true;
}
}
else
{
if (visitItem.VisitTaskNum < maxFinishedJudge.VisitTaskNum)
{
visitItem.IsTrigerJudge = true;
if (visitItem.ArmEnum == maxFinishedJudge.JudgeArmEnum)
{
visitItem.IsJudgeSelect = true;
visitItem.JudgeNote = maxFinishedJudge.JudgeNote;
}
//裁判没选择的人设置为false
else
{
visitItem.IsJudgeSelect = false;
}
}
else if (visitItem.VisitTaskNum > maxFinishedJudge.VisitTaskNum && visitItem.VisitTaskNum < maxJudge.VisitTaskNum)
{
//完成裁判 和未完成裁判之间的 裁判选择标记默认是null
visitItem.IsTrigerJudge = true;
}
else
{
//在未完成全局裁判之后的访视 未知 默认都是null
}
}
}
}
else
{
//最大的完成的全局未产生裁判
if (visitItem.VisitTaskNum <= subjectMaxFinishedGlobalTaskNum)
{
visitItem.IsTrigerJudge = false;
if (visitItem.ArmEnum == Arm.DoubleReadingArm1)
{
visitItem.IsJudgeSelect = true;
}
else
{
visitItem.IsJudgeSelect = false;
}
}
else
{
//未产生裁判的全局之后的访视 两个标记都是null (后续可能还有全局,但是全局两个人没做完)
}
}
}
}
}
else
@ -2281,7 +2299,11 @@ namespace IRaCIS.Core.Application.Service.Common
#endregion
if (export_Template == StaticData.Export.CommonJudgeReadingDetail_Export)
{
//裁判产生标记为空的数据过滤掉
list = list.Where(t => t.IsTrigerJudge != null).ToList();
}
exportInfo.List = ExportExcelConverterDate.ConvertToClientTimeInObject(list.Where(t => t.ReadingCategory != ReadingCategory.Global).ToList(), _userInfo.TimeZoneId);
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
@ -2328,7 +2350,7 @@ namespace IRaCIS.Core.Application.Service.Common
[FromServices] IRepository<Trial> _trialRepository)
{
//每次查询必须是单标准的
var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule }).FirstNotNullAsync();
var criterion = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId).Select(t => new { t.CriterionType, t.CriterionName, t.ArbitrationRule, t.IsGlobalReading }).FirstNotNullAsync();
@ -2351,6 +2373,7 @@ namespace IRaCIS.Core.Application.Service.Common
.GroupBy(t => new { t.SubjectId, t.SourceSubjectVisitId })
.Where(g => g.Count() == 2).Select(g => g.Key.SourceSubjectVisitId).Distinct().Count();
//裁判不需要完成阅片
exportInfo.JudgeVisitCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingCategory == ReadingCategory.Judge).Count();
//3、裁判认同数M触发裁判的受试者访视中阅片人被裁判认同的访视数量
@ -2364,10 +2387,10 @@ namespace IRaCIS.Core.Application.Service.Common
UserName = g.Key.UserName,
FullName = g.Key.FullName,
//访视产生裁判的访视数量
//一致率这边裁判需要完成阅片
TotalJudgeCount = g.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned).Count(),
JudgeAgreeCount = g.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.JudgeResultTaskId == t.Id).Count(),
JudgeAgreeCount = g.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.JudgeResultTaskId == t.Id && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned).Count(),
}).ToList();
@ -2384,53 +2407,81 @@ namespace IRaCIS.Core.Application.Service.Common
exportInfo.CriterionName = criterion.CriterionName;
exportInfo.CurrentTime = ExportExcelConverterDate.DateTimeInternationalToString(DateTime.Now, _userInfo.TimeZoneId);
var isGlobalReading = criterion.IsGlobalReading;
var addReadingPeriodNum = isGlobalReading ? ReadingCommon.TaskNumDic[ReadingCategory.Global] : 0;
#region 按照受试者维度统计
//1、裁判量M所有完成阅片病例至少一个阅片期里面触发裁判的受试者数量
// 有阅片期没有全局 和有阅片期有全局,主要变化点在于 t.ReadingCategory == ReadingCategory.Global 变成了 t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId==trialReadingCriterionId)
// 或者使用 isGlobalReading ? t.ReadModule.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) : t.SourceSubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum)
#region 患者统计部分
//1、裁判量M所有完成阅片病例 最后一个阅片期触发裁判的受试者数量;
//2、总样本量NR1,R2均完成阅片至少一个阅片期的受试者数量
exportInfo.SubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId)
.Where(t => t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned)
//找到两个人完成的阅片期
.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId))
.GroupBy(t => new { t.SubjectId, t.VisitTaskNum })
.Where(g => g.Count() == 2).Any())
.Count();
exportInfo.SubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId).Where(t =>
t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Any(t => t.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned)
).Count();
//最后一个已完成的全局 没产生裁判 (之前有裁判),不算入裁判量
exportInfo.judgeSubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId)
.Where(t => t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned)
.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId))
.GroupBy(t => new { t.SubjectId, t.VisitTaskNum })
.Where(g => g.Count() == 2 && g.Key.VisitTaskNum == g.Max(t => t.VisitTaskNum))
.Any(g => g.Any(t => t.JudgeVisitTaskId != null)))
.Count();
exportInfo.judgeSubjectCount = _subjectRepository.Where(t => t.TrialId == inQuery.TrialId).Where(t =>
t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Any(t => t.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned)
&& t.SubjectVisitTaskList.AsQueryable().Where(comonTaskFilter).Any(t => t.ReadingCategory == ReadingCategory.Judge)
).Count();
exportInfo.DoctorSubjectStatList = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned)
//筛选全局 已完成的任务
.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId))
.GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName })
.Select(g => new DoctorJudgeRatio()
{
DoctorUserId = g.Key.DoctorUserId,
UserName = g.Key.UserName,
FullName = g.Key.FullName,
var doctorList = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned)
.GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName })
.Select(g => new DoctorJudgeRatio()
{
DoctorUserId = g.Key.DoctorUserId,
UserName = g.Key.UserName,
FullName = g.Key.FullName,
//最后一个阅片期触发裁判 且裁判已阅
TotalJudgeCount = g.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned)
.Where(t => t.VisitTaskNum == g.Where(c => c.SubjectId == t.SubjectId && c.JudgeVisitTaskId != null && c.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned)
.Max(t => t.VisitTaskNum))
.Select(t => t.SubjectId).Distinct().Count(),
//触发裁判的受试者数量
TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null).Select(t => t.SubjectId).Distinct().Count(),
JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null && t.JudgeVisitTask.JudgeResultTaskId == t.Id).Select(t => t.SubjectId).Distinct().Count(),
}).ToList();
// G-2 G-4 可能选择的是不同的医生,要以最后一次选择的为准
JudgeAgreeCount = g.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned)
.Where(t => t.VisitTaskNum == g.Where(c => c.SubjectId == t.SubjectId && c.JudgeVisitTaskId != null && c.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned)
.Max(t => t.VisitTaskNum))
.Where(t => t.JudgeVisitTask.JudgeResultTaskId == t.Id)
.Select(t => t.SubjectId).Distinct().Count(),
}).ToList();
#endregion
#region 按照阅片期维度统计
//、裁判量J所有完成阅片R1和R2均完成的阅片期里面触发裁判的阅片期数量
//2、总样本量QR1,R2均完成阅片的阅片期数量
#region 阅片期部分
exportInfo.ReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned)
.GroupBy(t => new { t.SubjectId, t.SouceReadModuleId })
.Where(g => g.Count() == 2).Select(g => g.Key.SouceReadModuleId).Distinct().Count();
exportInfo.ReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned)
//找到阅片期已阅片完
.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId))
.GroupBy(t => new { t.SubjectId, t.VisitTaskNum })
.Where(g => g.Count() == 2)
.Select(g => g.Key.VisitTaskNum).Distinct().Count();
exportInfo.judgeReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned)
//找到阅片期已阅片完
.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && c.TrialReadingCriterionId == trialReadingCriterionId))
.GroupBy(t => new { t.SubjectId, t.VisitTaskNum })
//裁判不要求做完
.Where(g => g.Count() == 2 && g.Any(c => c.JudgeVisitTaskId != null))
.Select(g => g.Key.VisitTaskNum).Distinct().Count();
exportInfo.judgeReadingPeriodCount = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingCategory == ReadingCategory.Global && t.ReadingTaskState == ReadingTaskState.HaveSigned)
.GroupBy(t => new { t.SubjectId, t.SouceReadModuleId })
.Where(g => g.Count() == 2 && g.Any(c => c.JudgeVisitTaskId != null)).Select(g => g.Key.SouceReadModuleId).Distinct().Count();
//3、裁判认同数J触发裁判的阅片期中阅片人被裁判认同的阅片期数量
//4、总裁判数Q阅片人完成阅片的阅片期中触发裁判的阅片期数量
var doctor2List = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned)
exportInfo.DoctorPeriodStatList = _visitTaskRepository.Where(comonTaskFilter).Where(t => t.ReadingTaskState == ReadingTaskState.HaveSigned)
.GroupBy(t => new { t.DoctorUserId, t.DoctorUser.UserName, t.DoctorUser.FullName })
//有全局裁判
//.Where(g => g.Any(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null))
@ -2440,24 +2491,21 @@ namespace IRaCIS.Core.Application.Service.Common
UserName = g.Key.UserName,
FullName = g.Key.FullName,
//触发裁判的阅片期的数量
TotalJudgeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.SouceReadModuleId != null && t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned).Select(t => t.SouceReadModuleId).Distinct().Count(),
//触发裁判的阅片期的数量 并且裁判要求做完
TotalJudgeCount = g.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && t.TrialReadingCriterionId == trialReadingCriterionId))
.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned)
.Select(t => t.VisitTaskNum).Distinct().Count(),
JudgeAgreeCount = g.Where(t => t.ReadingCategory == ReadingCategory.Global && t.JudgeVisitTaskId != null && t.JudgeVisitTask.JudgeResultTaskId == t.Id)
.Select(t => t.SouceReadModuleId).Distinct().Count(),
JudgeAgreeCount = g.Where(t => t.Subject.ReadModuleList.Any(c => c.SubjectVisit.VisitNum == (t.VisitTaskNum - addReadingPeriodNum) && t.TrialReadingCriterionId == trialReadingCriterionId))
.Where(t => t.JudgeVisitTaskId != null && t.JudgeVisitTask.ReadingTaskState == ReadingTaskState.HaveSigned)
.Where(t => t.JudgeVisitTask.JudgeResultTaskId == t.Id)
.Select(t => t.VisitTaskNum).Distinct().Count(),
}).ToList();
#endregion
exportInfo.DoctorSubjectStatList = doctorList;
exportInfo.DoctorPeriodStatList = doctor2List;
return await ExcelExportHelper.DataExportAsync(StaticData.Export.ReadingPeriodJudgeRatio_Export, exportInfo, $"{exportInfo.ResearchProgramNo}_{exportInfo.CriterionName}", _commonDocumentRepository, _hostEnvironment);
}
else
{