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.

311 lines
15 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.EntityFrameworkCore;
  4. using Shentun.Peis.Enums;
  5. using Shentun.Peis.Models;
  6. using Shentun.Peis.PatientRegisters;
  7. using Shentun.Peis.SumSuggestionContents;
  8. using Shentun.Peis.SumSummaryContents;
  9. using Shentun.Peis.SumSummaryHeaders;
  10. using Shentun.Peis.SysParmValues;
  11. using System;
  12. using System.Collections.Generic;
  13. using System.Linq;
  14. using System.Text;
  15. using System.Threading.Tasks;
  16. using Volo.Abp;
  17. using Volo.Abp.Application.Services;
  18. using Volo.Abp.Domain.Repositories;
  19. namespace Shentun.Peis.SumSuggestionHeaders
  20. {
  21. /// <summary>
  22. /// 总检诊台建议
  23. /// </summary>
  24. [ApiExplorerSettings(GroupName = "Work")]
  25. [Authorize]
  26. public class SumSuggestionHeaderAppService : ApplicationService
  27. {
  28. private readonly IRepository<SumSuggestionHeader, Guid> _sumSuggestionHeaderRepository;
  29. private readonly IRepository<SumSuggestionContent, Guid> _sumSuggestionContentRepository;
  30. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  31. private readonly IRepository<SumDiagnosis> _sumDiagnosisRepository;
  32. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  33. private readonly IRepository<Diagnosis, Guid> _diagnosisRepository;
  34. private readonly SumSummaryHeaderManager _sumSummaryHeaderManager;
  35. private readonly SysParmValueManager _sysParmValueManager;
  36. public SumSuggestionHeaderAppService(
  37. IRepository<SumSuggestionHeader, Guid> sumSuggestionHeaderRepository,
  38. IRepository<SumSuggestionContent, Guid> sumSuggestionContentRepository,
  39. IRepository<RegisterCheck, Guid> registerCheckRepository,
  40. IRepository<SumDiagnosis> sumDiagnosisRepository,
  41. IRepository<PatientRegister, Guid> patientRegisterRepository,
  42. IRepository<Diagnosis, Guid> diagnosisRepository,
  43. SumSummaryHeaderManager sumSummaryHeaderManager,
  44. SysParmValueManager sysParmValueManager
  45. )
  46. {
  47. this._sumSuggestionHeaderRepository = sumSuggestionHeaderRepository;
  48. this._sumSuggestionContentRepository = sumSuggestionContentRepository;
  49. this._registerCheckRepository = registerCheckRepository;
  50. this._sumDiagnosisRepository = sumDiagnosisRepository;
  51. _patientRegisterRepository = patientRegisterRepository;
  52. _sumSummaryHeaderManager = sumSummaryHeaderManager;
  53. _diagnosisRepository = diagnosisRepository;
  54. _sysParmValueManager = sysParmValueManager;
  55. }
  56. /// <summary>
  57. /// 获取人员总检诊台建议 (如还未录入,获取医生诊台录入的建议)
  58. /// </summary>
  59. /// <param name="input"></param>
  60. /// <returns></returns>
  61. [HttpPost("api/app/sumsuggestionheader/GetSumSuggestionList")]
  62. public async Task<List<SumSuggestionDto>> GetSumSuggestionListAsync(PatientRegisterSumInputDto input)
  63. {
  64. if (input is null)
  65. {
  66. throw new UserFriendlyException("input参数不能为空");
  67. }
  68. List<SumSuggestionDto> msg = new List<SumSuggestionDto>();
  69. var patientRegister = await _patientRegisterRepository.GetAsync(input.PatientRegisterId);
  70. var query = from sumSuggestionHeader in await _sumSuggestionHeaderRepository.GetQueryableAsync()
  71. join sumDiagnosis in await _sumDiagnosisRepository.GetQueryableAsync()
  72. on new { sumSuggestionHeader.PatientRegisterId, sumSuggestionHeader.Id } equals new { sumDiagnosis.PatientRegisterId, Id = sumDiagnosis.SumSuggestionHeaderId } into bb
  73. from sumDiagnosisHaveEmpty in bb.DefaultIfEmpty()
  74. join diagnosis in await _diagnosisRepository.GetQueryableAsync()
  75. on sumDiagnosisHaveEmpty.DiagnosisId equals diagnosis.Id into diagnosisTemp
  76. from diagnosisHaveEmpty in diagnosisTemp.DefaultIfEmpty()
  77. join sumSuggestionContent in await _sumSuggestionContentRepository.GetQueryableAsync()
  78. on sumSuggestionHeader.Id equals sumSuggestionContent.SumSuggestionHeaderId into cc
  79. from sumSuggestionContentHaveEmpty in cc.DefaultIfEmpty()
  80. where (sumSuggestionHeader.PatientRegisterId == input.PatientRegisterId)
  81. orderby sumSuggestionHeader.DisplayOrder ascending, sumSuggestionContentHaveEmpty.DisplayOrder ascending
  82. select new
  83. {
  84. sumSuggestionHeader,
  85. sumDiagnosisHaveEmpty,
  86. diagnosisHaveEmpty,
  87. sumSuggestionContentHaveEmpty
  88. };
  89. if (patientRegister.CompleteFlag == PatientRegisterCompleteFlag.SumCheck || input.IsGetExistData == "Y")
  90. {
  91. msg = query.GroupBy(g => g.sumSuggestionHeader.Id).Select(s => new SumSuggestionDto
  92. {
  93. SuggestionTitle = s.FirstOrDefault().sumSuggestionHeader.SuggestionTitle,
  94. SuggestionFlag = s.FirstOrDefault().sumSuggestionHeader.SuggestionFlag,
  95. DisplayOrder = s.FirstOrDefault().sumSuggestionHeader.DisplayOrder,
  96. DiagnosisIds = s.Where(o => o.sumDiagnosisHaveEmpty != null).
  97. Select(x => x.sumDiagnosisHaveEmpty.DiagnosisId).Distinct().ToList(),
  98. DiagnosisNames = s.Where(m => m.diagnosisHaveEmpty != null).Select(x => x.diagnosisHaveEmpty.DisplayName).Distinct().ToList(),
  99. MedicalInterpretations = s.Where(m => m.sumSuggestionContentHaveEmpty != null &&
  100. m.sumSuggestionContentHaveEmpty.SuggestionType == SuggestionTypeFlag.MedicalInterpretation).
  101. Select(sa => new SumSuggestionContentData
  102. {
  103. DisplayOrder = sa.sumSuggestionContentHaveEmpty.DisplayOrder,
  104. SuggestionContent = sa.sumSuggestionContentHaveEmpty.SuggestionContent,
  105. }).OrderBy(o => o.DisplayOrder).Distinct().ToList(),
  106. CommonReasons = s.Where(m => m.sumSuggestionContentHaveEmpty != null &&
  107. m.sumSuggestionContentHaveEmpty.SuggestionType == SuggestionTypeFlag.CommonReasons).
  108. Select(sa => new SumSuggestionContentData
  109. {
  110. DisplayOrder = sa.sumSuggestionContentHaveEmpty.DisplayOrder,
  111. SuggestionContent = sa.sumSuggestionContentHaveEmpty.SuggestionContent,
  112. }).OrderBy(o => o.DisplayOrder).Distinct().ToList(),
  113. HealthGuidances = s.Where(m => m.sumSuggestionContentHaveEmpty != null &&
  114. m.sumSuggestionContentHaveEmpty.SuggestionType == SuggestionTypeFlag.HealthGuidance).
  115. Select(sa => new SumSuggestionContentData
  116. {
  117. DisplayOrder = sa.sumSuggestionContentHaveEmpty.DisplayOrder,
  118. SuggestionContent = sa.sumSuggestionContentHaveEmpty.SuggestionContent,
  119. }).OrderBy(o => o.DisplayOrder).Distinct().ToList(),
  120. }).OrderBy(o => o.DisplayOrder).ToList();
  121. }
  122. else
  123. {
  124. //没有值的情况
  125. var checklist = await _sumSummaryHeaderManager.GetSumSummarysByDoctorCheck(input.PatientRegisterId);
  126. //获取所有综述
  127. var registerCheckSummaries = new List<string>();
  128. foreach (var registerCheck in checklist)
  129. {
  130. foreach (var registerCheckSummary in registerCheck.RegisterCheckSummaries)
  131. {
  132. registerCheckSummaries.Add(registerCheckSummary.Summary);
  133. }
  134. }
  135. //根据综述生成建议
  136. var diagnosis = (await _diagnosisRepository.GetQueryableAsync()).Include(o => o.Suggestions).ToList();
  137. foreach (var registerCheckSummary in registerCheckSummaries)
  138. {
  139. var matchDiagnosisList = diagnosis.Where(o => registerCheckSummary.Contains(o.DisplayName)).ToList();
  140. var matchDiagnosis = matchDiagnosisList.OrderByDescending(o => o.DisplayName.Length).FirstOrDefault();
  141. if (matchDiagnosis != null)
  142. {
  143. if (msg.Where(o => o.SuggestionTitle == matchDiagnosis.DisplayName).Count() > 0)
  144. {
  145. continue;
  146. }
  147. var sumSuggestionDto = new SumSuggestionDto()
  148. {
  149. SuggestionTitle = matchDiagnosis.DisplayName,
  150. SuggestionFlag = null,
  151. DisplayOrder = 0,
  152. DiagnosisIds = new List<Guid>() { matchDiagnosis.Id },
  153. DiagnosisNames = new List<string>() { matchDiagnosis.DisplayName },
  154. MedicalInterpretations = matchDiagnosis.Suggestions.
  155. Where(o => o.SuggestionType == SuggestionTypeFlag.MedicalInterpretation)
  156. .OrderBy(o => o.DisplayOrder)
  157. .Select(x => new SumSuggestionContentData()
  158. {
  159. SuggestionContent = x.SuggestionContent,
  160. DisplayOrder = x.DisplayOrder,
  161. }
  162. ).ToList(),
  163. CommonReasons = matchDiagnosis.Suggestions.
  164. Where(o => o.SuggestionType == SuggestionTypeFlag.CommonReasons)
  165. .OrderBy(o => o.DisplayOrder)
  166. .Select(x => new SumSuggestionContentData()
  167. {
  168. SuggestionContent = x.SuggestionContent,
  169. DisplayOrder = x.DisplayOrder,
  170. }
  171. ).ToList(),
  172. HealthGuidances = matchDiagnosis.Suggestions.
  173. Where(o => o.SuggestionType == SuggestionTypeFlag.HealthGuidance)
  174. .OrderBy(o => o.DisplayOrder)
  175. .Select(x => new SumSuggestionContentData()
  176. {
  177. SuggestionContent = x.SuggestionContent,
  178. DisplayOrder = x.DisplayOrder,
  179. }
  180. ).ToList()
  181. };
  182. msg.Add(sumSuggestionDto);
  183. }
  184. }
  185. var summaryCheckDefaultSuggestionHeader = await _sysParmValueManager.
  186. GetSysParmValueAsync(patientRegister.MedicalCenterId,
  187. "summary_check_default_suggestion_header");
  188. if (!msg.Any())
  189. {
  190. msg.Add(new SumSuggestionDto()
  191. {
  192. SuggestionTitle = summaryCheckDefaultSuggestionHeader,
  193. SuggestionFlag = null,
  194. DisplayOrder = 0,
  195. DiagnosisIds = null,
  196. DiagnosisNames = null
  197. });
  198. }
  199. }
  200. return msg;
  201. }
  202. /// <summary>
  203. /// 批量插入总诊台建议
  204. /// </summary>
  205. /// <param name="input"></param>
  206. /// <returns></returns>
  207. [HttpPost("api/app/sumsuggestionheader/createsumsuggestion")]
  208. public async Task CreateSumSuggestionAsync(List<CreateSumSuggestionHeaderOrContentDto> input)
  209. {
  210. throw new UserFriendlyException("禁止使用");
  211. if (input.Any())
  212. {
  213. //先删除总诊头跟内容
  214. await _sumSuggestionHeaderRepository.DeleteAsync(m => m.PatientRegisterId == input.FirstOrDefault().PatientRegisterId, true);
  215. //删除对应的诊断数据
  216. await _sumDiagnosisRepository.DeleteAsync(m => m.PatientRegisterId == input.FirstOrDefault().PatientRegisterId, true);
  217. foreach (var item in input)
  218. {
  219. #region 插入SumSuggestionHeader
  220. SumSuggestionHeader sumSuggestionHeaderEnt = new SumSuggestionHeader
  221. {
  222. DisplayOrder = input.IndexOf(item) + 1,
  223. PatientRegisterId = item.PatientRegisterId,
  224. SuggestionFlag = null,
  225. SuggestionTitle = item.SuggestionTitle
  226. };
  227. var sumSuggestionHeaderEnt_New = await _sumSuggestionHeaderRepository.InsertAsync(sumSuggestionHeaderEnt, true);
  228. if (sumSuggestionHeaderEnt_New != null)
  229. {
  230. #region 插入SumDiagnosis
  231. if (item.DiagnosisId != null && item.DiagnosisId != Guid.Empty)
  232. {
  233. SumDiagnosis sumDiagnosis = new SumDiagnosis
  234. {
  235. DiagnosisId = item.DiagnosisId.Value,
  236. DisplayOrder = input.IndexOf(item) + 1,
  237. PatientRegisterId = item.PatientRegisterId,
  238. SumSuggestionHeaderId = sumSuggestionHeaderEnt_New.Id
  239. };
  240. await _sumDiagnosisRepository.InsertAsync(sumDiagnosis);
  241. }
  242. #endregion
  243. #region 插入SumSuggestionContent
  244. List<SumSuggestionContent> sumSuggestionContentList = new List<SumSuggestionContent>();
  245. foreach (var item2 in item.Details)
  246. {
  247. SumSuggestionContent sumSuggestionContentEnt = new SumSuggestionContent
  248. {
  249. DisplayOrder = item.Details.IndexOf(item2) + 1,
  250. SuggestionContent = item2.SuggestionContent,
  251. SumSuggestionHeaderId = sumSuggestionHeaderEnt_New.Id
  252. };
  253. sumSuggestionContentList.Add(sumSuggestionContentEnt);
  254. }
  255. await _sumSuggestionContentRepository.InsertManyAsync(sumSuggestionContentList);
  256. #endregion
  257. }
  258. #endregion
  259. }
  260. }
  261. }
  262. /// <summary>
  263. /// 清空总诊台建议内容
  264. /// </summary>
  265. /// <param name="PatientRegisterId"></param>
  266. /// <returns></returns>
  267. [HttpPost("api/app/sumsuggestionheader/deletesumsuggestionmany")]
  268. public async Task DeleteSumSuggestionManyAsync(Guid PatientRegisterId)
  269. {
  270. if (PatientRegisterId != Guid.Empty)
  271. {
  272. await _sumSuggestionHeaderRepository.DeleteAsync(d => d.PatientRegisterId == PatientRegisterId);
  273. //删除对应的诊断数据
  274. await _sumDiagnosisRepository.DeleteAsync(m => m.PatientRegisterId == PatientRegisterId);
  275. }
  276. else
  277. {
  278. throw new UserFriendlyException("请求参数有误");
  279. }
  280. }
  281. }
  282. }