3798 lines
		
	
	
		
			152 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			3798 lines
		
	
	
		
			152 KiB
		
	
	
	
		
			C#
		
	
	
| using IRaCIS.Core.Domain.Models;
 | ||
| using IRaCIS.Core.Domain.Share;
 | ||
| using IRaCIS.Core.Infrastructure;
 | ||
| using IRaCIS.Core.Infrastructure.Extention;
 | ||
| using MassTransit;
 | ||
| using Microsoft.EntityFrameworkCore.ChangeTracking;
 | ||
| using Microsoft.EntityFrameworkCore.ChangeTracking.Internal;
 | ||
| using Newtonsoft.Json;
 | ||
| 
 | ||
| 
 | ||
| namespace IRaCIS.Core.Infra.EFCore.Common
 | ||
| {
 | ||
|     public interface IAuditingData
 | ||
|     {
 | ||
| 
 | ||
|         Task InsertAddEntitys(List<EntityEntry> entitys);
 | ||
|     }
 | ||
|     public static class AuditOpt
 | ||
|     {
 | ||
|         public static readonly string Add = "Add";
 | ||
|         public static readonly string Update = "Update";
 | ||
|         public static readonly string Deleted = "Deleted";
 | ||
|     }
 | ||
| 
 | ||
|     /// <summary>
 | ||
|     /// 添加稽查稽查数据
 | ||
|     /// </summary>
 | ||
|     public class AuditingData : IAuditingData
 | ||
|     {
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 数据库对象o
 | ||
|         /// </summary>
 | ||
|         public IRaCISDBContext _dbContext { get; set; }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 用户信息
 | ||
|         /// </summary>
 | ||
|         public IUserInfo _userInfo { get; set; }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 构造方法
 | ||
|         /// </summary>
 | ||
|         /// <param name="dbContext"></param>
 | ||
|         /// <param name="userInfo"></param>
 | ||
|         public AuditingData(IRaCISDBContext dbContext, IUserInfo userInfo)
 | ||
|         {
 | ||
|             _dbContext = dbContext;
 | ||
|             _userInfo = userInfo;
 | ||
|             _userInfo.BatchId = _userInfo.BatchId == null ? NewId.NextGuid() : _userInfo.BatchId;
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 特殊删除
 | ||
|         /// </summary>
 | ||
|         private List<Type> NodeleteTableTypes
 | ||
|         {
 | ||
|             get
 | ||
|             {
 | ||
|                 return new List<Type>()
 | ||
|                 {
 | ||
|                    typeof(TrialUser),
 | ||
|                    typeof(TrialSiteSurvey),
 | ||
|                    typeof(TrialSiteUser),
 | ||
|                    typeof(VisitStage),
 | ||
|                    typeof(TrialSite)
 | ||
|                 };
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         // 修改为删除
 | ||
|         private List<Type> UpdateIsDelete
 | ||
|         {
 | ||
|             get
 | ||
|             {
 | ||
|                 return new List<Type>()
 | ||
|                 {
 | ||
|                    typeof(TrialDocument)
 | ||
|                 };
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         public string GetEntityAuditOpt(EntityEntry entityEntry)
 | ||
|         {
 | ||
|             if (entityEntry.State == EntityState.Added)
 | ||
|             {
 | ||
|                 return AuditOpt.Add;
 | ||
|             }
 | ||
|             else if (
 | ||
|                UpdateIsDelete.Contains(entityEntry.Entity.GetType())
 | ||
|                 && entityEntry.State == EntityState.Modified
 | ||
|                 && (bool)entityEntry.Entity.GetType().GetProperty(nameof(ISoftDelete.IsDeleted)).GetValue(entityEntry.Entity)
 | ||
| 
 | ||
|                )
 | ||
|             {
 | ||
|                 return AuditOpt.Deleted;
 | ||
|             }
 | ||
| 
 | ||
|             else if (entityEntry.State == EntityState.Deleted ||
 | ||
|                       (entityEntry.State == EntityState.Modified
 | ||
|                        && typeof(ISoftDelete).IsAssignableFrom(entityEntry.Entity.GetType())
 | ||
|                        && (bool)entityEntry.Entity.GetType().GetProperty(nameof(ISoftDelete.IsDeleted)).GetValue(entityEntry.Entity)
 | ||
|                        && entityEntry.State == EntityState.Modified
 | ||
|                        && !NodeleteTableTypes.Contains(entityEntry.Entity.GetType())
 | ||
|                        )
 | ||
|                      )
 | ||
|             {
 | ||
|                 return AuditOpt.Deleted;
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 return AuditOpt.Update;
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 插入Add的实体
 | ||
|         /// </summary>
 | ||
|         /// <param name="entitys"></param>
 | ||
|         public async Task InsertAddEntitys(List<EntityEntry> entitys)
 | ||
|         {
 | ||
| 
 | ||
|             // 项目
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(Trial)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as Trial;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 //阅片标准
 | ||
|                 var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => t.TrialId == entity.Id && t.IsConfirm).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync();
 | ||
| 
 | ||
|                 var memoryCriterionNameList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingQuestionCriterionTrial)).Select(t => t.Entity as ReadingQuestionCriterionTrial)
 | ||
|                     .Where(t => t.TrialId == entity.Id && t.IsConfirm).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToList();
 | ||
| 
 | ||
|                 //临床数据配置
 | ||
|                 var clinicalDataSetNameList = await _dbContext.ClinicalDataTrialSet.Where(t => t.TrialId == entity.Id && t.IsConfirm).Select(t => _userInfo.IsEn_Us ? t.ClinicalDataSetEnName : t.ClinicalDataSetName).ToListAsync();
 | ||
| 
 | ||
|                 var memoryClinicalDataSetNameList = entitys.Where(x => x.Entity.GetType() == typeof(ClinicalDataTrialSet)).Select(t => t.Entity as ClinicalDataTrialSet)
 | ||
|                     .Where(t => t.TrialId == entity.Id && t.IsConfirm).Select(t => _userInfo.IsEn_Us ? t.ClinicalDataSetEnName : t.ClinicalDataSetName).ToList();
 | ||
| 
 | ||
| 
 | ||
|                 Guid id = entity.Id;
 | ||
|                 var oldentity = await _dbContext.Trial.Where(x => x.Id == id).Select(t => new
 | ||
|                 {
 | ||
|                     t.IsTrialBasicLogicConfirmed,
 | ||
|                     t.IsTrialProcessConfirmed,
 | ||
|                     t.IsTrialUrgentConfirmed,
 | ||
|                     t.IsConfigureEmail,
 | ||
|                     t.IsTrialPACSConfirmed,
 | ||
|                 }).FirstOrDefaultAsync();
 | ||
|                 switch (_userInfo.RequestUrl)
 | ||
|                 {
 | ||
|                     case "configTrialBasicInfo/ConfigTrialBasicInfoConfirm":
 | ||
|                         extraIdentification = $"/{oldentity.IsTrialBasicLogicConfirmed.ToString()}";
 | ||
|                         break;
 | ||
|                     case "configTrialBasicInfo/ConfigTrialProcessInfoConfirm":
 | ||
|                         extraIdentification = $"/{oldentity.IsTrialProcessConfirmed.ToString()}";
 | ||
|                         break;
 | ||
| 
 | ||
|                     case "configTrialBasicInfo/ConfigTrialUrgentInfoConfirm":
 | ||
|                         extraIdentification = $"/{oldentity.IsTrialUrgentConfirmed.ToString()}";
 | ||
|                         break;
 | ||
|                     case "configTrialBasicInfo/ConfigTrialPACSInfoConfirm":
 | ||
|                         extraIdentification = $"/{oldentity.IsTrialPACSConfirmed.ToString()}";
 | ||
|                         break;
 | ||
| 
 | ||
|                     case "TrialEmailNoticeConfig/setTrialEmail":
 | ||
| 
 | ||
|                         extraIdentification = oldentity.IsConfigureEmail ? "/EmailUpdate" : "/EmailSave";
 | ||
|                         break;
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<Trial>(item.Entity as Trial, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     TrialId = x.Id,
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     //TrialDicList = string.Join(",", trialDics)
 | ||
| 
 | ||
|                     CriterionNames = string.Join(",", criterionNameList.Union(memoryCriterionNameList).Distinct()),
 | ||
| 
 | ||
|                     ClinicalDataSetNames = string.Join(",", clinicalDataSetNameList.Union(memoryClinicalDataSetNameList).Distinct().OrderBy(t => t)),
 | ||
| 
 | ||
| 
 | ||
|                 }); ;
 | ||
|             }
 | ||
| 
 | ||
|             #region 已修改
 | ||
| 
 | ||
|             #region 阅片单元配置
 | ||
| 
 | ||
|             //系统阅片标准
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingQuestionCriterionSystem)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingQuestionCriterionSystem;
 | ||
| 
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 if (_dbContext.Entry(entity).Property(t => t.IsMustGlobalReading).IsModified == true)
 | ||
|                 {
 | ||
|                     extraIdentification = $"/IsGlobalReading";
 | ||
|                 }
 | ||
| 
 | ||
|                 if (_dbContext.Entry(entity).Property(t => t.IsOncologyReading).IsModified == true)
 | ||
|                 {
 | ||
|                     extraIdentification = $"/IsOncologyReading";
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<ReadingQuestionCriterionSystem>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = /*type == AuditOpt.Update ? true :*/ false,
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
|             //项目阅片标准
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingQuestionCriterionTrial)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingQuestionCriterionTrial;
 | ||
| 
 | ||
|                 var isDistinctionInterface = false;
 | ||
| 
 | ||
|                 //设置项目配置 肿瘤学配置 和阅片标准配置
 | ||
|                 if (_userInfo.RequestUrl == "TrialConfig/setOncologySet"
 | ||
| 
 | ||
|                     //现在废弃 没用
 | ||
|                     || _userInfo.RequestUrl == "TrialConfig/setTrialReadingCriterion"
 | ||
| 
 | ||
|                     //项目流程确认
 | ||
|                     || _userInfo.RequestUrl == "configTrialBasicInfo/ConfigTrialProcessInfoConfirm"
 | ||
| 
 | ||
|                      //确认医学审核问题
 | ||
|                      || _userInfo.RequestUrl == "ReadingMedicineQuestion/ConfirmReadingMedicineQuestion"
 | ||
| 
 | ||
|                    //阅片单元 保存阅片规则
 | ||
|                    || _userInfo.RequestUrl == "TrialConfig/setCriterionReadingInfo"
 | ||
| 
 | ||
|                    || _userInfo.RequestUrl == "configTrialBasicInfo/TrialReadingInfoSign")
 | ||
|                 {
 | ||
|                     isDistinctionInterface = true;
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 //同步的数据 后面加"/Auto"  因为同步的地方可能会改 所以取反
 | ||
|                 var extraIdentification = string.Empty;
 | ||
|                 if (_userInfo.RequestUrl != "ReadingQuestion/addOrUpdateReadingQuestionCriterionTrial" && type == AuditOpt.Add)
 | ||
|                 {
 | ||
|                     extraIdentification = "/Auto";
 | ||
|                 }
 | ||
| 
 | ||
|                 //保存肿瘤学配置哪里 强行要将 评估结果(中间字典表的多条数据)存到标准稽查上   
 | ||
| 
 | ||
|                 var dicIdList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingSystemCriterionDictionary)).Select(t => t.Entity as ReadingSystemCriterionDictionary).Where(t => t.CriterionId == entity.Id).Select(t => t.DictionaryId).ToList();
 | ||
| 
 | ||
|                 var dicValueList = new List<string>();
 | ||
|                 if (dicIdList.Count() == 0)
 | ||
|                 {
 | ||
|                     dicValueList = await _dbContext.ReadingSystemCriterionDictionary.Where(t => t.CriterionId == entity.Id).Select(t => t.Dictionary.Value).ToListAsync();
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     dicValueList = await _dbContext.Dictionary.Where(t => dicIdList.Contains(t.Id)).Select(t => t.Value).ToListAsync();
 | ||
|                 }
 | ||
| 
 | ||
|                 // 附加评估
 | ||
| 
 | ||
|                 var addtionalAssesementList = await _dbContext.TrialCriterionAdditionalAssessmentType.Where(t => t.TrialReadingCriterionId == entity.Id && t.IsSelected != null)
 | ||
|                     .Select(t => new { t.AdditionalAssessmentType, t.IsSelected }).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
|                 var oncologyAssessIdsStr = string.Empty;
 | ||
|                 var allList = new List<ReadingTrialCriterionDictionary>();
 | ||
| 
 | ||
|                 if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingTrialCriterionDictionary)))
 | ||
|                 {
 | ||
|                     allList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTrialCriterionDictionary))
 | ||
|                        .Select(t => t.Entity as ReadingTrialCriterionDictionary).ToList().Where(x =>
 | ||
|                        x.CriterionId == entity.Id &&
 | ||
|                        x.ParentCode == ReadingCommon.CriterionDictionary.OncologyAssess).ToList();
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     allList = await _dbContext.ReadingTrialCriterionDictionary.Where(x =>
 | ||
|                         x.CriterionId == entity.Id &&
 | ||
|                         x.ParentCode == ReadingCommon.CriterionDictionary.OncologyAssess).ToListAsync();
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 //查询出字典的Value  ValueCN  Des 保存
 | ||
|                 var diclistOncologyAssess = allList.Select(t => t.DictionaryId).ToList();
 | ||
| 
 | ||
|                 var selectList = await _dbContext.Dictionary.Where(x => diclistOncologyAssess.Contains(x.Id)).Select(t => t.ValueCN).ToListAsync();
 | ||
| 
 | ||
|                 oncologyAssessIdsStr = string.Join(",", selectList);
 | ||
| 
 | ||
|                 await InsertInspection<ReadingQuestionCriterionTrial>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = isDistinctionInterface,
 | ||
| 
 | ||
|                     TrialReadingCriterionId = entity.Id,
 | ||
| 
 | ||
|                     ObjectRelationParentId = x.TrialId,
 | ||
| 
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
| 
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     OncologyAssessIdsStr = oncologyAssessIdsStr,
 | ||
| 
 | ||
|                     EvaluationResultTypes = dicValueList.Count > 0 ? string.Join(",", dicValueList) : string.Empty,
 | ||
|                     AdditionalAssessmentTypeList = addtionalAssesementList
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             // PACS直连
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialSiteDicomAE)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialSiteDicomAE;
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<TrialSiteDicomAE>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = entity.TrialSiteId,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             // PACS直连
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialDicomAE)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialDicomAE;
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<TrialDicomAE>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             //系统标准问题
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingQuestionSystem)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingQuestionSystem;
 | ||
| 
 | ||
| 
 | ||
|                 int? parentQuestionShowOrder = null;
 | ||
|                 int? relavantQuestionShowOrder = null;
 | ||
| 
 | ||
|                 if (entity.ParentId != null)
 | ||
|                 {
 | ||
|                     parentQuestionShowOrder = await _dbContext.ReadingQuestionSystem.Where(t => t.Id == entity.ParentId).Select(t => t.ShowOrder).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 }
 | ||
|                 if (entity.RelevanceId != null)
 | ||
|                 {
 | ||
|                     relavantQuestionShowOrder = await _dbContext.ReadingQuestionSystem.Where(t => t.Id == entity.RelevanceId).Select(t => t.ShowOrder).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<ReadingQuestionSystem>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false
 | ||
| 
 | ||
|                 }, new { ParentQuestionShowOrder = parentQuestionShowOrder, RelavantQuestionShowOrder = relavantQuestionShowOrder });
 | ||
|             }
 | ||
|             //项目标准问题
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingQuestionTrial)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingQuestionTrial;
 | ||
| 
 | ||
| 
 | ||
|                 var isDistinctionInterface = false;
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 //同步的数据 后面加"/Auto"  因为同步的地方可能会改 所以取反
 | ||
|                 if (_userInfo.RequestUrl != "ReadingQuestion/addOrUpdateReadingQuestionTrial" && type == AuditOpt.Add)
 | ||
|                 {
 | ||
|                     extraIdentification = "/Auto";
 | ||
|                 }
 | ||
| 
 | ||
|                 //重置仲裁规则
 | ||
| 
 | ||
|                 var cloneEntity = entity.Clone();
 | ||
| 
 | ||
|                 if (_userInfo.RequestUrl == "ReadingImageTask/setTrialCriterionJudgeQuestionAnswerGroup")
 | ||
|                 {
 | ||
|                     isDistinctionInterface = true;
 | ||
| 
 | ||
|                     if (entity.JudgeType == JudgeTypeEnum.None)
 | ||
|                     {
 | ||
|                         extraIdentification = "/Reset";
 | ||
|                     }
 | ||
| 
 | ||
|                     //翻译  可能自己填写的 也有可能是从字典中获取的                 
 | ||
|                     if (entity.QuestionGenre == TableQuestionType.Dictionary && !string.IsNullOrWhiteSpace(entity.DictionaryCode))
 | ||
|                     {
 | ||
|                         var translateList = _dbContext.Dictionary.Where(t => t.Code == entity.DictionaryCode.Trim()).SelectMany(t => t.ChildList).Select(t => new { t.Code, t.Value, t.ValueCN }).ToList();
 | ||
| 
 | ||
|                         foreach (var translateItem in translateList)
 | ||
|                         {
 | ||
|                             cloneEntity.AnswerCombination = cloneEntity.AnswerCombination.Replace($"\"{translateItem.Code}\"", $"\"{translateItem.Value}\"");
 | ||
| 
 | ||
|                             cloneEntity.AnswerGroup = cloneEntity.AnswerGroup.Replace($"|{translateItem.Code}|", $"|{translateItem.Value}|");
 | ||
|                         }
 | ||
|                     }
 | ||
|                 }
 | ||
| 
 | ||
|                 int? parentQuestionShowOrder = null;
 | ||
|                 int? relavantQuestionShowOrder = null;
 | ||
| 
 | ||
|                 if (entity.ParentId != null)
 | ||
|                 {
 | ||
|                     parentQuestionShowOrder = await _dbContext.ReadingQuestionSystem.Where(t => t.Id == entity.ParentId).Select(t => t.ShowOrder).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 }
 | ||
|                 if (entity.RelevanceId != null)
 | ||
|                 {
 | ||
|                     relavantQuestionShowOrder = await _dbContext.ReadingQuestionSystem.Where(t => t.Id == entity.RelevanceId).Select(t => t.ShowOrder).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<ReadingQuestionTrial>(cloneEntity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = isDistinctionInterface,
 | ||
| 
 | ||
|                     TrialReadingCriterionId = entity.ReadingQuestionCriterionTrialId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = x.TrialId,
 | ||
| 
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
| 
 | ||
|                 }, new { ParentQuestionShowOrder = parentQuestionShowOrder, RelavantQuestionShowOrder = relavantQuestionShowOrder });
 | ||
|             }
 | ||
| 
 | ||
|             //系统标准表格问题
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionSystem)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingTableQuestionSystem;
 | ||
| 
 | ||
|                 int? dependQuestionShowOrder = null;
 | ||
|                 int? parentQuestionShowOrder = null;
 | ||
|                 int? relavantQuestionShowOrder = null;
 | ||
| 
 | ||
|                 if (entity.ParentId != null)
 | ||
|                 {
 | ||
|                     parentQuestionShowOrder = await _dbContext.ReadingQuestionSystem.Where(t => t.Id == entity.ParentId).Select(t => t.ShowOrder).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 }
 | ||
|                 if (entity.RelevanceId != null)
 | ||
|                 {
 | ||
|                     relavantQuestionShowOrder = await _dbContext.ReadingQuestionSystem.Where(t => t.Id == entity.RelevanceId).Select(t => t.ShowOrder).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 }
 | ||
|                 if (entity.DependParentId != null)
 | ||
|                 {
 | ||
|                     dependQuestionShowOrder = await _dbContext.ReadingQuestionSystem.Where(t => t.Id == entity.DependParentId).Select(t => t.ShowOrder).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<ReadingTableQuestionSystem>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false
 | ||
| 
 | ||
|                 }, new { ParentQuestionShowOrder = parentQuestionShowOrder, RelavantQuestionShowOrder = relavantQuestionShowOrder, DependQuestionShowOrder = dependQuestionShowOrder });
 | ||
|             }
 | ||
|             //项目标准表格问题
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionTrial)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingTableQuestionTrial;
 | ||
| 
 | ||
|                 //同步的数据 后面加"/Auto"  因为同步的地方可能会改 所以取反
 | ||
|                 var extraIdentification = string.Empty;
 | ||
|                 if (_userInfo.RequestUrl != "ReadingQuestion/addOrUpdateReadingTableQuestionTrial" && type == AuditOpt.Add)
 | ||
|                 {
 | ||
|                     extraIdentification = "/Auto";
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 int? dependQuestionShowOrder = null;
 | ||
|                 int? parentQuestionShowOrder = null;
 | ||
|                 int? relavantQuestionShowOrder = null;
 | ||
| 
 | ||
|                 if (entity.ParentId != null)
 | ||
|                 {
 | ||
|                     parentQuestionShowOrder = await _dbContext.ReadingQuestionSystem.Where(t => t.Id == entity.ParentId).Select(t => t.ShowOrder).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 }
 | ||
|                 if (entity.RelevanceId != null)
 | ||
|                 {
 | ||
|                     relavantQuestionShowOrder = await _dbContext.ReadingQuestionSystem.Where(t => t.Id == entity.RelevanceId).Select(t => t.ShowOrder).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 }
 | ||
|                 if (entity.DependParentId != null)
 | ||
|                 {
 | ||
|                     dependQuestionShowOrder = await _dbContext.ReadingQuestionSystem.Where(t => t.Id == entity.DependParentId).Select(t => t.ShowOrder).FirstOrDefaultAsync();
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<ReadingTableQuestionTrial>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     TrialId = x.TrialId,
 | ||
| 
 | ||
|                     TrialReadingCriterionId = entity.TrialCriterionId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = x.TrialId,
 | ||
| 
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
| 
 | ||
|                 }, new { ParentQuestionShowOrder = parentQuestionShowOrder, RelavantQuestionShowOrder = relavantQuestionShowOrder, DependQuestionShowOrder = dependQuestionShowOrder });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             //系统器官
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(OrganInfo)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as OrganInfo;
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<OrganInfo>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.SystemCriterionId
 | ||
| 
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             //项目器官
 | ||
| 
 | ||
|             if (entitys.Any(x => x.Entity.GetType() == typeof(OrganTrialInfo)))
 | ||
|             {
 | ||
| 
 | ||
|                 var organTrialEntityEnrtyList = entitys.Where(x => x.Entity.GetType() == typeof(OrganTrialInfo));
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 //同步添加
 | ||
|                 if (_userInfo.RequestUrl != "OrganInfo/batchAddTrialOrgan" && organTrialEntityEnrtyList.Any(t => GetEntityAuditOpt(t) == AuditOpt.Add))
 | ||
|                 {
 | ||
|                     extraIdentification = "/Auto";
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                     var list = organTrialEntityEnrtyList.Select(t => t.Entity as OrganTrialInfo);
 | ||
| 
 | ||
|                     var organIdList = list.Select(t => t.OrganInfoId).ToList();
 | ||
| 
 | ||
|                     var organList = await _dbContext.OrganInfo.Where(x => organIdList.Contains(x.Id)).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
|                     var firstEntity = list.FirstOrDefault();
 | ||
| 
 | ||
|                     var cloneEntity = firstEntity.Clone();
 | ||
| 
 | ||
|                     //保证Id 唯一
 | ||
|                     cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.TrialId.ToString(), firstEntity.TrialCriterionId.ToString());
 | ||
| 
 | ||
|                     await InsertInspection<OrganTrialInfo>(cloneEntity, AuditOpt.Add, x => new InspectionConvertDTO()
 | ||
|                     {
 | ||
|                         IsDistinctionInterface = false,
 | ||
| 
 | ||
|                         TrialReadingCriterionId = cloneEntity.TrialCriterionId,
 | ||
| 
 | ||
|                         ObjectRelationParentId = cloneEntity.TrialCriterionId,
 | ||
| 
 | ||
|                         ObjectRelationParentId2 = cloneEntity.OrganInfoId,
 | ||
| 
 | ||
|                         ExtraIndentification = extraIdentification
 | ||
| 
 | ||
|                     }, new
 | ||
|                     {
 | ||
|                         QuestionAnswerList = list.Join(organList, t => t.OrganInfoId, u => u.Id, (t, u) => u).OrderBy(t => t.ShowOrder).ToList(),
 | ||
|                     });
 | ||
| 
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     //手动操作
 | ||
|                     foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(OrganTrialInfo)))
 | ||
|                     {
 | ||
|                         var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                         var entity = item.Entity as OrganTrialInfo;
 | ||
| 
 | ||
|                         await InsertInspection<OrganTrialInfo>(entity, type, x => new InspectionConvertDTO()
 | ||
|                         {
 | ||
|                             IsDistinctionInterface = false,
 | ||
| 
 | ||
|                             TrialReadingCriterionId = entity.TrialCriterionId,
 | ||
| 
 | ||
|                             ObjectRelationParentId = entity.TrialCriterionId,
 | ||
| 
 | ||
|                             ObjectRelationParentId2 = entity.OrganInfoId,
 | ||
| 
 | ||
|                             ExtraIndentification = extraIdentification
 | ||
| 
 | ||
|                         });
 | ||
|                     }
 | ||
|                 }
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             // 项目  系统公用表
 | ||
|             //病灶管理  区分项目 还是系统的
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(CriterionNidusSystem)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as CriterionNidusSystem;
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<CriterionNidusSystem>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.CriterionId,
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(CriterionNidusTrial)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as CriterionNidusTrial;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 if (_userInfo.RequestUrl != "OrganInfo/addOrUpdateCriterionNidus" && type == AuditOpt.Add)
 | ||
|                 {
 | ||
|                     extraIdentification = "/Auto";
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<CriterionNidusTrial>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.CriterionId,
 | ||
| 
 | ||
|                     TrialReadingCriterionId = entity.CriterionId,
 | ||
| 
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
| 
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             //疗效评估
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TumorAssessment_RECIST1Point1)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TumorAssessment_RECIST1Point1;
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<TumorAssessment_RECIST1Point1>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     //ObjectRelationParentId = entity.CriterionId
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             // 项目  系统公用表
 | ||
|             //配置标准 病灶类型  自动计算标识  "LesionType", "QuestionType"
 | ||
|             if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingSystemCriterionDictionary)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = AuditOpt.Add;
 | ||
| 
 | ||
|                 var allList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingSystemCriterionDictionary)).Select(t => t.Entity as ReadingSystemCriterionDictionary).ToList();
 | ||
| 
 | ||
|                 //查询出字典的Value  ValueCN  Des 保存
 | ||
|                 var dicIdList = allList.Select(t => t.DictionaryId).ToList();
 | ||
| 
 | ||
|                 var selectList = await _dbContext.Dictionary.Where(x => dicIdList.Contains(x.Id)).Select(t => new { t.Id, t.Value, t.ValueCN, t.Description, t.ShowOrder }).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
|                 foreach (var list in allList.GroupBy(t => t.ParentCode))
 | ||
|                 {
 | ||
| 
 | ||
|                     var firstEntity = list.First();
 | ||
|                     var cloneEntity = list.First().Clone();
 | ||
| 
 | ||
| 
 | ||
|                     //保证Id 唯一
 | ||
|                     cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.CriterionId.ToString(), firstEntity.ParentCode.ToString());
 | ||
| 
 | ||
| 
 | ||
|                     var extraIdentification = string.Empty;
 | ||
| 
 | ||
| 
 | ||
|                     extraIdentification = $"/{cloneEntity.ParentCode}";
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                     await InsertInspection<ReadingSystemCriterionDictionary>(cloneEntity, type, x => new InspectionConvertDTO()
 | ||
|                     {
 | ||
| 
 | ||
|                         ObjectRelationParentId = x.CriterionId,
 | ||
| 
 | ||
|                         TrialReadingCriterionId = x.IsSystemCriterion == false ? x.CriterionId : null,
 | ||
| 
 | ||
|                         //不显示区分接口   通过是否是系统字典  以及字典Code 区分
 | ||
|                         IsDistinctionInterface = false,
 | ||
|                         ExtraIndentification = extraIdentification
 | ||
| 
 | ||
|                     },
 | ||
|                         new
 | ||
|                         {
 | ||
|                             SelectList = selectList.Join(list, t => t.Id, u => u.DictionaryId, (t, u) =>
 | ||
|                                                         new
 | ||
|                                                         {
 | ||
|                                                             Value = t.Value,
 | ||
|                                                             t.ValueCN,
 | ||
|                                                             t.Description,
 | ||
|                                                             t.ShowOrder,
 | ||
|                                                             u.IsBaseLineUse,
 | ||
|                                                             u.IsFollowVisitUse
 | ||
|                                                         }
 | ||
|                                                         ).OrderBy(t => t.ShowOrder).ToList()
 | ||
|                         });
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingTrialCriterionDictionary)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = AuditOpt.Add;
 | ||
| 
 | ||
|                 var allList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTrialCriterionDictionary)).Select(t => t.Entity as ReadingTrialCriterionDictionary).ToList();
 | ||
| 
 | ||
|                 //查询出字典的Value  ValueCN  Des 保存
 | ||
|                 var dicIdList = allList.Select(t => t.DictionaryId).ToList();
 | ||
| 
 | ||
|                 var selectList = await _dbContext.Dictionary.Where(x => dicIdList.Contains(x.Id)).Select(t => new
 | ||
|                 {
 | ||
|                     t.Id,
 | ||
| 
 | ||
|                     Value = _userInfo.IsEn_Us ? t.Value : t.ValueCN,
 | ||
|                     t.ValueCN,
 | ||
|                     t.Description,
 | ||
|                     t.ShowOrder
 | ||
|                 }).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
|                 foreach (var list in allList.GroupBy(t => t.ParentCode))
 | ||
|                 {
 | ||
| 
 | ||
|                     var firstEntity = list.First();
 | ||
|                     var cloneEntity = list.First().Clone();
 | ||
| 
 | ||
| 
 | ||
|                     //保证Id 唯一
 | ||
|                     cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.CriterionId.ToString(), firstEntity.ParentCode.ToString());
 | ||
| 
 | ||
| 
 | ||
|                     var extraIdentification = string.Empty;
 | ||
| 
 | ||
| 
 | ||
|                     extraIdentification = $"/{cloneEntity.ParentCode}/IsTrial";
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                     await InsertInspection<ReadingTrialCriterionDictionary>(cloneEntity, type, x => new InspectionConvertDTO()
 | ||
|                     {
 | ||
| 
 | ||
|                         ObjectRelationParentId = x.CriterionId,
 | ||
| 
 | ||
|                         TrialReadingCriterionId = x.CriterionId,
 | ||
| 
 | ||
|                         //不显示区分接口   通过是否是系统字典  以及字典Code 区分
 | ||
|                         IsDistinctionInterface = false,
 | ||
|                         ExtraIndentification = extraIdentification
 | ||
| 
 | ||
|                     },
 | ||
|                         new
 | ||
|                         {
 | ||
|                             SelectList = selectList.Join(list, t => t.Id, u => u.DictionaryId, (t, u) =>
 | ||
|                                                         new
 | ||
|                                                         {
 | ||
|                                                             Value = _userInfo.IsEn_Us ? t.Value : t.ValueCN,
 | ||
|                                                             t.ValueCN,
 | ||
|                                                             t.Description,
 | ||
|                                                             t.ShowOrder,
 | ||
|                                                             u.IsBaseLineUse,
 | ||
|                                                             u.IsFollowVisitUse
 | ||
|                                                         }
 | ||
|                                                         ).OrderBy(t => t.ShowOrder).ToList()
 | ||
|                         });
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
|             #region 文档相关
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             // 系统文件签署  父层级未记录稽查(系统文档初始数据)
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(SystemDocConfirmedUser)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as SystemDocConfirmedUser;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
| 
 | ||
|                 if (type == AuditOpt.Update)
 | ||
|                 {
 | ||
|                     if (entity.IsDeleted == true)
 | ||
|                     {
 | ||
|                         extraIdentification = "/" + 2;
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         extraIdentification = "/" + 1;
 | ||
|                     }
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 var systemDocument = await _dbContext.SystemDocument.Where(x => x.Id == entity.SystemDocumentId).FirstOrDefaultAsync();
 | ||
|                 await InsertInspection<SystemDocConfirmedUser>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     GeneralId = x.Id,
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
|                     ObjectRelationParentId = x.SystemDocumentId
 | ||
| 
 | ||
|                 }, new
 | ||
|                 {
 | ||
| 
 | ||
|                     FileTypeId = systemDocument.FileTypeId,
 | ||
|                     Name = systemDocument.Name,
 | ||
|                     UploadTime = systemDocument.CreateTime,
 | ||
| 
 | ||
|                     CreateUserName = _userInfo.UserName,
 | ||
|                     UserType = _userInfo.UserTypeShortName,
 | ||
|                     IsSigned = entity.ConfirmTime != null,      // 是否签署  添加了就是签署了
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             // 项目文件签署
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialDocConfirmedUser)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialDocConfirmedUser;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
| 
 | ||
|                 if (type == AuditOpt.Update)
 | ||
|                 {
 | ||
|                     if (entity.IsDeleted == true)
 | ||
|                     {
 | ||
|                         extraIdentification = "/" + 2;
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         extraIdentification = "/" + 1;
 | ||
|                     }
 | ||
|                 }
 | ||
| 
 | ||
|                 var trialDoc = await _dbContext.TrialDocument.Where(x => x.Id == entity.TrialDocumentId).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 await InsertInspection<TrialDocConfirmedUser>(entity as TrialDocConfirmedUser, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     TrialId = trialDoc.TrialId,
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
| 
 | ||
|                     ObjectRelationParentId = x.TrialDocumentId
 | ||
|                 }, new
 | ||
|                 {
 | ||
| 
 | ||
|                     UploadTime = trialDoc.CreateTime,
 | ||
| 
 | ||
|                     CreateUserName = _userInfo.UserName,
 | ||
| 
 | ||
|                     UserType = _userInfo.UserTypeShortName,
 | ||
| 
 | ||
|                     IsSigned = entity.ConfirmTime != null
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             //系统文件
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(SystemDocument)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as SystemDocument;
 | ||
| 
 | ||
|                 List<Guid> needConfirmedUserTypeIdList = new List<Guid>();
 | ||
| 
 | ||
|                 if (entity.NeedConfirmedUserTypeList == null)
 | ||
|                 {
 | ||
|                     needConfirmedUserTypeIdList = await _dbContext.SystemDocNeedConfirmedUserType.Where(x => x.SystemDocumentId == entity.Id).Select(t => t.NeedConfirmUserTypeId).ToListAsync();
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     needConfirmedUserTypeIdList = entity.NeedConfirmedUserTypeList.Select(t => t.NeedConfirmUserTypeId).ToList();
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 var userTypeNameList = await _dbContext.UserType.Where(x => needConfirmedUserTypeIdList.Contains(x.Id)).Select(x => x.UserTypeShortName).ToListAsync();
 | ||
|                 var userTypeName = string.Join(",", userTypeNameList);
 | ||
|                 await InsertInspection<SystemDocument>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     NeedConfirmedUserType = userTypeName,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             // 项目文档
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialDocument)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialDocument;
 | ||
| 
 | ||
|                 List<Guid> needConfirmedUserTypeIdList = new List<Guid>();
 | ||
| 
 | ||
|                 if (entity.NeedConfirmedUserTypeList == null)
 | ||
|                 {
 | ||
|                     needConfirmedUserTypeIdList = await _dbContext.TrialDocNeedConfirmedUserType.Where(x => x.TrialDocumentId == entity.Id).Select(t => t.NeedConfirmUserTypeId).ToListAsync();
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     needConfirmedUserTypeIdList = entity.NeedConfirmedUserTypeList.Select(t => t.NeedConfirmUserTypeId).ToList();
 | ||
|                 }
 | ||
| 
 | ||
|                 var usertypeNames = await _dbContext.UserType.Where(x => needConfirmedUserTypeIdList.Contains(x.Id)).Select(x => x.UserTypeShortName).ToListAsync();
 | ||
|                 var usertypeName = string.Join(",", usertypeNames);
 | ||
|                 await InsertInspection<TrialDocument>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                     ObjectRelationParentId = x.TrialId
 | ||
|                 },
 | ||
|                 new
 | ||
|                 {
 | ||
|                     NeedConfirmedUserType = usertypeName,
 | ||
|                 });
 | ||
| 
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|             //项目标准自动发送邮件配置
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialEmailNoticeConfig)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialEmailNoticeConfig;
 | ||
| 
 | ||
|                 //找到配置的用户
 | ||
|                 var configUserTypeList = entitys.Where(x => x.Entity.GetType() == typeof(TrialEmailNoticeUser)).Select(t => t.Entity as TrialEmailNoticeUser)
 | ||
|                     .Where(t => t.TrialEmailNoticeConfigId == entity.Id).Select(t =>
 | ||
|                 new { t.TrialEmailNoticeConfigId, t.EmailUserType, t.UserType }).ToList();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<TrialEmailNoticeConfig>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                     ObjectRelationParentId = x.TrialReadingCriterionId,
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
|                 },
 | ||
|            new
 | ||
|            {
 | ||
|                ToUserTypes = configUserTypeList.Where(t => t.EmailUserType == EmailUserType.To).Select(t => t.UserType).ToList(),
 | ||
|                CopyUserTypes = configUserTypeList.Where(t => t.EmailUserType == EmailUserType.Copy).Select(t => t.UserType).ToList(),
 | ||
|            });
 | ||
| 
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
| 
 | ||
|             #region 热键  模板 个性化配置
 | ||
| 
 | ||
|             if (entitys.Any(x => x.Entity.GetType() == typeof(ShortcutKey)))
 | ||
|             {
 | ||
|                 var type = AuditOpt.Add;
 | ||
| 
 | ||
|                 var list = entitys.Where(x => x.Entity.GetType() == typeof(ShortcutKey)).Select(t => t.Entity as ShortcutKey);
 | ||
| 
 | ||
| 
 | ||
|                 var firstEntity = list.FirstOrDefault();
 | ||
| 
 | ||
|                 var cloneEntity = firstEntity.Clone();
 | ||
| 
 | ||
|                 //保证Id 唯一
 | ||
|                 cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.UserId.ToString(), firstEntity.CreateUserId.ToString());
 | ||
| 
 | ||
|                 await InsertInspection(cloneEntity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
| 
 | ||
|                     //byzhouhang
 | ||
|                     ObjectRelationParentId = x.UserId,
 | ||
| 
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     ShortcutKeyList = list,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(UserWLTemplate)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as UserWLTemplate;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<UserWLTemplate>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.UserId
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
|             #region 附加评估
 | ||
| 
 | ||
|             // 是否参与附加评估记录表
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(SubjectCriteriaEvaluation)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 //var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 var entity = item.Entity as SubjectCriteriaEvaluation;
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<SubjectCriteriaEvaluation>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                     ObjectRelationParentId = x.SubjectId,
 | ||
|                     ObjectRelationParentId2 = x.TrialReadingCriterionId,
 | ||
| 
 | ||
|                     TrialReadingCriterionId = x.TrialReadingCriterionId,
 | ||
|                 });
 | ||
| 
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(SubjectCriteriaEvaluationVisitFilter)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 var entity = item.Entity as SubjectCriteriaEvaluationVisitFilter;
 | ||
| 
 | ||
| 
 | ||
|                 if (type == AuditOpt.Add)
 | ||
|                 {
 | ||
|                     if (entity.IsGeneratedTask)
 | ||
|                     {
 | ||
|                         extraIdentification = "/AutoGenerate";
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         extraIdentification = "/Add";
 | ||
|                     }
 | ||
|                 }
 | ||
| 
 | ||
|                 if (type == AuditOpt.Update)
 | ||
|                 {
 | ||
| 
 | ||
|                     //手动生成任务
 | ||
| 
 | ||
|                     if (entity.IsGeneratedTask)
 | ||
|                     {
 | ||
|                         //Update
 | ||
|                         extraIdentification = "/ManualGenerate";
 | ||
|                     }
 | ||
| 
 | ||
| 
 | ||
|                     //回退接口
 | ||
|                     else if (_userInfo.RequestUrl == "SubjectCriteriaEvaluation/confirmBackCriteriaVisitTask")
 | ||
|                     {
 | ||
|                         extraIdentification = "/Back";
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         //筛选影像保存接口
 | ||
|                         //if (_userInfo.RequestUrl == "SubjectCriteriaEvaluation/batchAddSubjectCriteriaEvaluationVisitStudyFilter")
 | ||
|                         //{
 | ||
|                         extraIdentification = "/Update";
 | ||
|                         //}
 | ||
| 
 | ||
|                     }
 | ||
| 
 | ||
| 
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<SubjectCriteriaEvaluationVisitFilter>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                     IsSelfDefine = true,
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
|                     ObjectRelationParentId = x.SubjectVisitId,
 | ||
|                     ObjectRelationParentId2 = x.TrialReadingCriterionId,
 | ||
| 
 | ||
|                     TrialReadingCriterionId = x.TrialReadingCriterionId,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(SubjectCriteriaEvaluationVisitStudyFilter)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 var entity = item.Entity as SubjectCriteriaEvaluationVisitStudyFilter;
 | ||
| 
 | ||
|                 if (entity.IsConfirmed == true)
 | ||
|                 {
 | ||
|                     extraIdentification = "/Confirm";
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     extraIdentification = "/Save";
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<SubjectCriteriaEvaluationVisitStudyFilter>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                     IsSelfDefine = true,
 | ||
| 
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
| 
 | ||
|                     ObjectRelationParentId = x.StudyId,
 | ||
|                     ObjectRelationParentId2 = x.SeriesId,//序列有的稽查没有记录,所以StudyId放前面
 | ||
| 
 | ||
|                     ObjectRelationParentId3 = x.TrialReadingCriterionId,
 | ||
| 
 | ||
|                     TrialReadingCriterionId = x.TrialReadingCriterionId,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
|             #region 医学审核
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             //医学审核 问题答案
 | ||
|             if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingMedicineQuestionAnswer)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = AuditOpt.Add;
 | ||
| 
 | ||
|                 var list = entitys.Where(x => x.Entity.GetType() == typeof(ReadingMedicineQuestionAnswer)).Select(t => t.Entity as ReadingMedicineQuestionAnswer);
 | ||
| 
 | ||
|                 var questionIdList = list.Select(t => t.ReadingMedicineQuestionId).ToList();
 | ||
| 
 | ||
|                 var questionNameList = await _dbContext.ReadingMedicineTrialQuestion.Where(x => questionIdList.Contains(x.Id)).Select(t => new { t.QuestionName, ReadingMedicineQuestionId = t.Id, t.ShowOrder }).ToListAsync();
 | ||
| 
 | ||
|                 var firstEntity = list.FirstOrDefault();
 | ||
| 
 | ||
|                 var cloneEntity = firstEntity.Clone();
 | ||
| 
 | ||
|                 //保证Id 唯一
 | ||
|                 cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.VisitTaskId.ToString(), firstEntity.TaskMedicalReviewId.ToString());
 | ||
| 
 | ||
|                 await InsertInspection(cloneEntity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     VisitTaskId = x.VisitTaskId,
 | ||
| 
 | ||
|                     //byzhouhang
 | ||
|                     ObjectRelationParentId = x.TaskMedicalReviewId,
 | ||
| 
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     QuestionAnswerList = list.Join(questionNameList, t => t.ReadingMedicineQuestionId, u => u.ReadingMedicineQuestionId, (t, u) => new { t.Answer, u.QuestionName, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList(),
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             //医学审核对话
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingMedicalReviewDialog)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingMedicalReviewDialog;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 //失效的时候 不区分标识
 | ||
|                 if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.MIM)
 | ||
|                 {
 | ||
|                     extraIdentification = $"/MIM";
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     extraIdentification = $"/IR";
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<ReadingMedicalReviewDialog>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                     VisitTaskId = entity.VisitTaskId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.TaskMedicalReviewId,
 | ||
| 
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             //医学审核
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TaskMedicalReview)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TaskMedicalReview;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 //失效的时候 不区分标识
 | ||
|                 if (_dbContext.Entry(entity).Property(t => t.IsInvalid).IsModified == true && entity.IsInvalid == true)
 | ||
|                 {
 | ||
|                     extraIdentification = $"/Invalid";
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<TaskMedicalReview>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     VisitTaskId = entity.VisitTaskId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.VisitTaskId,
 | ||
| 
 | ||
|                     ObjectRelationParentId2 = entity.MedicalManagerUserId,
 | ||
| 
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
| 
 | ||
|                     IsDistinctionInterface = (type == AuditOpt.Add || extraIdentification != String.Empty) ? false : true
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             //系统 医学审核问题
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingMedicineSystemQuestion)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingMedicineSystemQuestion;
 | ||
| 
 | ||
|                 var parentQuestionName = string.Empty;
 | ||
|                 if (entity.ParentId != null)
 | ||
|                 {
 | ||
|                     parentQuestionName = await _dbContext.ReadingMedicineSystemQuestion.Where(x => x.Id == entity.ParentId).Select(x => x.QuestionName).FirstOrDefaultAsync();
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<ReadingMedicineSystemQuestion>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                 }, new { ParentQuestionName = parentQuestionName });
 | ||
|             }
 | ||
| 
 | ||
|             //项目医学审核问题
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingMedicineTrialQuestion)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingMedicineTrialQuestion;
 | ||
| 
 | ||
|                 var parentQuestionName = string.Empty;
 | ||
|                 if (entity.ParentId != null)
 | ||
|                 {
 | ||
|                     parentQuestionName = await _dbContext.ReadingMedicineTrialQuestion.Where(x => x.Id == entity.ParentId).Select(x => x.QuestionName).FirstOrDefaultAsync();
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<ReadingMedicineTrialQuestion>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.TrialId,
 | ||
|                     TrialReadingCriterionId = x.TrialReadingCriterionId,
 | ||
| 
 | ||
| 
 | ||
|                 }, new { ParentQuestionName = parentQuestionName });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
|             #region QC  质疑 一致性核查
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             // Qc 问题答案   
 | ||
|             if (entitys.Any(x => x.Entity.GetType() == typeof(TrialQCQuestionAnswer)))
 | ||
|             {
 | ||
|                 var entityEntryList = entitys.Where(x => x.Entity.GetType() == typeof(TrialQCQuestionAnswer));
 | ||
| 
 | ||
|                 var type = entityEntryList.All(t => t.State == EntityState.Added) ? AuditOpt.Add : AuditOpt.Update;
 | ||
| 
 | ||
| 
 | ||
|                 var list = entityEntryList.Select(t => t.Entity as TrialQCQuestionAnswer);
 | ||
| 
 | ||
| 
 | ||
|                 var firstEntity = list.FirstOrDefault();
 | ||
| 
 | ||
|                 var trialQuestionIdList = list.Select(t => t.TrialQCQuestionConfigureId);
 | ||
| 
 | ||
|                 var trialQuestionNameList = await _dbContext.TrialQCQuestionConfigure.Where(x => x.TrialId == firstEntity.TrialId).Select(t => new { t.QuestionName, TrialQCQuestionConfigureId = t.Id, t.ShowOrder }).ToListAsync();
 | ||
| 
 | ||
|                 var beforeAnswerList = await _dbContext.TrialQCQuestionAnswer.Where(x => x.SubjectVisitId == firstEntity.SubjectVisitId && x.CurrentQCEnum == firstEntity.CurrentQCEnum && x.QCProcessEnum == firstEntity.QCProcessEnum)
 | ||
|                     .Select(u => new { u.TrialQCQuestionConfigureId, u.Answer }).ToListAsync();
 | ||
| 
 | ||
|                 var answerList = list.Select(u => new { u.TrialQCQuestionConfigureId, u.Answer }).Union(beforeAnswerList).DistinctBy(t => t.TrialQCQuestionConfigureId);
 | ||
| 
 | ||
|                 var cloneEntity = firstEntity.Clone();
 | ||
| 
 | ||
|                 //保证Id 唯一
 | ||
|                 cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.SubjectVisitId.ToString(), ((int)firstEntity.QCProcessEnum).ToString(), ((int)firstEntity.CurrentQCEnum).ToString());
 | ||
| 
 | ||
|                 await InsertInspection(cloneEntity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     SubjectVisitId = x.SubjectVisitId,
 | ||
| 
 | ||
|                     //byzhouhang
 | ||
|                     ObjectRelationParentId = x.SubjectVisitId,
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     QcQuestionAnswerList = answerList.Join(trialQuestionNameList, t => t.TrialQCQuestionConfigureId, u => u.TrialQCQuestionConfigureId, (t, u) => new
 | ||
|                     {
 | ||
|                         t.Answer,
 | ||
| 
 | ||
|                         u.QuestionName,
 | ||
|                         u.ShowOrder
 | ||
|                     }).OrderBy(t => t.ShowOrder).ToList(),
 | ||
|                 });
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|             //QC 质疑
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(QCChallenge)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as QCChallenge;
 | ||
| 
 | ||
|                 await InsertInspection<QCChallenge>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     SubjectVisitId = x.SubjectVisitId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = x.SubjectVisitId
 | ||
|                 }, new
 | ||
|                 {
 | ||
| 
 | ||
|                     IsOverTime = entity.IsClosed ? entity.ClosedTime > entity.DeadlineTime : DateTime.Now > entity.DeadlineTime,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             // 质疑 对话
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(QCChallengeDialog)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as QCChallengeDialog;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 var reason = string.Empty;
 | ||
| 
 | ||
|                 //  对话消息区分用户类型
 | ||
| 
 | ||
|                 extraIdentification = "/(" + _userInfo.UserTypeShortName + ")";
 | ||
| 
 | ||
| 
 | ||
|                 if (_userInfo.RequestUrl.ToLower() == "qcoperation/closeqcchallenge")
 | ||
|                 {
 | ||
|                     reason = entity.TalkContent.Substring(entity.TalkContent.LastIndexOf(':') + 1);
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<QCChallengeDialog>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
| 
 | ||
|                     SubjectVisitId = x.SubjectVisitId,
 | ||
| 
 | ||
| 
 | ||
|                     //byzhouhang
 | ||
|                     ObjectRelationParentId = entity.QCChallengeId,
 | ||
| 
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
|                 });
 | ||
|             }
 | ||
|             //一致性核查 对话
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(CheckChallengeDialog)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as CheckChallengeDialog;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 var reason = string.Empty;
 | ||
| 
 | ||
|                 extraIdentification = "/(" + _userInfo.UserTypeShortName + ")";
 | ||
| 
 | ||
|                 if (_userInfo.RequestUrl.ToLower() == "qcoperation/closecheckchallenge")
 | ||
|                 {
 | ||
|                     reason = entity.TalkContent.Substring(entity.TalkContent.LastIndexOf(':') + 1);
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<CheckChallengeDialog>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
| 
 | ||
|                     SubjectVisitId = x.SubjectVisitId,
 | ||
| 
 | ||
|                     //byzhouhang
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     Reason = reason,
 | ||
| 
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
|                     ObjectRelationParentId = entity.SubjectVisitId,
 | ||
|                 }
 | ||
| 
 | ||
|                 );
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             // 一致性核查文件  是否需要单独一个表记录?
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(InspectionFile)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 await InsertInspection<InspectionFile>(item.Entity as InspectionFile, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = x.TrialId
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
|             #endregion
 | ||
| 
 | ||
|             #region 中心调研
 | ||
| 
 | ||
| 
 | ||
|             // 中心调研表
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialSiteSurvey)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialSiteSurvey;
 | ||
|                 if (entity.TrialSite == null)
 | ||
|                 {
 | ||
|                     entity.TrialSite = await _dbContext.TrialSite.IgnoreQueryFilters().Where(x => x.Id == entity.TrialSiteId && x.TrialId == entity.TrialId).FirstOrDefaultAsync();
 | ||
|                 }
 | ||
| 
 | ||
|                 if (entity.PreliminaryUser == null)
 | ||
|                 {
 | ||
|                     entity.PreliminaryUser = await _dbContext.User.Where(x => x.Id == entity.PreliminaryUserId).FirstOrDefaultAsync();
 | ||
|                 }
 | ||
| 
 | ||
|                 if (entity.ReviewerUser == null)
 | ||
|                 {
 | ||
|                     entity.ReviewerUser = await _dbContext.User.Where(x => x.Id == entity.ReviewerUserId).FirstOrDefaultAsync();
 | ||
|                 }
 | ||
| 
 | ||
|                 var trialSiteId = entity.TrialSite?.Id;
 | ||
| 
 | ||
|                 await InsertInspection<TrialSiteSurvey>(item.Entity as TrialSiteSurvey, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = trialSiteId,
 | ||
|                 }, new
 | ||
|                 {
 | ||
| 
 | ||
|                     //TrialSiteCode = entity.TrialSite.TrialSiteCode,
 | ||
|                     //TrialSiteAliasName = entity.TrialSite.TrialSiteAliasName,
 | ||
|                     //Phone = entity.Phone,
 | ||
|                     //Email = entity.Email,
 | ||
| 
 | ||
| 
 | ||
|                     PreliminaryUser = entity.PreliminaryUser == null ? "" : entity.PreliminaryUser.FullName,
 | ||
|                     ReviewerUser = entity.ReviewerUser == null ? "" : entity.ReviewerUser.FullName,
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialSiteUserSurvey)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
|                 var entity = item.Entity as TrialSiteUserSurvey;
 | ||
| 
 | ||
|                 var trialid = await _dbContext.TrialSiteSurvey.Where(x => x.Id == entity.TrialSiteSurveyId).Select(x => x.TrialId).FirstOrDefaultAsync();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<TrialSiteUserSurvey>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     TrialId = trialid,
 | ||
| 
 | ||
|                     IsDistinctionInterface = false
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialSiteEquipmentSurvey)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialSiteEquipmentSurvey;
 | ||
|                 var trialid = await _dbContext.TrialSiteSurvey.Where(x => x.Id == entity.TrialSiteSurveyId).Select(x => x.TrialId).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 await InsertInspection<TrialSiteEquipmentSurvey>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     TrialId = trialid,
 | ||
|                     IsDistinctionInterface = false
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             //系统  Qc 问题
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(QCQuestion)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as QCQuestion;
 | ||
| 
 | ||
|                 int? parentQuestionOrder = null;
 | ||
|                 string parentQuestionName = string.Empty;
 | ||
| 
 | ||
|                 if (entity.ParentId != null)
 | ||
|                 {
 | ||
|                     var question = await _dbContext.QCQuestionConfigure.Where(x => x.Id == entity.ParentId).Select(x => new { x.Id, x.ShowOrder, x.QuestionName }).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                     parentQuestionOrder = question?.ShowOrder;
 | ||
|                     parentQuestionName = question?.QuestionName;
 | ||
| 
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<QCQuestion>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false
 | ||
| 
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     ParentQuestionName = parentQuestionName,
 | ||
|                     ParentQuestionOrder = parentQuestionOrder
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             // 项目QC问题
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialQCQuestion)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialQCQuestion;
 | ||
| 
 | ||
|                 int? parentQuestionOrder = null;
 | ||
|                 string parentQuestionName = string.Empty;
 | ||
| 
 | ||
|                 if (entity.ParentId != null)
 | ||
|                 {
 | ||
|                     var question = entitys.Where(x => x.Entity.GetType() == typeof(TrialQCQuestion)).Select(t => t.Entity as TrialQCQuestion).Select(x => new { x.Id, x.ShowOrder, x.QuestionName }).FirstOrDefault(t => t.Id == entity.ParentId);
 | ||
| 
 | ||
|                     question = question ?? await _dbContext.TrialQCQuestionConfigure.Where(x => x.Id == entity.ParentId).Select(x => new { x.Id, x.ShowOrder, x.QuestionName }).FirstOrDefaultAsync();
 | ||
| 
 | ||
| 
 | ||
|                     parentQuestionOrder = question?.ShowOrder;
 | ||
|                     parentQuestionName = question?.QuestionName;
 | ||
| 
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<TrialQCQuestion>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = x.TrialId,
 | ||
|                     IsDistinctionInterface = false
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     ParentQuestionName = parentQuestionName,
 | ||
|                     ParentQuestionOrder = parentQuestionOrder
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             // 签名模板
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(SystemBasicData)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 var basicData = item.Entity as SystemBasicData;
 | ||
|                 extraIdentification = (basicData.ParentId == null ? "/parent" : string.Empty);
 | ||
| 
 | ||
|                 await InsertInspection<SystemBasicData>(item.Entity as SystemBasicData, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             #region 项目参与人员  项目site
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             // 项目中心  Site未稽查
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialSite)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialSite;
 | ||
|                 if (entity.Site == null && entity.SiteId != null)
 | ||
|                 {
 | ||
|                     entity.Site = await _dbContext.Site.Where(x => x.Id == entity.SiteId).FirstOrDefaultAsync();
 | ||
|                 }
 | ||
|                 await InsertInspection<TrialSite>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = type == AuditOpt.Update ? true : false,
 | ||
|                     TrialId = x.TrialId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = x.TrialId
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     //兼容之前的配置  冗余该字段
 | ||
|                     SiteCode = entity.TrialSiteCode,
 | ||
| 
 | ||
|                     //Site  没记录稽查 必须查询存
 | ||
|                     SiteName = entity.TrialSiteName
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             // 项目人员
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialUser)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialUser;
 | ||
|                 //var user = await _dbContext.Users.Include(x => x.UserTypeRole).FirstOrDefaultAsync(x => x.Id == entity.UserId);
 | ||
|                 await InsertInspection<TrialUser>(entity, type, x => new InspectionConvertDTO
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = type == AuditOpt.Update ? true : false,
 | ||
|                     TrialId = x.TrialId,
 | ||
|                     ObjectRelationParentId = x.TrialId,
 | ||
|                     ObjectRelationParentId2 = x.UserId,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             // 项目中心人员
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialSiteUser)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialSiteUser;
 | ||
| 
 | ||
| 
 | ||
|                 if (entity.TrialSite == null)
 | ||
|                 {
 | ||
|                     entity.TrialSite = await _dbContext.TrialSite.Where(x => x.Id == entity.TrialSiteId).IgnoreQueryFilters().FirstOrDefaultAsync();
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<TrialSiteUser>(item.Entity as TrialSiteUser, type, x => new InspectionConvertDTO
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = type == AuditOpt.Update ? true : false,
 | ||
|                     TrialId = x.TrialId,
 | ||
|                     ObjectRelationParentId = entity.TrialSite.Id,
 | ||
|                     ObjectRelationParentId2 = x.UserId,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
|             // 受试者
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(Subject)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as Subject;
 | ||
|                 var finalSubjectVisitName = await _dbContext.SubjectVisit.AsNoTracking().Where(x => x.Id == entity.FinalSubjectVisitId && entity.FinalSubjectVisitId != null).Select(x => x.VisitName).FirstOrDefaultAsync();
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<Subject>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     SubjectId = x.Id,
 | ||
| 
 | ||
|                     TrialSiteId = x.TrialSiteId,
 | ||
| 
 | ||
|                     //项目的信息 找离的最近的项目稽查信息
 | ||
|                     ObjectRelationParentId = entity.TrialSiteId,
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     FinalSubjectVisitName = finalSubjectVisitName,
 | ||
| 
 | ||
|                     //变换名称   兼容之前做的稽查  冗余
 | ||
|                     SubjectCode = entity.Code,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             // 访视计划
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(VisitStage)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as VisitStage;
 | ||
| 
 | ||
|                 await InsertInspection<VisitStage>(item.Entity as VisitStage, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = x.TrialId
 | ||
| 
 | ||
|                 });
 | ||
| 
 | ||
|                 #region Old
 | ||
|                 //var visitPlanStatus = await this._dbContext.Trial.Where(x => x.Id == entity.TrialId).Select(x => x.VisitPlanConfirmed).FirstOrDefaultAsync();
 | ||
|                 //if (type == "Add")
 | ||
|                 //{
 | ||
|                 //    visitPlanStatus = false;
 | ||
|                 //}
 | ||
|                 //await InsertInspection<VisitStage>(item.Entity as VisitStage, type, x => new InspectionConvertDTO()
 | ||
|                 //{
 | ||
|                 //    ObjectRelationParentId = x.TrialId
 | ||
| 
 | ||
|                 //}, new
 | ||
|                 //{
 | ||
|                 //    VisitPlanStatus = visitPlanStatus,
 | ||
|                 //});
 | ||
|                 #endregion
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|             // 访视
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(SubjectVisit)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as SubjectVisit;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 var isDistinctionInterface = true;
 | ||
| 
 | ||
|                 var reason = string.Empty;
 | ||
| 
 | ||
|                 #region 处理标识
 | ||
| 
 | ||
|                 switch (_userInfo.RequestUrl.ToLower())
 | ||
|                 {
 | ||
|                     //待处理?
 | ||
|                     case "qcoperation/qcpassedorfailed":
 | ||
| 
 | ||
|                         extraIdentification = "/" + (40 % (int)entity.AuditState).ToString();
 | ||
| 
 | ||
|                         break;
 | ||
| 
 | ||
|                     //设置核查通过
 | ||
|                     case "qcoperation/setcheckpass":
 | ||
| 
 | ||
|                         reason = entity.ManualPassReason;
 | ||
|                         break;
 | ||
| 
 | ||
|                     //领取或者取消QC任务
 | ||
|                     case "qcoperation/obtainorcancelqctask":
 | ||
|                         type = type + "/" + entity.IsTake.ToString();
 | ||
|                         break;
 | ||
| 
 | ||
|                     //确认重阅  区分用户类型
 | ||
|                     case "visittask/confirmrereading":
 | ||
| 
 | ||
|                         if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM)
 | ||
|                         {
 | ||
|                             type = type + "/" + 1;
 | ||
| 
 | ||
|                         }
 | ||
|                         else
 | ||
|                         {
 | ||
|                             //SPM
 | ||
|                             type = type + "/" + 2;
 | ||
|                         }
 | ||
|                         break;
 | ||
|                 }
 | ||
| 
 | ||
|                 if (entity.CheckChallengeState == CheckChanllengeTypeEnum.CRCWaitPMReply || entity.CheckChallengeState == CheckChanllengeTypeEnum.PMWaitCRCReply)
 | ||
|                 {
 | ||
|                     //发送对话  修改质疑状态  不需要区分接口
 | ||
|                     isDistinctionInterface = false;
 | ||
| 
 | ||
|                     extraIdentification = "/ModifyCheckChallengeState";
 | ||
|                 }
 | ||
| 
 | ||
|                 #endregion
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<SubjectVisit>(item.Entity as SubjectVisit, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = isDistinctionInterface,
 | ||
|                     Reason = reason,
 | ||
| 
 | ||
|                     //Subject的信息 找离的最近的Subject稽查信息
 | ||
|                     ObjectRelationParentId = x.SubjectId,
 | ||
| 
 | ||
|                     SubjectId = x.SubjectId,
 | ||
|                     SubjectVisitId = x.Id,
 | ||
| 
 | ||
|                     TrialSiteId = x.TrialSiteId,
 | ||
| 
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
| 
 | ||
|                 },
 | ||
|                 //兼容之前的配置名 
 | ||
|                 new { SubjectVisitName = entity.VisitName }
 | ||
|                 );
 | ||
|             }
 | ||
| 
 | ||
|             #region Dicom  非Dicom  既往手术史..临床数据
 | ||
| 
 | ||
|             // Dicom
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(DicomStudy)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 await InsertInspection<DicomStudy>(item.Entity as DicomStudy, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = x.SubjectVisitId
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             // 后处理Dicom影像
 | ||
|             // TaskStudy
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TaskStudy)))
 | ||
|             {
 | ||
|                 var entity = item.Entity as TaskStudy;
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
|                 var armEnum = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Select(x => x.ArmEnum).FirstOrDefaultAsync();
 | ||
|                 await InsertInspection<TaskStudy>(item.Entity as TaskStudy, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = x.VisitTaskId,
 | ||
|                 },new {
 | ||
|                     ArmEnum= armEnum,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             // 序列
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(DicomSeries)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as DicomSeries;
 | ||
| 
 | ||
|                 await InsertInspection<DicomSeries>(item.Entity as DicomSeries, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = x.StudyId
 | ||
|                 }
 | ||
|                 );
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             // 非Dicom
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(NoneDicomStudy)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as NoneDicomStudy;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 if (_userInfo.RequestUrl.ToLower() == "nonedicomstudy/addorupdatenonedicomstudy")
 | ||
|                 {
 | ||
|                     extraIdentification = "/(" + _userInfo.UserTypeShortName + ")";
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<NoneDicomStudy>(item.Entity as NoneDicomStudy, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = x.SubjectVisitId,
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(NoneDicomStudyFile)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as NoneDicomStudyFile;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 Arm armEnum = Arm.SingleReadingArm;
 | ||
|                 if (entity.VisitTaskId!=null)
 | ||
|                 {
 | ||
|                     extraIdentification = "/VisitTask";
 | ||
|                     armEnum = await _dbContext.VisitTask.Where(x => x.Id == entity.VisitTaskId).Select(x => x.ArmEnum).FirstOrDefaultAsync();
 | ||
|                 }
 | ||
| 
 | ||
|                 var trialid = await _dbContext.NoneDicomStudy.Where(x => x.Id == entity.NoneDicomStudyId).Select(x => x.TrialId).FirstOrDefaultAsync();
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<NoneDicomStudyFile>(item.Entity as NoneDicomStudyFile, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     TrialId= trialid,
 | ||
|                     ObjectRelationParentId = x.VisitTaskId,
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     ArmEnum = armEnum,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             // 既往手术史
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(PreviousSurgery)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as PreviousSurgery;
 | ||
| 
 | ||
|                 await InsertInspection<PreviousSurgery>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     SubjectVisitId = x.SubjectVisitId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = x.SubjectVisitId,
 | ||
| 
 | ||
|                     ObjectRelationParentId2 = x.ClinicalDataTrialSetId,
 | ||
| 
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     ClinicalDataLevel = ClinicalLevel.Subject,
 | ||
| 
 | ||
|                     Type = ClinicalFileType.PreviousSurgery
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             // 既往放疗史
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(PreviousHistory)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as PreviousHistory;
 | ||
| 
 | ||
|                 await InsertInspection<PreviousHistory>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
| 
 | ||
| 
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     SubjectVisitId = x.SubjectVisitId,
 | ||
| 
 | ||
|                     ObjectRelationParentId2 = x.ClinicalDataTrialSetId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = x.SubjectVisitId,
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     ClinicalDataLevel = ClinicalLevel.Subject,
 | ||
|                     Type = ClinicalFileType.PreviousHistory
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             // 其他治疗史
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(PreviousOther)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as PreviousOther;
 | ||
| 
 | ||
|                 await InsertInspection<PreviousOther>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
| 
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     SubjectVisitId = x.SubjectVisitId,
 | ||
| 
 | ||
|                     ObjectRelationParentId2 = x.ClinicalDataTrialSetId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = x.SubjectVisitId,
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     ClinicalDataLevel = ClinicalLevel.Subject,
 | ||
|                     Type = ClinicalFileType.PreviousOther
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
|             #region 阅片人入组
 | ||
| 
 | ||
| 
 | ||
|             //阅片人入组   父层级未记录稽查(医生)
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(Enroll)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as Enroll;
 | ||
|                 var doctor = await _dbContext.Doctor.FirstOrDefaultAsync(x => x.Id == entity.DoctorId);
 | ||
|                 var readingCategoryList = await _dbContext.EnrollReadingCategory.Where(x => x.EnrollId == entity.Id).Select(t => t.ReadingCategory).ToListAsync();
 | ||
|                 await InsertInspection<Enroll>(item.Entity as Enroll, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = x.TrialId
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     //父层级的数据  暂时没有记录稽查  所以这里必须查
 | ||
|                     Name = doctor.FullName,
 | ||
|                     ChineseName = doctor.ChineseName,
 | ||
|                     Email = doctor.EMail,
 | ||
|                     IsUploadedACKSOW = entity.AttachmentId != Guid.Empty,
 | ||
| 
 | ||
|                     //子层级的数据 记录到父层级 必须查询  不然找上一条时数据不准
 | ||
|                     ReadingCategoryList = readingCategoryList
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             //独立阅片人 设置阅片类型   这里对于操作人 不区分 添加 编辑 删除    只有设置(相当于更新)
 | ||
| 
 | ||
|             if (entitys.Any(x => x.Entity.GetType() == typeof(EnrollReadingCategory)))
 | ||
|             {
 | ||
|                 var type = AuditOpt.Update;
 | ||
| 
 | ||
|                 var addList = entitys.Where(x => x.Entity.GetType() == typeof(EnrollReadingCategory) && x.State == EntityState.Added).Select(t => t.Entity as EnrollReadingCategory).ToList();
 | ||
|                 var deleteList = entitys.Where(x => x.Entity.GetType() == typeof(EnrollReadingCategory) && x.State == EntityState.Deleted).Select(t => t.Entity as EnrollReadingCategory).ToList();
 | ||
| 
 | ||
|                 var first = addList.Union(deleteList).FirstOrDefault();
 | ||
| 
 | ||
|                 var enrollId = first.EnrollId;
 | ||
| 
 | ||
|                 Guid? trialId = Guid.Empty;
 | ||
| 
 | ||
|                 if (first.Enroll != null)
 | ||
|                 {
 | ||
|                     trialId = first.Enroll.TrialId;
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     trialId = await _dbContext.Enroll.Where(x => x.Id == enrollId).Select(t => t.TrialId).FirstOrDefaultAsync();
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<EnrollReadingCategory>(first, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     //GeneralId  和ObjectRelationParentId 一样  会成环  所以查询的时候 需要排除自身 
 | ||
|                     GeneralId = enrollId,
 | ||
| 
 | ||
|                     TrialId = trialId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = enrollId,
 | ||
| 
 | ||
|                     IsDistinctionInterface = false
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     ReadingCategoryList = addList.Select(t => t.ReadingCategory).ToList(),
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
| 
 | ||
|             #region 阅片期临床数据
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             //临床数据上传PDF
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingClinicalDataPDF)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingClinicalDataPDF;
 | ||
| 
 | ||
|                 var clinicalData = await _dbContext.ReadingClinicalData.Where(t => t.Id == entity.ReadingClinicalDataId).FirstOrDefaultAsync();
 | ||
|                 if (clinicalData != null)
 | ||
|                 {
 | ||
|                     var clinicalDataTrialSet = await _dbContext.ClinicalDataTrialSet.Where(t => t.Id == clinicalData.ClinicalDataTrialSetId).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                     SubjectVisit? visit = await _dbContext.SubjectVisit.Where(x => x.Id == clinicalData.ReadingId).FirstOrDefaultAsync();
 | ||
|                     TrialSite? siteInfo = null;
 | ||
|                     Subject? subject = null;
 | ||
| 
 | ||
|                     //阅片标准
 | ||
|                     var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(t => t.TrialClinicalDataSetId == clinicalDataTrialSet.Id).Select(t => t.TrialReadingCriterionId).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                     //阅片标准
 | ||
|                     var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                     if (visit != null)
 | ||
|                     {
 | ||
|                         siteInfo = await _dbContext.TrialSite.Where(x => x.Id == visit.TrialSiteId).FirstOrDefaultAsync();
 | ||
|                         subject = await _dbContext.Subject.Where(x => x.Id == clinicalData.SubjectId).FirstOrDefaultAsync();
 | ||
|                     }
 | ||
| 
 | ||
|                     Guid? subjectVisitId = visit == null ? null : visit.Id;
 | ||
|                     await InsertInspection<ReadingClinicalDataPDF>(entity, type, x => new InspectionConvertDTO()
 | ||
|                     {
 | ||
|                         TrialId = clinicalData.TrialId,
 | ||
|                         SubjectId = clinicalData.SubjectId,
 | ||
|                         SubjectVisitId = subjectVisitId,
 | ||
|                     }, new
 | ||
|                     {
 | ||
|                         SiteCode = siteInfo == null ? "" : siteInfo.TrialSiteCode,
 | ||
|                         SubjectCode = subject == null ? "" : subject.Code,
 | ||
|                         VisitName = visit == null ? "" : visit.VisitName,
 | ||
|                         clinicalDataTrialSet.ClinicalDataSetName,
 | ||
|                         clinicalDataTrialSet.ClinicalDataLevel,
 | ||
|                         clinicalDataTrialSet.ClinicalUploadType,
 | ||
|                         CriterionNames = string.Join(",", criterionNameList.Distinct()),
 | ||
|                         FileCount = 1,
 | ||
| 
 | ||
|                     });
 | ||
|                 }
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ClinicalForm)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ClinicalForm;
 | ||
| 
 | ||
|                 var clinicalDataTrialSet = await _dbContext.ClinicalDataTrialSet.Where(t => t.Id == entity.ClinicalDataTrialSetId).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 SubjectVisit? visit = await _dbContext.SubjectVisit.Where(x => x.Id == entity.ReadingId).FirstOrDefaultAsync();
 | ||
|                 TrialSite? siteInfo = null;
 | ||
|                 Subject? subject = null;
 | ||
| 
 | ||
|                 //阅片标准
 | ||
|                 var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(t => t.TrialClinicalDataSetId == clinicalDataTrialSet.Id).Select(t => t.TrialReadingCriterionId).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 //阅片标准
 | ||
|                 var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 if (visit != null)
 | ||
|                 {
 | ||
|                     siteInfo = await _dbContext.TrialSite.Where(x => x.Id == visit.TrialSiteId).FirstOrDefaultAsync();
 | ||
|                     subject = await _dbContext.Subject.Where(x => x.Id == entity.SubjectId).FirstOrDefaultAsync();
 | ||
|                 }
 | ||
| 
 | ||
|                 Guid? subjectVisitId = visit == null ? null : visit.Id;
 | ||
|                 await InsertInspection<ClinicalForm>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     TrialId = entity.TrialId,
 | ||
|                     SubjectId = entity.SubjectId,
 | ||
|                     SubjectVisitId = subjectVisitId,
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     SiteCode = siteInfo == null ? "" : siteInfo.TrialSiteCode,
 | ||
|                     SubjectCode = subject == null ? "" : subject.Code,
 | ||
|                     VisitName = visit == null ? "" : visit.VisitName,
 | ||
|                     clinicalDataTrialSet.ClinicalDataSetName,
 | ||
|                     clinicalDataTrialSet.ClinicalDataLevel,
 | ||
|                     clinicalDataTrialSet.ClinicalUploadType,
 | ||
|                     CriterionNames = string.Join(",", criterionNameList.Distinct()),
 | ||
| 
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             //系统临床数据配置
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ClinicalDataSystemSet)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ClinicalDataSystemSet;
 | ||
| 
 | ||
|                 await InsertInspection<ClinicalDataSystemSet>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             //项目临床数据配置
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ClinicalDataTrialSet)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ClinicalDataTrialSet;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
|                 if (_userInfo.RequestUrl == "configTrialBasicInfo/ConfigTrialProcessInfoConfirm")
 | ||
|                 {
 | ||
|                     extraIdentification = "/ConfirmSelect";
 | ||
|                 }
 | ||
|                 else if (_userInfo.RequestUrl == "ClinicalDataSet/applyTrialClinical")
 | ||
|                 {
 | ||
|                     extraIdentification = "/applyTrialClinical";
 | ||
|                 }
 | ||
| 
 | ||
|                 //获取配置的标准名称
 | ||
| 
 | ||
|                 //List<string> trialDics = new List<string>();
 | ||
|                 //var dictionaryIds = new List<Guid>();
 | ||
|                 //if (entity.TrialDicList == null || entity.TrialDicList.Count == 0)
 | ||
|                 //{
 | ||
|                 //    dictionaryIds = await this._dbContext.TrialDictionary.Where(x => x.TrialId == entity.Id && x.KeyName == "Criterion").Select(x => x.DictionaryId).ToListAsync();
 | ||
|                 //}
 | ||
|                 //else
 | ||
|                 //{
 | ||
|                 //    dictionaryIds = entity.TrialDicList.Select(x => x.DictionaryId).ToList();
 | ||
|                 //}
 | ||
|                 //trialDics = await this._dbContext.Dictionary.Where(x => dictionaryIds.Contains(x.Id)).Select(x => x.ValueCN).ToListAsync();
 | ||
| 
 | ||
|                 var trialReadingCritiralIdList = new List<Guid>();
 | ||
| 
 | ||
|                 var criterionNameList = new List<string>();
 | ||
| 
 | ||
|                 if (entity.TrialClinicalDataSetCriteriaList == null || entity.TrialClinicalDataSetCriteriaList.Count() == 0)
 | ||
|                 {
 | ||
|                     criterionNameList = await _dbContext.TrialClinicalDataSetCriterion.Where(t => t.TrialClinicalDataSetId == entity.Id).Select(t => t.TrialReadingCriterion.CriterionName).ToListAsync();
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     var ids = entity.TrialClinicalDataSetCriteriaList.Select(t => t.TrialReadingCriterionId).ToList();
 | ||
|                     criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => ids.Contains(t.Id)).Select(t => t.CriterionName).ToListAsync();
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<ClinicalDataTrialSet>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                     ObjectRelationParentId = entity.TrialId,
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     CriterionNames = criterionNameList?.Count() > 0 ? string.Join(",", criterionNameList) : string.Empty
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             //临床数据问题
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialClinicalQuestion)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialClinicalQuestion;
 | ||
| 
 | ||
|                 var trialId = await _dbContext.ClinicalDataTrialSet.Where(t => t.Id == entity.TrialClinicalId).Select(t => t.TrialId).FirstOrDefaultAsync();
 | ||
|                 var GroupName = entity.GroupId == null ? entity.QuestionName : _dbContext.TrialClinicalQuestion.Where(t => t.Id == entity.GroupId).Select(t => t.QuestionName).FirstOrDefault();
 | ||
|                 var GroupEnName = entity.GroupId == null ? entity.QuestionEnName : _dbContext.TrialClinicalQuestion.Where(t => t.Id == entity.GroupId).Select(t => t.QuestionEnName).FirstOrDefault();
 | ||
|                 await InsertInspection<TrialClinicalQuestion>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     TrialId = trialId,
 | ||
|                 },
 | ||
|                   new
 | ||
|                   {
 | ||
|                       GroupName = GroupName,
 | ||
|                       GroupEnName = GroupEnName,
 | ||
|                   }
 | ||
|                 );
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             //临床数据表格问题
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TrialClinicalTableQuestion)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TrialClinicalTableQuestion;
 | ||
| 
 | ||
|                 var trialId = await _dbContext.ClinicalDataTrialSet.Where(t => t.Id == entity.TrialClinicalId).Select(t => t.TrialId).FirstOrDefaultAsync();
 | ||
|                 await InsertInspection<TrialClinicalTableQuestion>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     TrialId = trialId,
 | ||
|                 }
 | ||
| 
 | ||
|                 );
 | ||
|             }
 | ||
| 
 | ||
|             // CRC  PM 临床数据
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingClinicalData)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingClinicalData;
 | ||
| 
 | ||
|                 var config = await _dbContext.ClinicalDataTrialSet.FindAsync(entity.ClinicalDataTrialSetId);
 | ||
| 
 | ||
|                 await InsertInspection<ReadingClinicalData>(item.Entity as ReadingClinicalData, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
| 
 | ||
|                     IsDistinctionInterface = type == AuditOpt.Update ? true : false,
 | ||
| 
 | ||
|                     SubjectVisitId = x.IsVisit ? x.ReadingId : null,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.ClinicalDataTrialSetId,
 | ||
| 
 | ||
|                     //ObjectRelationParentId2 = x.IsVisit == false?x.ReadingId:null
 | ||
|                 }, new { FileCountViewStr = config?.ClinicalDataLevel == ClinicalLevel.Subject && config?.ClinicalUploadType == ClinicalUploadType.Table ? "NA" : entity.FileCount.ToString() });
 | ||
|             }
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingConsistentClinicalData)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingConsistentClinicalData;
 | ||
| 
 | ||
|                 var config = await _dbContext.ClinicalDataTrialSet.FindAsync(entity.ClinicalDataTrialSetId);
 | ||
| 
 | ||
|                 await InsertInspection<ReadingConsistentClinicalData>(item.Entity as ReadingConsistentClinicalData, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
| 
 | ||
|                     IsDistinctionInterface = type == AuditOpt.Update ? true : false,
 | ||
| 
 | ||
|                     SubjectVisitId = x.IsVisit ? x.ReadingId : null,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.ClinicalDataTrialSetId,
 | ||
| 
 | ||
|                     //ObjectRelationParentId2 = x.IsVisit == false?x.ReadingId:null
 | ||
|                 }, new { FileCountViewStr = config?.ClinicalDataLevel == ClinicalLevel.Subject && config?.ClinicalUploadType == ClinicalUploadType.Table ? "NA" : entity.FileCount.ToString() });
 | ||
|             }
 | ||
| 
 | ||
|             //阅片期计划
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingPeriodSet)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingPeriodSet;
 | ||
| 
 | ||
|                 var siteCodes = string.Empty;
 | ||
|                 if (entity.ReadingScope == ReadingScopeEnum.Site)
 | ||
|                 {
 | ||
|                     var siteIds = entity.ReadingPeriodSites.Select(t => t.TrialSiteId).ToList();
 | ||
|                     var nameList = _dbContext.TrialSite.Where(c => c.TrialId == entity.TrialId && siteIds.Contains(c.Id)).Select(t => t.TrialSiteCode).ToList();
 | ||
| 
 | ||
|                     siteCodes = String.Join(',', nameList);
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<ReadingPeriodSet>(item.Entity as ReadingPeriodSet, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = x.VisitStageId,
 | ||
|                     ObjectRelationParentId2 = entity.TrialReadingCriterionId,
 | ||
| 
 | ||
| 
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     SiteCodes = siteCodes
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             #region 阅片期临时数据不记录
 | ||
|             //foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingPeriodPlan)))
 | ||
|             //{
 | ||
|             //    var entity = item.Entity as ReadingPeriodPlan;
 | ||
| 
 | ||
|             //    if (entity.ReadingPeriodSet == null)
 | ||
|             //    {
 | ||
|             //        entity.ReadingPeriodSet = _dbContext.ReadingPeriodSet.Find(entity.ReadingPeriodSetId);
 | ||
|             //    }
 | ||
| 
 | ||
|             //    await InsertInspection<ReadingPeriodPlan>(item.Entity as ReadingPeriodPlan, type, x => new InspectionConvertDTO()
 | ||
|             //    {
 | ||
|             //        GeneralId = x.Id,
 | ||
|             //        SubjectVisitId = x.SubjectVisitId,
 | ||
|             //    }, new
 | ||
|             //    {
 | ||
|             //        entity.ReadingPeriodSet.ReadingPeriodName,
 | ||
|             //        entity.ReadingPeriodSet.EffectOfTime,
 | ||
|             //        entity.ReadingPeriodSet.ExpirationDate
 | ||
|             //    });
 | ||
|             //}
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
| 
 | ||
|             //阅片期
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadModule)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadModule;
 | ||
| 
 | ||
|                 string extraIndentification = string.Empty;
 | ||
|                 object objData = new { };
 | ||
| 
 | ||
| 
 | ||
|                 //临床数据表单确认
 | ||
|                 if (_userInfo.RequestUrl == "ClinicalAnswer/cRCConfirmClinical")
 | ||
|                 {
 | ||
|                     extraIndentification = "/" + _userInfo.RequestUrl;
 | ||
|                     var readModuleCriterionFromList = entitys.Where(x => x.Entity.GetType() == typeof(ReadModuleCriterionFrom)).ToList();
 | ||
|                     if (readModuleCriterionFromList.Count() > 0)
 | ||
|                     {
 | ||
|                         var readModuleCriterionFrom = readModuleCriterionFromList.FirstOrDefault().Entity as ReadModuleCriterionFrom;
 | ||
| 
 | ||
| 
 | ||
|                         var clinicalFormIds = new List<Guid>();
 | ||
|                         var criterionIds = new List<Guid>();
 | ||
|                         readModuleCriterionFromList.ForEach(x =>
 | ||
|                         {
 | ||
|                             var form = x.Entity as ReadModuleCriterionFrom;
 | ||
|                             clinicalFormIds.Add(form.ClinicalFormId);
 | ||
|                         });
 | ||
| 
 | ||
|                         var clinicalFormList = await _dbContext.ClinicalForm.Where(t => clinicalFormIds.Contains(t.Id)).ToListAsync();
 | ||
| 
 | ||
|                         var clinicalDataTrialSetIds = clinicalFormList.Select(x => x.ClinicalDataTrialSetId).ToList().Distinct();
 | ||
| 
 | ||
| 
 | ||
|                         var readModule = await _dbContext.ReadModule.Where(t => t.Id == readModuleCriterionFrom.ReadModuleId).Include(x => x.SubjectVisit).FirstOrDefaultAsync();
 | ||
|                         var latestScanDate = readModule.SubjectVisit.LatestScanDate;
 | ||
| 
 | ||
|                         var clinicalDataTrialSetList = await _dbContext.ClinicalDataTrialSet.Where(t => clinicalDataTrialSetIds.Contains(t.Id)).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
|                         var clinicalSetIds = clinicalDataTrialSetList.Select(x => x.Id).ToList();
 | ||
| 
 | ||
|                         // 项目临床数据和标准的关联
 | ||
|                         var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(x => clinicalSetIds.Contains(x.TrialClinicalDataSetId)).Select(x => x.TrialReadingCriterionId).Distinct().ToListAsync();
 | ||
| 
 | ||
|                         // 标准
 | ||
|                         var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                         Subject subject = await _dbContext.Subject.Where(x => x.Id == readModule.SubjectId).FirstOrDefaultAsync();
 | ||
|                         TrialSite siteInfo = await _dbContext.TrialSite.Where(x => x.Id == subject.TrialSiteId).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                         var clinicalDataSetNameList = clinicalDataTrialSetList.Select(x => x.ClinicalDataSetName).ToList();
 | ||
|                         objData = new
 | ||
|                         {
 | ||
|                             SiteCode = siteInfo == null ? "" : siteInfo.TrialSiteCode,
 | ||
|                             SubjectCode = subject == null ? "" : subject.Code,
 | ||
|                             LatestScanDate = latestScanDate,
 | ||
|                             ClinicalDataSetName = string.Join(",", clinicalDataSetNameList),
 | ||
|                             ClinicalDataLevel = clinicalDataTrialSetList.Select(x => x.ClinicalDataLevel).FirstOrDefault(),
 | ||
|                             ClinicalUploadType = clinicalDataTrialSetList.Select(x => x.ClinicalUploadType).FirstOrDefault(),
 | ||
|                             CriterionNames = string.Join(",", criterionNameList.Distinct()),
 | ||
|                             RecordNumber = readModuleCriterionFromList.Count(),
 | ||
| 
 | ||
|                         };
 | ||
|                     }
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 List<string> urlList = new List<string>() {
 | ||
|                 "ClinicalAnswer/cRCCancelConfirmClinical",
 | ||
|                 "ClinicalAnswer/PMConfirmClinical"
 | ||
|                 };
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 if (urlList.Contains(_userInfo.RequestUrl))
 | ||
|                 {
 | ||
|                     extraIndentification = "/" + _userInfo.RequestUrl;
 | ||
|                     string status = string.Empty;
 | ||
|                     if (!entity.IsCRCConfirm && _userInfo.RequestUrl == "ClinicalAnswer/PMConfirmClinical")
 | ||
|                     {
 | ||
|                         status = "已撤回";
 | ||
|                         extraIndentification += "/revocation";
 | ||
|                     }
 | ||
|                     else if (entity.IsPMConfirm && _userInfo.RequestUrl == "ClinicalAnswer/PMConfirmClinical")
 | ||
|                     {
 | ||
|                         status = "已核对";
 | ||
|                         extraIndentification += "/Confirm";
 | ||
|                     }
 | ||
| 
 | ||
| 
 | ||
|                     var readModuleCriterionFrom = await _dbContext.ReadModuleCriterionFrom.Where(t => t.ReadModuleId == entity.Id).FirstOrDefaultAsync();
 | ||
|                     var latestScanDate = await _dbContext.ReadModule.Where(t => t.Id == entity.Id).Select(x => x.SubjectVisit.LatestScanDate).FirstOrDefaultAsync();
 | ||
|                     TrialSite? siteInfo = null;
 | ||
|                     Subject? subject = null;
 | ||
|                     //阅片标准
 | ||
| 
 | ||
| 
 | ||
|                     var clinicalFormIds = await _dbContext.ReadModuleCriterionFrom.Where(x => x.ReadModuleId == entity.Id).Select(x => x.ClinicalFormId).ToListAsync();
 | ||
|                     var clinicalDataTrialSetIds = await _dbContext.ClinicalForm.Where(x => clinicalFormIds.Contains(x.Id)).Select(x => x.ClinicalDataTrialSetId).Distinct().ToListAsync();
 | ||
| 
 | ||
|                     // 临床数据
 | ||
|                     var clinicalDataTrialSetList = await _dbContext.ClinicalDataTrialSet.Where(x => clinicalDataTrialSetIds.Contains(x.Id)).ToListAsync();
 | ||
| 
 | ||
|                     var clinicalSetIds = clinicalDataTrialSetList.Select(x => x.Id).ToList();
 | ||
| 
 | ||
|                     // 项目临床数据和标准的关联
 | ||
|                     var trialReadingCriterionIdList = await _dbContext.TrialClinicalDataSetCriterion.Where(x => clinicalSetIds.Contains(x.TrialClinicalDataSetId)).Select(x => x.TrialReadingCriterionId).Distinct().ToListAsync();
 | ||
| 
 | ||
|                     // 标准
 | ||
|                     var criterionNameList = await _dbContext.ReadingQuestionCriterionTrial.Where(t => trialReadingCriterionIdList.Contains(t.Id)).OrderBy(t => t.ShowOrder).Select(t => t.CriterionName).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                     subject = await _dbContext.Subject.Where(x => x.Id == entity.SubjectId).FirstOrDefaultAsync();
 | ||
|                     siteInfo = await _dbContext.TrialSite.Where(x => x.Id == subject.TrialSiteId).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                     var clinicalDataSetNameList = clinicalDataTrialSetList.Select(x => x.ClinicalDataSetName).ToList().Distinct();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                     objData = new
 | ||
|                     {
 | ||
|                         SiteCode = siteInfo == null ? "" : siteInfo.TrialSiteCode,
 | ||
|                         SubjectCode = subject == null ? "" : subject.Code,
 | ||
|                         LatestScanDate = latestScanDate,
 | ||
|                         ClinicalDataSetName = string.Join(",", clinicalDataSetNameList),
 | ||
|                         ClinicalDataLevel = clinicalDataTrialSetList.Select(x => x.ClinicalDataLevel).FirstOrDefault(),
 | ||
|                         ClinicalUploadType = clinicalDataTrialSetList.Select(x => x.ClinicalUploadType).FirstOrDefault(),
 | ||
|                         CriterionNames = string.Join(",", criterionNameList.Distinct()),
 | ||
|                         RecordNumber = clinicalFormIds.Count(),
 | ||
|                         Status = status,
 | ||
| 
 | ||
|                     };
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<ReadModule>(item.Entity as ReadModule, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     ObjectRelationParentId = entity.SubjectVisitId,
 | ||
| 
 | ||
|                     ObjectRelationParentId2 = entity.TrialReadingCriterionId,
 | ||
|                     ExtraIndentification = extraIndentification,
 | ||
|                     //SubjectVisitId = x.SubjectVisitId,
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                 }, objData);
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
| 
 | ||
|             #region 阅片
 | ||
| 
 | ||
|             //用户添加
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(User)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as User;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 //保存其他个性化配置
 | ||
|                 if (_userInfo.RequestUrl == "UserWLTemplate/setAutoCutNextTask")
 | ||
|                 {
 | ||
|                     extraIdentification = "/Personalization";
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<User>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     UserRealName = entity.FullName,
 | ||
|                 }
 | ||
|                 );
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             //分配规则
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TaskAllocationRule)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TaskAllocationRule;
 | ||
| 
 | ||
|                 var userRealName = await _dbContext.User.Where(x => x.Id == entity.DoctorUserId).Select(x => x.FullName).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 await InsertInspection<TaskAllocationRule>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.EnrollId,
 | ||
| 
 | ||
|                     ObjectRelationParentId2 = entity.DoctorUserId
 | ||
| 
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     UserRealName = userRealName
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
|             //  suject  医生绑定关系
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(SubjectUser)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as SubjectUser;
 | ||
| 
 | ||
|                 await InsertInspection<SubjectUser>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = false,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.SubjectId,
 | ||
| 
 | ||
|                     ObjectRelationParentId2 = entity.DoctorUserId,
 | ||
| 
 | ||
|                     ObjectRelationParentId3 = entity.TrialReadingCriterionId,
 | ||
| 
 | ||
|                 }, new { ArmToTask = entity.ArmEnum });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(SubjectCanceDoctor)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as SubjectCanceDoctor;
 | ||
| 
 | ||
|                 await InsertInspection<SubjectCanceDoctor>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.SubjectId,
 | ||
| 
 | ||
| 
 | ||
|                     ObjectRelationParentId3 = entity.TrialReadingCriterionId,
 | ||
| 
 | ||
|                 }, new { });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             //申请重阅记录表
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(VisitTaskReReading)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as VisitTaskReReading;
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 var reason = entity.RequestReReadingReason;
 | ||
|                 switch (_userInfo.RequestUrl)
 | ||
|                 {
 | ||
|                     case "VisitTask/applyReReading":
 | ||
| 
 | ||
|                         extraIdentification = "/" + (int)entity.RequestReReadingType;
 | ||
|                         break;
 | ||
| 
 | ||
|                     case "VisitTask/ConfirmReReading":
 | ||
| 
 | ||
|                         if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM)
 | ||
|                         {
 | ||
|                             extraIdentification = "/" + 1;
 | ||
|                         }
 | ||
|                         else
 | ||
|                         {
 | ||
|                             extraIdentification = "/" + 2;
 | ||
|                         }
 | ||
|                         reason = entity.RequestReReadingRejectReason;
 | ||
| 
 | ||
|                         if (entity.RequestReReadingResultEnum == RequestReReadingResult.Agree)
 | ||
|                         {
 | ||
|                             extraIdentification = extraIdentification + "/" + 1;
 | ||
| 
 | ||
|                         }
 | ||
|                         else if (entity.RequestReReadingResultEnum == RequestReReadingResult.Reject)
 | ||
|                         {
 | ||
|                             extraIdentification = extraIdentification + "/" + 2;
 | ||
|                         }
 | ||
|                         break;
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<VisitTaskReReading>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     VisitTaskId = entity.OriginalReReadingTaskId,
 | ||
| 
 | ||
|                     Reason = reason,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.OriginalReReadingTaskId,
 | ||
| 
 | ||
| 
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             //一致性分析规则
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(TaskConsistentRule)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as TaskConsistentRule;
 | ||
| 
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                 //自身一致性分析
 | ||
|                 if (entity.IsSelfAnalysis == true)
 | ||
|                 {
 | ||
|                     extraIdentification = "/" + 1;
 | ||
| 
 | ||
|                 }
 | ||
|                 //组件一致性分析
 | ||
|                 else
 | ||
|                 {
 | ||
|                     extraIdentification = "/" + 2;
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<TaskConsistentRule>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     IsDistinctionInterface = true,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.TrialId,
 | ||
| 
 | ||
|                     ObjectRelationParentId2 = entity.TrialReadingCriterionId,
 | ||
| 
 | ||
|                     ExtraIndentification = extraIdentification,
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             #region 阅片结果
 | ||
| 
 | ||
| 
 | ||
|             #region  暂时不区分标准
 | ||
| 
 | ||
|             //保存影像质量   多条记录,只记录一条稽查   
 | ||
|             if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingTaskQuestionAnswer)))
 | ||
|             {
 | ||
|                 //判断是否不需要记录稽查
 | ||
|                 if (_userInfo.IsNotNeedInspection)
 | ||
|                 {
 | ||
|                     _userInfo.IsNotNeedInspection = false;
 | ||
| 
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     // 保存影像质量 、  修改整体肿瘤评估结果 、  非dicom 保存访视阅片结果 、附加评估
 | ||
|                     if (_userInfo.RequestUrl == "ReadingImageTask/changeDicomReadingQuestionAnswer"
 | ||
|                         || _userInfo.RequestUrl == "ReadingImageTask/saveImageQuality"
 | ||
|                          || _userInfo.RequestUrl.Contains("SaveTaskQuestion")
 | ||
|                         || _userInfo.RequestUrl == "ReadingImageTask/saveVisitTaskQuestions"
 | ||
|                         || _userInfo.RequestUrl == "ReadingImageTask/changeCalculationAnswer"
 | ||
|                         || _userInfo.RequestUrl == "ReadingImageTask/submitTaskAdditionalQuestion")
 | ||
|                     {
 | ||
|                         var type = AuditOpt.Add;
 | ||
| 
 | ||
|                         List<UnitData> unitDataList = (await _dbContext.Dictionary.Where(x => x.Parent.Code == "ValueUnit").Where(x => x.Code != "0").ToListAsync()).Select(x => new UnitData()
 | ||
|                         {
 | ||
| 
 | ||
|                             Unit = (ValueUnit)int.Parse(x.Code),
 | ||
|                             UnitName = x.Value.ToString(),
 | ||
|                         }).ToList();
 | ||
|                         var extraIdentification = string.Empty;
 | ||
| 
 | ||
|                         //具体的答案
 | ||
|                         var taskQuestionAnswerList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTaskQuestionAnswer)).Select(t => t.Entity as ReadingTaskQuestionAnswer).ToList();
 | ||
| 
 | ||
|                         //获取问题名称 组合成数组
 | ||
|                         var quesionList = await _dbContext.ReadingQuestionTrial.Where(t => taskQuestionAnswerList.Select(k => k.ReadingQuestionTrialId).Contains(t.Id)).IgnoreQueryFilters().Select(t => new
 | ||
|                         {
 | ||
|                             QuestionName = t.QuestionName,
 | ||
|                             t.QuestionEnName,
 | ||
|                             QuestionId = t.Id,
 | ||
|                             t.DictionaryCode,
 | ||
|                             t.Unit,
 | ||
|                             t.ShowOrder,
 | ||
|                             AnswerType = t.Type,
 | ||
|                         }).OrderBy(t => t.ShowOrder).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
|                         var firstEntity = taskQuestionAnswerList.First();
 | ||
| 
 | ||
|                         var cloneEntity = firstEntity.Clone();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                         //保证Id 唯一
 | ||
|                         cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.ReadingQuestionCriterionTrialId.ToString(), firstEntity.ReadingQuestionTrialId.ToString(), firstEntity.VisitTaskId.ToString());
 | ||
| 
 | ||
| 
 | ||
|                         dynamic tableQuesionAndAnswerList = null;
 | ||
|                         //自定义特有标识
 | ||
|                         if (await _dbContext.ReadingQuestionCriterionTrial.AnyAsync(t => t.Id == firstEntity.ReadingQuestionCriterionTrialId && t.CriterionType == CriterionType.SelfDefine))
 | ||
|                         {
 | ||
|                             extraIdentification = "/Self";
 | ||
| 
 | ||
|                             //还会把病灶问题答案更新
 | ||
| 
 | ||
|                             var tableQuestionAnswerList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionAnswer)).Select(t => t.Entity as ReadingTableQuestionAnswer).ToList();
 | ||
| 
 | ||
| 
 | ||
|                             //获取表格问题名称 组合成数组
 | ||
|                             var tableQuesionList = await _dbContext.ReadingTableQuestionTrial.Where(t => tableQuestionAnswerList.Select(k => k.TableQuestionId).Contains(t.Id)).Select(t =>
 | ||
|                             new
 | ||
|                             {
 | ||
|                                 TrialReadingCriterionId = t.ReadingQuestionTrial.ReadingQuestionCriterionTrialId, //标准Id
 | ||
|                                 Type = t.ReadingQuestionTrial.QuestionName, //病灶类型
 | ||
|                                 t.ReadingQuestionTrial.Unit,
 | ||
|                                 t.ReadingQuestionTrial.CustomUnit,
 | ||
|                                 t.DictionaryCode,
 | ||
|                                 t.QuestionName,
 | ||
|                                 t.QuestionEnName,
 | ||
|                                 QuestionId = t.Id,
 | ||
|                                 t.ShowOrder,
 | ||
|                                 AnswerType = t.Type,
 | ||
|                             })
 | ||
|                                 .OrderBy(t => t.ShowOrder).ToListAsync();
 | ||
| 
 | ||
|                             tableQuesionAndAnswerList = tableQuestionAnswerList.Join(tableQuesionList, t => t.TableQuestionId, u => u.QuestionId, (t, u) =>
 | ||
|                                    new
 | ||
|                                    {
 | ||
|                                        //如果问题类型是附件 特殊处理 方便前端解析
 | ||
|                                        Answer = u.AnswerType == "upload" ? "❄❅❆❇❈❉❊" + t.Answer : t.Answer,
 | ||
|                                        u.QuestionName,
 | ||
|                                        u.QuestionEnName,
 | ||
|                                        u.DictionaryCode,
 | ||
|                                        u.ShowOrder,
 | ||
|                                        t.RowId
 | ||
|                                    }
 | ||
|                                    ).OrderBy(t => t.RowId).ThenBy(t => t.ShowOrder).ToList();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                         }
 | ||
| 
 | ||
|                         await InsertInspection<ReadingTaskQuestionAnswer>(cloneEntity, type, x => new InspectionConvertDTO()
 | ||
|                         {
 | ||
|                             VisitTaskId = x.VisitTaskId,
 | ||
| 
 | ||
|                             ObjectRelationParentId = x.VisitTaskId,
 | ||
| 
 | ||
|                             TrialReadingCriterionId = x.ReadingQuestionCriterionTrialId,
 | ||
| 
 | ||
|                             ExtraIndentification = extraIdentification,
 | ||
| 
 | ||
|                         }, new
 | ||
|                         {
 | ||
|                             QuestionAnswerList = taskQuestionAnswerList.Join(quesionList,
 | ||
|                             t => t.ReadingQuestionTrialId,
 | ||
|                             u => u.QuestionId,
 | ||
|                             (t, u) =>
 | ||
|                             new
 | ||
|                             {
 | ||
|                                 Answer = u.AnswerType == "upload" ? "❄❅❆❇❈❉❊" + t.Answer : t.Answer + unitDataList.Where(y => y.Unit == u.Unit).Select(x => x.UnitName).FirstIsNullReturnEmpty()
 | ||
|                             ,
 | ||
|                                 u.DictionaryCode,
 | ||
|                                 u.QuestionName,
 | ||
|                                 u.QuestionEnName,
 | ||
|                                 u.ShowOrder
 | ||
|                             }).OrderBy(t => t.ShowOrder).ToList()
 | ||
|                          ,
 | ||
|                             TableQuestionAndAnswerList = tableQuesionAndAnswerList
 | ||
|                         }
 | ||
|                              );
 | ||
| 
 | ||
| 
 | ||
|                     }
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|             //病灶这里操作  ReadingTableAnswerRowInfo  ReadingTableQuestionAnswer
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableAnswerRowInfo)))
 | ||
|             {
 | ||
| 
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingTableAnswerRowInfo;
 | ||
| 
 | ||
|                 var tableQuestionAnswerList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionAnswer)).Select(t => t.Entity as ReadingTableQuestionAnswer).Where(t => t.RowId == entity.Id).ToList();
 | ||
| 
 | ||
| 
 | ||
|                 List<UnitData> unitDataList = (await _dbContext.Dictionary.Where(x => x.Parent.Code == "ValueUnit").Where(x => x.Code != "0").ToListAsync()).Select(x => new UnitData()
 | ||
|                 {
 | ||
| 
 | ||
|                     Unit = (ValueUnit)int.Parse(x.Code),
 | ||
|                 }).ToList();
 | ||
| 
 | ||
|                 //获取表格问题名称 组合成数组
 | ||
|                 var tableQuesionList = await _dbContext.ReadingTableQuestionTrial.Where(t => tableQuestionAnswerList.Select(k => k.TableQuestionId).Contains(t.Id)).Select(t =>
 | ||
|                 new
 | ||
|                 {
 | ||
|                     TrialReadingCriterionId = t.ReadingQuestionTrial.ReadingQuestionCriterionTrialId, //标准Id
 | ||
|                     Type = t.ReadingQuestionTrial.QuestionName, //病灶类型
 | ||
|                     t.ReadingQuestionTrial.Unit,
 | ||
|                     t.ReadingQuestionTrial.CustomUnit,
 | ||
|                     t.DictionaryCode,
 | ||
|                     t.QuestionName,
 | ||
|                     t.QuestionEnName,
 | ||
|                     QuestionId = t.Id,
 | ||
|                     t.ShowOrder,
 | ||
|                     AnswerType = t.Type,
 | ||
| 
 | ||
|                 })
 | ||
|                     .OrderBy(t => t.ShowOrder).ToListAsync();
 | ||
| 
 | ||
|                 var trialReadingCriterionId = tableQuesionList.FirstOrDefault()?.TrialReadingCriterionId;
 | ||
| 
 | ||
|                 //获取表名称   类型名称(病灶类型)  不用查 从项目问题的稽查记录里面去取
 | ||
|                 //var tableName = await _dbContext.ReadingQuestionTrial.Where(t => t.Id == entity.QuestionId).Select(t => t.QuestionName).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 //分裂病灶 需要原病灶的标识
 | ||
| 
 | ||
|                 //if (_userInfo.RequestUrl == " ReadingImageTask/splitLesion")
 | ||
|                 var originalRowMark = string.Empty;
 | ||
|                 if (entity.SplitRowId != null)
 | ||
|                 {
 | ||
| 
 | ||
|                     originalRowMark = await _dbContext.ReadingTableAnswerRowInfo.Where(t => t.Id == entity.SplitRowId).Select(t => t.RowMark).FirstOrDefaultAsync();
 | ||
|                 }
 | ||
| 
 | ||
|                 //处理标识   因为触发器在稽查后才进行操作
 | ||
| 
 | ||
|                 if (entity.OrderMark == string.Empty)
 | ||
|                 {
 | ||
|                     entity.OrderMark = await _dbContext.ReadingQuestionTrial.Where(x => x.Id == entity.QuestionId).Select(x => x.OrderMark).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 }
 | ||
| 
 | ||
|                 entity.RowMark = entity.OrderMark + entity.RowIndex.GetLesionMark();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<ReadingTableAnswerRowInfo>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     VisitTaskId = x.VisitTaskId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = x.VisitTaskId,
 | ||
| 
 | ||
|                     TrialReadingCriterionId = trialReadingCriterionId,
 | ||
| 
 | ||
|                     ObjectRelationParentId2 = x.QuestionId
 | ||
| 
 | ||
|                 }, new
 | ||
|                 {
 | ||
|                     OriginalRowMark = originalRowMark,
 | ||
|                     //TableName = tableName,
 | ||
|                     QuestionAnswerList =
 | ||
| 
 | ||
|                 //需要手动添加病灶类型
 | ||
|                 tableQuestionAnswerList.Join(tableQuesionList, t => t.TableQuestionId, u => u.QuestionId, (t, u) =>
 | ||
|                 new
 | ||
|                 {
 | ||
|                     //如果问题类型是附件 特殊处理 方便前端解析
 | ||
|                     Answer = u.AnswerType == "upload" ? "❄❅❆❇❈❉❊" + t.Answer : t.Answer + unitDataList.Where(y => y.Unit == u.Unit).Select(x => x.UnitName).FirstIsNullReturnEmpty(),
 | ||
|                     //t.Answer        /*u.Unit==ValueUnit.Custom? t.Answer+u.CustomUnit:(u.Unit != ValueUnit.None|| u.Unit != null)*/,
 | ||
|                     u.QuestionName,
 | ||
|                     u.QuestionEnName,
 | ||
|                     u.DictionaryCode,
 | ||
|                     u.ShowOrder
 | ||
|                 }
 | ||
|                 ).OrderBy(t => t.ShowOrder).ToList()
 | ||
|                 });
 | ||
| 
 | ||
| 
 | ||
|                 ////添加/修改病灶接口  只会对单个病灶进行操作
 | ||
|                 //if (_userInfo.RequestUrl == "ReadingImageTask/submitTableQuestion")
 | ||
|                 //{             
 | ||
|                 //}
 | ||
| 
 | ||
|                 ////删除病灶接口  里面也有更新
 | ||
|                 //if (_userInfo.RequestUrl == "ReadingImageTask/deleteReadingRowAnswer")
 | ||
|                 //{
 | ||
|                 //    //有删除  有修改 多条稽查记录  
 | ||
| 
 | ||
|                 //    var deleteList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionAnswer) && GetEntityAuditOpt(x) == AuditOpt.Deleted).Select(t => t.Entity as ReadingTableQuestionAnswer).ToList();
 | ||
| 
 | ||
|                 //    var updateList = entitys.Where(x => x.Entity.GetType() == typeof(ReadingTableQuestionAnswer) && GetEntityAuditOpt(x) == AuditOpt.Update).Select(t => t.Entity as ReadingTableQuestionAnswer).ToList();
 | ||
|                 //}
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             #region 肿瘤学阅片结果 记录表格  废弃
 | ||
| 
 | ||
|             //if (entitys.Any(x => x.entity.gettype() == typeof(readingoncologytaskinfo)))
 | ||
|             //{
 | ||
|             //        var type = auditopt.add;
 | ||
| 
 | ||
|             //        var oncologyanswerlist = entitys.where(x => x.entity.gettype() == typeof(readingoncologytaskinfo)).select(t => t.entity as readingoncologytaskinfo);
 | ||
| 
 | ||
|             //        var visittaskidlist = oncologyanswerlist.select(t => t.visittaskid).tolist();
 | ||
| 
 | ||
|             //        var visittasklist = await _dbcontext.visittask.where(t => visittaskidlist.contains(t.id)).select(t => new { visittaskid = t.id, t.taskname, t.taskblindname, t.visittasknum, t.subjectid }).tolistasync();
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             //        var modifyvisitlist = await _dbcontext.readingglobaltaskinfo.where(t => visittaskidlist.contains(t.taskid) && t.visittask.taskstate == taskstate.effect).groupby(t => t.taskid).select(g => new
 | ||
|             //        {
 | ||
|             //            visittaskid = g.key,
 | ||
|             //            globalresult = g.select(c => new { c.answer, c.questionid })
 | ||
|             //        }).tolistasync();
 | ||
| 
 | ||
| 
 | ||
|             //        //var oncologyanswervisitlist = visittasklist.join(oncologyanswerlist, t => t.visittaskid, u => u.visittaskid, (t, u) => new { t.visittaskid, t.taskblindname, t.taskname, u.evaluationreason, u.evaluationresult }).tolist();
 | ||
| 
 | ||
|             //        var query = from answer in oncologyanswerlist
 | ||
|             //                    join visittask in visittasklist on answer.visittaskid equals visittask.visittaskid
 | ||
|             //                    join modifyvisit in modifyvisitlist on answer.visittaskid equals modifyvisit.visittaskid into cc
 | ||
|             //                    from modifyvisit in cc.defaultifempty()
 | ||
|             //                    select new
 | ||
|             //                    {
 | ||
|             //                        visittask.taskblindname,
 | ||
|             //                        visittask.taskname,
 | ||
|             //                        answer.evaluationreason,
 | ||
|             //                        answer.evaluationresult,
 | ||
|             //                        isglobalmodify = modifyvisit != null,
 | ||
|             //                        reason = modifyvisit != null ? modifyvisit.globalresult.where(t => t.questionid == null).firstordefault()?.answer : string.empty
 | ||
|             //                    };
 | ||
|             //    var result = query.tolist();
 | ||
| 
 | ||
| 
 | ||
|             //    var oncologyanswer = oncologyanswerlist.first();
 | ||
| 
 | ||
|             //    var cloneentity = oncologyanswer.clone();
 | ||
| 
 | ||
|             //    cloneentity.id = newid.nextguid();
 | ||
| 
 | ||
|             //    await insertinspection<readingoncologytaskinfo>(oncologyanswer, type, x => new inspectionconvertdto()
 | ||
|             //    {
 | ||
|             //        visittaskid = oncologyanswer.visittaskid,
 | ||
| 
 | ||
|             //        objectrelationparentid = oncologyanswer.visittaskid,
 | ||
| 
 | ||
|             //    }, new { oncologyanswerlist = result });
 | ||
|             //}
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             // 全局 阅片结果
 | ||
|             if (entitys.Any(x => x.Entity.GetType() == typeof(ReadingGlobalTaskInfo)))
 | ||
|             {
 | ||
|                 var type = AuditOpt.Add;
 | ||
| 
 | ||
|                 var list = entitys.Where(x => x.Entity.GetType() == typeof(ReadingGlobalTaskInfo)).Select(t => t.Entity as ReadingGlobalTaskInfo);
 | ||
| 
 | ||
|                 //不是固定问题的问题
 | ||
|                 var firstEntity = list.First();
 | ||
| 
 | ||
|                 var cloneEntity = firstEntity.Clone();
 | ||
| 
 | ||
|                 var criterion = await _dbContext.VisitTask.Where(t => t.Id == cloneEntity.GlobalTaskId).Select(t => new { t.TrialReadingCriterionId, t.TrialReadingCriterion.CriterionType }).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 //保证Id 唯一
 | ||
|                 cloneEntity.Id = IdentifierHelper.CreateGuid(firstEntity.GlobalTaskId.ToString(), criterion.TrialReadingCriterionId.ToString());
 | ||
| 
 | ||
|                 var extraIdentification = string.Empty;
 | ||
| 
 | ||
| 
 | ||
|                 var objList = new List<object>();
 | ||
| 
 | ||
|                 foreach (var group in list.GroupBy(t => t.TaskId))
 | ||
|                 {
 | ||
|                     var questionAnswerList = group.Where(t => t.QuestionId != null).ToList();
 | ||
| 
 | ||
| 
 | ||
|                     var questionIdList = questionAnswerList.Select(t => t.QuestionId).ToList();
 | ||
| 
 | ||
|                     var quesionList = await _dbContext.ReadingQuestionTrial.Where(t => questionIdList.Contains(t.Id)).Select(t => new
 | ||
|                     {
 | ||
|                         QuestionName = t.QuestionName,
 | ||
|                         t.QuestionEnName,
 | ||
|                         QuestionId = t.Id,
 | ||
|                         t.DictionaryCode,
 | ||
|                         t.ShowOrder
 | ||
|                     }).OrderBy(t => t.ShowOrder).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
|                     //pcwg3 的问题没有提交过来,是通过固定的方式去查询出来 
 | ||
|                     if (criterion.CriterionType == CriterionType.PCWG3)
 | ||
|                     {
 | ||
| 
 | ||
|                         extraIdentification = "/PCWG3";
 | ||
|                         //获取访视的评估结果 也要记录稽查
 | ||
|                         var visitAnswerList = await _dbContext.ReadingTaskQuestionAnswer.Where(t => t.VisitTaskId == group.Key && t.ReadingQuestionTrial.GlobalReadingShowType != GlobalReadingShowType.NotShow).Select(u => new
 | ||
|                         {
 | ||
|                             TaskBlindName = u.VisitTask.TaskBlindName,
 | ||
|                             QuestionId = u.ReadingQuestionTrialId,
 | ||
|                             QuestionName = u.ReadingQuestionTrial.QuestionName,
 | ||
|                             u.ReadingQuestionTrial.QuestionEnName,
 | ||
|                             u.ReadingQuestionTrial.DictionaryCode,
 | ||
|                             u.ReadingQuestionTrial.ShowOrder,
 | ||
|                             u.Answer
 | ||
|                         }).OrderBy(t => t.ShowOrder).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
|                         var obj = new
 | ||
|                         {
 | ||
|                             TaskBlindName = visitAnswerList.Select(t => t.TaskBlindName).FirstOrDefault(),
 | ||
|                             VisitQuestionAnswerList = visitAnswerList,
 | ||
| 
 | ||
| 
 | ||
|                             Reason = group.Where(t => t.QuestionId == null && t.GlobalAnswerType == GlobalAnswerType.Reason).FirstOrDefault()?.Answer,
 | ||
| 
 | ||
|                             QuestionAnswerList = questionAnswerList.Join(quesionList, t => t.QuestionId, u => u.QuestionId, (t, u) => new { t.Answer, u.QuestionName, u.QuestionEnName, u.DictionaryCode, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList()
 | ||
|                         };
 | ||
| 
 | ||
|                         objList.Add(obj);
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         //获取访视的评估结果 也要记录稽查
 | ||
|                         var visitAnswerList = await _dbContext.ReadingTaskQuestionAnswer.Where(t => t.VisitTaskId == group.Key && questionIdList.Contains(t.ReadingQuestionTrialId)).Select(u => new
 | ||
|                         {
 | ||
|                             TaskBlindName = u.VisitTask.TaskBlindName,
 | ||
|                             QuestionId = u.ReadingQuestionTrialId,
 | ||
|                             u.Answer
 | ||
|                         }).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
|                         var obj = new
 | ||
|                         {
 | ||
|                             TaskBlindName = visitAnswerList.Select(t => t.TaskBlindName).FirstOrDefault(),
 | ||
|                             VisitQuestionAnswerList = visitAnswerList.Join(quesionList, t => t.QuestionId, u => u.QuestionId, (t, u) => new { t.Answer, u.QuestionName, u.DictionaryCode, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList(),
 | ||
|                             Reason = group.Where(t => t.QuestionId == null && t.GlobalAnswerType == GlobalAnswerType.Reason).FirstOrDefault()?.Answer,
 | ||
|                             AgreeOrNot = group.Where(t => t.QuestionId == null && t.GlobalAnswerType == GlobalAnswerType.AgreeOrNot).FirstOrDefault()?.Answer,
 | ||
|                             UpdateType = group.Where(t => t.QuestionId == null && t.GlobalAnswerType == GlobalAnswerType.UpdateType).FirstOrDefault()?.Answer,
 | ||
|                             QuestionAnswerList = questionAnswerList.Join(quesionList, t => t.QuestionId, u => u.QuestionId, (t, u) => new { t.Answer, u.QuestionName, u.QuestionEnName, u.DictionaryCode, u.ShowOrder }).OrderBy(t => t.ShowOrder).ToList()
 | ||
|                         };
 | ||
| 
 | ||
|                         objList.Add(obj);
 | ||
| 
 | ||
|                     }
 | ||
| 
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 await InsertInspection<ReadingGlobalTaskInfo>(cloneEntity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     VisitTaskId = x.GlobalTaskId,
 | ||
|                     TrialReadingCriterionId = criterion.TrialReadingCriterionId,
 | ||
|                     ObjectRelationParentId = x.TaskId,
 | ||
|                     ExtraIndentification = extraIdentification
 | ||
|                 }, new { GlobalAnswerList = objList });
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             //肿瘤学阅片结果
 | ||
| 
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(ReadingOncologyTaskInfo)))
 | ||
|             {
 | ||
|                 var type = AuditOpt.Add;
 | ||
| 
 | ||
|                 var entity = item.Entity as ReadingOncologyTaskInfo;
 | ||
| 
 | ||
|                 await InsertInspection<ReadingOncologyTaskInfo>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     VisitTaskId = entity.VisitTaskId,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.VisitTaskId,
 | ||
| 
 | ||
|                 });
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
| 
 | ||
|             //任务
 | ||
|             foreach (var item in entitys.Where(x => x.Entity.GetType() == typeof(VisitTask)))
 | ||
|             {
 | ||
|                 var type = GetEntityAuditOpt(item);
 | ||
| 
 | ||
|                 var entity = item.Entity as VisitTask;
 | ||
|                 var userRealName = await _dbContext.User.Where(x => x.Id == entity.DoctorUserId).Select(x => x.FullName).FirstOrDefaultAsync();
 | ||
|                 VisitTaskAuditingDto obj = new VisitTaskAuditingDto()
 | ||
|                 {
 | ||
|                     UserRealName = userRealName,
 | ||
| 
 | ||
|                 };
 | ||
|                 #region 标识区分
 | ||
| 
 | ||
|                 if (type == AuditOpt.Add)
 | ||
|                 {
 | ||
|                     //生成一致性分析任务
 | ||
|                     if (entity.IsSelfAnalysis == true)
 | ||
|                     {
 | ||
|                         type = type + "/" + "SelfAnalysis";
 | ||
|                     }
 | ||
|                     else if (entity.IsSelfAnalysis == false)
 | ||
|                     {
 | ||
|                         type = type + "/" + "GroupAnalysis";
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         type = type + "/" + "NotAnalysis";
 | ||
|                     }
 | ||
| 
 | ||
|                     //区分任务类型
 | ||
|                     type = type + "/" + (int)entity.ReadingCategory;
 | ||
| 
 | ||
| 
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     switch (_userInfo.RequestUrl)
 | ||
|                     {
 | ||
|                         //申请重阅
 | ||
|                         case "VisitTask/applyReReading":
 | ||
|                             type = type + "/" + (int)entity.ReReadingApplyState;
 | ||
|                             break;
 | ||
| 
 | ||
| 
 | ||
|                         //同意重阅
 | ||
|                         case "VisitTask/ConfirmReReading":
 | ||
| 
 | ||
|                             if (_userInfo.UserTypeEnumInt == (int)UserTypeEnum.ProjectManager || _userInfo.UserTypeEnumInt == (int)UserTypeEnum.APM)
 | ||
|                             {
 | ||
|                                 type = type + "/" + 1;
 | ||
| 
 | ||
|                             }
 | ||
|                             else
 | ||
|                             {
 | ||
|                                 type = type + "/" + 2;
 | ||
|                             }
 | ||
| 
 | ||
|                             break;
 | ||
|                     }
 | ||
| 
 | ||
|                 }
 | ||
| 
 | ||
|                 //访视任务-- 非Dicom 阅片
 | ||
|                 if (_userInfo.RequestUrl == "ReadingImageTask/SubmitVisitTaskQuestions" && entity.ReadingTaskState != ReadingTaskState.HaveSigned && type == AuditOpt.Update)
 | ||
|                 {
 | ||
|                     //提交访视任务的时候 会多次更新同一个记录 只记录最后一次
 | ||
|                     return;
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 //Dicom 阅片  签名
 | ||
|                 if (_userInfo.RequestUrl == "ReadingImageTask/SubmitDicomVisitTask")
 | ||
|                 {
 | ||
|                     //跳转阅片结果需要该参数
 | ||
|                     var subjectCode = _dbContext.Subject.Where(t => t.Id == entity.SubjectId).Select(t => t.Code).First();
 | ||
| 
 | ||
|                     obj.SubjectCode = subjectCode;
 | ||
|                 }
 | ||
| 
 | ||
|                 #region 裁判、肿瘤学、全局 都是通用的
 | ||
| 
 | ||
|                 //裁判任务  结果的保存 和签名提交
 | ||
|                 if (entity.JudgeResultTaskId != null && (_userInfo.RequestUrl == "ReadingImageTask/SaveJudgeVisitTaskResult" || _userInfo.RequestUrl == "ReadingImageTask/SubmitJudgeVisitTaskResult"))
 | ||
|                 {
 | ||
| 
 | ||
|                     var visitTaskNum = entity.VisitTaskNum - ReadingCommon.TaskNumDic[ReadingCategory.Judge];
 | ||
|                     var list = await _dbContext.VisitTask.Where(t => t.TaskState == TaskState.Effect && t.SubjectId == entity.SubjectId && t.VisitTaskNum == visitTaskNum && t.JudgeVisitTaskId == entity.Id && t.TrialReadingCriterionId == entity.TrialReadingCriterionId).Select(t => new { t.Id, t.DoctorUser.FullName, t.ArmEnum }).OrderBy(t => t.ArmEnum).ToListAsync();
 | ||
| 
 | ||
| 
 | ||
|                     var r1 = list.Where(t => t.ArmEnum == Arm.DoubleReadingArm1).FirstOrDefault();
 | ||
|                     var r2 = list.Where(t => t.ArmEnum == Arm.DoubleReadingArm2).FirstOrDefault();
 | ||
| 
 | ||
|                     obj.R1 = r1.FullName;
 | ||
|                     obj.R2 = r2.FullName;
 | ||
|                     obj.SelectResult = r1.Id == entity.JudgeResultTaskId ? "R1" : "R2";
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|                 #endregion
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                 #region 通过链接跳转 2022 12-19
 | ||
| 
 | ||
|                 ////肿瘤学任务
 | ||
|                 //if (entity.ReadingTaskState == ReadingTaskState.HaveSigned && _userInfo.RequestUrl == "ReadingImageTask/SubmitOncologyReadingInfo")
 | ||
|                 //{
 | ||
| 
 | ||
| 
 | ||
|                 //    var oncologyAnswerList = await _dbContext.ReadingOncologyTaskInfo.Where(t => t.OncologyTaskId == entity.Id).Select(t => new { t.VisitTask.TaskBlindName, t.VisitTask.TaskName, t.EvaluationReason, t.EvaluationResult, t.VisitTask.VisitTaskNum, VisitTaskId = t.VisitTask.Id }).ToListAsync();
 | ||
| 
 | ||
|                 //    var golbalTaskInfo = await _dbContext.VisitTask.Where(t => t.SubjectId == entity.SubjectId && t.ReadingCategory == ReadingCategory.Global && t.TaskState == TaskState.Effect && t.IsAnalysisCreate == entity.IsAnalysisCreate && t.VisitTaskNum == (entity.VisitTaskNum - ReadingCommon.TaskNumDic[ReadingCategory.Oncology] + ReadingCommon.TaskNumDic[ReadingCategory.Global])).Select(t => new { GlobalTaskId = t.Id }).FirstNotNullAsync();
 | ||
| 
 | ||
| 
 | ||
|                 //    var globalResultList = await _dbContext.ReadingGlobalTaskInfo.Where(t => t.GlobalTaskId == golbalTaskInfo.GlobalTaskId).ToListAsync();
 | ||
| 
 | ||
|                 //    var modifyVisitList = globalResultList
 | ||
|                 //           .GroupBy(t => t.TaskId).Select(g => new
 | ||
|                 //           {
 | ||
|                 //               VisitTaskId = g.Key,
 | ||
|                 //               GlobalResult = g.Select(c => new { c.Answer, c.QuestionId })
 | ||
|                 //           }).ToList();
 | ||
| 
 | ||
|                 //    var query = from answer in oncologyAnswerList
 | ||
|                 //                join modifyVisit in modifyVisitList on answer.VisitTaskId equals modifyVisit.VisitTaskId into cc
 | ||
|                 //                from modifyVisit in cc.DefaultIfEmpty()
 | ||
|                 //                select new
 | ||
|                 //                {
 | ||
|                 //                    answer.TaskBlindName,
 | ||
|                 //                    answer.TaskName,
 | ||
|                 //                    answer.EvaluationReason,
 | ||
|                 //                    answer.EvaluationResult,
 | ||
|                 //                    IsGlobalModify = modifyVisit != null,
 | ||
|                 //                    Reason = modifyVisit != null ? modifyVisit.GlobalResult.Where(t => t.QuestionId == null).FirstOrDefault()?.Answer : String.Empty
 | ||
|                 //                };
 | ||
| 
 | ||
|                 //    var result = query.ToList();
 | ||
| 
 | ||
|                 //    obj = new { OncologyAnswerList = result };
 | ||
|                 //}
 | ||
| 
 | ||
|                 ////全局任务  
 | ||
|                 //if (entity.ReadingTaskState == ReadingTaskState.HaveSigned && _userInfo.RequestUrl == "ReadingImageTask/SubmitGlobalReadingInfo")
 | ||
|                 //{
 | ||
| 
 | ||
|                 //    var globalResultList = await _dbContext.ReadingGlobalTaskInfo.Where(t => t.GlobalTaskId == entity.Id).Select(t => new { VisitTaskId = t.TaskId, t.QuestionId, t.Answer, t.VisitTask.TaskBlindName, t.VisitTask.TaskName, t.TrialReadingQuestion.QuestionName }).ToListAsync();
 | ||
| 
 | ||
|                 //    var visitTaskIdList = globalResultList.Select(t => t.VisitTaskId).ToList();
 | ||
| 
 | ||
|                 //    var visitResultList = await _dbContext.ReadingTaskQuestionAnswer.Where(t => visitTaskIdList.Contains(t.VisitTaskId) && t.ReadingQuestionTrial.IsJudgeQuestion).Select(t => new { t.VisitTaskId, t.VisitTask.TaskBlindName, t.VisitTask.TaskName, t.VisitTask.VisitTaskNum, t.ReadingQuestionTrial.QuestionName, t.ReadingQuestionTrial.ShowOrder, t.Answer, t.ReadingQuestionTrialId })
 | ||
|                 //        .OrderBy(t => t.VisitTaskNum).ToListAsync();
 | ||
| 
 | ||
|                 //    var query = visitResultList.GroupBy(t => new { t.VisitTaskId, t.VisitTaskNum, t.TaskName, t.TaskBlindName }).Select(g => new
 | ||
|                 //    {
 | ||
|                 //        VisitTaskId = g.Key.VisitTaskId,
 | ||
|                 //        VisitTaskNum = g.Key.VisitTaskNum,
 | ||
|                 //        TaskName = g.Key.TaskName,
 | ||
|                 //        TaskBlindName = g.Key.TaskBlindName,
 | ||
| 
 | ||
|                 //        VisitQuestionAnswerList = g.OrderBy(t => t.ShowOrder).Select(u => new { u.QuestionName, u.Answer }).ToList(),
 | ||
| 
 | ||
|                 //        GlobalQuestionAnswerList = g.OrderBy(t => t.ShowOrder).Select(u => new { u.QuestionName, Answer = globalResultList.Where(t => t.VisitTaskId == g.Key.VisitTaskId && t.QuestionId == u.ReadingQuestionTrialId).FirstOrDefault()?.Answer ?? String.Empty }).ToList(),
 | ||
| 
 | ||
|                 //        Reason = globalResultList.Where(t => t.VisitTaskId == g.Key.VisitTaskId && t.QuestionId == null).FirstOrDefault()?.Answer ?? String.Empty
 | ||
|                 //    });
 | ||
| 
 | ||
| 
 | ||
|                 //    var result = query.ToList();
 | ||
| 
 | ||
|                 //    obj = new { GlobalAnswerList = result };
 | ||
|                 //}
 | ||
| 
 | ||
|                 #endregion
 | ||
| 
 | ||
|                 #endregion
 | ||
| 
 | ||
|                 if (entity.SouceReadModuleId != null)
 | ||
|                 {
 | ||
|                     var subjectVisitId = await _dbContext.ReadModule.Where(x => x.Id == entity.SouceReadModuleId).Select(x => x.SubjectVisitId).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                     obj.CutOffVisitName = await _dbContext.SubjectVisit.Where(x => x.Id == subjectVisitId).Select(x => x.BlindName).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                 }
 | ||
| 
 | ||
|                 await InsertInspection<VisitTask>(entity, type, x => new InspectionConvertDTO()
 | ||
|                 {
 | ||
|                     VisitTaskId = x.Id,
 | ||
| 
 | ||
|                     IsDistinctionInterface = type == AuditOpt.Update ? true : false,
 | ||
| 
 | ||
|                     ObjectRelationParentId = entity.SourceSubjectVisitId != null ? entity.SourceSubjectVisitId : entity.SouceReadModuleId,
 | ||
| 
 | ||
|                     ObjectRelationParentId2 = entity.DoctorUserId,
 | ||
| 
 | ||
|                     ObjectRelationParentId3 = entity.TrialReadingCriterionId,
 | ||
| 
 | ||
|                 }, obj);
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 插入稽查实体
 | ||
|         /// </summary>
 | ||
|         /// <typeparam name="T">泛型</typeparam>
 | ||
|         /// <param name="data">数据</param>
 | ||
|         /// <param name="type">类型</param>
 | ||
|         /// <param name="expression">表达式</param>
 | ||
|         /// <param name="otherItem">其他对象</param>
 | ||
|         /// <returns></returns>
 | ||
|         public async Task InsertInspection<T>(T entityObj, string type, Expression<Func<T, InspectionConvertDTO>> expression = null, object otherItem = null) where T : Entity
 | ||
|         {
 | ||
| 
 | ||
|             InspectionConvertDTO inspection = new InspectionConvertDTO();
 | ||
| 
 | ||
| 
 | ||
|             if (expression != null)
 | ||
|             {
 | ||
|                 var f = expression.Compile();
 | ||
| 
 | ||
|                 inspection = f(entityObj);
 | ||
|             }
 | ||
| 
 | ||
|             //避免重复赋值  有些特殊的GeneralId  
 | ||
|             var generalId = (inspection.GeneralId != null && inspection.GeneralId != Guid.Empty) ? inspection.GeneralId : entityObj.Id;
 | ||
|             inspection.GeneralId = generalId;
 | ||
| 
 | ||
|             inspection.Identification = GetInspectionRecordIdentification(entityObj, type, inspection.IsDistinctionInterface, inspection.IsSelfDefine) + inspection.ExtraIndentification;
 | ||
| 
 | ||
|             //将实体对象属性 映射到稽查实体
 | ||
|             MapEntityPropertyToAuditEntity(entityObj, inspection);
 | ||
| 
 | ||
|             //var generalData = await GetInspectionGeneralDataAsync(inspection);
 | ||
| 
 | ||
|             var generalData = await GetInspectionGeneralGuidAsync(inspection);
 | ||
| 
 | ||
|             //不可少  因为稽查实体可能某些Id没有 
 | ||
|             MapEntityPropertyToAuditEntity(generalData, inspection);
 | ||
| 
 | ||
|             #region 处理标识
 | ||
| 
 | ||
|             var from = await _dbContext.FrontAuditConfig.FirstOrDefaultAsync(x => x.Identification == inspection.Identification);
 | ||
|             inspection.ObjectTypeId = from?.ObjectTypeId;
 | ||
|             inspection.OptTypeId = from?.OptTypeId;
 | ||
|             //inspection.ChildrenTypeId = from?.ChildrenTypeId;
 | ||
|             inspection.ModuleTypeId = from?.ModuleTypeId;
 | ||
| 
 | ||
|             #endregion
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             inspection.CreateUserName = _userInfo.UserName;
 | ||
|             inspection.CreateUserRealName = _userInfo.RealName;
 | ||
|             inspection.RoleName = _userInfo.UserTypeShortName;
 | ||
|             inspection.CreateUserId = _userInfo.Id;
 | ||
|             inspection.IP = _userInfo.IP;
 | ||
|             inspection.CreateTime = inspection.CreateTime == default(DateTime) ? DateTime.Now : inspection.CreateTime;
 | ||
| 
 | ||
|             if (_userInfo.SignId != null)
 | ||
|             {
 | ||
|                 inspection.SignId = _userInfo.SignId;
 | ||
|                 inspection.IsSign = true;
 | ||
|             }
 | ||
| 
 | ||
|             var entityName = entityObj.GetType().Name;
 | ||
| 
 | ||
|             inspection.JsonDetail = new InspectionJsonDetail
 | ||
|             {
 | ||
|                 //稽查实体,加上扩充的信息               
 | ||
|                 //Data = AddJsonItem(entityObj, otherItem),
 | ||
| 
 | ||
|                 //通用信息 每条稽查必须记录的
 | ||
|                 //CommonData = generalData
 | ||
| 
 | ||
|                 EntityName = entityName,
 | ||
| 
 | ||
|                 //Data 仅仅记录稽查实体的信息  CommonData  存放关联数据的信息(特殊情况下会单独赋值)
 | ||
|                 //后期通过关联   就不需要把 OtherItem  并入到Data中
 | ||
|                 Data = AddJsonItem(entityObj, otherItem),
 | ||
| 
 | ||
|                 //准确来讲  此处称之为 RelationData 更贴合  为了兼容之前的数据
 | ||
|                 CommonData = new { SiteCode = generalData.SiteCode, SubjectCode = generalData.SubjectCode },
 | ||
| 
 | ||
|             }.ToJsonStr();
 | ||
| 
 | ||
|             inspection.BatchId = _userInfo.BatchId.Value;
 | ||
| 
 | ||
|             inspection.EntityName = entityName;
 | ||
| 
 | ||
|             await _dbContext.DataInspection.AddAsync(inspection);
 | ||
| 
 | ||
| 
 | ||
|             //await AddInspectionRecordAsync( entityObj, inspection, otherItem);
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 将数据库实体属性,映射到稽查实体属性 避免重复赋值
 | ||
|         /// </summary>
 | ||
|         /// <param name="date"></param>
 | ||
|         /// <param name="auditEntity"></param>
 | ||
|         public void MapEntityPropertyToAuditEntity(object data, DataInspection auditEntity)
 | ||
|         {
 | ||
|             foreach (var auditEntityPropertyInfo in auditEntity.GetType().GetProperties())
 | ||
|             {
 | ||
|                 var excepetNameList = typeof(Entity).GetProperties().Select(t => t.Name)
 | ||
|                     .Concat(typeof(ISoftDelete).GetProperties().Select(t => t.Name))
 | ||
|                     .Concat(typeof(IAuditAdd<>).GetProperties().Select(t => t.Name))
 | ||
|                     .Concat(typeof(IAuditUpdate<>).GetProperties().Select(t => t.Name));
 | ||
| 
 | ||
|                 var filterProperties = data.GetType().GetProperties().Where(t => !excepetNameList.Any(u => u == t.Name));
 | ||
| 
 | ||
|                 if (filterProperties.Any(t => t.Name == auditEntityPropertyInfo.Name))
 | ||
|                 {
 | ||
|                     var value = data.GetType().GetProperty(auditEntityPropertyInfo.Name).GetValue(data);
 | ||
| 
 | ||
|                     auditEntity.GetType().GetProperty(auditEntityPropertyInfo.Name).SetValue(auditEntity, value);
 | ||
|                 }
 | ||
|             }
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 获取稽查通用Guid数据 (每条稽查记录必须查询的)
 | ||
|         /// </summary>
 | ||
|         /// <param name="inspection"></param>
 | ||
|         /// <returns></returns>
 | ||
|         public async Task<InspectionGeneralData> GetInspectionGeneralGuidAsync(InspectionConvertDTO inspection)
 | ||
|         {
 | ||
| 
 | ||
|             InspectionGeneralData generalData = new InspectionGeneralData()
 | ||
|             {
 | ||
|                 TrialSiteId = inspection.TrialSiteId,
 | ||
|                 SubjectId = inspection.SubjectId,
 | ||
|                 SubjectVisitId = inspection.SubjectVisitId,
 | ||
|                 TrialId = inspection.TrialId,
 | ||
|                 TrialReadingCriterionId = inspection.TrialReadingCriterionId
 | ||
|             };
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|             if (inspection.VisitTaskId != null)
 | ||
|             {
 | ||
| 
 | ||
|                 if (generalData.TrialId == null || generalData.TrialSiteId == null || generalData.SubjectId == null || generalData.TrialReadingCriterionId == null)
 | ||
|                 {
 | ||
|                     var info = await _dbContext.VisitTask.Where(x => x.Id == inspection.VisitTaskId).Select(x => new { SubjectCode = x.Subject.Code, TrialSiteCode = x.Subject.TrialSite.TrialSiteCode, SubjectId = x.SubjectId, x.Subject.TrialSiteId, x.TrialId, x.SourceSubjectVisitId, ReadModuleSubjectVisitId = (Guid?)x.ReadModule.SubjectVisitId, x.TrialReadingCriterionId }).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                     generalData.TrialReadingCriterionId = info?.TrialReadingCriterionId ?? generalData.TrialReadingCriterionId;
 | ||
|                     generalData.TrialId = info?.TrialId ?? generalData.TrialId;
 | ||
|                     generalData.SubjectId = info?.SubjectId ?? generalData.SubjectId;
 | ||
|                     generalData.TrialSiteId = info?.TrialSiteId ?? generalData.TrialSiteId;
 | ||
|                     generalData.SubjectVisitId = info?.SourceSubjectVisitId != null ? info?.SourceSubjectVisitId : (info?.ReadModuleSubjectVisitId != null ? info?.ReadModuleSubjectVisitId : null);
 | ||
| 
 | ||
|                     //以后移除
 | ||
|                     generalData.SiteCode = info?.TrialSiteCode ?? generalData.SiteCode;
 | ||
|                     generalData.SubjectCode = info?.SubjectCode ?? generalData.SubjectCode;
 | ||
|                 }
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|             if (inspection.TrialReadingCriterionId != null)
 | ||
|             {
 | ||
|                 if (generalData.TrialId == null)
 | ||
|                 {
 | ||
|                     var info = await _dbContext.ReadingQuestionCriterionTrial.Where(x => x.Id == inspection.TrialReadingCriterionId).Select(x => new { x.TrialId }).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                     generalData.TrialId = info?.TrialId ?? generalData.TrialId;
 | ||
|                 }
 | ||
|             }
 | ||
| 
 | ||
|             // Suject  visit  都进行了设置   不用处理
 | ||
| 
 | ||
|             if (inspection.SubjectVisitId != null)
 | ||
|             {
 | ||
|                 if (generalData.TrialId == null || generalData.TrialSiteId == null || generalData.SubjectId == null)
 | ||
|                 {
 | ||
|                     var info = await _dbContext.SubjectVisit.Where(x => x.Id == generalData.SubjectVisitId).Select(x =>
 | ||
|                   new { x.SubjectId, x.TrialSiteId, x.TrialId, SubjectCode = x.Subject.Code, TrialSiteCode = x.Subject.TrialSite.TrialSiteCode }).FirstOrDefaultAsync();
 | ||
| 
 | ||
| 
 | ||
|                     generalData.TrialId = info?.TrialId ?? generalData.TrialId;
 | ||
|                     generalData.TrialSiteId = info?.TrialSiteId ?? generalData.TrialSiteId;
 | ||
|                     generalData.SubjectId = info?.SubjectId ?? generalData.SubjectId;
 | ||
| 
 | ||
|                     //以后移除
 | ||
|                     generalData.SiteCode = info?.TrialSiteCode ?? generalData.SiteCode;
 | ||
|                     generalData.SubjectCode = info?.SubjectCode ?? generalData.SubjectCode;
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
| 
 | ||
|             if (generalData.SubjectId != null)
 | ||
|             {
 | ||
|                 if (generalData.TrialId == null || generalData.TrialSiteId == null)
 | ||
|                 {
 | ||
|                     var info = await _dbContext.Subject.Where(x => x.Id == generalData.SubjectId).Select(x => new { SubjectId = x.Id, x.TrialSiteId, x.TrialId, SubjectCode = x.Code, TrialSiteCode = x.TrialSite.TrialSiteCode }).FirstOrDefaultAsync();
 | ||
| 
 | ||
|                     if (info == null)
 | ||
|                     {
 | ||
|                         var subject = _dbContext.Subject.Find(generalData.SubjectId);
 | ||
| 
 | ||
|                         generalData.TrialId = subject?.TrialId;
 | ||
|                         generalData.TrialSiteId = subject?.TrialSiteId;
 | ||
|                     }
 | ||
|                     else
 | ||
|                     {
 | ||
|                         generalData.TrialId = info?.TrialId ?? generalData.TrialId;
 | ||
| 
 | ||
|                         generalData.TrialSiteId = info?.TrialSiteId ?? generalData.TrialSiteId;
 | ||
|                     }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|                     //以后移除
 | ||
|                     generalData.SiteCode = info?.TrialSiteCode ?? generalData.SiteCode;
 | ||
|                     generalData.SubjectCode = info?.SubjectCode ?? generalData.SubjectCode;
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|             return generalData;
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|         /// <summary>
 | ||
|         /// 获取稽查记录的标识符   部分业务会进行特殊处理
 | ||
|         /// </summary>
 | ||
|         /// <returns></returns>
 | ||
|         public string GetInspectionRecordIdentification<T>(T entityObj, string type, bool IsDistinctionInterface = true, bool isSelfDefine = false)
 | ||
|         {
 | ||
|             var entityTypeName = entityObj.GetType().Name;
 | ||
| 
 | ||
|             //文档签署这块,不区分系统和项目的 需要处理为同一个标识
 | ||
|             if (typeof(T) == typeof(TrialDocConfirmedUser) || typeof(T) == typeof(SystemDocConfirmedUser))
 | ||
|             {
 | ||
|                 entityTypeName = "New/" + "UserSigned";
 | ||
|             }
 | ||
| 
 | ||
|             //默认规则
 | ||
|             if (IsDistinctionInterface)
 | ||
|             {
 | ||
|                 //自定义 标识后面 补充由代码上层的 extraIdentification 附加
 | ||
|                 if (isSelfDefine)
 | ||
|                 {
 | ||
|                     return $"{_userInfo.RequestUrl}/{entityTypeName}";
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     return $"{_userInfo.RequestUrl}/{entityTypeName}/{type}";
 | ||
|                 }
 | ||
| 
 | ||
| 
 | ||
|             }
 | ||
|             else
 | ||
|             {
 | ||
|                 //自定义 标识后面 补充由代码上层的 extraIdentification 附加
 | ||
|                 if (isSelfDefine)
 | ||
|                 {
 | ||
|                     return $"{entityTypeName}";
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     return $"{entityTypeName}/{type}";
 | ||
|                 }
 | ||
| 
 | ||
|             }
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
|         /// 往json里面添加属性
 | ||
|         /// </summary>
 | ||
|         /// <param name="jsonObj">json</param>
 | ||
|         /// <param name="otherItem">添加对象</param>
 | ||
|         /// <returns></returns>
 | ||
|         public IDictionary<string, object> AddJsonItem(object jsonObj, object otherItem = null)
 | ||
|         {
 | ||
| 
 | ||
| 
 | ||
|             var JsonData = JsonConvert.DeserializeObject<IDictionary<string, object>>((jsonObj).ToJsonStr());
 | ||
| 
 | ||
|             if (otherItem == null)
 | ||
|             {
 | ||
|                 return JsonData;
 | ||
|             }
 | ||
|             var other = JsonConvert.DeserializeObject<IDictionary<string, object>>(otherItem.ToJsonStr());
 | ||
| 
 | ||
|             foreach (var item in other)
 | ||
|             {
 | ||
|                 if (JsonData.ContainsKey(item.Key))
 | ||
|                 {
 | ||
|                     JsonData[item.Key] = item.Value;
 | ||
|                 }
 | ||
|                 else
 | ||
|                 {
 | ||
|                     JsonData.Add(item.Key, item.Value);
 | ||
|                 }
 | ||
| 
 | ||
|             }
 | ||
|             return JsonData;
 | ||
| 
 | ||
|         }
 | ||
| 
 | ||
| 
 | ||
| 
 | ||
|     }
 | ||
| }
 |