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

2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
  1. using Shentun.Peis.Enums;
  2. using Shentun.Peis.HelperDto;
  3. using Shentun.Peis.Models;
  4. using Shentun.Utilities;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Volo.Abp.Domain.Repositories;
  11. using Volo.Abp.Domain.Services;
  12. namespace Shentun.Peis.ReferenceRanges
  13. {
  14. /// <summary>
  15. /// 参考范围
  16. /// </summary>
  17. public class ReferenceRangeManager : DomainService
  18. {
  19. private readonly IRepository<Item, Guid> _itemRepository;
  20. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  21. private readonly IRepository<ReferenceRange, Guid> _repository;
  22. public ReferenceRangeManager(
  23. IRepository<Item, Guid> itemRepository,
  24. IRepository<PatientRegister, Guid> patientRegisterRepository,
  25. IRepository<ReferenceRange, Guid> repository)
  26. {
  27. this._itemRepository = itemRepository;
  28. this._patientRegisterRepository = patientRegisterRepository;
  29. _repository = repository;
  30. }
  31. /// <summary>
  32. /// 创建
  33. /// </summary>
  34. /// <param name="entity"></param>
  35. /// <returns></returns>
  36. public ReferenceRange CreateAsync(
  37. ReferenceRange entity
  38. )
  39. {
  40. Verify(entity);
  41. return new ReferenceRange
  42. {
  43. AgeLowerLimit = entity.AgeLowerLimit,
  44. AgeUpperLimit = entity.AgeUpperLimit,
  45. CriticalRangeValue = entity.CriticalRangeValue,
  46. ForSexId = entity.ForSexId,
  47. ItemId = entity.ItemId,
  48. LowerDiagnosisId = entity.LowerDiagnosisId,
  49. ReferenceRangeValue = entity.ReferenceRangeValue,
  50. UpperDiagnosisId = entity.UpperDiagnosisId,
  51. ReferenceRangeTypeFlag = entity.ReferenceRangeTypeFlag
  52. };
  53. }
  54. /// <summary>
  55. /// 更新
  56. /// </summary>
  57. /// <param name="sourceEntity"></param>
  58. /// <param name="targetEntity"></param>
  59. /// <returns></returns>
  60. public void UpdateAsync(
  61. ReferenceRange sourceEntity,
  62. ReferenceRange targetEntity
  63. )
  64. {
  65. DataHelper.CheckEntityIsNull(targetEntity);
  66. Verify(sourceEntity);
  67. targetEntity.AgeLowerLimit = sourceEntity.AgeLowerLimit;
  68. targetEntity.AgeUpperLimit = sourceEntity.AgeUpperLimit;
  69. targetEntity.CriticalRangeValue = sourceEntity.CriticalRangeValue;
  70. targetEntity.ForSexId = sourceEntity.ForSexId;
  71. targetEntity.ItemId = sourceEntity.ItemId;
  72. targetEntity.LowerDiagnosisId = sourceEntity.LowerDiagnosisId;
  73. targetEntity.ReferenceRangeValue = sourceEntity.ReferenceRangeValue;
  74. targetEntity.UpperDiagnosisId = sourceEntity.UpperDiagnosisId;
  75. targetEntity.ReferenceRangeTypeFlag = sourceEntity.ReferenceRangeTypeFlag;
  76. }
  77. /// <summary>
  78. /// 更新 字符型
  79. /// </summary>
  80. /// <param name="sourceEntity"></param>
  81. /// <param name="targetEntity"></param>
  82. /// <returns></returns>
  83. public void UpdateTextAsync(
  84. ReferenceRange sourceEntity,
  85. ReferenceRange targetEntity
  86. )
  87. {
  88. DataHelper.CheckEntityIsNull(targetEntity);
  89. Verify(sourceEntity);
  90. targetEntity.ReferenceRangeValue = sourceEntity.ReferenceRangeValue;
  91. targetEntity.ReferenceRangeTypeFlag = sourceEntity.ReferenceRangeTypeFlag;
  92. }
  93. /// <summary>
  94. /// 验证新增、修改字段
  95. /// </summary>
  96. /// <param name="entity"></param>
  97. /// <exception cref="ArgumentException"></exception>
  98. private void Verify(ReferenceRange entity)
  99. {
  100. DataHelper.CheckEntityIsNull(entity);
  101. DataHelper.CheckGuidIsDefaultValue(entity.ItemId, "项目编号");
  102. if (entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.None
  103. && entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.Number
  104. && entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.Character
  105. && entity.ReferenceRangeTypeFlag != ItemReferenceRangeTypeFlag.SexHormone
  106. )
  107. {
  108. throw new ArgumentException($"参考范围类别参数为:{entity.ReferenceRangeTypeFlag},是无效值,只能为'{ItemReferenceRangeTypeFlag.None}','{ItemReferenceRangeTypeFlag.Number}','2{ItemReferenceRangeTypeFlag.Character}','{ItemReferenceRangeTypeFlag.SexHormone}'");
  109. }
  110. if (entity.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Character)
  111. {
  112. //字符型
  113. if (string.IsNullOrWhiteSpace(entity.ReferenceRangeValue))
  114. {
  115. throw new ArgumentException("参考范围值不能为空");
  116. }
  117. entity.ForSexId = ForSexFlag.All;
  118. entity.AgeLowerLimit = 0;
  119. entity.AgeUpperLimit = 200;
  120. }
  121. else if (entity.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Number)
  122. {
  123. //数字型
  124. if (entity.ForSexId != ForSexFlag.All
  125. && entity.ForSexId != ForSexFlag.Male
  126. && entity.ForSexId != ForSexFlag.Female
  127. )
  128. {
  129. throw new ArgumentException($"适用性别参数为:{entity.ForSexId},是无效值,只能为'{ForSexFlag.All}','{ForSexFlag.Male}','{ForSexFlag.Female}'");
  130. }
  131. if (entity.AgeLowerLimit < 0 || entity.AgeLowerLimit > 200)
  132. {
  133. throw new ArgumentException($"年龄下限参数为:{entity.AgeLowerLimit},是无效值,值只能为0~200之间");
  134. }
  135. if (entity.AgeUpperLimit < 0 || entity.AgeUpperLimit > 200)
  136. {
  137. throw new ArgumentException($"年龄上限参数为:{entity.AgeUpperLimit},是无效值,值只能为0~200之间");
  138. }
  139. if (entity.AgeLowerLimit > entity.AgeUpperLimit)
  140. {
  141. throw new ArgumentException($"年龄下限不能大于上限值");
  142. }
  143. }
  144. }
  145. /// <summary>
  146. /// 获取项目的参考范围,根据登记信息的性别、年龄获取
  147. /// </summary>
  148. /// <param name="ItemId">项目ID</param>
  149. /// <param name="PatientRegisterId">登记表ID</param>
  150. /// <returns></returns>
  151. public async Task<ReferenceRange> GetReferenceRangeInSexAge(Guid ItemId, Guid PatientRegisterId)
  152. {
  153. var patientRegisterEntity = await _patientRegisterRepository.GetAsync(PatientRegisterId);
  154. var itemEntity = await _itemRepository.GetAsync(ItemId);
  155. var referenceRangeList = await _repository.GetListAsync(m => m.ReferenceRangeTypeFlag == itemEntity.ReferenceRangeTypeFlag);
  156. var SexId = patientRegisterEntity.SexId;
  157. var Age = patientRegisterEntity.Age;
  158. if (itemEntity.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Character)
  159. {
  160. //字符型
  161. //判断性别
  162. if (referenceRangeList.Where(m => m.ForSexId == 'A').Count() == 0)
  163. {
  164. //没有全部类型
  165. referenceRangeList = referenceRangeList.Where(m => m.ForSexId == patientRegisterEntity.SexId).ToList();
  166. }
  167. //判断年龄
  168. if (Age != null)
  169. {
  170. referenceRangeList.Where(m => m.AgeLowerLimit <= Age && m.AgeUpperLimit >= Age).ToList();
  171. }
  172. }
  173. return referenceRangeList.FirstOrDefault();
  174. }
  175. /// <summary>
  176. /// 获取项目的参考范围,根据登记信息的性别、年龄获取
  177. /// </summary>
  178. /// <param name="ItemId">项目ID</param>
  179. /// <param name="PatientRegisterId">登记表ID</param>
  180. /// <returns></returns>
  181. public ReferenceRange GetReferenceRangeInSexAgeTemp(List<ReferenceRange> referenceRangeList, Item itemEntity, char? SexId, short? Age)
  182. {
  183. if (itemEntity != null && referenceRangeList.Any())
  184. {
  185. var referenceRangeListNew = referenceRangeList.Where(m => m.ReferenceRangeTypeFlag == itemEntity.ReferenceRangeTypeFlag && m.ItemId == itemEntity.Id);
  186. if (itemEntity.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Character)
  187. {
  188. //字符型
  189. //判断性别
  190. if (referenceRangeListNew.Where(m => m.ForSexId == 'A').Count() == 0)
  191. {
  192. //没有全部类型
  193. referenceRangeListNew = referenceRangeListNew.Where(m => m.ForSexId == SexId).ToList();
  194. }
  195. //判断年龄
  196. if (Age != null)
  197. {
  198. referenceRangeListNew.Where(m => m.AgeLowerLimit <= Age && m.AgeUpperLimit >= Age).ToList();
  199. }
  200. }
  201. return referenceRangeListNew.FirstOrDefault();
  202. }
  203. else
  204. {
  205. return null;
  206. }
  207. }
  208. }
  209. }