|
|
|
@ -617,11 +617,11 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
public async Task<List<RecommendMedicalPackageDto>> GetCustomerOrgRecommendMedicalPackageListByPatientRegisterIdAsync(RecommendMedicalPackagePatientRegisterIdInputDto input) |
|
|
|
{ |
|
|
|
var customerOrgGroupEntity = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() |
|
|
|
join customerOrgGroup in await _customerOrgGroupRepository.GetQueryableAsync() |
|
|
|
on patientRegister.CustomerOrgGroupId equals customerOrgGroup.CustomerOrgGroupId |
|
|
|
|
|
|
|
where patientRegister.PatientRegisterId == input.PatientRegisterId |
|
|
|
select customerOrgGroup |
|
|
|
join customerOrgGroup in await _customerOrgGroupRepository.GetQueryableAsync() |
|
|
|
on patientRegister.CustomerOrgGroupId equals customerOrgGroup.CustomerOrgGroupId |
|
|
|
|
|
|
|
where patientRegister.PatientRegisterId == input.PatientRegisterId |
|
|
|
select customerOrgGroup |
|
|
|
).FirstOrDefault(); |
|
|
|
|
|
|
|
var recommendMedicalPackageDtos = new List<RecommendMedicalPackageDto>(); |
|
|
|
@ -662,23 +662,23 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
var asbitems = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync() |
|
|
|
join customerOrgGroup in await _customerOrgGroupRepository.GetQueryableAsync() |
|
|
|
on patientRegister.CustomerOrgGroupId equals customerOrgGroup.CustomerOrgGroupId |
|
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() |
|
|
|
join registerCheck in await _registerCheckRepository.GetQueryableAsync() |
|
|
|
on patientRegister.PatientRegisterId equals registerCheck.PatientRegisterId |
|
|
|
join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() |
|
|
|
on registerCheck.RegisterCheckId equals registerCheckAsbitem.RegisterCheckId |
|
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync() |
|
|
|
on registerCheckAsbitem.AsbitemId equals asbitem.AsbitemId |
|
|
|
join itemType in await _itemTypeRepository.GetQueryableAsync() |
|
|
|
join itemType in await _itemTypeRepository.GetQueryableAsync() |
|
|
|
on asbitem.ItemTypeId equals itemType.ItemTypeId |
|
|
|
where registerCheck.PatientRegisterId == input.PatientRegisterId |
|
|
|
select new |
|
|
|
{ |
|
|
|
customerOrgGroup, |
|
|
|
asbitem, |
|
|
|
itemType |
|
|
|
customerOrgGroup, |
|
|
|
asbitem, |
|
|
|
itemType |
|
|
|
} |
|
|
|
).ToList(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var recommendMedicalPackageDto = new RecommendMedicalPackageDto() |
|
|
|
{ |
|
|
|
@ -690,22 +690,22 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
var medicalPackageAsbitems = asbitems.Select(o=> |
|
|
|
var medicalPackageAsbitems = asbitems.Select(o => |
|
|
|
new RecommendMedicalPackageAsbitem() |
|
|
|
{ |
|
|
|
AsbitemId = o.asbitem.AsbitemId, |
|
|
|
AsbitemName = o.asbitem.AsbitemName, |
|
|
|
ShortName = o.asbitem.ShortName, |
|
|
|
Price = o.asbitem.Price, |
|
|
|
ClinicalMeaning = o.asbitem.ClinicalMeaning, |
|
|
|
Warn = o.asbitem.Warn, |
|
|
|
IsBelongMedicalPackage = 'Y', |
|
|
|
DisplayOrder = o.asbitem.ItemType.DisplayOrder * 100 + o.asbitem.DisplayOrder |
|
|
|
}).ToList(); |
|
|
|
{ |
|
|
|
AsbitemId = o.asbitem.AsbitemId, |
|
|
|
AsbitemName = o.asbitem.AsbitemName, |
|
|
|
ShortName = o.asbitem.ShortName, |
|
|
|
Price = o.asbitem.Price, |
|
|
|
ClinicalMeaning = o.asbitem.ClinicalMeaning, |
|
|
|
Warn = o.asbitem.Warn, |
|
|
|
IsBelongMedicalPackage = 'Y', |
|
|
|
DisplayOrder = o.asbitem.ItemType.DisplayOrder * 100 + o.asbitem.DisplayOrder |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
recommendMedicalPackageDto.Asbitems.AddRange(medicalPackageAsbitems); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//----推荐组合项目
|
|
|
|
|
|
|
|
@ -760,7 +760,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
var age = DateTime.Now.Year - ((DateTime)person.BirthDate).Year; |
|
|
|
var medicalPackages = await _medicalPackageRepository.GetListAsync(o => o.IsActive == 'Y' && |
|
|
|
o.IsWebAppoint == 'Y' && o.IsBasicRecommend == 'Y' && |
|
|
|
(o.ForSexId == ForSexFlag.All || o.ForSexId == person.SexId) && |
|
|
|
(o.ForSexId == ForSexFlag.All || o.ForSexId == person.SexId) && |
|
|
|
o.AgeUpperLimit >= age && o.AgeLowerLimit <= age); |
|
|
|
if (person.MaritalStatusId == MaritalStatusFlag.UnMarried) |
|
|
|
{ |
|
|
|
@ -822,7 +822,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
ClinicalMeaning = asbitem.ClinicalMeaning, |
|
|
|
Warn = asbitem.Warn, |
|
|
|
IsBelongMedicalPackage = 'Y', |
|
|
|
DisplayOrder = itemType.DisplayOrder * 100 + asbitem.DisplayOrder |
|
|
|
DisplayOrder = itemType.DisplayOrder * 100 + asbitem.DisplayOrder |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
recommendMedicalPackageDto.Asbitems.AddRange(medicalPackageAsbitems); |
|
|
|
@ -839,28 +839,28 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
|
|
|
|
//----推荐组合项目
|
|
|
|
|
|
|
|
var personDiseaseRiskLevelDtos = await GetDiseaseRiskListByPersonIdAsync(input.PersonId); |
|
|
|
var personDiseaseRiskLevelDtos = await GetDiseaseRiskListByPersonIdAsync(input.PersonId, input.RecommendId); |
|
|
|
//var pregnancyAsbitems = await _asbitemRepository.GetListAsync(o =>
|
|
|
|
//o.ForPregnantFlag == ForPregnantFlag.PreparePregnancy || o.ForPregnantFlag == ForPregnantFlag.Pregnancy);
|
|
|
|
//去掉基本套餐已经包含的组合项目和和怀孕禁止检查的项目
|
|
|
|
foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos) |
|
|
|
{ |
|
|
|
for (var i = 0; i< personDiseaseRiskLevelDto.Asbitems.Count; i++ ) |
|
|
|
for (var i = 0; i < personDiseaseRiskLevelDto.Asbitems.Count; i++) |
|
|
|
{ |
|
|
|
var personDiseaseRiskLevelAsbitem = personDiseaseRiskLevelDto.Asbitems[i]; |
|
|
|
if (medicalPackageAsbitems.Where(o => o.AsbitemId == personDiseaseRiskLevelAsbitem.AsbitemId).Any()) |
|
|
|
{ |
|
|
|
personDiseaseRiskLevelDto.Asbitems.Remove(personDiseaseRiskLevelAsbitem); |
|
|
|
i --; |
|
|
|
i--; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
var personDiseaseRiskLevelResultDtos = new List<PersonDiseaseRiskLevelDto>(); |
|
|
|
foreach (var personDiseaseRiskLevelDto in personDiseaseRiskLevelDtos) |
|
|
|
{ |
|
|
|
if(personDiseaseRiskLevelDto.Asbitems.Where(o=>o.AsbitemRecommendLevelId == input.RecommendId).Count() > 0) |
|
|
|
if (personDiseaseRiskLevelDto.Asbitems.Where(o => o.AsbitemRecommendLevelId == input.RecommendId).Count() > 0) |
|
|
|
{ |
|
|
|
//只有有推荐的项目才进入推荐风险项目列表
|
|
|
|
var personDiseaseRiskLevelResultDto = new PersonDiseaseRiskLevelDto() |
|
|
|
@ -871,12 +871,12 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
DiseaseRiskLevelId = personDiseaseRiskLevelDto.DiseaseRiskLevelId, |
|
|
|
DiseaseRiskLevelName = personDiseaseRiskLevelDto.DiseaseRiskLevelName |
|
|
|
}; |
|
|
|
personDiseaseRiskLevelResultDto.Asbitems = |
|
|
|
personDiseaseRiskLevelResultDto.Asbitems = |
|
|
|
personDiseaseRiskLevelDto.Asbitems.Where(o => o.AsbitemRecommendLevelId == input.RecommendId).ToList(); |
|
|
|
recommendMedicalPackageDto.SumPrice += personDiseaseRiskLevelResultDto.Asbitems.Sum(o => o.Price); |
|
|
|
personDiseaseRiskLevelResultDtos.Add(personDiseaseRiskLevelResultDto); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
recommendMedicalPackageDto.DiseaseRiskLevelAsbitems = personDiseaseRiskLevelResultDtos; |
|
|
|
return recommendMedicalPackageDto; |
|
|
|
@ -899,15 +899,15 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
PersonId = input.PersonId, |
|
|
|
RecommendId = i + 1 |
|
|
|
}); |
|
|
|
if(i == 0) |
|
|
|
if (i == 0) |
|
|
|
{ |
|
|
|
recommendMedicalPackageDto.MedicalPackageName = "推荐必查方案"; |
|
|
|
} |
|
|
|
else if(i == 1) |
|
|
|
else if (i == 1) |
|
|
|
{ |
|
|
|
recommendMedicalPackageDto.MedicalPackageName = "精准筛查方案"; |
|
|
|
} |
|
|
|
else if(i == 2) |
|
|
|
else if (i == 2) |
|
|
|
{ |
|
|
|
recommendMedicalPackageDto.MedicalPackageName = "深入检查方案"; |
|
|
|
} |
|
|
|
@ -920,7 +920,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private async Task<List<PersonDiseaseRiskLevelDto>> GetDiseaseRiskListByPersonIdAsync(Guid personId) |
|
|
|
private async Task<List<PersonDiseaseRiskLevelDto>> GetDiseaseRiskListByPersonIdAsync(Guid personId, int recommendId = 1) |
|
|
|
{ |
|
|
|
var questionRegister = (await _questionRegisterRepository.GetQueryableAsync()) |
|
|
|
.Where(o => o.PersonId == personId) |
|
|
|
@ -931,7 +931,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
{ |
|
|
|
return null; |
|
|
|
} |
|
|
|
|
|
|
|
//获取人员所有答案和对应的组合项目
|
|
|
|
var questionRegisterItems = (from questionRegisterItem in await _questionRegisterItemRepository.GetQueryableAsync() |
|
|
|
join questionRegisterAnswer in await _questionRegisterAnswerRrepository.GetQueryableAsync() |
|
|
|
on questionRegisterItem.QuestionRegisterItemId equals questionRegisterAnswer.QuestionRegisterItemId |
|
|
|
@ -941,7 +941,13 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
on questionRegisterItem.QuestionId equals question.QuestionId |
|
|
|
join questionSubjectType in await _questionSubjectTypeRepository.GetQueryableAsync() |
|
|
|
on question.QuestionSubjectTypeId equals questionSubjectType.QuestionSubjectTypeId |
|
|
|
where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId |
|
|
|
|
|
|
|
join questionAnswerAsbitem in await _questionAnswerAsbitemRepository.GetQueryableAsync() |
|
|
|
on questionRegisterAnswer.QuestionAnswerId equals questionAnswerAsbitem.QuestionAnswerId |
|
|
|
join asbitem in await _asbitemRepository.GetQueryableAsync() |
|
|
|
on questionAnswerAsbitem.AsbitemId equals asbitem.AsbitemId |
|
|
|
where questionRegisterItem.QuestionRegisterId == questionRegister.QuestionRegisterId && |
|
|
|
questionAnswerAsbitem.AsbitemRecommendLevelId == recommendId |
|
|
|
orderby questionSubjectType.DisplayOrder, question.DisplayOrder |
|
|
|
select new |
|
|
|
{ |
|
|
|
@ -949,9 +955,12 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
question, |
|
|
|
questionRegisterItem, |
|
|
|
questionRegisterAnswer, |
|
|
|
questionAnswer |
|
|
|
questionAnswerAsbitem, |
|
|
|
questionAnswer, |
|
|
|
asbitem, |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
//获取所有疾病风险基础字典
|
|
|
|
var diseaseRisks = (from diseaseRisk in await _diseaseRiskRepository.GetQueryableAsync() |
|
|
|
join diseaseRiskLevel in await _diseaseRiskLevelRepository.GetQueryableAsync() |
|
|
|
on diseaseRisk.DiseaseRiskId equals diseaseRiskLevel.DiseaseRiskId into emptyDiseaseRiskLevel |
|
|
|
@ -967,13 +976,128 @@ namespace Shentun.WebPeis.AppointPatientRegisters |
|
|
|
haveQuestionAnswerRiskLevel |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
var questionRegisterDiseaseRiskDtos = diseaseRisks.GroupBy(o => o.diseaseRisk) |
|
|
|
.Select(o => new PersonDiseaseRiskLevelDto() |
|
|
|
//获取人员所有答案
|
|
|
|
var questionAnswers = questionRegisterItems.GroupBy(o => o.questionAnswer) |
|
|
|
.Select(x => new QuestionAnswer |
|
|
|
{ |
|
|
|
QuestionAnswerId = x.Key.QuestionAnswerId, |
|
|
|
QuestionAnswerName = x.Key.QuestionAnswerName, |
|
|
|
DisplayOrder = x.Key.DisplayOrder, |
|
|
|
}).OrderBy(m => m.DisplayOrder).ToList(); |
|
|
|
|
|
|
|
//获取答案对应的所有风险级别和组合项目
|
|
|
|
var personDiseaseRiskLevels = new List<PersonDiseaseRiskLevelDto>(); |
|
|
|
foreach (var questionAnswer in questionAnswers) |
|
|
|
{ |
|
|
|
//获取答案对应的所有组合项目
|
|
|
|
var questionAnswerAsbitems = questionRegisterItems.Where(o => o.questionAnswer.QuestionAnswerId == questionAnswer.QuestionAnswerId) |
|
|
|
.Select(o => new RecommendMedicalPackageAsbitem() |
|
|
|
{ |
|
|
|
AsbitemId = o.asbitem.AsbitemId, |
|
|
|
AsbitemName = o.asbitem.AsbitemName, |
|
|
|
ShortName = o.asbitem.ShortName, |
|
|
|
Price = o.asbitem.Price, |
|
|
|
ClinicalMeaning = o.asbitem.ClinicalMeaning, |
|
|
|
Warn = o.asbitem.Warn, |
|
|
|
DisplayOrder = o.asbitem.DisplayOrder, |
|
|
|
AsbitemRecommendLevelId = o.questionAnswerAsbitem.AsbitemRecommendLevelId |
|
|
|
} |
|
|
|
).ToList(); |
|
|
|
|
|
|
|
//获取答案对应的所有风险级别
|
|
|
|
var personDiseaseRiskLevelDtos = diseaseRisks.Where(o => o.haveQuestionAnswerRiskLevel != null && |
|
|
|
o.haveQuestionAnswerRiskLevel.QuestionAnswerId == questionAnswer.QuestionAnswerId) |
|
|
|
.Select(o => new PersonDiseaseRiskLevelDto() |
|
|
|
{ |
|
|
|
DiseaseRiskId = o.diseaseRisk.DiseaseRiskId, |
|
|
|
DiseaseRiskName = o.diseaseRisk.DiseaseRiskName, |
|
|
|
DisplayOrder = o.diseaseRisk.DisplayOrder, |
|
|
|
DiseaseRiskLevelId = o.haveDiseaseRiskLevel.DiseaseRiskLevelId, |
|
|
|
DiseaseRiskLevelName = o.haveDiseaseRiskLevel.DiseaseRiskLevelName, |
|
|
|
DiseaseRiskLevelDisplayOrder = o.haveDiseaseRiskLevel.DisplayOrder, |
|
|
|
Asbitems = questionAnswerAsbitems |
|
|
|
}).DistinctBy(o => o.DiseaseRiskId).ToList(); |
|
|
|
if(!personDiseaseRiskLevelDtos.Any()) |
|
|
|
{ |
|
|
|
//如果答案没有对应的风险级别则虚拟一个,用答案名称作为风险级别
|
|
|
|
var personDiseaseRiskLevelDto = new PersonDiseaseRiskLevelDto() |
|
|
|
{ |
|
|
|
DiseaseRiskId = questionAnswer.QuestionAnswerId, |
|
|
|
DiseaseRiskName = questionAnswer.QuestionAnswerName, |
|
|
|
DisplayOrder = 1000, |
|
|
|
DiseaseRiskLevelId = questionAnswer.QuestionAnswerId, |
|
|
|
DiseaseRiskLevelName = questionAnswer.QuestionAnswerName, |
|
|
|
DiseaseRiskLevelDisplayOrder = 1000, |
|
|
|
Asbitems = questionAnswerAsbitems |
|
|
|
}; |
|
|
|
personDiseaseRiskLevels.Add(personDiseaseRiskLevelDto); |
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
personDiseaseRiskLevels.AddRange(personDiseaseRiskLevelDtos); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
//合并同一个疾病风险中的不同组合项目,将低级别风险中的组合项目合并到高风险级别中
|
|
|
|
personDiseaseRiskLevels = personDiseaseRiskLevels.OrderBy(o => o.DisplayOrder).ThenByDescending(o => o.DiseaseRiskLevelDisplayOrder).ToList(); |
|
|
|
for (var i = 0; i < personDiseaseRiskLevels.Count; i++) |
|
|
|
{ |
|
|
|
var loweriseaseRiskLevels = personDiseaseRiskLevels.Where(o => o.DiseaseRiskId == personDiseaseRiskLevels[i].DiseaseRiskId && |
|
|
|
o.DiseaseRiskLevelDisplayOrder < personDiseaseRiskLevels[i].DiseaseRiskLevelDisplayOrder).ToList(); |
|
|
|
foreach (var loweriseaseRiskLevel in loweriseaseRiskLevels) |
|
|
|
{ |
|
|
|
personDiseaseRiskLevels[i].Asbitems.AddRange(loweriseaseRiskLevel.Asbitems); |
|
|
|
|
|
|
|
} |
|
|
|
personDiseaseRiskLevels.RemoveAll(loweriseaseRiskLevels); |
|
|
|
} |
|
|
|
//去掉相同级别的相同组合项目
|
|
|
|
foreach (var personDiseaseRiskLevel in personDiseaseRiskLevels) |
|
|
|
{ |
|
|
|
personDiseaseRiskLevel.Asbitems = personDiseaseRiskLevel.Asbitems.GroupBy(o => new { o.AsbitemId, o.AsbitemRecommendLevelId }) |
|
|
|
.Select(o => new RecommendMedicalPackageAsbitem() |
|
|
|
{ |
|
|
|
AsbitemId = o.FirstOrDefault().AsbitemId, |
|
|
|
AsbitemName = o.FirstOrDefault().AsbitemName, |
|
|
|
ShortName = o.FirstOrDefault().ShortName, |
|
|
|
Price = o.FirstOrDefault().Price, |
|
|
|
ClinicalMeaning = o.FirstOrDefault().ClinicalMeaning, |
|
|
|
Warn = o.FirstOrDefault().Warn, |
|
|
|
DisplayOrder = o.FirstOrDefault().DisplayOrder, |
|
|
|
AsbitemRecommendLevelId = o.FirstOrDefault().AsbitemRecommendLevelId |
|
|
|
}).ToList(); |
|
|
|
} |
|
|
|
|
|
|
|
//获取有共同组合项目的风险级别
|
|
|
|
var newPersonDiseaseRiskLevelDtos = new List<PersonDiseaseRiskLevelDto>(); |
|
|
|
foreach (var personDiseaseRiskLevel in personDiseaseRiskLevels) |
|
|
|
{ |
|
|
|
|
|
|
|
foreach (var personDiseaseRiskLevel2 in personDiseaseRiskLevels) |
|
|
|
{ |
|
|
|
DiseaseRiskId = o.Key.DiseaseRiskId, |
|
|
|
DiseaseRiskName = o.Key.DiseaseRiskName, |
|
|
|
DisplayOrder = o.Key.DisplayOrder |
|
|
|
}).ToList(); |
|
|
|
if (personDiseaseRiskLevel == personDiseaseRiskLevel2) |
|
|
|
{ |
|
|
|
continue; |
|
|
|
} |
|
|
|
for (var i = 0; i < personDiseaseRiskLevel2.Asbitems.Count(); i++) |
|
|
|
{ |
|
|
|
if (personDiseaseRiskLevel.Asbitems.Where(o => o.AsbitemId == personDiseaseRiskLevel2.Asbitems[i].AsbitemId).Any()) |
|
|
|
{ |
|
|
|
personDiseaseRiskLevel.DiseaseRiskName += "," + personDiseaseRiskLevel2.DiseaseRiskName; |
|
|
|
personDiseaseRiskLevel2.Asbitems.Remove(personDiseaseRiskLevel2.Asbitems[i]); |
|
|
|
i--; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return personDiseaseRiskLevels; |
|
|
|
var questionRegisterDiseaseRiskDtos = diseaseRisks.GroupBy(o => o.diseaseRisk) |
|
|
|
.Select(o => new PersonDiseaseRiskLevelDto() |
|
|
|
{ |
|
|
|
DiseaseRiskId = o.Key.DiseaseRiskId, |
|
|
|
DiseaseRiskName = o.Key.DiseaseRiskName, |
|
|
|
DisplayOrder = o.Key.DisplayOrder |
|
|
|
}).ToList(); |
|
|
|
|
|
|
|
foreach (var diseaseRisk in questionRegisterDiseaseRiskDtos) |
|
|
|
{ |
|
|
|
|