This commit is contained in:
he
2023-06-20 15:46:48 +08:00
parent eef042b469
commit fbc639030a
7 changed files with 173 additions and 19 deletions
@@ -10,6 +10,7 @@ using IRaCIS.Core.Application.ViewModel;
using IRaCIS.Core.Application.Service.Reading.Dto;
using IRaCIS.Core.Infra.EFCore.Common;
using IRaCIS.Core.Domain.Share;
using MassTransit;
namespace IRaCIS.Core.Application.Service
{
@@ -17,7 +18,7 @@ namespace IRaCIS.Core.Application.Service
/// 临床数据问题
/// </summary>
[ApiExplorerSettings(GroupName = "Reading")]
public class ClinicalQuestionService : BaseService
public class ClinicalQuestionService : BaseService, IClinicalQuestionService
{
private readonly IRepository<TrialClinicalQuestion> _trialClinicalQuestionRepository;
@@ -303,24 +304,120 @@ namespace IRaCIS.Core.Application.Service
#region
/// <summary>
/// 同步系统问题
/// </summary>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task SynchronizationQuestion(List<SynchronizationQuestionDto> inDto)
{
var trialClinicalId = inDto.Select(x => x.TrialClinicalId).ToList();
var systemClinicalId = inDto.Select(x => x.SystemClinicalId).ToList();
var questionRelation = _trialClinicalQuestionRepository.Where(x => trialClinicalId.Contains(x.TrialClinicalId)).ToDictionary(
x => x.SystemClinicalQuestionId ?? default(Guid),
x => x.Id
);
var questionRelationList =await _trialClinicalQuestionRepository.Where(x => trialClinicalId.Contains(x.TrialClinicalId)).Select(x => new QuestionDic()
{
SystemQuestionId=x.SystemClinicalQuestionId?? default(Guid),
TrialQuestionId=x.Id,
TrialClinicalId=x.TrialClinicalId,
}).ToListAsync();
var tableQuestionRelation = _trialClinicalTableQuestionRepository.Where(x => trialClinicalId.Contains(x.TrialClinicalId)).ToDictionary(
x => x.SystemTableQuestionId ?? default(Guid),
x => x.Id
);
var tableQuestionRelationList = await _trialClinicalTableQuestionRepository.Where(x => trialClinicalId.Contains(x.TrialClinicalId)).Select(x => new QuestionDic()
{
SystemQuestionId = x.SystemTableQuestionId ?? default(Guid),
TrialQuestionId = x.Id,
TrialClinicalId = x.TrialClinicalId,
}).ToListAsync();
var newTrialQuestionAll = await _systemClinicalQuestionRepository.Where(x => systemClinicalId.Contains(x.SystemClinicalId))
.ProjectTo<TrialClinicalQuestion>(_mapper.ConfigurationProvider).ToListAsync();
var newTrialTableQuestionAll = await _systemClinicalTableQuestionRepository.Where(x => systemClinicalId.Contains(x.SystemClinicalId))
.ProjectTo<TrialClinicalTableQuestion>(_mapper.ConfigurationProvider).ToListAsync();
//var
List<TrialClinicalQuestion> addTrialDataList = new List<TrialClinicalQuestion>();
List<TrialClinicalTableQuestion> addTrialTableList = new List<TrialClinicalTableQuestion>();
foreach (var item in inDto)
{
var questionRelation = questionRelationList.Where(x=>x.TrialClinicalId==item.TrialClinicalId).ToDictionary(
x => x.SystemQuestionId,
x => x.TrialQuestionId
);
var newTrialQuestionList = newTrialQuestionAll.Where(x => x.SystemClinicalQuestionId == item.SystemClinicalId).ToList();
newTrialQuestionList.ForEach(x =>
{
if (questionRelation.ContainsKey(x.Id))
{
x.Id = questionRelation[x.Id];
}
else
{
var newid = NewId.NextGuid();
questionRelation.Add(x.Id, newid);
x.Id = newid;
}
x.TrialClinicalId = item.TrialClinicalId;
});
var copyNewQuestionList = newTrialQuestionList.Clone();
foreach (var x in newTrialQuestionList)
{
var question = x.Clone();
if (question.ParentId != null)
{
question.ParentId = questionRelation[question.ParentId ?? default(Guid)];
}
if (question.GroupId != null)
{
question.GroupId = questionRelation[question.GroupId ?? default(Guid)];
}
addTrialDataList.Add(question);
};
var tableQuestionRelation = tableQuestionRelationList.Where(x => x.TrialClinicalId == item.TrialClinicalId).ToDictionary(
x => x.SystemQuestionId,
x => x.TrialQuestionId
);
var newTrialTableQuestionList = newTrialTableQuestionAll.Where(x => x.TrialClinicalId == item.TrialClinicalId)
.ToList();
newTrialTableQuestionList.ForEach(x =>
{
if (tableQuestionRelation.ContainsKey(x.Id))
{
x.Id = tableQuestionRelation[x.Id];
}
else
{
var newid = NewId.NextGuid();
tableQuestionRelation.Add(x.Id, newid);
x.Id = newid;
}
});
foreach (var x in newTrialTableQuestionList)
{
var tableQuestion = x.Clone();
tableQuestion.TrialClinicalId = item.TrialClinicalId;
tableQuestion.QuestionId = copyNewQuestionList.Where(y => y.SystemClinicalQuestionId == x.QuestionId).Select(y => y.Id).FirstOrDefault();
addTrialTableList.Add(tableQuestion);
}
}
await _trialClinicalQuestionRepository.BatchDeleteNoTrackingAsync(x => trialClinicalId.Contains(x.TrialClinicalId));
await _trialClinicalQuestionRepository.AddRangeAsync(addTrialDataList);
await _trialClinicalTableQuestionRepository.BatchDeleteNoTrackingAsync(x => trialClinicalId.Contains(x.TrialClinicalId) );
await _trialClinicalTableQuestionRepository.AddRangeAsync(addTrialTableList);
}