修改随机阅片任务盲态名字
continuous-integration/drone/push Build is passing Details

Uat_IRC_Net10
hang 2026-07-09 13:48:39 +08:00
parent 83111d3338
commit b9a79f0658
5 changed files with 105 additions and 26 deletions

View File

@ -337,6 +337,12 @@
<param name="taskId"></param> <param name="taskId"></param>
<returns></returns> <returns></returns>
</member> </member>
<member name="M:IRaCIS.Core.Application.Service.VisitTaskHelpeService.GenerateTaskNo">
<summary>
从 NewId 的后 3 个字节24 位)生成一个 6 位十六进制字符串
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.VisitTaskHelpeService.GetIsClinicalDataSignTest(System.Guid)"> <member name="M:IRaCIS.Core.Application.Service.VisitTaskHelpeService.GetIsClinicalDataSignTest(System.Guid)">
<summary> <summary>
获取GetIsClinicalDataSignTest 获取GetIsClinicalDataSignTest

View File

@ -124,6 +124,45 @@ namespace IRaCIS.Core.Application.Service
} }
#region 获取随机编号
/// <summary>
/// 从 NewId 的后 3 个字节24 位)生成一个 6 位十六进制字符串
/// </summary>
/// <returns></returns>
public static string GenerateTaskNo()
{
var bytes = NewId.Next().ToByteArray();
uint value =
BitConverter.ToUInt32(bytes, 0)
^ BitConverter.ToUInt32(bytes, 4)
^ BitConverter.ToUInt32(bytes, 8)
^ BitConverter.ToUInt32(bytes, 12);
return (value & 0xFFFFFF).ToString("X6");
}
private async Task<string> GetRandomTaskName(Guid trialId, List<string> existList)
{
var taskName = GenerateTaskNo();
while (existList.Any(t => t == taskName))
{
taskName = GenerateTaskNo();
}
while (await _visitTaskRepository.AnyAsync(t => t.TaskBlindName == taskName && t.TrialId == trialId))
{
taskName = GenerateTaskNo();
}
existList.Add(taskName);
return taskName;
}
#endregion
//基于标准签名 产生任务 (或者手动选择某些访视生成该标准的任务) //基于标准签名 产生任务 (或者手动选择某些访视生成该标准的任务)
public async Task BaseCritrionGenerateVisitTask(Guid trialId, Guid confirmedTrialReadingCriterionId, bool? isManualSelectVisit = null, List<Guid>? subjectVisitIdList = null) public async Task BaseCritrionGenerateVisitTask(Guid trialId, Guid confirmedTrialReadingCriterionId, bool? isManualSelectVisit = null, List<Guid>? subjectVisitIdList = null)
@ -155,7 +194,7 @@ namespace IRaCIS.Core.Application.Service
int currentMaxCodeInt = cacheMaxCodeInt > dbMaxCode ? cacheMaxCodeInt : dbMaxCode; int currentMaxCodeInt = cacheMaxCodeInt > dbMaxCode ? cacheMaxCodeInt : dbMaxCode;
var randomTaskBlindNameList = new List<string>();
foreach (var subjectGroup in needGenerateVisit.GroupBy(t => t.SubjectId).Select(g => new { SubjectId = g.Key, SubjectVisitList = g.ToList() })) foreach (var subjectGroup in needGenerateVisit.GroupBy(t => t.SubjectId).Select(g => new { SubjectId = g.Key, SubjectVisitList = g.ToList() }))
{ {
@ -185,6 +224,10 @@ namespace IRaCIS.Core.Application.Service
} }
} }
else if (trialReadingCriterionConfig.IsReadingTaskViewInOrder == ReadingOrder.Random)
{
blindTaskName = await GetRandomTaskName(trialId, randomTaskBlindNameList);
}
else else
{ {
blindTaskName = "Timepoint"; blindTaskName = "Timepoint";
@ -594,7 +637,7 @@ namespace IRaCIS.Core.Application.Service
int currentMaxCodeInt = cacheMaxCodeInt > dbMaxCode ? cacheMaxCodeInt : dbMaxCode; int currentMaxCodeInt = cacheMaxCodeInt > dbMaxCode ? cacheMaxCodeInt : dbMaxCode;
var randomTaskBlindNameList = new List<string>();
switch (generateTaskCommand.ReadingCategory) switch (generateTaskCommand.ReadingCategory)
@ -654,6 +697,7 @@ namespace IRaCIS.Core.Application.Service
var isFrontTaskNeedSignButNotSign = await _visitTaskRepository.AnyAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.TaskState == TaskState.Effect && t.VisitTaskNum < subjectVisit.VisitNum && t.IsNeedClinicalDataSign == true && t.IsClinicalDataSign == false); var isFrontTaskNeedSignButNotSign = await _visitTaskRepository.AnyAsync(t => t.TrialReadingCriterionId == trialReadingCriterionId && t.SubjectId == subjectVisit.SubjectId && t.TaskState == TaskState.Effect && t.VisitTaskNum < subjectVisit.VisitNum && t.IsNeedClinicalDataSign == true && t.IsClinicalDataSign == false);
var blindTaskName = string.Empty; var blindTaskName = string.Empty;
if (trialReadingCriterionConfig.IsReadingTaskViewInOrder == ReadingOrder.InOrder) if (trialReadingCriterionConfig.IsReadingTaskViewInOrder == ReadingOrder.InOrder)
@ -668,6 +712,11 @@ namespace IRaCIS.Core.Application.Service
} }
} }
else if (trialReadingCriterionConfig.IsReadingTaskViewInOrder == ReadingOrder.Random)
{
blindTaskName = await GetRandomTaskName(trialId, randomTaskBlindNameList);
}
//受试者随机
else else
{ {
blindTaskName = "Timepoint"; blindTaskName = "Timepoint";
@ -1277,6 +1326,7 @@ namespace IRaCIS.Core.Application.Service
var reReadingVisitTask = generateTaskCommand.ReReadingTask; var reReadingVisitTask = generateTaskCommand.ReReadingTask;
Guid? subjectVisitId = Guid.Empty; Guid? subjectVisitId = Guid.Empty;
if (reReadingVisitTask.SourceSubjectVisitId == null) if (reReadingVisitTask.SourceSubjectVisitId == null)
@ -1317,6 +1367,10 @@ namespace IRaCIS.Core.Application.Service
//&& t.TrialReadingCriterionId == reReadingVisitTask.TrialReadingCriterionId && t.TaskState == TaskState.Effect //&& t.TrialReadingCriterionId == reReadingVisitTask.TrialReadingCriterionId && t.TaskState == TaskState.Effect
// && t.SourceSubjectVisitId == reReadingVisitTask.SourceSubjectVisitId && t.ArmEnum == reReadingVisitTask.ArmEnum && t.DoctorUserId == reReadingVisitTask.DoctorUserId).FirstOrDefault(); // && t.SourceSubjectVisitId == reReadingVisitTask.SourceSubjectVisitId && t.ArmEnum == reReadingVisitTask.ArmEnum && t.DoctorUserId == reReadingVisitTask.DoctorUserId).FirstOrDefault();
var isRandomReading = trialReadingCriterionConfigList.FirstOrDefault(t => t.TrialReadingCriterionId == reReadingVisitTask.TrialReadingCriterionId)?.IsReadingTaskViewInOrder == ReadingOrder.Random;
var taskBlindName = isRandomReading ? await GetRandomTaskName(trialId, randomTaskBlindNameList) : reReadingVisitTask.TaskBlindName;
var newTask = await _visitTaskRepository.AddAsync(new VisitTask() var newTask = await _visitTaskRepository.AddAsync(new VisitTask()
{ {
@ -1325,7 +1379,7 @@ namespace IRaCIS.Core.Application.Service
SubjectId = reReadingVisitTask.SubjectId, SubjectId = reReadingVisitTask.SubjectId,
ArmEnum = reReadingVisitTask.ArmEnum, ArmEnum = reReadingVisitTask.ArmEnum,
TaskName = reReadingVisitTask.TaskName, TaskName = reReadingVisitTask.TaskName,
TaskBlindName = reReadingVisitTask.TaskBlindName, TaskBlindName = taskBlindName,
IsUrgent = reReadingVisitTask.IsAnalysisCreate ? false : subjectVisitUrgentInfo.IsUrgent, IsUrgent = reReadingVisitTask.IsAnalysisCreate ? false : subjectVisitUrgentInfo.IsUrgent,
TaskUrgentType = reReadingVisitTask.IsAnalysisCreate ? null : taskUrgent, TaskUrgentType = reReadingVisitTask.IsAnalysisCreate ? null : taskUrgent,
@ -1548,6 +1602,11 @@ namespace IRaCIS.Core.Application.Service
var subjectUser = await _subjectUserRepository.Where(x => x.SubjectId == firstTask.SubjectId && x.ArmEnum == Arm.JudgeArm && x.IsConfirmed && x.TrialReadingCriterionId == firstTask.TrialReadingCriterionId).FirstOrDefaultAsync(); var subjectUser = await _subjectUserRepository.Where(x => x.SubjectId == firstTask.SubjectId && x.ArmEnum == Arm.JudgeArm && x.IsConfirmed && x.TrialReadingCriterionId == firstTask.TrialReadingCriterionId).FirstOrDefaultAsync();
var isRandom = trialReadingCriterionConfigList.FirstOrDefault(t => t.TrialReadingCriterionId == firstTask.TrialReadingCriterionId)?.IsReadingTaskViewInOrder == ReadingOrder.Random;
var blindName = isRandom ? await GetRandomTaskName(trialId, randomTaskBlindNameList) : firstTask.TaskBlindName;
VisitTask visitTask = new VisitTask() VisitTask visitTask = new VisitTask()
{ {
ArmEnum = Arm.JudgeArm, ArmEnum = Arm.JudgeArm,
@ -1564,7 +1623,7 @@ namespace IRaCIS.Core.Application.Service
SouceReadModuleId = firstTask.SouceReadModuleId, SouceReadModuleId = firstTask.SouceReadModuleId,
TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)), TaskCode = AppSettings.GetCodeStr(currentMaxCodeInt + 1, nameof(VisitTask)),
TaskState = TaskState.Effect, TaskState = TaskState.Effect,
TaskBlindName = firstTask.TaskBlindName, TaskBlindName = blindName,
DoctorUserId = subjectUser == null ? null : subjectUser.DoctorUserId, DoctorUserId = subjectUser == null ? null : subjectUser.DoctorUserId,
TaskAllocationState = subjectUser == null ? TaskAllocationState.NotAllocate : TaskAllocationState.Allocated, TaskAllocationState = subjectUser == null ? TaskAllocationState.NotAllocate : TaskAllocationState.Allocated,
AllocateTime = subjectUser == null ? null : DateTime.Now, AllocateTime = subjectUser == null ? null : DateTime.Now,

View File

@ -854,7 +854,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
/// <param name="inQuery"></param> /// <param name="inQuery"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<ReReadingTaskView>> GetIRReReadingTaskList(VisitTaskQuery inQuery) public async Task<IResponseOutput<PageOutput<ReReadingTaskView>> > GetIRReReadingTaskList(VisitTaskQuery inQuery)
{ {
var visitTaskQueryable = _visitTaskReReadingRepository var visitTaskQueryable = _visitTaskReReadingRepository
@ -889,7 +889,11 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
var pageList = await visitTaskQueryable.ToPagedListAsync(inQuery, defalutSortArray); var pageList = await visitTaskQueryable.ToPagedListAsync(inQuery, defalutSortArray);
return pageList; var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId)
.Select(t => new { t.IsReadingTaskViewInOrder }).FirstNotNullAsync();
return ResponseOutput.Ok(pageList, criterionInfo);
} }
@ -1242,7 +1246,7 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
/// <param name="inQuery"></param> /// <param name="inQuery"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<IRHaveReadView>> GetIRHaveReadTaskList(VisitTaskQuery inQuery) public async Task<IResponseOutput<PageOutput<IRHaveReadView>>> GetIRHaveReadTaskList(VisitTaskQuery inQuery)
{ {
@ -1270,7 +1274,10 @@ public class VisitTaskService(IRepository<VisitTask> _visitTaskRepository,
var pageList = await visitTaskQueryable.ToPagedListAsync(inQuery, defalutSortArray); var pageList = await visitTaskQueryable.ToPagedListAsync(inQuery, defalutSortArray);
return pageList; var criterionInfo = await _readingQuestionCriterionTrialRepository.Where(t => t.Id == inQuery.TrialReadingCriterionId)
.Select(t => new { t.IsReadingTaskViewInOrder }).FirstNotNullAsync();
return ResponseOutput.Ok(pageList, criterionInfo);
} }

View File

@ -58,8 +58,9 @@ namespace IRaCIS.Core.Application.Service.ImageAndDoc
{ {
//subject 随机阅片 或者无序 有上传 才处理任务编号 //subject 随机阅片 或者无序 有上传 才处理任务编号
if (_visitTaskRepository.Any(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && if (_visitTaskRepository.Any(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId &&
(t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom || (t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.SubjectRandom
(t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.Random && t.TrialReadingCriterion.ImageDownloadEnum != ReadingImageDownload.None)))) //||(t.TrialReadingCriterion.IsReadingTaskViewInOrder == ReadingOrder.Random && t.TrialReadingCriterion.ImageDownloadEnum != ReadingImageDownload.None)
)))
{ {
//找到 非一致性分析,未签名,状态正常的 并且任务名称是TimePoint的 任务 //找到 非一致性分析,未签名,状态正常的 并且任务名称是TimePoint的 任务
var needDealTaskList = await _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.UserRoleId var needDealTaskList = await _visitTaskRepository.Where(t => t.SubjectId == subjectId && t.TrialReadingCriterionId == trialReadingCriterionId && t.IsAnalysisCreate == false && t.DoctorUserId == _userInfo.UserRoleId

View File

@ -246,9 +246,9 @@ namespace IRaCIS.Core.Application.Service
var visitTaskAnswer = await _readingTaskQuestionAnswerRepository.Where(x => taskIds.Contains(x.VisitTaskId) && x.ReadingQuestionTrial.IsJudgeQuestion).Select(x => new JudgeQuestionAnswerInfo var visitTaskAnswer = await _readingTaskQuestionAnswerRepository.Where(x => taskIds.Contains(x.VisitTaskId) && x.ReadingQuestionTrial.IsJudgeQuestion).Select(x => new JudgeQuestionAnswerInfo
{ {
Answer = x.Answer, Answer = x.Answer,
Unit=x.ReadingQuestionTrial.Unit, Unit = x.ReadingQuestionTrial.Unit,
ValueType=x.ReadingQuestionTrial.ValueType, ValueType = x.ReadingQuestionTrial.ValueType,
CustomUnit=x.ReadingQuestionTrial.CustomUnit, CustomUnit = x.ReadingQuestionTrial.CustomUnit,
VisitTaskId = x.VisitTaskId, VisitTaskId = x.VisitTaskId,
DictionaryCode = x.ReadingQuestionTrial.DictionaryCode, DictionaryCode = x.ReadingQuestionTrial.DictionaryCode,
ShowOrder = x.ReadingQuestionTrial.ShowOrder, ShowOrder = x.ReadingQuestionTrial.ShowOrder,
@ -643,8 +643,8 @@ namespace IRaCIS.Core.Application.Service
[HttpPost] [HttpPost]
public async Task<string> TestGetJointMedicalReviewDialog(Guid id) public async Task<string> TestGetJointMedicalReviewDialog(Guid id)
{ {
var dialog = await _readingMedicalReviewDialogRepository.Where(x => x.Id == id) var dialog = await _readingMedicalReviewDialogRepository.Where(x => x.Id == id)
.ProjectTo<GetMedicalReviewDialogOutDto>(_mapper.ConfigurationProvider).FirstNotNullAsync(); .ProjectTo<GetMedicalReviewDialogOutDto>(_mapper.ConfigurationProvider).FirstNotNullAsync();
Dictionary<string, string> i18NKeys = new Dictionary<string, string>() Dictionary<string, string> i18NKeys = new Dictionary<string, string>()
@ -661,11 +661,11 @@ namespace IRaCIS.Core.Application.Service
}; };
var i18Values = i18NKeys.Select(x => x.Value).ToList(); var i18Values = i18NKeys.Select(x => x.Value).ToList();
var i18nList=await _internationalizationRepository.Where(x => i18Values.Contains(x.Code)) var i18nList = await _internationalizationRepository.Where(x => i18Values.Contains(x.Code))
.Select(x => new .Select(x => new
{ {
Code= x.Code, Code = x.Code,
Value= _userInfo.IsEn_Us?x.Value:x.ValueCN Value = _userInfo.IsEn_Us ? x.Value : x.ValueCN
}).ToListAsync(); }).ToListAsync();
List<string> dictionaryCodeList = new List<string>() List<string> dictionaryCodeList = new List<string>()
@ -676,16 +676,16 @@ namespace IRaCIS.Core.Application.Service
"YesOrNo", "YesOrNo",
}; };
var dictionadParents=await _dictionaryRepository.Where(x=> dictionaryCodeList.Contains(x.Parent.Code)) var dictionadParents = await _dictionaryRepository.Where(x => dictionaryCodeList.Contains(x.Parent.Code))
.Select(x => new .Select(x => new
{ {
ParentCode = x.Parent.Code, ParentCode = x.Parent.Code,
Code=x.Code, Code = x.Code,
Value = _userInfo.IsEn_Us ? x.Value : x.ValueCN Value = _userInfo.IsEn_Us ? x.Value : x.ValueCN
}).ToListAsync(); }).ToListAsync();
JointMedicalReviewI18n i18N = new JointMedicalReviewI18n() { }; JointMedicalReviewI18n i18N = new JointMedicalReviewI18n() { };
foreach (var kv in i18NKeys) foreach (var kv in i18NKeys)
{ {
PropertyInfo? pi = i18N.GetType().GetProperty(kv.Key); PropertyInfo? pi = i18N.GetType().GetProperty(kv.Key);
if (pi != null && pi.CanWrite) if (pi != null && pi.CanWrite)
@ -706,7 +706,7 @@ namespace IRaCIS.Core.Application.Service
} }
} }
return await JointMedicalReviewDialog(dialog,i18N); return await JointMedicalReviewDialog(dialog, i18N);
@ -910,7 +910,7 @@ namespace IRaCIS.Core.Application.Service
[HttpPost] [HttpPost]
public async Task<GetIRMedicalFeedbackListOutDto> GetNextIRMedicalFeedback(GetNextIRMedicalFeedbackInDto inDto) public async Task<GetIRMedicalFeedbackListOutDto> GetNextIRMedicalFeedback(GetNextIRMedicalFeedbackInDto inDto)
{ {
var list = await GetIRMedicalFeedbackList(new GetIRMedicalFeedbackListInDto() var responseOutput = await GetIRMedicalFeedbackList(new GetIRMedicalFeedbackListInDto()
{ {
TrialId = inDto.TrialId, TrialId = inDto.TrialId,
TrialReadingCriterionId = inDto.TrialReadingCriterionId, TrialReadingCriterionId = inDto.TrialReadingCriterionId,
@ -919,6 +919,8 @@ namespace IRaCIS.Core.Application.Service
PageSize = 99999, PageSize = 99999,
}); });
var list = responseOutput.Data;
var index = list.CurrentPageData.ToList().FindIndex(x => x.Id == inDto.TaskMedicalReviewId); var index = list.CurrentPageData.ToList().FindIndex(x => x.Id == inDto.TaskMedicalReviewId);
var result = new GetIRMedicalFeedbackListOutDto() { }; var result = new GetIRMedicalFeedbackListOutDto() { };
@ -949,7 +951,7 @@ namespace IRaCIS.Core.Application.Service
/// <param name="inDto"></param> /// <param name="inDto"></param>
/// <returns></returns> /// <returns></returns>
[HttpPost] [HttpPost]
public async Task<PageOutput<GetIRMedicalFeedbackListOutDto>> GetIRMedicalFeedbackList(GetIRMedicalFeedbackListInDto inDto) public async Task<IResponseOutput<PageOutput<GetIRMedicalFeedbackListOutDto>>> GetIRMedicalFeedbackList(GetIRMedicalFeedbackListInDto inDto)
{ {
var taskMedicalReviewquery = _taskMedicalReviewRepository.Where(x => x.TrialId == inDto.TrialId).Include(x => x.VisitTask) var taskMedicalReviewquery = _taskMedicalReviewRepository.Where(x => x.TrialId == inDto.TrialId).Include(x => x.VisitTask)
.Where(x => x.VisitTask.DoctorUserId == _userInfo.UserRoleId) .Where(x => x.VisitTask.DoctorUserId == _userInfo.UserRoleId)
@ -1004,7 +1006,11 @@ namespace IRaCIS.Core.Application.Service
var result = await taskMedicalReviewquery.ToPagedListAsync(inDto, nameof(GetIRMedicalFeedbackListOutDto.AuditState)); var result = await taskMedicalReviewquery.ToPagedListAsync(inDto, nameof(GetIRMedicalFeedbackListOutDto.AuditState));
return result; var criterionInfo = await _taskMedicalReviewRepository.Where(t => t.Id == inDto.TrialReadingCriterionId)
.Select(t => new { t.VisitTask.TrialReadingCriterion.IsReadingTaskViewInOrder }).FirstNotNullAsync();
return ResponseOutput.Ok(result, criterionInfo);
} }
} }
} }