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.

696 lines
34 KiB

3 years ago
3 years ago
2 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
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
2 years ago
2 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 years ago
2 years ago
2 years ago
3 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
2 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
3 years ago
2 years ago
3 years ago
3 years ago
2 years ago
3 years ago
2 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
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
3 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
3 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
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
2 years ago
3 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. public RegisterCheckAppService(IRepository<RegisterCheck, Guid> registerCheckRepository,
  59. IRepository<RegisterCheckItem> registerCheckItemRepository,
  60. IRepository<PatientRegister, Guid> patientRegisterRepository,
  61. IRepository<ReferenceRange, Guid> referenceRangeRepository,
  62. IRepository<RegisterCheckSummary, Guid> registerCheckSummaryRepository,
  63. IRepository<RegisterCheckSuggestion, Guid> registerCheckSuggestionRepository,
  64. IRepository<IdentityUser, Guid> userRepository,
  65. RegisterCheckManager registerCheckManager,
  66. RegisterCheckItemManager registerCheckItemManager,
  67. CacheService cacheService,
  68. IGuidGenerator guidGenerator,
  69. IConfiguration configuration,
  70. ICurrentUser currentUser,
  71. IRepository<UserItemType> userItemTypeRepository,
  72. IRepository<Asbitem, Guid> asbitemRepository,
  73. IRepository<RegisterCheckAsbitem> registerCheckAsbitemRepository,
  74. IRepository<ItemType> itemTypeRepository,
  75. IRepository<LisRequest, Guid> lisRequestRepository,
  76. FollowUpAppService followUpAppService)
  77. {
  78. _registerCheckRepository = registerCheckRepository;
  79. _userRepository = userRepository;
  80. _registerCheckManager = registerCheckManager;
  81. _patientRegisterRepository = patientRegisterRepository;
  82. _referenceRangeRepository = referenceRangeRepository;
  83. _registerCheckItemRepository = registerCheckItemRepository;
  84. _registerCheckSummaryRepository = registerCheckSummaryRepository;
  85. _registerCheckSuggestionRepository = registerCheckSuggestionRepository;
  86. _registerCheckItemManager = registerCheckItemManager;
  87. _cacheService = cacheService;
  88. _guidGenerator = guidGenerator;
  89. _configuration = configuration;
  90. _currentUser = currentUser;
  91. _userItemTypeRepository = userItemTypeRepository;
  92. _asbitemRepository = asbitemRepository;
  93. _registerCheckAsbitemRepository = registerCheckAsbitemRepository;
  94. _itemTypeRepository = itemTypeRepository;
  95. _lisRequestRepository = lisRequestRepository;
  96. _followUpAppService = followUpAppService;
  97. }
  98. /// <summary>
  99. /// 根据RegisterCheckId获取当前实体数据
  100. /// </summary>
  101. /// <param name="id"></param>
  102. /// <returns></returns>
  103. [HttpGet("api/app/registercheck/getregistercheck")]
  104. public async Task<RegisterCheckDto> GetRegisterCheckAsync(Guid id)
  105. {
  106. var registerCheckEntity = (await _registerCheckRepository.GetQueryableAsync())
  107. .Include(x => x.RegisterCheckAsbitems)
  108. .ThenInclude(x => x.Asbitem)
  109. .FirstOrDefault(f => f.Id == id);
  110. var registerCheckDto = new RegisterCheckDto
  111. {
  112. AuditorUserId = registerCheckEntity.AuditorUserId,
  113. AuditTime = registerCheckEntity.AuditTime,
  114. CheckDate = DataHelper.ConversionDateToString(registerCheckEntity.CheckDate),
  115. CheckDoctorId = registerCheckEntity.CheckDoctorId,
  116. CheckRequestNo = registerCheckEntity.CheckRequestNo,
  117. CheckRequestPrintTimes = registerCheckEntity.CheckRequestPrintTimes,
  118. CompleteFlag = registerCheckEntity.CompleteFlag,
  119. CreationTime = registerCheckEntity.CreationTime,
  120. CreatorId = registerCheckEntity.CreatorId,
  121. CriticalValue = registerCheckEntity.CriticalRangeValue,
  122. //CriticalValueCreateDate = DataHelper.ConversionDateToString(registerCheckEntity.CriticalValueCreateDate),
  123. CriticalValueFlag = registerCheckEntity.IsCriticalValue,
  124. CriticalValueProcessContent = registerCheckEntity.CriticalValueContent,
  125. //CriticalValueProcessDate = DataHelper.ConversionDateToString(registerCheckEntity.CriticalValueProcessDate),
  126. //CriticalValueProcessDoctor = registerCheckEntity.CriticalValueProcessDoctor,
  127. //CriticalValueProcessFlag = registerCheckEntity.CriticalValueProcessFlag,
  128. Id = registerCheckEntity.Id,
  129. IsAudit = registerCheckEntity.IsAudit,
  130. IsLock = registerCheckEntity.IsLock,
  131. LastModificationTime = registerCheckEntity.LastModificationTime,
  132. LastModifierId = registerCheckEntity.LastModifierId,
  133. ThirdInfo = registerCheckEntity.ThirdInfo,
  134. LastModifierName = _cacheService.GetSurnameAsync(registerCheckEntity.LastModifierId).Result,
  135. CreatorName = _cacheService.GetSurnameAsync(registerCheckEntity.CreatorId).Result,
  136. IsCharge = registerCheckEntity.RegisterCheckAsbitems.Where(m => m.PayTypeFlag == PayTypeFlag.PersonPay && m.IsCharge == 'N').Count() > 0 ? 'N' : 'Y',
  137. AsbitemName = string.Join(",", registerCheckEntity.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList())
  138. };
  139. return registerCheckDto;
  140. }
  141. /// <summary>
  142. /// 获取登记check表数据(附带组合项目名称跟是否收费) 医生诊台左边列表 只有一个收费就显示收费
  143. /// </summary>
  144. /// <param name="input"></param>
  145. /// <returns></returns>
  146. [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterId")]
  147. public async Task<List<RegisterCheckOrAsbitemNameOrIsChargeDto>> GetRegisterCheckAsbitemsByPatientRegisterIdAsync(PatientRegisterIdInputDto input)
  148. {
  149. //var list = (from registerCheck in await _registerCheckRepository.GetQueryableAsync()
  150. // join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync()
  151. // on registerCheck.Id equals registerCheckAsbitem.AsbitemId
  152. // join asbitem in await _asbitemRepository.GetQueryableAsync()
  153. // on registerCheckAsbitem.AsbitemId equals asbitem.Id
  154. // join itemType in await _itemTypeRepository.GetQueryableAsync()
  155. // on asbitem.ItemTypeId equals itemType.Id
  156. // where registerCheck.PatientRegisterId == input.PatientRegisterId
  157. // orderby itemType.DisplayName, asbitem.DisplayOrder
  158. // select new
  159. // {
  160. // registerCheck,
  161. // registerCheckAsbitem,
  162. // asbitem,
  163. // itemType
  164. // }).ToList();
  165. var entlist = (await _registerCheckRepository.GetQueryableAsync())
  166. .Include(x => x.RegisterCheckAsbitems)
  167. .ThenInclude(x => x.Asbitem).ThenInclude(x => x.ItemType)
  168. .Where(m => m.PatientRegisterId == input.PatientRegisterId).ToList();
  169. //排序
  170. entlist = entlist.OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.ItemType.DisplayOrder)).ToList()
  171. .OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.DisplayOrder)).ToList();
  172. var entdto = entlist.Where(m => m.RegisterCheckAsbitems.Where(mm => mm.Asbitem.IsCheck == 'Y').Count() > 0).Select(s => new RegisterCheckOrAsbitemNameOrIsChargeDto
  173. {
  174. CheckTypeFlag = s.RegisterCheckAsbitems.First().Asbitem.ItemType.CheckTypeFlag,
  175. AsbitemName = string.Join(",", s.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()),
  176. AuditorUserId = s.AuditorUserId,
  177. AuditTime = s.AuditTime,
  178. CheckDate = DataHelper.ConversionDateToString(s.CheckDate),
  179. CheckDoctorId = s.CheckDoctorId,
  180. CheckRequestNo = s.CheckRequestNo,
  181. CheckRequestPrintTimes = s.CheckRequestPrintTimes,
  182. CompleteFlag = s.CompleteFlag,
  183. CreationTime = s.CreationTime,
  184. CreatorId = s.CreatorId,
  185. CriticalValue = s.CriticalRangeValue,
  186. //CriticalValueCreateDate = DataHelper.ConversionDateToString(s.CriticalValueCreateDate),
  187. CriticalValueFlag = s.IsCriticalValue,
  188. CriticalValueProcessContent = s.CriticalValueContent,
  189. // CriticalValueProcessDate = DataHelper.ConversionDateToString(s.CriticalValueProcessDate),
  190. // CriticalValueProcessDoctor = s.CriticalValueProcessDoctor,
  191. // CriticalValueProcessFlag = s.CriticalValueProcessFlag,
  192. Id = s.Id,
  193. IsAudit = s.IsAudit,
  194. IsCharge = s.RegisterCheckAsbitems.Where(m => m.IsCharge == 'Y').Count() > 0 ? 'Y' : 'N',
  195. IsLock = s.IsLock,
  196. LastModificationTime = s.LastModificationTime,
  197. LastModifierId = s.LastModifierId,
  198. //RegisterAsbitemId = s.RegisterAsbitemId,
  199. ThirdInfo = s.ThirdInfo,
  200. CreatorName = _cacheService.GetSurnameAsync(s.CreatorId).Result,
  201. LastModifierName = _cacheService.GetSurnameAsync(s.LastModifierId).Result,
  202. ItemTypeDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.ItemType.DisplayOrder,
  203. AsbitemDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.DisplayOrder
  204. }).ToList();
  205. return entdto;
  206. }
  207. /// <summary>
  208. /// 获取登记check表数据(附带组合项目名称跟是否收费) 医生诊台左边列表 只有一个收费就显示收费 增加项目类别权限控制
  209. /// </summary>
  210. /// <param name="input"></param>
  211. /// <returns></returns>
  212. [HttpPost("api/app/RegisterCheck/GetRegisterCheckWithAsbitems")]
  213. public async Task<List<RegisterCheckWithAsbitemsDto>> GetRegisterCheckWithAsbitemsAsync(PatientRegisterIdInputDto input)
  214. {
  215. var entlist = (await _registerCheckRepository.GetQueryableAsync())
  216. .Include(x => x.RegisterCheckAsbitems)
  217. .ThenInclude(x => x.Asbitem).ThenInclude(x => x.ItemType)
  218. .Where(m => m.RegisterCheckAsbitems.Select(s => s.PatientRegisterId)
  219. .Contains(input.PatientRegisterId)
  220. && m.RegisterCheckAsbitems.Select(s => s.Asbitem.IsCheck).Contains('Y'));
  221. #region 增加项目类别权限
  222. string AdminId = _configuration.GetValue<string>("AdminId");
  223. if (_currentUser.Id.Value != Guid.Parse(AdminId))
  224. {
  225. var asbitemIds = (from userItemType in await _userItemTypeRepository.GetQueryableAsync()
  226. join asbitem in await _asbitemRepository.GetQueryableAsync() on userItemType.ItemTypeId equals asbitem.ItemTypeId
  227. where userItemType.UserId == _currentUser.Id.Value
  228. select asbitem.Id).ToList();
  229. if (asbitemIds.Any())
  230. {
  231. entlist = entlist.Where(m => asbitemIds.Contains(m.RegisterCheckAsbitems.FirstOrDefault().AsbitemId));
  232. }
  233. else
  234. {
  235. return new List<RegisterCheckWithAsbitemsDto>();
  236. }
  237. }
  238. #endregion
  239. //排序
  240. entlist = entlist.OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.ItemType.DisplayOrder))
  241. .ThenBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.DisplayOrder));
  242. var entdto = entlist.ToList().Select(s => new RegisterCheckWithAsbitemsDto
  243. {
  244. AsbitemName = string.Join(",", s.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()),
  245. AuditorUserId = s.AuditorUserId,
  246. AuditTime = s.AuditTime,
  247. CheckDate = DataHelper.ConversionDateToString(s.CheckDate),
  248. CheckDoctorId = s.CheckDoctorId,
  249. CheckRequestNo = s.CheckRequestNo,
  250. CompleteFlag = s.CompleteFlag,
  251. Id = s.Id,
  252. IsAudit = s.IsAudit,
  253. IsCharge = s.RegisterCheckAsbitems.Where(m => m.IsCharge == 'Y').Count() > 0 ? 'Y' : 'N',
  254. IsLock = s.IsLock,
  255. CheckTypeFlag = s.RegisterCheckAsbitems.First().Asbitem.ItemType.CheckTypeFlag,
  256. ItemTypeDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.ItemType.DisplayOrder,
  257. AsbitemDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.DisplayOrder,
  258. }).ToList();
  259. return entdto;
  260. }
  261. [HttpPost("api/app/registercheck/UpdateCheckResult")]
  262. public async Task UpdateCheckResult(UpdateCheckResultDto input)
  263. {
  264. if (input == null)
  265. {
  266. throw new UserFriendlyException("input参数不能为空");
  267. }
  268. if (input.RegisterCheckItems == null)
  269. {
  270. throw new UserFriendlyException("RegisterCheckItems参数不能为空");
  271. }
  272. if (!input.RegisterCheckItems.Where(o => !string.IsNullOrWhiteSpace(o.Result)).ToList().Any())
  273. {
  274. throw new UserFriendlyException("明细结果不能全部为空");
  275. }
  276. if (input.Summarys == null || !input.Summarys.Any())
  277. {
  278. throw new UserFriendlyException("小结不能为空");
  279. }
  280. var registerCheck = await _registerCheckRepository.GetAsync(input.RegisterCheckId);
  281. var patientRegister = await _patientRegisterRepository.GetAsync(registerCheck.PatientRegisterId);
  282. //修改医生和检查日期
  283. if (string.IsNullOrWhiteSpace(input.CheckDoctorId))
  284. {
  285. input.CheckDoctorId = CurrentUser.Id.ToString();
  286. }
  287. _registerCheckManager.UpdateCheckDoctorAndDateAsync(patientRegister, registerCheck, input.CheckDoctorId, input.CheckDate, input.ExecOrganizationUnitId);
  288. if (!string.IsNullOrWhiteSpace(input.LisAuditorDoctorName))
  289. registerCheck.LisAuditorDoctorName = input.LisAuditorDoctorName;
  290. if (!string.IsNullOrWhiteSpace(input.LisSampleNo))
  291. registerCheck.LisSampleNo = input.LisSampleNo;
  292. //更新人员登记信息完成标志
  293. patientRegister.CompleteFlag = PatientRegisterCompleteFlag.PartCheck;
  294. await _patientRegisterRepository.UpdateAsync(patientRegister);
  295. await _registerCheckRepository.UpdateAsync(registerCheck);
  296. //修改项目结果
  297. var registerCheckItems = await _registerCheckItemRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId);
  298. foreach (var registerCheckItem in registerCheckItems)
  299. {
  300. var inputCheckItem = input.RegisterCheckItems.Where(o => o.ItemId == registerCheckItem.ItemId).FirstOrDefault();
  301. if (inputCheckItem == null)
  302. {
  303. continue;
  304. }
  305. var registerCheckItemUpdate = new RegisterCheckItem()
  306. {
  307. Result = inputCheckItem.Result,
  308. CheckDoctorName = inputCheckItem.CheckDoctorName,
  309. CriticalValue = inputCheckItem.CriticalValue,
  310. CheckDate = DateTime.Now
  311. };
  312. await _registerCheckItemManager.UpdateRegisterCheckItemAsync(registerCheckItemUpdate, registerCheckItem);
  313. }
  314. await _registerCheckItemRepository.UpdateManyAsync(registerCheckItems);
  315. //修改小结
  316. var deleteRegisterCheckSummarys = await _registerCheckSummaryRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId);
  317. await _registerCheckSummaryRepository.DeleteManyAsync(deleteRegisterCheckSummarys);
  318. for (var i = 0; i < input.Summarys.Count; i++)
  319. {
  320. var registerCheckSummary = new RegisterCheckSummary(_guidGenerator.Create())
  321. {
  322. DisplayOrder = i + 1,
  323. RegisterCheckId = input.RegisterCheckId,
  324. Summary = input.Summarys[i].Summary,
  325. SummaryFlag = '0'
  326. };
  327. await _registerCheckSummaryRepository.InsertAsync(registerCheckSummary);
  328. }
  329. //修改建议
  330. var _registerCheckSuggestions = await _registerCheckSuggestionRepository.GetListAsync(o => o.RegisterCheckId == input.RegisterCheckId);
  331. await _registerCheckSuggestionRepository.DeleteManyAsync(_registerCheckSuggestions);
  332. for (var i = 0; i < input.Suggestions.Count; i++)
  333. {
  334. var registerCheckSuggestion = new RegisterCheckSuggestion(_guidGenerator.Create())
  335. {
  336. DisplayOrder = i + 1,
  337. RegisterCheckId = input.RegisterCheckId,
  338. Suggestion = input.Suggestions[i].Suggestion,
  339. };
  340. await _registerCheckSuggestionRepository.InsertAsync(registerCheckSuggestion);
  341. }
  342. }
  343. ///// <summary>
  344. ///// 弃检跟恢复操作 0(为未检), 1(已检), 2(弃检)
  345. ///// </summary>
  346. ///// <param name="RegisterCheckId">检查单ID</param>
  347. ///// <param name="CompleteFlag">检查状态</param>
  348. ///// <returns></returns>
  349. //[HttpPost("api/app/registercheck/updatecomplete")]
  350. //public async Task<RegisterCheckDto> UpdateCompleteAsync(Guid RegisterCheckId, char CompleteFlag)
  351. //{
  352. // var registerCheckEnt = await _registerCheckManager.UpdateCompleteAsync(RegisterCheckId, CompleteFlag);
  353. // return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(registerCheckEnt);
  354. //}
  355. /// <summary>
  356. /// 批量弃检跟恢复操作 0(为未检), 1(已检), 2(弃检)
  357. /// </summary>
  358. /// <param name="input"></param>
  359. /// <returns></returns>
  360. [HttpPost("api/app/registercheck/updatecompletemany")]
  361. public async Task<List<RegisterCheckDto>> UpdateCompleteManyAsync(List<UpdateCompleteManyDto> input)
  362. {
  363. List<RegisterCheckDto> msg = new List<RegisterCheckDto>();
  364. if (input.Any())
  365. {
  366. foreach (var item in input)
  367. {
  368. var registerCheckEnt = await _registerCheckManager.UpdateCompleteAsync(item.RegisterCheckId, item.CompleteFlag);
  369. var newentity = ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(registerCheckEnt);
  370. if (newentity != null)
  371. {
  372. msg.Add(newentity);
  373. }
  374. }
  375. }
  376. return msg;
  377. }
  378. /// <summary>
  379. /// 更新审核状态 Y 已审核 N 未审核
  380. /// </summary>
  381. /// <param name="RegisterCheckId">检查单ID</param>
  382. /// <param name="IsAudit">审核状态( Y 已审核 N 未审核)</param>
  383. /// <returns></returns>
  384. [HttpPost("api/app/registercheck/updateisaudit")]
  385. public async Task<RegisterCheckDto> UpdateIsAuditAsync(Guid RegisterCheckId, char IsAudit)
  386. {
  387. var registerCheckEnt = await _registerCheckManager.UpdateIsAuditAsync(RegisterCheckId, IsAudit);
  388. return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(registerCheckEnt);
  389. }
  390. /// <summary>
  391. /// 更改检查医生(自动更新完成状态为已检)
  392. /// </summary>
  393. /// <param name="input"></param>
  394. /// <returns></returns>
  395. [HttpPost("api/app/registercheck/updatecheckdoctor")]
  396. public async Task<RegisterCheckDto> UpdateCheckDoctorAsync(UpdateCheckDoctorDto input)
  397. {
  398. if (input == null || input.RegisterCheckId == Guid.Empty)
  399. {
  400. throw new UserFriendlyException("请求参数有误");
  401. }
  402. var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId);
  403. var entitydto = ObjectMapper.Map<UpdateCheckDoctorDto, RegisterCheck>(input);
  404. var newentity = await _registerCheckManager.UpdateCheckDoctorAsync(entitydto, entity);
  405. return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(newentity);
  406. }
  407. /// <summary>
  408. /// 更改危警值内容
  409. /// </summary>
  410. /// <param name="input"></param>
  411. /// <returns></returns>
  412. [HttpPost("api/app/registercheck/updatecriticalvalue")]
  413. public async Task<RegisterCheckDto> UpdateCriticalValueAsync(UpdateCriticalValueDto input)
  414. {
  415. if (input == null || input.RegisterCheckId == Guid.Empty)
  416. {
  417. throw new UserFriendlyException("请求参数有误");
  418. }
  419. var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId);
  420. var entitydto = ObjectMapper.Map<UpdateCriticalValueDto, RegisterCheck>(input);
  421. var newentity = await _registerCheckManager.UpdateCriticalValueAsync(entitydto, entity);
  422. return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(newentity);
  423. }
  424. /// <summary>
  425. /// 更改审核医生(自动更新审核状态为已审核)
  426. /// </summary>
  427. /// <param name="input"></param>
  428. /// <returns></returns>
  429. [HttpPost("api/app/registercheck/updateauditordoctor")]
  430. public async Task<RegisterCheckDto> UpdateAuditorDoctorAsync(UpdateAuditorDoctorDto input)
  431. {
  432. if (input == null || input.RegisterCheckId == Guid.Empty)
  433. {
  434. throw new UserFriendlyException("请求参数有误");
  435. }
  436. var entity = await _registerCheckRepository.GetAsync(m => m.Id == input.RegisterCheckId);
  437. var entitydto = ObjectMapper.Map<UpdateAuditorDoctorDto, RegisterCheck>(input);
  438. var newentity = await _registerCheckManager.UpdateAuditorDoctorAsync(entitydto, entity);
  439. return ObjectMapper.Map<RegisterCheck, RegisterCheckDto>(newentity);
  440. }
  441. /// <summary>
  442. /// 修改人员登记的组合项目锁定状态 批量
  443. /// </summary>
  444. /// <param name="input"></param>
  445. /// <returns></returns>
  446. /// <exception cref="UserFriendlyException"></exception>
  447. [HttpPost("api/app/registercheck/updateregistercheckislockmany")]
  448. public async Task<List<RegisterCheckDto>> UpdateRegisterCheckIsLockManyAsync(List<UpdateRegisterCheckIsLockDto> input)
  449. {
  450. if (!input.Any())
  451. throw new UserFriendlyException("请求参数有误");
  452. List<RegisterCheck> entlist = new List<RegisterCheck>();
  453. foreach (var item in input)
  454. {
  455. var ent = await _registerCheckRepository.GetAsync(item.RegisterCheckId);
  456. ent.IsLock = item.IsLock;
  457. entlist.Add(ent);
  458. }
  459. await _registerCheckRepository.UpdateManyAsync(entlist);
  460. return ObjectMapper.Map<List<RegisterCheck>, List<RegisterCheckDto>>(entlist);
  461. }
  462. /// <summary>
  463. /// 根据人员ID集合获取所有项目
  464. /// </summary>
  465. /// <param name="input"></param>
  466. /// <returns></returns>
  467. [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterIds")]
  468. public async Task<List<SimpleAsbitemDto>> GetRegisterCheckAsbitemsByPatientRegisterIdsAsync(PatientRegisterIdsInputDto input)
  469. {
  470. if (!input.PatientRegisterIds.Any())
  471. throw new UserFriendlyException("人员ID不能为空");
  472. var entListDto = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  473. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  474. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  475. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
  476. where input.PatientRegisterIds.Contains(patientRegister.Id) && asbitem.IsCheck == 'Y'
  477. select new SimpleAsbitemDto
  478. {
  479. AsbitemId = registerCheckAsbitem.AsbitemId,
  480. AsbitemName = asbitem.DisplayName
  481. }).Distinct().ToList();
  482. return entListDto;
  483. }
  484. /// <summary>
  485. /// 根据人员条码号集合获取所有项目
  486. /// </summary>
  487. /// <param name="input"></param>
  488. /// <returns></returns>
  489. [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterNos")]
  490. public async Task<List<SimpleAsbitemDto>> GetRegisterCheckAsbitemsByPatientRegisterNosAsync(PatientRegisterNosInputDto input)
  491. {
  492. if (!input.PatientRegisterNos.Any())
  493. throw new UserFriendlyException("人员条码号不能为空");
  494. var entListDto = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  495. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  496. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  497. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
  498. where input.PatientRegisterNos.Contains(patientRegister.PatientRegisterNo) && asbitem.IsCheck == 'Y'
  499. select new SimpleAsbitemDto
  500. {
  501. AsbitemId = registerCheckAsbitem.AsbitemId,
  502. AsbitemName = asbitem.DisplayName
  503. }).Distinct().ToList();
  504. return entListDto;
  505. }
  506. /// <summary>
  507. /// 根据检验条码号集合获取所有项目
  508. /// </summary>
  509. /// <param name="input"></param>
  510. /// <returns></returns>
  511. [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByLisRequestNos")]
  512. public async Task<List<SimpleAsbitemDto>> GetRegisterCheckAsbitemsByLisRequestNosAsync(LisRequestNosInputDto input)
  513. {
  514. if (!input.LisRequestNos.Any())
  515. throw new UserFriendlyException("检验条码号不能为空");
  516. var entListDto = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  517. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  518. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  519. join lisRequest in await _lisRequestRepository.GetQueryableAsync() on registerCheckAsbitem.LisRequestId equals lisRequest.Id
  520. join asbitem in await _asbitemRepository.GetQueryableAsync() on registerCheckAsbitem.AsbitemId equals asbitem.Id
  521. where input.LisRequestNos.Contains(lisRequest.LisRequestNo) && asbitem.IsCheck == 'Y'
  522. select new SimpleAsbitemDto
  523. {
  524. AsbitemId = registerCheckAsbitem.AsbitemId,
  525. AsbitemName = asbitem.DisplayName
  526. }).Distinct().ToList();
  527. return entListDto;
  528. }
  529. /// <summary>
  530. /// 批量修改医生 根据人员ID集合
  531. /// </summary>
  532. /// <param name="input"></param>
  533. /// <returns></returns>
  534. [HttpPost("api/app/RegisterCheck/UpdateBatchCheckDoctor")]
  535. public async Task UpdateBatchCheckDoctorAsync(UpdateBatchCheckDoctorInputDto input)
  536. {
  537. if (!input.PatientRegisterIds.Any())
  538. throw new UserFriendlyException("人员ID不能为空");
  539. if (!input.CheckDoctorDetail.Any())
  540. throw new UserFriendlyException("需要修改的信息不能为空");
  541. var registerCheckAsbitemList = (from patientRegister in await _patientRegisterRepository.GetQueryableAsync()
  542. join registerCheck in await _registerCheckRepository.GetQueryableAsync() on patientRegister.Id equals registerCheck.PatientRegisterId
  543. join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() on registerCheck.Id equals registerCheckAsbitem.RegisterCheckId
  544. where input.PatientRegisterIds.Contains(patientRegister.Id)
  545. select registerCheckAsbitem).ToList();
  546. if (registerCheckAsbitemList.Any())
  547. {
  548. foreach (var registerCheckAsbitem in registerCheckAsbitemList)
  549. {
  550. var checkDoctorEnt = input.CheckDoctorDetail.FirstOrDefault(f => f.AsbitemId == registerCheckAsbitem.AsbitemId);
  551. if (checkDoctorEnt != null)
  552. {
  553. var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == registerCheckAsbitem.RegisterCheckId);
  554. if (registerCheckEnt != null)
  555. {
  556. registerCheckEnt.CheckDoctorId = checkDoctorEnt.CheckDoctorId;
  557. await _registerCheckRepository.UpdateAsync(registerCheckEnt);
  558. }
  559. }
  560. }
  561. }
  562. }
  563. /// <summary>
  564. /// 修改检查表危急值相关内容
  565. /// </summary>
  566. /// <param name="input"></param>
  567. /// <returns></returns>
  568. [HttpPost("api/app/RegisterCheck/UpdateRegisterCheckCritical")]
  569. public async Task UpdateRegisterCheckCriticalAsync(UpdateRegisterCheckCriticalInputDto input)
  570. {
  571. var registerCheckEnt = await _registerCheckRepository.FirstOrDefaultAsync(f => f.Id == input.RegisterCheckId);
  572. if (registerCheckEnt == null)
  573. {
  574. throw new UserFriendlyException("参数不正确");
  575. }
  576. if (input.IsCriticalValue != null)
  577. {
  578. registerCheckEnt.IsCriticalValue = input.IsCriticalValue;
  579. }
  580. if (input.IsCriticalValueAudit != null)
  581. {
  582. registerCheckEnt.IsCriticalValueAudit = input.IsCriticalValueAudit;
  583. }
  584. if (input.IsReview != null)
  585. {
  586. registerCheckEnt.IsReview = input.IsReview;
  587. }
  588. if (!string.IsNullOrWhiteSpace(input.CriticalValueContent))
  589. {
  590. registerCheckEnt.CriticalValueContent = input.CriticalValueContent;
  591. }
  592. if (input.IsFollowUp != null && input.IsFollowUp == 'Y')
  593. {
  594. registerCheckEnt.FollowUpFlag = '1';
  595. }
  596. if (registerCheckEnt.CriticalValueCreatorId == null)
  597. {
  598. registerCheckEnt.CriticalValueCreatorId = _currentUser.Id;
  599. registerCheckEnt.CriticalValueCreationTime = DateTime.Now;
  600. }
  601. await _registerCheckRepository.UpdateAsync(registerCheckEnt);
  602. if ((input.IsFollowUp != null && input.IsFollowUp == 'Y')
  603. || (input.IsCriticalValue != null && input.IsCriticalValue == 'Y'))
  604. {
  605. //增加随访表记录
  606. await _followUpAppService.CreateAsync(new PatientRegisterIdInputDto
  607. {
  608. PatientRegisterId = registerCheckEnt.PatientRegisterId
  609. });
  610. }
  611. }
  612. }
  613. }