diff --git a/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs b/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs index ffb0f3643..d347e03a4 100644 --- a/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs +++ b/IRaCIS.Core.Application/Helper/ExcelExportHelper.cs @@ -15,6 +15,7 @@ using Newtonsoft.Json.Linq; using NPOI.HSSF.UserModel; using NPOI.XSSF.UserModel; using SkiaSharp; +using System.Collections; using System.IO; namespace IRaCIS.Core.Application.Service; @@ -51,21 +52,24 @@ public static class ExcelExportHelper var translateDataList = await _dictionaryService.GetBasicDataSelect(needTranslatePropertyList.Select(t => t.DicParentCode).Distinct().ToArray()); - var dic = (JsonConvert.DeserializeObject>(data.ToJsonNotIgnoreNull())).IfNullThrowException(); + var dic = data.ConvertToDictionary(); foreach (var key in dic.Keys) { //是数组 那么找到对应的属性 进行翻译 - if (dic[key].GetType().IsAssignableFrom(typeof(JArray))) + if (dic[key].GetType().GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IList<>))) { var newObjList = new List(); var no = 1; - foreach (var item in dic[key] as JArray) + foreach (var item in dic[key] as IList ) { - var itemDic = JsonConvert.DeserializeObject>(item.ToJsonNotIgnoreNull()); + //var itemDic = JsonConvert.DeserializeObject>(item.ToJsonNotIgnoreNull()); + + var itemDic = item.ConvertToDictionary(); + foreach (var needTranslateProperty in needTranslatePropertyList) @@ -73,7 +77,7 @@ public static class ExcelExportHelper //翻译的属性依赖其他属性 if (needTranslateProperty.IsTranslateDenpendOtherProperty) { - if (item[needTranslateProperty.DependPropertyName]?.ToString().ToLower() == needTranslateProperty.DependPropertyValueStr.ToLower()) + if (itemDic[needTranslateProperty.DependPropertyName]?.ToString().ToLower() == needTranslateProperty.DependPropertyValueStr.ToLower()) { var beforeValue = itemDic[needTranslateProperty.Name]?.ToString(); @@ -227,29 +231,30 @@ public static class ExcelExportHelper var translateDataList = await _dictionaryService.GetBasicDataSelect(needTranslatePropertyList.Select(t => t.DicParentCode).Distinct().ToArray()); - - var dic = (JsonConvert.DeserializeObject>(data.ToJsonNotIgnoreNull())).IfNullThrowException(); + var dic = data.ConvertToDictionary(); + //var dic = (JsonConvert.DeserializeObject>(data.ToJsonNotIgnoreNull())).IfNullThrowException(); foreach (var key in dic.Keys) { //是数组 那么找到对应的属性 进行翻译 - if (dic[key].GetType().IsAssignableFrom(typeof(JArray))) + if (dic[key].GetType().GetInterfaces().Any(i => i.IsGenericType && i.GetGenericTypeDefinition() == typeof(IList<>))) + //if (dic[key].GetType().IsAssignableFrom(typeof(JArray))) { var newObjList = new List(); var no = 1; - - foreach (var item in dic[key] as JArray) + foreach (var item in dic[key] as IList) + //foreach (var item in dic[key] as JArray) { - var itemDic = JsonConvert.DeserializeObject>(item.ToJsonNotIgnoreNull()); - + //var itemDic = JsonConvert.DeserializeObject>(item.ToJsonNotIgnoreNull()); + var itemDic = item.ConvertToDictionary(); foreach (var needTranslateProperty in needTranslatePropertyList) { //翻译的属性依赖其他属性 if (needTranslateProperty.IsTranslateDenpendOtherProperty) { - if (item[needTranslateProperty.DependPropertyName]?.ToString().ToLower() == needTranslateProperty.DependPropertyValueStr.ToLower()) + if (itemDic[needTranslateProperty.DependPropertyName]?.ToString().ToLower() == needTranslateProperty.DependPropertyValueStr.ToLower()) { var beforeValue = itemDic[needTranslateProperty.Name]?.ToString(); diff --git a/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs b/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs index 481420b17..fef95a463 100644 --- a/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs +++ b/IRaCIS.Core.Application/Triggers/VisitTaskIsFrontTaskNeedSignButNotSignTrigger.cs @@ -23,13 +23,13 @@ namespace IRaCIS.Core.Application.Triggers private readonly IRepository _readingTaskQuestionAnswerRepository; private readonly IRepository _subjectAdditionalEvaluationResultRepository; - + private readonly IRepository _readingJudgeInfoRepository; public VisitTaskIsFrontTaskNeedSignButNotSignTrigger( IRepository visitTaskRepository, IRepository trialReadingCriterionRepository, IRepository trialReadingQuestionRepository - , IRepository readingTaskQuestionAnswerRepository, IRepository subjectAdditionalEvaluationResultRepository) + , IRepository readingTaskQuestionAnswerRepository, IRepository subjectAdditionalEvaluationResultRepository, IRepository readingJudgeInfoRepository) { _trialReadingCriterionRepository = trialReadingCriterionRepository; @@ -38,6 +38,7 @@ namespace IRaCIS.Core.Application.Triggers _readingTaskQuestionAnswerRepository = readingTaskQuestionAnswerRepository; _subjectAdditionalEvaluationResultRepository = subjectAdditionalEvaluationResultRepository; + _readingJudgeInfoRepository = readingJudgeInfoRepository; } @@ -50,7 +51,7 @@ namespace IRaCIS.Core.Application.Triggers Expression> visitTaskLambda = x => x.TrialId == visitTask.TrialId && x.SubjectId == visitTask.SubjectId && x.TrialReadingCriterionId == visitTask.TrialReadingCriterionId; if (context.ChangeType == ChangeType.Added) { - + //判断是否需要临床数据签名 不需要 就不用维护 if (visitTask.IsNeedClinicalDataSign) { @@ -95,101 +96,112 @@ namespace IRaCIS.Core.Application.Triggers }); } - + } } + else if (context.ChangeType == ChangeType.Modified) + { + if (visitTask.ReadingCategory == ReadingCategory.Judge && (visitTask.TaskState == TaskState.Adbandon || visitTask.TaskState == TaskState.HaveReturned)) + { + var find = _readingJudgeInfoRepository.Where(t => t.JudgeTaskId == visitTask.Id).FirstOrDefault(); - + if (find != null) + { + var ids = new Guid[] { find.TaskIdOne, find.TaskIdTwo }; + await _visitTaskRepository.BatchUpdateNoTrackingAsync(t => ids.Contains(t.Id), u => new VisitTask() { JudgeResultTaskId = null }); + } + } + } #region 附加评估 暂时废弃 -// //从未签名状态 改为签名状态时 判断是否进行了附加评估,将附加评估的结果冗余 -// if (context.ChangeType == ChangeType.Modified && visitTask.ReadingTaskState == ReadingTaskState.HaveSigned && context.UnmodifiedEntity.ReadingTaskState != ReadingTaskState.HaveSigned) -// { + // //从未签名状态 改为签名状态时 判断是否进行了附加评估,将附加评估的结果冗余 + // if (context.ChangeType == ChangeType.Modified && visitTask.ReadingTaskState == ReadingTaskState.HaveSigned && context.UnmodifiedEntity.ReadingTaskState != ReadingTaskState.HaveSigned) + // { -// var criterion = _trialReadingCriterionRepository.Where(t => t.Id == visitTask.TrialReadingCriterionId).FirstOrDefault(); + // var criterion = _trialReadingCriterionRepository.Where(t => t.Id == visitTask.TrialReadingCriterionId).FirstOrDefault(); -// //如果是附加评估 -// if (criterion.IsAdditionalAssessment) -// { + // //如果是附加评估 + // if (criterion.IsAdditionalAssessment) + // { -// if (visitTask.ReadingCategory == ReadingCategory.Visit) -// { + // if (visitTask.ReadingCategory == ReadingCategory.Visit) + // { -// switch (criterion.CriterionType) -// { -// case CriterionType.RECIST1Point1: -// var isbaseLine = _visitTaskRepository.Where(t => t.Id == visitTask.Id).Select(t => t.SourceSubjectVisit.IsBaseLine).FirstOrDefault(); + // switch (criterion.CriterionType) + // { + // case CriterionType.RECIST1Point1: + // var isbaseLine = _visitTaskRepository.Where(t => t.Id == visitTask.Id).Select(t => t.SourceSubjectVisit.IsBaseLine).FirstOrDefault(); -// if (isbaseLine) -// { -// var currentTaskAdditionarlAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == visitTask.Id && -// t.ReadingQuestionTrial.IsAdditional == true && t.ReadingQuestionTrial.Type != "group" -// ).Include(t => t.ReadingQuestionTrial).FirstOrDefaultAsync(); + // if (isbaseLine) + // { + // var currentTaskAdditionarlAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == visitTask.Id && + // t.ReadingQuestionTrial.IsAdditional == true && t.ReadingQuestionTrial.Type != "group" + // ).Include(t => t.ReadingQuestionTrial).FirstOrDefaultAsync(); -// //双重阅片完成了 -// if (criterion.ReadingType == ReadingMethod.Double && -//(_visitTaskRepository.Where(t => t.SubjectId == visitTask.SubjectId && t.TaskName == visitTask.TaskName && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned).Count() == 2) -// ) -// { + // //双重阅片完成了 + // if (criterion.ReadingType == ReadingMethod.Double && + //(_visitTaskRepository.Where(t => t.SubjectId == visitTask.SubjectId && t.TaskName == visitTask.TaskName && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned).Count() == 2) + // ) + // { -// var otherTaskId = await _visitTaskRepository.Where(t => t.SubjectId == visitTask.SubjectId && t.TaskName == visitTask.TaskName && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.Id != visitTask.Id) -// .Select(t => t.Id).FirstOrDefaultAsync(); + // var otherTaskId = await _visitTaskRepository.Where(t => t.SubjectId == visitTask.SubjectId && t.TaskName == visitTask.TaskName && t.TaskState == TaskState.Effect && t.ReadingTaskState == ReadingTaskState.HaveSigned && t.Id != visitTask.Id) + // .Select(t => t.Id).FirstOrDefaultAsync(); -// var otherTaskAdditionarlAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == otherTaskId && -// t.ReadingQuestionTrial.IsAdditional == true && t.ReadingQuestionTrial.Type != "group" -// ).Include(t => t.ReadingQuestionTrial).FirstOrDefaultAsync(); + // var otherTaskAdditionarlAnswer = await _readingTaskQuestionAnswerRepository.Where(t => t.VisitTaskId == otherTaskId && + // t.ReadingQuestionTrial.IsAdditional == true && t.ReadingQuestionTrial.Type != "group" + // ).Include(t => t.ReadingQuestionTrial).FirstOrDefaultAsync(); -// await _subjectAdditionalEvaluationResultRepository.AddAsync(new SubjectAdditionalEvaluationResult() -// { -// TrialReadingCriterionId = visitTask.TrialReadingCriterionId, -// IsFinalResult = true, -// SubjectId = visitTask.SubjectId, -// TrialReadingQuestionId = currentTaskAdditionarlAnswer.ReadingQuestionTrialId, -// FinalAnswer = currentTaskAdditionarlAnswer.Answer, -// FinalTranslateDictionaryCode = currentTaskAdditionarlAnswer.ReadingQuestionTrial.DictionaryCode, + // await _subjectAdditionalEvaluationResultRepository.AddAsync(new SubjectAdditionalEvaluationResult() + // { + // TrialReadingCriterionId = visitTask.TrialReadingCriterionId, + // IsFinalResult = true, + // SubjectId = visitTask.SubjectId, + // TrialReadingQuestionId = currentTaskAdditionarlAnswer.ReadingQuestionTrialId, + // FinalAnswer = currentTaskAdditionarlAnswer.Answer, + // FinalTranslateDictionaryCode = currentTaskAdditionarlAnswer.ReadingQuestionTrial.DictionaryCode, -// }); + // }); -// } -// if (criterion.ReadingType == ReadingMethod.Single) -// { + // } + // if (criterion.ReadingType == ReadingMethod.Single) + // { -// await _subjectAdditionalEvaluationResultRepository.AddAsync(new SubjectAdditionalEvaluationResult() -// { -// TrialReadingCriterionId = visitTask.TrialReadingCriterionId, -// IsFinalResult = true, -// SubjectId = visitTask.SubjectId, -// TrialReadingQuestionId = currentTaskAdditionarlAnswer.ReadingQuestionTrialId, -// FinalAnswer = currentTaskAdditionarlAnswer.Answer, -// FinalTranslateDictionaryCode = currentTaskAdditionarlAnswer.ReadingQuestionTrial.DictionaryCode, + // await _subjectAdditionalEvaluationResultRepository.AddAsync(new SubjectAdditionalEvaluationResult() + // { + // TrialReadingCriterionId = visitTask.TrialReadingCriterionId, + // IsFinalResult = true, + // SubjectId = visitTask.SubjectId, + // TrialReadingQuestionId = currentTaskAdditionarlAnswer.ReadingQuestionTrialId, + // FinalAnswer = currentTaskAdditionarlAnswer.Answer, + // FinalTranslateDictionaryCode = currentTaskAdditionarlAnswer.ReadingQuestionTrial.DictionaryCode, -// }); + // }); -// } + // } -// } + // } -// break; -// default: -// break; -// } + // break; + // default: + // break; + // } -// } + // } @@ -198,8 +210,8 @@ namespace IRaCIS.Core.Application.Triggers -// } -// } + // } + // } #endregion diff --git a/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs b/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs index adfc82153..c861068de 100644 --- a/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs +++ b/IRaCIS.Core.Infrastructure/_IRaCIS/ObjectExtension.cs @@ -1,5 +1,7 @@ using Newtonsoft.Json; using System; +using System.Collections.Generic; +using System.Reflection; namespace IRaCIS.Core.Infrastructure.Extention { @@ -38,7 +40,30 @@ namespace IRaCIS.Core.Infrastructure.Extention public static string ToJsonNotIgnoreNull(this object obj) { - return JsonConvert.SerializeObject(obj, new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd HH:mm:ss", ReferenceLoopHandling = ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Include }); + return JsonConvert.SerializeObject(obj, new JsonSerializerSettings { DateFormatString = "yyyy-MM-dd HH:mm:ss", Formatting = Formatting.Indented, ReferenceLoopHandling = ReferenceLoopHandling.Ignore, NullValueHandling = NullValueHandling.Include }); } - } + + public static Dictionary ConvertToDictionary(this object obj) + { + if (obj == null) + { + throw new ArgumentNullException(nameof(obj)); + } + + Type type = obj.GetType(); + PropertyInfo[] properties = type.GetProperties(); + + Dictionary dictionary = new Dictionary(); + + foreach (PropertyInfo property in properties) + { + string propertyName = property.Name; + object propertyValue = property.GetValue(obj); + + dictionary.Add(propertyName, propertyValue); + } + + return dictionary; + } + } }