自身一直性bug修复

Uat_Study
hang 2022-07-08 16:00:58 +08:00
parent 5f1147b73a
commit a522599eca
4 changed files with 181 additions and 45 deletions

View File

@ -222,6 +222,14 @@
<param name="readingId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadJudgeTaskImage(System.Guid,System.Guid)">
<summary>
上传裁判任务的图像
</summary>
<param name="trialId"></param>
<param name="visitTaskId"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.API.Controllers.StudyController.UploadMedicalReviewImage(System.Guid,System.Guid)">
<summary>
上传医学审核图片

View File

@ -79,6 +79,20 @@
<param name="inCommand"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.TaskConsistentRuleService.GetGroupConsistentRuleSubjectList(IRaCIS.Core.Application.ViewModel.GroupConsistentQuery)">
<summary>
组间一致性分析 选择Subejct 列表
</summary>
<param name="inQuery"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.TaskConsistentRuleService.ConfirmGenerateGroupConsistentTask(IRaCIS.Core.Application.ViewModel.GroupConsistentConfirmGenrateCommand,IRaCIS.Core.Application.Service.IVisitTaskHelpeService)">
<summary>
确认生成自身一致性分析任务
</summary>
<param name="inCommand"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.TaskConsistentRuleService.GetSelfConsistentDoctorStatList(IRaCIS.Core.Application.ViewModel.TaskConsistentRuleQuery)">
<summary>
自身一致性分配 配置+ 统计已经生成数量统计表
@ -1513,6 +1527,11 @@
项目Id
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetIRMedicalFeedbackListOutDto.MedicalDialogCloseEnum">
<summary>
医学审核对话关闭原因
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.GetIRMedicalFeedbackListOutDto.AuditState">
<summary>
审核 质询状态
@ -1658,6 +1677,16 @@
是否关闭
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ClosedMedicalReviewDialogInDto.MedicalDialogCloseEnum">
<summary>
医学审核对话关闭原因
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.ClosedMedicalReviewDialogInDto.DialogCloseReason">
<summary>
对话关闭原因
</summary>
</member>
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.SaveMedicalReviewInfoInDto.IsHaveQuestion">
<summary>
是否有问题
@ -2696,6 +2725,17 @@
<param name="path">文件保存路径</param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Helper.FileStoreHelper.GetFilePath(Microsoft.AspNetCore.Hosting.IWebHostEnvironment,System.String,System.Guid,System.Guid,System.String)">
<summary>
通用获取文件路径
</summary>
<param name="_hostEnvironment"></param>
<param name="fileName"></param>
<param name="trialId"></param>
<param name="id"></param>
<param name="type"></param>
<returns></returns>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.TaskAllocationRuleView">
<summary> TaskAllocationRuleView 列表视图模型 </summary>
</member>
@ -2736,6 +2776,11 @@
审核建议
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.TaskMedicalReviewView.MedicalDialogCloseEnum">
<summary>
医学审核对话关闭原因
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.TaskMedicalReviewQuery">
<summary>TaskMedicalReviewQuery 列表查询参数模型</summary>
</member>

View File

@ -41,14 +41,11 @@ namespace IRaCIS.Core.Application.ViewModel
[NotDefault]
public Guid TaskConsistentRuleId { get; set; }
//public int PlanSubjectCount { get; set; }
//public int PlanVisitCount { get; set; }
//public int IntervalWeeks { get; set; }
//public Guid? CompareDoctorUserId { get; set; }
//public bool IsHaveReadingPeriod { get; set; }
//public bool IsGenerateGlobalTask { get; set; }
//public Guid? AnalysisDoctorUserId { get; set; }
}
public class GroupConsistentQuery : PageInput
{
public Guid TrialId { get; set; }
}
public class ConsistentConfirmGenerateCommand
@ -61,6 +58,13 @@ namespace IRaCIS.Core.Application.ViewModel
}
public class GroupConsistentConfirmGenrateCommand
{
[NotDefault]
public Guid TrialId { get; set; }
public List<Guid> SubejctIdList { get; set; }
}
public class DoctorSelfConsistentSubjectView
{
public Guid TrialId { get; set; }
@ -69,6 +73,8 @@ namespace IRaCIS.Core.Application.ViewModel
public String TrialSiteCode { get; set; }
public string SubjectCode { get; set; }
public string? BlindSubjectCode { get; set; }
public Guid SubjectId { get; set; }
public bool IsHaveGeneratedTask { get; set; }

View File

@ -81,31 +81,15 @@ namespace IRaCIS.Core.Application.Service
{
var filterObj = await _taskConsistentRuleRepository.FirstOrDefaultAsync(t => t.Id == inQuery.TaskConsistentRuleId);
var pagedList = await GetIQueryableDoctorSelfConsistentSubjectView(filterObj,inQuery.DoctorUserId).ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(DoctorSelfConsistentSubjectView.SubjectCode) : inQuery.SortField, inQuery.Asc);
//var (group, query) = GetIQueryableDoctorSelfConsistentRuleSubjectView(filterObj);
//var count = group.Count();
//query = query.OrderByDescending(t => t.IsHaveGeneratedTask).Skip((inQuery.PageIndex - 1) * inQuery.PageSize);
//var items = await query.Take(inQuery.PageSize).ToArrayAsync().ConfigureAwait(false);
//var pagedList = new PageOutput<DoctorConsistentRuleSubjectView>()
//{
// PageIndex = inQuery.PageIndex,
// PageSize = inQuery.PageSize,
// TotalCount = count,
// CurrentPageData = items
//};
var pagedList = await GetIQueryableDoctorSelfConsistentSubjectView(filterObj, inQuery.DoctorUserId).ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(DoctorSelfConsistentSubjectView.SubjectCode) : inQuery.SortField, inQuery.Asc);
return pagedList;
}
/// <summary>
/// 确认生成自身一致性分析任务
/// </summary>
@ -138,7 +122,10 @@ namespace IRaCIS.Core.Application.Service
{
var maxCodeStr = _visitTaskRepository.Where(t => t.TrialId == subject.TrialId).OrderByDescending(t => t.BlindSubjectCode).Select(t => t.BlindSubjectCode).FirstOrDefault();
blindSubjectCode = (int.Parse(maxCodeStr) + 1).ToString($"D{filterObj.BlindSubjectNumberOfPlaces}");
int maxCodeInt = 0;
int.TryParse(maxCodeStr,out maxCodeInt);
blindSubjectCode = (maxCodeInt + 1).ToString($"D{filterObj.BlindSubjectNumberOfPlaces}");
}
subject.VisitTaskList.Take(filterObj.PlanVisitCount).ForEach(t =>
@ -175,7 +162,81 @@ namespace IRaCIS.Core.Application.Service
}
private IQueryable<DoctorSelfConsistentSubjectView> GetIQueryableDoctorSelfConsistentSubjectView(TaskConsistentRule filterObj, Guid doctorUserId, List<Guid>? subejctIdList = null)
/// <summary>
/// 组间一致性分析 选择Subejct 列表
/// </summary>
/// <param name="inQuery"></param>
/// <returns></returns>
[HttpPost]
public async Task<PageOutput<DoctorSelfConsistentSubjectView>> GetGroupConsistentRuleSubjectList(GroupConsistentQuery inQuery)
{
var filterObj = await _taskConsistentRuleRepository.FirstOrDefaultAsync(t => t.TrialId == inQuery.TrialId && t.IsSelfAnalysis==false);
var pagedList = await GetIQueryableDoctorSelfConsistentSubjectView(filterObj).ToPagedListAsync(inQuery.PageIndex, inQuery.PageSize, string.IsNullOrWhiteSpace(inQuery.SortField) ? nameof(DoctorSelfConsistentSubjectView.SubjectCode) : inQuery.SortField, inQuery.Asc);
return pagedList;
}
/// <summary>
/// 确认生成自身一致性分析任务
/// </summary>
/// <param name="inCommand"></param>
/// <returns></returns>
[HttpPost]
public async Task<IResponseOutput> ConfirmGenerateGroupConsistentTask(GroupConsistentConfirmGenrateCommand inCommand, [FromServices] IVisitTaskHelpeService _visitTaskCommonService)
{
throw new BusinessValidationFailedException("正在更新开发ing,不允许操作");
var filterObj = await _taskConsistentRuleRepository.FirstOrDefaultAsync(t => t.TrialId == inCommand.TrialId && t.IsSelfAnalysis==false);
var list = await GetIQueryableDoctorSelfConsistentSubjectView(filterObj, null, inCommand.SubejctIdList).ToListAsync();
foreach (var subject in list)
{
//subject.VisitTaskList.Take(filterObj.PlanVisitCount).ForEach(t =>
//{
// t.DoctorUserId = doctorUserId;
// t.TaskConsistentRuleId = filterObj.Id;
//});
//最后一个访视添加全局
var globalTask = (subject.VisitTaskList[filterObj.PlanVisitCount - 1]).Clone();
globalTask.ReadingCategory = ReadingCategory.Global;
globalTask.VisitTaskNum += ReadingCommon.TaskNumDic[ReadingCategory.Global];
subject.VisitTaskList.Add(globalTask);
await _visitTaskCommonService.AddTaskAsync(new GenerateTaskCommand()
{
TrialId = filterObj.TrialId,
ReadingCategory = GenerateTaskCategory.SelfConsistent,
//产生的过滤掉已经生成的
GenerataConsistentTaskList = subject.VisitTaskList.Where(t => t.IsHaveGeneratedTask == false).ToList()
});
}
return ResponseOutput.Ok();
}
private IQueryable<DoctorSelfConsistentSubjectView> GetIQueryableDoctorSelfConsistentSubjectView(TaskConsistentRule filterObj, Guid? doctorUserId=null, List<Guid>? subejctIdList = null)
{
var trialId = filterObj.TrialId;
@ -187,9 +248,22 @@ namespace IRaCIS.Core.Application.Service
(t.ReReadingApplyState == ReReadingApplyState.Default || t.ReReadingApplyState == ReReadingApplyState.Reject);
Expression<Func<VisitTask, bool>> subjectIsHaveGeneratedTaskFilter = c => c.IsAnalysisCreate;
//组间一致性
if (doctorUserId == null)
{
subjectIsHaveGeneratedTaskFilter = subjectIsHaveGeneratedTaskFilter.And(c => c.IsSelfAnalysis == false);
}
//组内
else
{
subjectIsHaveGeneratedTaskFilter = subjectIsHaveGeneratedTaskFilter.And(c => c.DoctorUserId == doctorUserId && c.IsSelfAnalysis == true);
}
if (subejctIdList != null && subejctIdList?.Count > 0)
{
visitTaskFilter.And(t => subejctIdList.Contains(t.SubjectId));
visitTaskFilter= visitTaskFilter.And(t => subejctIdList.Contains(t.SubjectId));
}
//所选访视数量 的访视 其中必有一个访视后有全局任务
@ -212,7 +286,9 @@ namespace IRaCIS.Core.Application.Service
TrialSiteCode = t.TrialSite.TrialSiteCode,
SubjectId = t.Id,
IsHaveGeneratedTask = t.SubjectVisitTaskList.Any(c => c.IsAnalysisCreate && c.DoctorUserId == doctorUserId),
BlindSubjectCode=t.SubjectVisitTaskList.Where(t=>t.IsAnalysisCreate).OrderByDescending(t=>t.BlindSubjectCode).Select(t=>t.BlindSubjectCode).FirstOrDefault(),
IsHaveGeneratedTask = t.SubjectVisitTaskList.AsQueryable().Any(subjectIsHaveGeneratedTaskFilter),
ValidVisitCount = t.SubjectVisitTaskList.AsQueryable().Where(visitTaskFilter).Count(),
@ -231,7 +307,8 @@ namespace IRaCIS.Core.Application.Service
VisitTaskNum = c.VisitTaskNum,
TrialId = c.TrialId,
IsHaveGeneratedTask = c.Subject.SubjectVisitTaskList.Any(t => t.ConsistentAnalysisOriginalTaskId == c.Id),
//自身一致性才有意义
//IsHaveGeneratedTask = c.Subject.SubjectVisitTaskList.Any(t => t.ConsistentAnalysisOriginalTaskId == c.Id),
GlobalVisitTaskList = c.Subject.SubjectVisitTaskList.Where(t => t.VisitTaskNum == c.VisitTaskNum + ReadingCommon.TaskNumDic[ReadingCategory.Global] && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.SignTime!.Value.AddDays(filterObj.IntervalWeeks * 7) < DateTime.Now).Select(c => new VisitTaskSimpleDTO()
{
@ -296,7 +373,7 @@ namespace IRaCIS.Core.Application.Service
IsHaveReadingPeriod = taskConsistentRule.IsHaveReadingPeriod,
PlanVisitCount = taskConsistentRule.PlanVisitCount,
GeneratedSubjectCount = taskConsistentRule.Trial.VisitTaskList.Where(t => t.IsAnalysisCreate && t.IsSelfAnalysis == true).Select(t => t.SubjectId).Distinct().Count(),
GeneratedSubjectCount = taskConsistentRule.Trial.VisitTaskList.Where(t => t.IsAnalysisCreate && t.IsSelfAnalysis == true && t.DoctorUserId==user.Id).Select(t => t.SubjectId).Distinct().Count(),
AnalysisDoctorUser = new UserSimpleInfo()
{
@ -309,19 +386,19 @@ namespace IRaCIS.Core.Application.Service
//if (await _taskConsistentRuleRepository.AnyAsync(t => t.TrialId == inQuery.TrialId))
//{
// var rule = await _taskConsistentRuleRepository.Where(t => t.TrialId == inQuery.TrialId).ProjectTo<TaskConsistentRuleBatchAddOrEdit>(_mapper.ConfigurationProvider).FirstAsync();
//if (await _taskConsistentRuleRepository.AnyAsync(t => t.TrialId == inQuery.TrialId))
//{
// var rule = await _taskConsistentRuleRepository.Where(t => t.TrialId == inQuery.TrialId).ProjectTo<TaskConsistentRuleBatchAddOrEdit>(_mapper.ConfigurationProvider).FirstAsync();
// rule.IsBatchAdd = true;
// rule.IsBatchAdd = true;
// await BatchAddOrUpdateTaskConsistentRule(rule);
//}
// await BatchAddOrUpdateTaskConsistentRule(rule);
//}
//#endregion
//#endregion
//var taskConsistentRuleQueryable = _taskConsistentRuleRepository.Where(t => t.TrialId == inQuery.TrialId)
// .ProjectTo<TaskConsistentRuleView>(_mapper.ConfigurationProvider);
//var taskConsistentRuleQueryable = _taskConsistentRuleRepository.Where(t => t.TrialId == inQuery.TrialId)
// .ProjectTo<TaskConsistentRuleView>(_mapper.ConfigurationProvider);
return await taskConsistentRuleQueryable.ToListAsync();
}
@ -397,7 +474,7 @@ namespace IRaCIS.Core.Application.Service
var verifyExp1 = new EntityVerifyExp<TaskConsistentRule>()
{
VerifyExp = t => t.TrialId == addOrEditTaskConsistentRule.TrialId && t.IsSelfAnalysis == addOrEditTaskConsistentRule.IsSelfAnalysis,
VerifyExp = t => t.TrialId == addOrEditTaskConsistentRule.TrialId && t.IsSelfAnalysis == addOrEditTaskConsistentRule.IsSelfAnalysis,
VerifyMsg = "已有该项目配置,不允许继续增加"
};
@ -414,7 +491,7 @@ namespace IRaCIS.Core.Application.Service
var config = await _taskConsistentRuleRepository.FirstOrDefaultAsync(t => t.Id == taskConsistentRuleId);
if (await _visitTaskRepository.AnyAsync(t => t.IsAnalysisCreate && t.TrialId == config.TrialId && t.IsSelfAnalysis == config.IsSelfAnalysis))
if (await _visitTaskRepository.AnyAsync(t => t.IsAnalysisCreate && t.TrialId == config.TrialId && t.IsSelfAnalysis == config.IsSelfAnalysis))
{
throw new BusinessValidationFailedException("已产生一致性分析任务,不允许删除");
}