You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
248 lines
9.3 KiB
248 lines
9.3 KiB
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
|
|
{
|
|
|
|
/// <summary>
|
|
/// 参考范围
|
|
/// </summary>
|
|
public class ReferenceRangeManager : DomainService
|
|
{
|
|
private readonly IRepository<Item, Guid> _itemRepository;
|
|
private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
|
|
private readonly IRepository<ReferenceRange, Guid> _repository;
|
|
public ReferenceRangeManager(
|
|
IRepository<Item, Guid> itemRepository,
|
|
IRepository<PatientRegister, Guid> patientRegisterRepository,
|
|
IRepository<ReferenceRange, Guid> repository)
|
|
{
|
|
this._itemRepository = itemRepository;
|
|
this._patientRegisterRepository = patientRegisterRepository;
|
|
_repository = repository;
|
|
}
|
|
/// <summary>
|
|
/// 创建
|
|
/// </summary>
|
|
/// <param name="entity"></param>
|
|
/// <returns></returns>
|
|
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
|
|
};
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 更新
|
|
/// </summary>
|
|
/// <param name="sourceEntity"></param>
|
|
/// <param name="targetEntity"></param>
|
|
/// <returns></returns>
|
|
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;
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
/// 更新 字符型
|
|
/// </summary>
|
|
/// <param name="sourceEntity"></param>
|
|
/// <param name="targetEntity"></param>
|
|
/// <returns></returns>
|
|
public void UpdateTextAsync(
|
|
ReferenceRange sourceEntity,
|
|
ReferenceRange targetEntity
|
|
)
|
|
{
|
|
DataHelper.CheckEntityIsNull(targetEntity);
|
|
Verify(sourceEntity);
|
|
targetEntity.ReferenceRangeValue = sourceEntity.ReferenceRangeValue;
|
|
targetEntity.ReferenceRangeTypeFlag = sourceEntity.ReferenceRangeTypeFlag;
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 验证新增、修改字段
|
|
/// </summary>
|
|
/// <param name="entity"></param>
|
|
/// <exception cref="ArgumentException"></exception>
|
|
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($"年龄下限不能大于上限值");
|
|
}
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// 获取项目的参考范围,根据登记信息的性别、年龄获取
|
|
/// </summary>
|
|
/// <param name="ItemId">项目ID</param>
|
|
/// <param name="PatientRegisterId">登记表ID</param>
|
|
/// <returns></returns>
|
|
public async Task<ReferenceRange> 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();
|
|
}
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// 获取项目的参考范围,根据登记信息的性别、年龄获取
|
|
/// </summary>
|
|
/// <param name="ItemId">项目ID</param>
|
|
/// <param name="PatientRegisterId">登记表ID</param>
|
|
/// <returns></returns>
|
|
public ReferenceRange GetReferenceRangeInSexAgeTemp(List<ReferenceRange> 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;
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|