using Shentun.Peis.Enums; using Shentun.Peis.HelperDto; using Shentun.Peis.Models; using Shentun.Utilities; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Volo.Abp.Domain.Repositories; using Volo.Abp.Domain.Services; namespace Shentun.Peis.ReferenceRanges { /// /// 参考范围 /// public class ReferenceRangeManager : DomainService { private readonly IRepository _itemRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _repository; public ReferenceRangeManager( IRepository itemRepository, IRepository patientRegisterRepository, IRepository repository) { this._itemRepository = itemRepository; this._patientRegisterRepository = patientRegisterRepository; _repository = repository; } /// /// 创建 /// /// /// public ReferenceRange CreateAsync( ReferenceRange entity ) { Verify(entity); return new ReferenceRange { AgeLowerLimit = entity.AgeLowerLimit, AgeUpperLimit = entity.AgeUpperLimit, CriticalRangeValue = entity.CriticalRangeValue, ForSexId = entity.ForSexId, ItemId = entity.ItemId, LowerDiagnosisId = entity.LowerDiagnosisId, ReferenceRangeValue = entity.ReferenceRangeValue, UpperDiagnosisId = entity.UpperDiagnosisId, ReferenceRangeTypeFlag = entity.ReferenceRangeTypeFlag }; } /// /// 更新 /// /// /// /// public void UpdateAsync( ReferenceRange sourceEntity, ReferenceRange targetEntity ) { DataHelper.CheckEntityIsNull(targetEntity); Verify(sourceEntity); targetEntity.AgeLowerLimit = sourceEntity.AgeLowerLimit; targetEntity.AgeUpperLimit = sourceEntity.AgeUpperLimit; targetEntity.CriticalRangeValue = sourceEntity.CriticalRangeValue; targetEntity.ForSexId = sourceEntity.ForSexId; targetEntity.ItemId = sourceEntity.ItemId; targetEntity.LowerDiagnosisId = sourceEntity.LowerDiagnosisId; targetEntity.ReferenceRangeValue = sourceEntity.ReferenceRangeValue; targetEntity.UpperDiagnosisId = sourceEntity.UpperDiagnosisId; targetEntity.ReferenceRangeTypeFlag = sourceEntity.ReferenceRangeTypeFlag; } /// /// 更新 字符型 /// /// /// /// public void UpdateTextAsync( ReferenceRange sourceEntity, ReferenceRange targetEntity ) { DataHelper.CheckEntityIsNull(targetEntity); Verify(sourceEntity); targetEntity.ReferenceRangeValue = sourceEntity.ReferenceRangeValue; targetEntity.ReferenceRangeTypeFlag = sourceEntity.ReferenceRangeTypeFlag; } /// /// 验证新增、修改字段 /// /// /// private void Verify(ReferenceRange entity) { DataHelper.CheckEntityIsNull(entity); DataHelper.CheckGuidIsDefaultValue(entity.ItemId, "项目编号"); if (entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.None && entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.Number && entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.Character && entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.SexHormone ) { throw new ArgumentException($"参考范围类别参数为:{entity.ReferenceRangeTypeFlag},是无效值,只能为'{ItemReferenceRangeTypeFlag.None}','{ItemReferenceRangeTypeFlag.Number}','2{ItemReferenceRangeTypeFlag.Character}','{ItemReferenceRangeTypeFlag.SexHormone}'"); } if (entity.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Character) { //字符型 if (string.IsNullOrWhiteSpace(entity.ReferenceRangeValue)) { throw new ArgumentException("参考范围值不能为空"); } entity.ForSexId = ForSexFlag.All; entity.AgeLowerLimit = 0; entity.AgeUpperLimit = 200; } else if (entity.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Number) { //数字型 if (entity.ForSexId != ForSexFlag.All && entity.ForSexId != ForSexFlag.Male && entity.ForSexId != ForSexFlag.Female ) { throw new ArgumentException($"适用性别参数为:{entity.ForSexId},是无效值,只能为'{ForSexFlag.All}','{ForSexFlag.Male}','{ForSexFlag.Female}'"); } if (entity.AgeLowerLimit < 0 || entity.AgeLowerLimit > 200) { throw new ArgumentException($"年龄下限参数为:{entity.AgeLowerLimit},是无效值,值只能为0~200之间"); } if (entity.AgeUpperLimit < 0 || entity.AgeUpperLimit > 200) { throw new ArgumentException($"年龄上限参数为:{entity.AgeUpperLimit},是无效值,值只能为0~200之间"); } if (entity.AgeLowerLimit > entity.AgeUpperLimit) { throw new ArgumentException($"年龄下限不能大于上限值"); } } } /// /// 获取项目的参考范围,根据登记信息的性别、年龄获取 /// /// 项目ID /// 登记表ID /// public async Task GetReferenceRangeInSexAge(Guid ItemId, Guid PatientRegisterId) { var patientRegisterEntity = await _patientRegisterRepository.GetAsync(PatientRegisterId); var itemEntity = await _itemRepository.GetAsync(ItemId); var referenceRangeList = await _repository.GetListAsync(m => m.ReferenceRangeTypeFlag == itemEntity.ReferenceRangeTypeFlag); var SexId = patientRegisterEntity.SexId; var Age = patientRegisterEntity.Age; if (itemEntity.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Character) { //字符型 //判断性别 if (referenceRangeList.Where(m => m.ForSexId == 'A').Count() == 0) { //没有全部类型 referenceRangeList = referenceRangeList.Where(m => m.ForSexId == patientRegisterEntity.SexId).ToList(); } //判断年龄 if (Age != null) { referenceRangeList.Where(m => m.AgeLowerLimit <= Age && m.AgeUpperLimit >= Age).ToList(); } } return referenceRangeList.FirstOrDefault(); } /// /// 获取项目的参考范围,根据登记信息的性别、年龄获取 /// /// 项目ID /// 登记表ID /// public ReferenceRange GetReferenceRangeInSexAgeTemp(List referenceRangeList, Item itemEntity, char? SexId, short? Age) { if (itemEntity != null && referenceRangeList.Any()) { var referenceRangeListNew = referenceRangeList.Where(m => m.ReferenceRangeTypeFlag == itemEntity.ReferenceRangeTypeFlag && m.ItemId == itemEntity.Id); if (itemEntity.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Character) { //字符型 //判断性别 if (referenceRangeListNew.Where(m => m.ForSexId == 'A').Count() == 0) { //没有全部类型 referenceRangeListNew = referenceRangeListNew.Where(m => m.ForSexId == SexId).ToList(); } //判断年龄 if (Age != null) { referenceRangeListNew.Where(m => m.AgeLowerLimit <= Age && m.AgeUpperLimit >= Age).ToList(); } } return referenceRangeListNew.FirstOrDefault(); } else { return null; } } } }