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.

892 lines
44 KiB

2 years ago
2 years ago
2 years ago
2 years ago
1 year 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 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
1 year ago
11 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
11 months 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 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
12 months ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
1 year ago
2 years ago
2 years ago
11 months 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 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
12 months ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
1 year ago
12 months ago
12 months ago
1 year ago
2 years ago
  1. using Microsoft.AspNetCore.Authorization;
  2. using Microsoft.AspNetCore.Mvc;
  3. using Microsoft.EntityFrameworkCore;
  4. using Microsoft.Extensions.Configuration;
  5. using Org.BouncyCastle.Asn1.Ocsp;
  6. using Shentun.Peis.Asbitems;
  7. using Shentun.Peis.Enums;
  8. using Shentun.Peis.FollowUps;
  9. using Shentun.Peis.MenuInfos;
  10. using Shentun.Peis.Models;
  11. using Shentun.Peis.PatientRegisters;
  12. using Shentun.Peis.RegisterCheckItems;
  13. using Shentun.Peis.RegisterCheckSummarys;
  14. using System;
  15. using System.Collections.Generic;
  16. using System.Linq;
  17. using System.Linq.Dynamic.Core;
  18. using System.Text;
  19. using System.Threading.Tasks;
  20. using Volo.Abp;
  21. using Volo.Abp.Application.Dtos;
  22. using Volo.Abp.Application.Services;
  23. using Volo.Abp.Domain.Entities.Events.Distributed;
  24. using Volo.Abp.Domain.Repositories;
  25. using Volo.Abp.Guids;
  26. using Volo.Abp.Identity;
  27. using Volo.Abp.ObjectMapping;
  28. using Volo.Abp.Users;
  29. using static Microsoft.EntityFrameworkCore.DbLoggerCategory;
  30. namespace Shentun.Peis.RegisterChecks
  31. {
  32. /// <summary>
  33. /// 登记检查单
  34. /// </summary>
  35. [ApiExplorerSettings(GroupName = "Work")]
  36. [Authorize]
  37. public class RegisterCheckAppService : ApplicationService
  38. {
  39. private readonly IRepository<RegisterCheckItem> _registerCheckItemRepository;
  40. private readonly IRepository<RegisterCheckAsbitem> _registerCheckAsbitemRepository;
  41. private readonly IRepository<ItemType> _itemTypeRepository;
  42. private readonly IRepository<PatientRegister, Guid> _patientRegisterRepository;
  43. private readonly IRepository<ReferenceRange, Guid> _referenceRangeRepository;
  44. private readonly IRepository<RegisterCheck, Guid> _registerCheckRepository;
  45. private readonly IRepository<RegisterCheckSummary, Guid> _registerCheckSummaryRepository;
  46. private readonly IRepository<RegisterCheckSuggestion, Guid> _registerCheckSuggestionRepository;
  47. private readonly IRepository<IdentityUser, Guid> _userRepository;
  48. private readonly RegisterCheckManager _registerCheckManager;
  49. private readonly RegisterCheckItemManager _registerCheckItemManager;
  50. private readonly CacheService _cacheService;
  51. private readonly IGuidGenerator _guidGenerator;
  52. private readonly IConfiguration _configuration;
  53. private readonly ICurrentUser _currentUser;
  54. private readonly IRepository<UserItemType> _userItemTypeRepository;
  55. private readonly IRepository<Asbitem, Guid> _asbitemRepository;
  56. private readonly IRepository<LisRequest, Guid> _lisRequestRepository;
  57. private readonly FollowUpAppService _followUpAppService;
  58. private readonly IRepository<DoctorSignIn, Guid> _doctorSignInRepository;
  59. public RegisterCheckAppService(IRepository<RegisterCheck, Guid> registerCheckRepository,
  60. IRepository<RegisterCheckItem> registerCheckItemRepository,
  61. IRepository<PatientRegister, Guid> patientRegisterRepository,
  62. IRepository<ReferenceRange, Guid> referenceRangeRepository,
  63. IRepository<RegisterCheckSummary, Guid> registerCheckSummaryRepository,
  64. IRepository<RegisterCheckSuggestion, Guid> registerCheckSuggestionRepository,
  65. IRepository<IdentityUser, Guid> userRepository,
  66. RegisterCheckManager registerCheckManager,
  67. RegisterCheckItemManager registerCheckItemManager,
  68. CacheService cacheService,
  69. IGuidGenerator guidGenerator,
  70. IConfiguration configuration,
  71. ICurrentUser currentUser,
  72. IRepository<UserItemType> userItemTypeRepository,
  73. IRepository<Asbitem, Guid> asbitemRepository,
  74. IRepository<RegisterCheckAsbitem> registerCheckAsbitemRepository,
  75. IRepository<ItemType> itemTypeRepository,
  76. IRepository<LisRequest, Guid> lisRequestRepository,
  77. FollowUpAppService followUpAppService,
  78. IRepository<DoctorSignIn, Guid> doctorSignInRepository)
  79. {
  80. _registerCheckRepository = registerCheckRepository;
  81. _userRepository = userRepository;
  82. _registerCheckManager = registerCheckManager;
  83. _patientRegisterRepository = patientRegisterRepository;
  84. _referenceRangeRepository = referenceRangeRepository;
  85. _registerCheckItemRepository = registerCheckItemRepository;
  86. _registerCheckSummaryRepository = registerCheckSummaryRepository;
  87. _registerCheckSuggestionRepository = registerCheckSuggestionRepository;
  88. _registerCheckItemManager = registerCheckItemManager;
  89. _cacheService = cacheService;
  90. _guidGenerator = guidGenerator;
  91. _configuration = configuration;
  92. _currentUser = currentUser;
  93. _userItemTypeRepository = userItemTypeRepository;
  94. _asbitemRepository = asbitemRepository;
  95. _registerCheckAsbitemRepository = registerCheckAsbitemRepository;
  96. _itemTypeRepository = itemTypeRepository;
  97. _lisRequestRepository = lisRequestRepository;
  98. _followUpAppService = followUpAppService;
  99. _doctorSignInRepository = doctorSignInRepository;
  100. }
  101. /// <summary>
  102. /// 根据RegisterCheckId获取当前实体数据
  103. /// </summary>
  104. /// <param name="id"></param>
  105. /// <returns></returns>
  106. [HttpGet("api/app/registercheck/getregistercheck")]
  107. public async Task<RegisterCheckDto> GetRegisterCheckAsync(Guid id)
  108. {
  109. var registerCheckEntity = (await _registerCheckRepository.GetQueryableAsync())
  110. .Include(x => x.RegisterCheckAsbitems)
  111. .ThenInclude(x => x.Asbitem)
  112. .ThenInclude(x => x.ItemType)
  113. .FirstOrDefault(f => f.Id == id);
  114. var registerCheckDto = new RegisterCheckDto
  115. {
  116. AuditorUserId = registerCheckEntity.AuditorUserId,
  117. AuditTime = registerCheckEntity.AuditTime,
  118. CheckDate = DataHelper.ConversionDateToString(registerCheckEntity.CheckDate),
  119. CheckDoctorId = registerCheckEntity.CheckDoctorId,
  120. CheckRequestNo = registerCheckEntity.CheckRequestNo,
  121. CheckRequestPrintTimes = registerCheckEntity.CheckRequestPrintTimes,
  122. CompleteFlag = registerCheckEntity.CompleteFlag,
  123. CreationTime = registerCheckEntity.CreationTime,
  124. CreatorId = registerCheckEntity.CreatorId,
  125. //CriticalValue = registerCheckEntity.CriticalValue,
  126. //CriticalValueCreateDate = DataHelper.ConversionDateToString(registerCheckEntity.CriticalValueCreateDate),
  127. //CriticalValueFlag = registerCheckEntity.IsCriticalValue,
  128. //CriticalValueProcessContent = registerCheckEntity.CriticalValueContent,
  129. //CriticalValueProcessDate = DataHelper.ConversionDateToString(registerCheckEntity.CriticalValueProcessDate),
  130. //CriticalValueProcessDoctor = registerCheckEntity.CriticalValueProcessDoctor,
  131. //CriticalValueProcessFlag = registerCheckEntity.CriticalValueProcessFlag,
  132. Id = registerCheckEntity.Id,
  133. IsAudit = registerCheckEntity.IsAudit,
  134. IsLock = registerCheckEntity.IsLock,
  135. LastModificationTime = registerCheckEntity.LastModificationTime,
  136. LastModifierId = registerCheckEntity.LastModifierId,
  137. ThirdInfo = registerCheckEntity.ThirdInfo,
  138. LastModifierName = _cacheService.GetSurnameAsync(registerCheckEntity.LastModifierId).Result,
  139. CreatorName = _cacheService.GetSurnameAsync(registerCheckEntity.CreatorId).Result,
  140. IsCharge = registerCheckEntity.RegisterCheckAsbitems.Where(m => m.PayTypeFlag == PayTypeFlag.PersonPay && m.IsCharge == 'N').Count() > 0 ? 'N' : 'Y',
  141. AsbitemName = string.Join(",", registerCheckEntity.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()),
  142. IsPacsCheck = registerCheckEntity.IsPacsCheck,
  143. PacsUploadDate = DataHelper.ConversionDateToString(registerCheckEntity.PacsUploadDate),
  144. PacsCheckDate = DataHelper.ConversionDateToString(registerCheckEntity.PacsCheckDate),
  145. CriticalValueContent = registerCheckEntity.CriticalValueContent,
  146. CriticalValueCreationTime = DataHelper.ConversionDateToString(registerCheckEntity.CriticalValueCreationTime),
  147. //CriticalValueCreatorId = registerCheckEntity.CriticalValueCreatorId,
  148. //CriticalValuePhoneCreatorId = registerCheckEntity.CriticalValuePhoneCreatorId,
  149. FollowUpCreationTime = DataHelper.ConversionDateToString(registerCheckEntity.FollowUpCreationTime),
  150. // FollowUpCreatorId = registerCheckEntity.FollowUpCreatorId,
  151. IsFollowUp = registerCheckEntity.IsFollowUp == null ? 'N' : registerCheckEntity.IsFollowUp,
  152. IsCriticalValue = registerCheckEntity.IsCriticalValue == null ? 'N' : registerCheckEntity.IsCriticalValue,
  153. IsCriticalValueAudit = registerCheckEntity.IsCriticalValueAudit == null ? 'N' : registerCheckEntity.IsCriticalValueAudit,
  154. //IsCriticalValuePhoneComplete = registerCheckEntity.IsCriticalValuePhoneComplete,
  155. //IsCriticalValueSmsComplete = registerCheckEntity.IsCriticalValueSmsComplete,
  156. IsReview = registerCheckEntity.IsReview == null ? 'N' : registerCheckEntity.IsReview,
  157. CriticalRangeValue = registerCheckEntity.CriticalRangeValue,
  158. CriticalValueCreatorName = _cacheService.GetSurnameAsync(registerCheckEntity.CriticalValueCreatorId).GetAwaiter().GetResult(),
  159. FollowUpCreatorName = _cacheService.GetSurnameAsync(registerCheckEntity.FollowUpCreatorId).GetAwaiter().GetResult(),
  160. DiagnosisLevelId = registerCheckEntity.DiagnosisLevelId,
  161. CheckTypeFlag = registerCheckEntity.RegisterCheckAsbitems.FirstOrDefault().Asbitem.ItemType.CheckTypeFlag
  162. };
  163. return registerCheckDto;
  164. }
  165. /// <summary>
  166. /// 获取登记check表数据(附带组合项目名称跟是否收费) 医生诊台左边列表 只有一个收费就显示收费
  167. /// </summary>
  168. /// <param name="input"></param>
  169. /// <returns></returns>
  170. [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterId")]
  171. public async Task<List<RegisterCheckOrAsbitemNameOrIsChargeDto>> GetRegisterCheckAsbitemsByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
  172. {
  173. //var list = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
  174. // join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  175. // on registerCheck.Id equals registerCheckAsbitem.AsbitemId
  176. // join asbitem in await _asbitemRepository.GetQueryableAsync()
  177. // on registerCheckAsbitem.AsbitemId equals asbitem.Id
  178. // join itemType in await _itemTypeRepository.GetQueryableAsync()
  179. // on asbitem.ItemTypeId equals itemType.Id
  180. // where registerCheck.PatientRegisterId == input.PatientRegisterId
  181. // orderby itemType.DisplayName, asbitem.DisplayOrder
  182. // select new
  183. // {
  184. // registerCheck,
  185. // registerCheckAsbitem,
  186. // asbitem,
  187. // itemType
  188. // }).ToList();
  189. var entlist = (await _registerCheckRepository.GetQueryableAsync())
  190. .Include(x => x.RegisterCheckAsbitems)
  191. .ThenInclude(x => x.Asbitem).ThenInclude(x => x.ItemType)
  192. .Where(m => m.PatientRegisterId == input.PatientRegisterId).ToList();
  193. //排序
  194. entlist = entlist.OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.ItemType.DisplayOrder)).ToList()
  195. .OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.DisplayOrder)).ToList();
  196. var entdto = entlist.Where(m => m.RegisterCheckAsbitems.Where(mm => mm.Asbitem.IsCheck == 'Y').Count() > 0).Select(s => new RegisterCheckOrAsbitemNameOrIsChargeDto
  197. {
  198. CheckTypeFlag = s.RegisterCheckAsbitems.First().Asbitem.ItemType.CheckTypeFlag,
  199. AsbitemName = string.Join(",", s.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()),
  200. AuditorUserId = s.AuditorUserId,
  201. AuditTime = s.AuditTime,
  202. CheckDate = DataHelper.ConversionDateToString(s.CheckDate),
  203. CheckDoctorId = s.CheckDoctorId,
  204. CheckRequestNo = s.CheckRequestNo,
  205. CheckRequestPrintTimes = s.CheckRequestPrintTimes,
  206. CompleteFlag = s.CompleteFlag,
  207. CreationTime = s.CreationTime,
  208. CreatorId = s.CreatorId,
  209. //CriticalValue = s.CriticalValue,
  210. CriticalValueContent = s.CriticalValueContent,
  211. CriticalValueCreationTime = DataHelper.ConversionDateToString(s.CriticalValueCreationTime),
  212. // CriticalValueCreatorId = s.CriticalValueCreatorId,
  213. //CriticalValuePhoneCreatorId = s.CriticalValuePhoneCreatorId,
  214. FollowUpCreationTime = DataHelper.ConversionDateToString(s.FollowUpCreationTime),
  215. //FollowUpCreatorId = s.FollowUpCreatorId,
  216. IsFollowUp = s.IsFollowUp == null ? 'N' : s.IsFollowUp,
  217. IsCriticalValue = s.IsCriticalValue == null ? 'N' : s.IsCriticalValue,
  218. IsCriticalValueAudit = s.IsCriticalValueAudit == null ? 'N' : s.IsCriticalValueAudit,
  219. // IsCriticalValuePhoneComplete = s.IsCriticalValuePhoneComplete,
  220. // IsCriticalValueSmsComplete = s.IsCriticalValueSmsComplete,
  221. IsReview = s.IsReview == null ? 'N' : s.IsReview,
  222. CriticalRangeValue = s.CriticalRangeValue,
  223. IsPacsCheck = s.IsPacsCheck,
  224. PacsUploadDate = DataHelper.ConversionDateToString(s.PacsUploadDate),
  225. PacsCheckDate = DataHelper.ConversionDateToString(s.PacsCheckDate),
  226. //CriticalValueCreateDate = DataHelper.ConversionDateToString(s.CriticalValueCreateDate),
  227. //CriticalValueFlag = s.IsCriticalValue,
  228. //CriticalValueProcessContent = s.CriticalValueContent,
  229. // CriticalValueProcessDate = DataHelper.ConversionDateToString(s.CriticalValueProcessDate),
  230. // CriticalValueProcessDoctor = s.CriticalValueProcessDoctor,
  231. // CriticalValueProcessFlag = s.CriticalValueProcessFlag,
  232. Id = s.Id,
  233. IsAudit = s.IsAudit,
  234. IsCharge = s.RegisterCheckAsbitems.Where(m => m.IsCharge == 'Y').Count() > 0 ? 'Y' : 'N',
  235. IsLock = s.IsLock,
  236. LastModificationTime = s.LastModificationTime,
  237. LastModifierId = s.LastModifierId,
  238. //RegisterAsbitemId = s.RegisterAsbitemId,
  239. ThirdInfo = s.ThirdInfo,
  240. CreatorName = _cacheService.GetSurnameAsync(s.CreatorId).Result,
  241. LastModifierName = _cacheService.GetSurnameAsync(s.LastModifierId).Result,
  242. ItemTypeDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.ItemType.DisplayOrder,
  243. AsbitemDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.DisplayOrder,
  244. CriticalValueCreatorName = _cacheService.GetSurnameAsync(s.CriticalValueCreatorId).GetAwaiter().GetResult(),
  245. FollowUpCreatorName = _cacheService.GetSurnameAsync(s.FollowUpCreatorId).GetAwaiter().GetResult()
  246. }).ToList();
  247. return entdto;
  248. }
  249. /// <summary>
  250. /// 获取登记check表数据(附带组合项目名称跟是否收费) 医生诊台左边列表 只有一个收费就显示收费 增加项目类别权限控制
  251. /// </summary>
  252. /// <param name="input"></param>
  253. /// <returns></returns>
  254. [HttpPost("api/app/RegisterCheck/GetRegisterCheckWithAsbitems")]
  255. public async Task<List<RegisterCheckWithAsbitemsDto>> GetRegisterCheckWithAsbitemsAsync(PatientRegisterIdInputDto input)
  256. {
  257. var entlist = (await _registerCheckRepository.GetQueryableAsync())
  258. .Include(x => x.RegisterCheckAsbitems)
  259. .ThenInclude(x => x.Asbitem).ThenInclude(x => x.ItemType)
  260. .Where(m => m.RegisterCheckAsbitems.Select(s => s.PatientRegisterId)
  261. .Contains(input.PatientRegisterId)
  262. && m.RegisterCheckAsbitems.Select(s => s.Asbitem.IsCheck).Contains('Y'));
  263. #region 增加项目类别权限
  264. string AdminId = _configuration.GetValue<string>("AdminId");
  265. if (_currentUser.Id.Value != Guid.Parse(AdminId))
  266. {
  267. var asbitemIds = (from userItemType in await _userItemTypeRepository.GetQueryableAsync()
  268. join asbitem in await _asbitemRepository.GetQueryableAsync() on userItemType.ItemTypeId equals asbitem.ItemTypeId
  269. where userItemType.UserId == _currentUser.Id.Value
  270. select asbitem.Id).ToList();
  271. if (asbitemIds.Any())
  272. {
  273. entlist = entlist.Where(m => asbitemIds.Contains(m.RegisterCheckAsbitems.FirstOrDefault().AsbitemId));
  274. }
  275. else
  276. {
  277. return new List<RegisterCheckWithAsbitemsDto>();
  278. }
  279. }
  280. #endregion
  281. //排序
  282. entlist = entlist.OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.ItemType.DisplayOrder))
  283. .ThenBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.DisplayOrder));
  284. var entdto = entlist.ToList().Select(s => new RegisterCheckWithAsbitemsDto
  285. {
  286. AsbitemName = string.Join(",", s.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()),
  287. AuditorUserId = s.AuditorUserId,
  288. AuditTime = s.AuditTime,
  289. CheckDate = DataHelper.ConversionDateToString(s.CheckDate),
  290. CheckDoctorId = s.CheckDoctorId,
  291. CheckRequestNo = s.CheckRequestNo,
  292. CompleteFlag = s.CompleteFlag,
  293. Id = s.Id,
  294. IsAudit = s.IsAudit,
  295. IsCharge = s.RegisterCheckAsbitems.Where(m => m.IsCharge == 'Y').Count() > 0 ? 'Y' : 'N',
  296. IsLock = s.IsLock,
  297. CheckTypeFlag = s.RegisterCheckAsbitems.First().Asbitem.ItemType.CheckTypeFlag,
  298. ItemTypeDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.ItemType.DisplayOrder,
  299. AsbitemDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.DisplayOrder,
  300. }).ToList();
  301. return entdto;
  302. }
  303. /// <summary>
  304. /// 保存结果
  305. /// </summary>
  306. /// <param name="input"></param>
  307. /// <returns></returns>
  308. /// <exception cref="UserFriendlyException"></exception>
  309. [HttpPost("api/app/registercheck/UpdateCheckResult")]
  310. public async Task UpdateCheckResult(UpdateCheckResultDto input)
  311. {
  312. if (input == null)
  313. {
  314. throw new UserFriendlyException("input参数不能为空");
  315. }
  316. if (input.RegisterCheckItems == null)
  317. {
  318. throw new UserFriendlyException("RegisterCheckItems参数不能为空");
  319. }
  320. if (!input.RegisterCheckItems.Where(o => !string.IsNullOrWhiteSpace(o.Result)).ToList().Any())
  321. {
  322. throw new UserFriendlyException("明细结果不能全部为空");
  323. }
  324. if (input.Summarys == null || !input.Summarys.Any())
  325. {
  326. throw new UserFriendlyException("小结不能为空");
  327. }
  328. var registerCheck = await _registerCheckRepository.GetAsync(input.RegisterCheckId);
  329. var patientRegister = await _patientRegisterRepository.GetAsync(registerCheck.PatientRegisterId);
  330. //修改医生和检查日期
  331. if (string.IsNullOrWhiteSpace(input.CheckDoctorId))
  332. {
  333. input.CheckDoctorId = CurrentUser.Id.ToString();
  334. }
  335. _registerCheckManager.UpdateCheckDoctorAndDateAsync(patientRegister, registerCheck, input.CheckDoctorId, input.CheckDate, input.ExecOrganizationUnitId);
  336. if (!string.IsNullOrWhiteSpace(input.AuditorName))
  337. registerCheck.AuditorName = input.AuditorName;
  338. if (!string.IsNullOrWhiteSpace(input.LisSampleNo))
  339. registerCheck.LisSampleNo = input.LisSampleNo;
  340. //更新人员登记信息完成标志
  341. patientRegister.CompleteFlag = PatientRegisterCompleteFlag.PartCheck;
  342. await _patientRegisterRepository.UpdateAsync(patientRegister);
  343. await _registerCheckRepository.UpdateAsync(registerCheck);
  344. //修改项目结果
  345. var registerCheckItems = await _registerCheckItemRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId);
  346. foreach (var registerCheckItem in registerCheckItems)
  347. {
  348. var inputCheckItem = input.RegisterCheckItems.Where(o => o.ItemId == registerCheckItem.ItemId).FirstOrDefault();
  349. if (inputCheckItem == null)
  350. {
  351. continue;
  352. }
  353. var registerCheckItemUpdate = new RegisterCheckItem()
  354. {
  355. Result = inputCheckItem.Result,
  356. CheckDoctorName = inputCheckItem.CheckDoctorName,
  357. CriticalValue = inputCheckItem.CriticalValue,
  358. CheckDate = DateTime.Now
  359. };
  360. await _registerCheckItemManager.UpdateRegisterCheckItemAsync(registerCheckItemUpdate, registerCheckItem);
  361. }
  362. await _registerCheckItemRepository.UpdateManyAsync(registerCheckItems);
  363. //修改小结
  364. var deleteRegisterCheckSummarys = await _registerCheckSummaryRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId);
  365. await _registerCheckSummaryRepository.DeleteManyAsync(deleteRegisterCheckSummarys);
  366. for (var i = 0; i < input.Summarys.Count; i++)
  367. {
  368. var registerCheckSummary = new RegisterCheckSummary(_guidGenerator.Create())
  369. {
  370. DisplayOrder = i + 1,
  371. RegisterCheckId = input.RegisterCheckId,
  372. Summary = input.Summarys[i].Summary,
  373. SummaryFlag = '0'
  374. };
  375. await _registerCheckSummaryRepository.InsertAsync(registerCheckSummary);
  376. }
  377. //修改建议
  378. var _registerCheckSuggestions = await _registerCheckSuggestionRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId);
  379. await _registerCheckSuggestionRepository.DeleteManyAsync(_registerCheckSuggestions);
  380. for (var i = 0; i < input.Suggestions.Count; i++)
  381. {
  382. var registerCheckSuggestion = new RegisterCheckSuggestion(_guidGenerator.Create())
  383. {
  384. DisplayOrder = i + 1,
  385. RegisterCheckId = input.RegisterCheckId,
  386. Suggestion = input.Suggestions[i].Suggestion,
  387. };
  388. await _registerCheckSuggestionRepository.InsertAsync(registerCheckSuggestion);
  389. }
  390. }
  391. ///// <summary>
  392. ///// 弃检跟恢复操作 0(为未检), 1(已检), 2(弃检)
  393. ///// </summary>
  394. ///// <param name="RegisterCheckId">检查单ID</param>
  395. ///// <param name="CompleteFlag">检查状态</param>
  396. ///// <returns></returns>
  397. //[HttpPost("api/app/registercheck/updatecomplete")]
  398. //public async Task<RegisterCheckDto> UpdateCompleteAsync(Guid RegisterCheckId, char CompleteFlag)
  399. //{
  400. // var registerCheckEnt = await _registerCheckManager.UpdateCompleteAsync(RegisterCheckId, CompleteFlag);
  401. // return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(registerCheckEnt);
  402. //}
  403. /// <summary>
  404. /// 批量弃检跟恢复操作 0(为未检), 1(已检), 2(弃检)
  405. /// </summary>
  406. /// <param name="input"></param>
  407. /// <returns></returns>
  408. [HttpPost("api/app/registercheck/updatecompletemany")]
  409. public async Task<List<RegisterCheckDto>> UpdateCompleteManyAsync(List<UpdateCompleteManyDto> input)
  410. {
  411. List<RegisterCheckDto> msg = new List<RegisterCheckDto>();
  412. if (input.Any())
  413. {
  414. foreach (var item in input)
  415. {
  416. var registerCheckEnt = await _registerCheckManager.UpdateCompleteAsync(item.RegisterCheckId, item.CompleteFlag);
  417. var newentity = ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(registerCheckEnt);
  418. if (newentity != null)
  419. {
  420. msg.Add(newentity);
  421. }
  422. }
  423. }
  424. return msg;
  425. }
  426. /// <summary>
  427. /// 更新审核状态 Y 已审核 N 未审核
  428. /// </summary>
  429. /// <param name="RegisterCheckId">检查单ID</param>
  430. /// <param name="IsAudit">审核状态( Y 已审核 N 未审核)</param>
  431. /// <returns></returns>
  432. [HttpPost("api/app/registercheck/updateisaudit")]
  433. public async Task<RegisterCheckDto> UpdateIsAuditAsync(Guid RegisterCheckId, char IsAudit)
  434. {
  435. var registerCheckEnt = await _registerCheckManager.UpdateIsAuditAsync(RegisterCheckId, IsAudit);
  436. return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(registerCheckEnt);
  437. }
  438. /// <summary>
  439. /// 更改检查医生(自动更新完成状态为已检)
  440. /// </summary>
  441. /// <param name="input"></param>
  442. /// <returns></returns>
  443. [HttpPost("api/app/registercheck/updatecheckdoctor")]
  444. public async Task<RegisterCheckDto> UpdateCheckDoctorAsync(UpdateCheckDoctorDto input)
  445. {
  446. if (input == null || input.RegisterCheckId == Guid.Empty)
  447. {
  448. throw new UserFriendlyException("请求参数有误");
  449. }
  450. var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId);
  451. var entitydto = ObjectMapper.Map<UpdateCheckDoctorDto, RegisterCheck>(input);
  452. var newentity = await _registerCheckManager.UpdateCheckDoctorAsync(entitydto, entity);
  453. return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(newentity);
  454. }
  455. /// <summary>
  456. /// 更改危警值内容
  457. /// </summary>
  458. /// <param name="input"></param>
  459. /// <returns></returns>
  460. [HttpPost("api/app/registercheck/updatecriticalvalue")]
  461. public async Task<RegisterCheckDto> UpdateCriticalValueAsync(UpdateCriticalValueDto input)
  462. {
  463. if (input == null || input.RegisterCheckId == Guid.Empty)
  464. {
  465. throw new UserFriendlyException("请求参数有误");
  466. }
  467. var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId);
  468. var entitydto = ObjectMapper.Map<UpdateCriticalValueDto, RegisterCheck>(input);
  469. var newentity = await _registerCheckManager.UpdateCriticalValueAsync(entitydto, entity);
  470. return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(newentity);
  471. }
  472. /// <summary>
  473. /// 更改审核医生(自动更新审核状态为已审核)
  474. /// </summary>
  475. /// <param name="input"></param>
  476. /// <returns></returns>
  477. [HttpPost("api/app/registercheck/updateauditordoctor")]
  478. public async Task<RegisterCheckDto> UpdateAuditorDoctorAsync(UpdateAuditorDoctorDto input)
  479. {
  480. if (input == null || input.RegisterCheckId == Guid.Empty)
  481. {
  482. throw new UserFriendlyException("请求参数有误");
  483. }
  484. var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId);
  485. var entitydto = ObjectMapper.Map<UpdateAuditorDoctorDto, RegisterCheck>(input);
  486. var newentity = await _registerCheckManager.UpdateAuditorDoctorAsync(entitydto, entity);
  487. return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(newentity);
  488. }
  489. /// <summary>
  490. /// 修改人员登记的组合项目锁定状态 批量
  491. /// </summary>
  492. /// <param name="input"></param>
  493. /// <returns></returns>
  494. /// <exception cref="UserFriendlyException"></exception>
  495. [HttpPost("api/app/registercheck/updateregistercheckislockmany")]
  496. public async Task<List<RegisterCheckDto>> UpdateRegisterCheckIsLockManyAsync(List<UpdateRegisterCheckIsLockDto> input)
  497. {
  498. if (!input.Any())
  499. throw new UserFriendlyException("请求参数有误");
  500. List<RegisterCheck> entlist = new List<RegisterCheck>();
  501. foreach (var item in input)
  502. {
  503. var ent = await _registerCheckRepository.GetAsync(item.RegisterCheckId);
  504. ent.IsLock = item.IsLock;
  505. entlist.Add(ent);
  506. }
  507. await _registerCheckRepository.UpdateManyAsync(entlist);
  508. return ObjectMapper.Map<List<RegisterCheck>, List<RegisterCheckDto>>(entlist);
  509. }
  510. /// <summary>
  511. /// 根据人员ID集合获取所有项目
  512. /// </summary>
  513. /// <param name="input"></param>
  514. /// <returns></returns>
  515. [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterIds")]
  516. public async Task<List<SimpleAsbitemDto>> GetRegisterCheckAsbitemsByPatientRegisterIdsAsync(PatientRegisterIdsInputDto input)
  517. {
  518. if (!input.PatientRegisterIds.Any())
  519. throw new UserFriendlyException("人员ID不能为空");
  520. var entListDto = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  521. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  522. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  523. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
  524. where input.PatientRegisterIds.Contains(patientRegister.Id) && asbitem.IsCheck == 'Y'
  525. select new SimpleAsbitemDto
  526. {
  527. AsbitemId = registerCheckAsbitem.AsbitemId,
  528. AsbitemName = asbitem.DisplayName
  529. }).Distinct().ToList();
  530. return entListDto;
  531. }
  532. /// <summary>
  533. /// 根据人员条码号集合获取所有项目
  534. /// </summary>
  535. /// <param name="input"></param>
  536. /// <returns></returns>
  537. [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterNos")]
  538. public async Task<List<SimpleAsbitemDto>> GetRegisterCheckAsbitemsByPatientRegisterNosAsync(PatientRegisterNosInputDto input)
  539. {
  540. if (!input.PatientRegisterNos.Any())
  541. throw new UserFriendlyException("人员条码号不能为空");
  542. var entListDto = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  543. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  544. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  545. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
  546. where input.PatientRegisterNos.Contains(patientRegister.PatientRegisterNo) && asbitem.IsCheck == 'Y'
  547. select new SimpleAsbitemDto
  548. {
  549. AsbitemId = registerCheckAsbitem.AsbitemId,
  550. AsbitemName = asbitem.DisplayName
  551. }).Distinct().ToList();
  552. return entListDto;
  553. }
  554. /// <summary>
  555. /// 根据检验条码号集合获取所有项目
  556. /// </summary>
  557. /// <param name="input"></param>
  558. /// <returns></returns>
  559. [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByLisRequestNos")]
  560. public async Task<List<SimpleAsbitemDto>> GetRegisterCheckAsbitemsByLisRequestNosAsync(LisRequestNosInputDto input)
  561. {
  562. if (!input.LisRequestNos.Any())
  563. throw new UserFriendlyException("检验条码号不能为空");
  564. var entListDto = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  565. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  566. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  567. join lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id
  568. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
  569. where input.LisRequestNos.Contains(lisRequest.LisRequestNo) && asbitem.IsCheck == 'Y'
  570. select new SimpleAsbitemDto
  571. {
  572. AsbitemId = registerCheckAsbitem.AsbitemId,
  573. AsbitemName = asbitem.DisplayName
  574. }).Distinct().ToList();
  575. return entListDto;
  576. }
  577. /// <summary>
  578. /// 批量修改医生 根据人员ID集合
  579. /// </summary>
  580. /// <param name="input"></param>
  581. /// <returns></returns>
  582. [HttpPost("api/app/RegisterCheck/UpdateBatchCheckDoctor")]
  583. public async Task UpdateBatchCheckDoctorAsync(UpdateBatchCheckDoctorInputDto input)
  584. {
  585. if (!input.PatientRegisterIds.Any())
  586. throw new UserFriendlyException("人员ID不能为空");
  587. if (!input.CheckDoctorDetail.Any())
  588. throw new UserFriendlyException("需要修改的信息不能为空");
  589. var registerCheckAsbitemList = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  590. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  591. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  592. where input.PatientRegisterIds.Contains(patientRegister.Id)
  593. select registerCheckAsbitem).ToList();
  594. if (registerCheckAsbitemList.Any())
  595. {
  596. foreach (var registerCheckAsbitem in registerCheckAsbitemList)
  597. {
  598. var checkDoctorEnt = input.CheckDoctorDetail.FirstOrDefault(f => f.AsbitemId == registerCheckAsbitem.AsbitemId);
  599. if (checkDoctorEnt != null)
  600. {
  601. var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == registerCheckAsbitem.RegisterCheckId);
  602. if (registerCheckEnt != null)
  603. {
  604. registerCheckEnt.CheckDoctorId = checkDoctorEnt.CheckDoctorId;
  605. await _registerCheckRepository.UpdateAsync(registerCheckEnt);
  606. }
  607. }
  608. }
  609. }
  610. }
  611. /// <summary>
  612. /// 修改检查表危急值相关内容
  613. /// </summary>
  614. /// <param name="input"></param>
  615. /// <returns></returns>
  616. [HttpPost("api/app/RegisterCheck/UpdateRegisterCheckCritical")]
  617. public async Task UpdateRegisterCheckCriticalAsync(UpdateRegisterCheckCriticalInputDto input)
  618. {
  619. var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == input.RegisterCheckId);
  620. if (registerCheckEnt == null)
  621. {
  622. throw new UserFriendlyException("参数不正确");
  623. }
  624. if (input.IsCriticalValue != null)
  625. {
  626. registerCheckEnt.IsCriticalValue = input.IsCriticalValue;
  627. }
  628. if (input.IsCriticalValueAudit != null)
  629. {
  630. registerCheckEnt.IsCriticalValueAudit = input.IsCriticalValueAudit;
  631. }
  632. if (input.IsReview != null)
  633. {
  634. registerCheckEnt.IsReview = input.IsReview;
  635. }
  636. registerCheckEnt.CriticalValueContent = input.CriticalValueContent;
  637. if (input.IsFollowUp != null)
  638. {
  639. registerCheckEnt.IsFollowUp = input.IsFollowUp;
  640. }
  641. if (input.IsCriticalValue == 'Y' && registerCheckEnt.CriticalValueCreatorId == null)
  642. {
  643. registerCheckEnt.CriticalValueCreatorId = _currentUser.Id;
  644. registerCheckEnt.CriticalValueCreationTime = DateTime.Now;
  645. }
  646. if (input.IsFollowUp == 'Y' && registerCheckEnt.FollowUpCreatorId == null)
  647. {
  648. registerCheckEnt.FollowUpCreatorId = _currentUser.Id;
  649. registerCheckEnt.FollowUpCreationTime = DateTime.Now;
  650. }
  651. registerCheckEnt.DiagnosisLevelId = input.DiagnosisLevelId;
  652. await _registerCheckRepository.UpdateAsync(registerCheckEnt);
  653. bool isCreateFollowUp = false;
  654. if (input.IsFollowUp == 'Y' || input.IsCriticalValue == 'Y')
  655. {
  656. isCreateFollowUp = true;
  657. }
  658. if (isCreateFollowUp)
  659. {
  660. //增加随访表记录
  661. await _followUpAppService.CreateAsync(new PatientRegisterIdInputDto
  662. {
  663. PatientRegisterId = registerCheckEnt.PatientRegisterId
  664. });
  665. }
  666. else
  667. {
  668. //#region 更新明细项目的危急值跟随访值状态
  669. //var registerCheckItemList = await _registerCheckItemRepository.GetListAsync(m => m.RegisterCheckId == input.RegisterCheckId);
  670. //foreach (var registerCheckItem in registerCheckItemList)
  671. //{
  672. // registerCheckItem.IsCriticalValue = registerCheckEnt.IsCriticalValue;
  673. // registerCheckItem.IsFollowUp = registerCheckEnt.IsFollowUp;
  674. //}
  675. //await _registerCheckItemRepository.UpdateManyAsync(registerCheckItemList);
  676. //#endregion
  677. //删除随访表记录
  678. await _followUpAppService.DeleteByPatientRegisterId(new PatientRegisterIdInputDto
  679. {
  680. PatientRegisterId = registerCheckEnt.PatientRegisterId
  681. });
  682. }
  683. }
  684. /// <summary>
  685. /// 医生签到 签退
  686. /// </summary>
  687. /// <param name="input"></param>
  688. /// <returns></returns>
  689. [HttpPost("api/app/RegisterCheck/CreateDoctorSignIn")]
  690. public async Task CreateDoctorSignInAsync(CreateDoctorSignInInputDto input)
  691. {
  692. //1、创建日期就是签到日期
  693. //2、创建者ID就是签到的医生ID
  694. //3、今天已经签到的再点签到的时候不做处理
  695. //4、签退的再点签到先将当天sign_in_flag标志为0的这条记录设置为1,然后重新创建一条签到记录
  696. //5、分配房间的逻辑修改为只能分配给已经签到的房间
  697. var doctorId = _currentUser.Id;
  698. if (doctorId != null)
  699. {
  700. if (input.SignInFlag == SignInFlag.SignIn)
  701. {
  702. //签到
  703. var doctorSignInEnt = await _doctorSignInRepository.FirstOrDefaultAsync(f => f.CreatorId == doctorId
  704. && f.RoomId == input.RoomId
  705. && f.CreationTime.Date == DateTime.Now.Date);
  706. if (doctorSignInEnt != null)
  707. {
  708. if (doctorSignInEnt.SignInFlag == SignInFlag.SignOut)
  709. {
  710. //有签退记录
  711. //创建一条信息的
  712. doctorSignInEnt = new DoctorSignIn
  713. {
  714. RoomId = doctorSignInEnt.RoomId,
  715. SignInFlag = SignInFlag.SignIn
  716. };
  717. await _doctorSignInRepository.InsertAsync(doctorSignInEnt);
  718. }
  719. else
  720. {
  721. throw new UserFriendlyException("当天已签到");
  722. }
  723. }
  724. else
  725. {
  726. //当天无记录 直接插入
  727. doctorSignInEnt = new DoctorSignIn
  728. {
  729. RoomId = input.RoomId,
  730. SignInFlag = SignInFlag.SignIn
  731. };
  732. await _doctorSignInRepository.InsertAsync(doctorSignInEnt);
  733. }
  734. }
  735. else
  736. {
  737. //签退
  738. var doctorSignInEnt = await _doctorSignInRepository.FirstOrDefaultAsync(f => f.CreatorId == doctorId
  739. && f.RoomId == input.RoomId
  740. && f.CreationTime.Date == DateTime.Now.Date && f.SignInFlag == SignInFlag.SignIn);
  741. if (doctorSignInEnt != null)
  742. {
  743. doctorSignInEnt.SignInFlag = SignInFlag.SignOut;
  744. doctorSignInEnt.SignOutDate = DateTime.Now;
  745. await _doctorSignInRepository.UpdateAsync(doctorSignInEnt);
  746. }
  747. else
  748. {
  749. throw new UserFriendlyException("当天无签到记录");
  750. }
  751. }
  752. }
  753. else
  754. {
  755. throw new UserFriendlyException("医生未登录");
  756. }
  757. }
  758. /// <summary>
  759. /// 获取医生是否签到
  760. /// </summary>
  761. /// <param name="input"></param>
  762. /// <returns></returns>
  763. [HttpPost("api/app/RegisterCheck/GetDoctorIsSignIn")]
  764. public async Task<GetDoctorIsSignInDto> GetDoctorIsSignInAsync(GetDoctorIsSignInInputDto input)
  765. {
  766. var entDto = new GetDoctorIsSignInDto
  767. {
  768. IsSignIn = 'N'
  769. };
  770. var doctorId = _currentUser.Id;
  771. if (doctorId != null)
  772. {
  773. //签到
  774. var doctorSignInEnt = await _doctorSignInRepository.FirstOrDefaultAsync(f => f.CreatorId == doctorId
  775. && f.RoomId == input.RoomId
  776. && f.CreationTime.Date == DateTime.Now.Date
  777. && f.SignInFlag == SignInFlag.SignIn);
  778. if (doctorSignInEnt != null)
  779. {
  780. entDto.IsSignIn = 'Y';
  781. }
  782. }
  783. else
  784. {
  785. throw new UserFriendlyException("医生未登录");
  786. }
  787. return entDto;
  788. }
  789. }
  790. }