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.

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