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.

744 lines
27 KiB

11 months ago
11 months ago
  1. using Microsoft.EntityFrameworkCore;
  2. using Microsoft.Extensions.Caching.Distributed;
  3. using Microsoft.Extensions.Caching.Memory;
  4. using NPOI.HPSF;
  5. using NPOI.SS.Formula.Functions;
  6. using Shentun.Pacs.Enums;
  7. using Shentun.Pacs.Models;
  8. using Shentun.Pacs.MyUser;
  9. using Shentun.Pacs.SysParmValues;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Linq;
  13. using System.Text;
  14. using System.Threading.Tasks;
  15. using Volo.Abp.Caching;
  16. using Volo.Abp.Data;
  17. using Volo.Abp.DependencyInjection;
  18. using Volo.Abp.Domain.Entities;
  19. using Volo.Abp.Domain.Repositories;
  20. using Volo.Abp.Identity;
  21. namespace Shentun.Pacs
  22. {
  23. public class CacheService : ISingletonDependency
  24. {
  25. private readonly IDistributedCache<IdentityUser, Guid> _userCache;
  26. private readonly IMemoryCache _customerOrgCache;
  27. //private readonly IDistributedCache<CustomerOrg, Guid> _customerOrgCache;
  28. private readonly IDistributedCache<string, Guid> _customerOrgTopNameCache;
  29. private readonly IDistributedCache<Nation, string> _nationCache;
  30. private readonly IDistributedCache<Sex, char> _sexCache;
  31. private readonly IDistributedCache<MaritalStatus, char> _maritalStatusCache;
  32. private readonly IDistributedCache<ForSex, char> _forSexCache;
  33. private readonly IDistributedCache<DeviceType, Guid> _deviceTypeCache;
  34. private readonly IDistributedCache<MedicalType, Guid> _medicalTypeCache;
  35. private readonly IDistributedCache<PersonnelType, Guid> _personnelTypeCache;
  36. private readonly IMemoryCache _asbitemCache;
  37. private readonly IMemoryCache _itemTypeCache;
  38. //private readonly IDistributedCache<ItemType, Guid> _itemTypeCache;
  39. private readonly IRepository<IdentityUser, Guid> _userRepository;
  40. private readonly IRepository<Nation> _nationRepository;
  41. private readonly IRepository<Sex> _sexRepository;
  42. private readonly IRepository<ForSex> _forSexRepository;
  43. private readonly IRepository<DeviceType, Guid> _deviceTypeRepository;
  44. private readonly IRepository<Asbitem, Guid> _asbitemRepository;
  45. private readonly IRepository<ItemType, Guid> _itemTypeRepository;
  46. private readonly IRepository<CustomerOrg, Guid> _customerOrgRepository;
  47. private readonly IRepository<MaritalStatus> _maritalStatusRepository;
  48. private readonly IRepository<MedicalType, Guid> _medicalTypeRepository;
  49. private readonly IRepository<PersonnelType, Guid> _personnelTypeRepository;
  50. private readonly IDistributedCache<SampleType, Guid> _sampleTypeCache;
  51. private readonly IRepository<SampleType, Guid> _sampleTypeRepository;
  52. private readonly SysParmValueManager _sysParmValueManager;
  53. private readonly IDistributedCache<DiagnosisLevel, short> _diagnosisLevelCache;
  54. private readonly IRepository<DiagnosisLevel, short> _diagnosisLevelRepository;
  55. private readonly IDistributedCache<string, string> _customerOrgDisplayModeCache;
  56. private readonly IMemoryCache _userExtensionCache;
  57. public CacheService(
  58. IDistributedCache<IdentityUser, Guid> userCache,
  59. IMemoryCache customerOrgCache,
  60. IDistributedCache<Nation, string> nationCache,
  61. IRepository<IdentityUser, Guid> userRepository,
  62. IDistributedCache<Sex, char> sexCache,
  63. IMemoryCache asbitemCache,
  64. IMemoryCache itemTypeCache,
  65. IDistributedCache<MaritalStatus, char> maritalStatusCache,
  66. IDistributedCache<MedicalType, Guid> medicalTypeCache,
  67. IDistributedCache<PersonnelType, Guid> personnelTypeCache,
  68. IRepository<Sex> sexRepository,
  69. IDistributedCache<DeviceType, Guid> deviceTypeCache,
  70. IRepository<DeviceType, Guid> deviceTypeRepository,
  71. IDistributedCache<ForSex, char> forSexCache,
  72. IRepository<ForSex> forSexRepository,
  73. IRepository<Asbitem, Guid> asbitemRepository,
  74. IRepository<ItemType, Guid> itemTypeRepository,
  75. IRepository<Nation> nationRepository,
  76. IRepository<CustomerOrg, Guid> customerOrgRepository,
  77. IRepository<MaritalStatus> maritalStatusRepository,
  78. IRepository<MedicalType, Guid> medicalTypeRepository,
  79. IRepository<PersonnelType, Guid> personnelTypeRepository,
  80. IDistributedCache<string, Guid> customerOrgTopNameCache,
  81. IDistributedCache<SampleType, Guid> sampleTypeCache,
  82. IRepository<SampleType, Guid> sampleTypeRepository,
  83. SysParmValueManager sysParmValueManager,
  84. IDistributedCache<string, string> customerOrgDisplayModeCache,
  85. IDistributedCache<DiagnosisLevel, short> diagnosisLevelCache,
  86. IRepository<DiagnosisLevel, short> diagnosisLevelRepository,
  87. IMemoryCache userExtensionCache)
  88. {
  89. _userCache = userCache;
  90. _userRepository = userRepository;
  91. _sexCache = sexCache;
  92. _sexRepository = sexRepository;
  93. _forSexCache = forSexCache;
  94. _forSexRepository = forSexRepository;
  95. _deviceTypeCache = deviceTypeCache;
  96. _deviceTypeRepository = deviceTypeRepository;
  97. _asbitemCache = asbitemCache;
  98. _asbitemRepository = asbitemRepository;
  99. _itemTypeCache = itemTypeCache;
  100. _itemTypeRepository = itemTypeRepository;
  101. _nationCache = nationCache;
  102. _nationRepository = nationRepository;
  103. _customerOrgCache = customerOrgCache;
  104. _customerOrgRepository = customerOrgRepository;
  105. _maritalStatusCache = maritalStatusCache;
  106. _maritalStatusRepository = maritalStatusRepository;
  107. _medicalTypeCache = medicalTypeCache;
  108. _medicalTypeRepository = medicalTypeRepository;
  109. _personnelTypeCache = personnelTypeCache;
  110. _personnelTypeRepository = personnelTypeRepository;
  111. _customerOrgTopNameCache = customerOrgTopNameCache;
  112. _sampleTypeCache = sampleTypeCache;
  113. _sampleTypeRepository = sampleTypeRepository;
  114. _sysParmValueManager = sysParmValueManager;
  115. _customerOrgDisplayModeCache = customerOrgDisplayModeCache;
  116. _diagnosisLevelCache = diagnosisLevelCache;
  117. _diagnosisLevelRepository = diagnosisLevelRepository;
  118. _userExtensionCache = userExtensionCache;
  119. }
  120. private async Task<IdentityUser> GetUserAsync(Guid id)
  121. {
  122. var entity = await _userCache.GetOrAddAsync(
  123. id, //缓存键
  124. async () =>
  125. {
  126. var dataEntity = await _userRepository.FirstOrDefaultAsync(m => m.Id == id);
  127. //var userSign = dataEntity.GetProperty<string>("user_sign");
  128. //var userPhoto = dataEntity.GetProperty<string>("user_photo");
  129. //var entDto = new IdentityUserWithExtensionDto
  130. //{
  131. // ConcurrencyStamp = dataEntity.ConcurrencyStamp,
  132. // CreationTime = dataEntity.CreationTime,
  133. // CreatorId = dataEntity.CreatorId,
  134. // DeleterId = dataEntity.DeleterId,
  135. // DeletionTime = dataEntity.DeletionTime,
  136. // Email = dataEntity.Email,
  137. // EmailConfirmed = dataEntity.EmailConfirmed,
  138. // Id = dataEntity.Id,
  139. // IsActive = dataEntity.IsActive,
  140. // IsDeleted = dataEntity.IsDeleted,
  141. // LastModificationTime = dataEntity.LastModificationTime,
  142. // LastModifierId = dataEntity.LastModifierId,
  143. // LockoutEnabled = dataEntity.LockoutEnabled,
  144. // LockoutEnd = dataEntity.LockoutEnd,
  145. // Name = dataEntity.Name,
  146. // PhoneNumber = dataEntity.PhoneNumber,
  147. // PhoneNumberConfirmed = dataEntity.PhoneNumberConfirmed,
  148. // Surname = dataEntity.Surname,
  149. // TenantId = dataEntity.TenantId,
  150. // UserName = dataEntity.UserName,
  151. // UserPhoto = userPhoto,
  152. // UserSign = userSign
  153. //};
  154. return dataEntity;
  155. }
  156. );
  157. return entity;
  158. }
  159. public async Task<string> GetSurnameAsync(Guid? id)
  160. {
  161. if (id == null || id == default(Guid) || !id.HasValue)
  162. {
  163. return "";
  164. }
  165. var entity = await GetUserAsync((Guid)id);
  166. if (entity != null)
  167. return entity.Surname;
  168. else
  169. return "";
  170. }
  171. public async Task<string> GetSurnameAsync(string id)
  172. {
  173. Guid newId;
  174. if (string.IsNullOrWhiteSpace(id) || !Guid.TryParse(id, out newId))
  175. {
  176. return "";
  177. }
  178. var entity = await GetUserAsync(newId);
  179. if (entity != null)
  180. return entity.Surname;
  181. else
  182. return "";
  183. }
  184. public async Task<string> GetUserSignAsync(Guid? id)
  185. {
  186. if (id == null || id == default(Guid) || !id.HasValue)
  187. {
  188. return "";
  189. }
  190. string cacheKey = $"userExtension_{id.ToString()}";
  191. var userExtension = (IdentityUserWithExtensionDto)_userExtensionCache.Get(cacheKey);
  192. if (userExtension == null)
  193. {
  194. var userEntity = await _userRepository.GetAsync(o => o.Id == id);
  195. var userSign = userEntity.GetProperty<string>("user_sign");
  196. var userPhoto = userEntity.GetProperty<string>("user_photo");
  197. userExtension = new IdentityUserWithExtensionDto
  198. {
  199. ConcurrencyStamp = userEntity.ConcurrencyStamp,
  200. CreationTime = userEntity.CreationTime,
  201. CreatorId = userEntity.CreatorId,
  202. DeleterId = userEntity.DeleterId,
  203. DeletionTime = userEntity.DeletionTime,
  204. Email = userEntity.Email,
  205. EmailConfirmed = userEntity.EmailConfirmed,
  206. Id = userEntity.Id,
  207. IsActive = userEntity.IsActive,
  208. IsDeleted = userEntity.IsDeleted,
  209. LastModificationTime = userEntity.LastModificationTime,
  210. LastModifierId = userEntity.LastModifierId,
  211. LockoutEnabled = userEntity.LockoutEnabled,
  212. LockoutEnd = userEntity.LockoutEnd,
  213. Name = userEntity.Name,
  214. PhoneNumber = userEntity.PhoneNumber,
  215. PhoneNumberConfirmed = userEntity.PhoneNumberConfirmed,
  216. Surname = userEntity.Surname,
  217. TenantId = userEntity.TenantId,
  218. UserName = userEntity.UserName,
  219. UserPhoto = userPhoto,
  220. UserSign = userSign
  221. };
  222. _userExtensionCache.Set(cacheKey, userExtension);
  223. }
  224. if (userExtension == null)
  225. {
  226. return "";
  227. }
  228. else
  229. {
  230. return userExtension.UserSign;
  231. }
  232. }
  233. private async Task<Sex> GetSexAsync(char id)
  234. {
  235. var entity = await _sexCache.GetOrAddAsync(
  236. id, //缓存键
  237. async () => (await _sexRepository.GetQueryableAsync()).Where(o => o.Id == id).Single()
  238. );
  239. return entity;
  240. }
  241. public async Task<string> GetSexNameAsync(char id)
  242. {
  243. var entity = await GetSexAsync(id);
  244. return entity.DisplayName;
  245. }
  246. private async Task<ForSex> GetForSexAsync(char id)
  247. {
  248. var entity = await _forSexCache.GetOrAddAsync(
  249. id, //缓存键
  250. async () => (await _forSexRepository.GetQueryableAsync()).Where(o => o.Id == id).Single()
  251. );
  252. return entity;
  253. }
  254. public async Task<string> GetForSexNameAsync(char id)
  255. {
  256. var entity = await GetForSexAsync(id);
  257. return entity.DisplayName;
  258. }
  259. private async Task<MaritalStatus> GetMaritalStatusAsync(char id)
  260. {
  261. var maritalStatusEntity = await _maritalStatusCache.GetAsync(id);
  262. if (maritalStatusEntity == null)
  263. {
  264. maritalStatusEntity = await _maritalStatusRepository.FirstOrDefaultAsync(f => f.Id == id);
  265. }
  266. return maritalStatusEntity;
  267. //var entity = await _maritalStatusCache.GetOrAddAsync(
  268. // id, //缓存键
  269. // async () => (await _maritalStatusRepository.GetQueryableAsync()).Where(o => o.Id == id).Single()
  270. //);
  271. //return entity;
  272. }
  273. public async Task<string> GetMaritalStatusNameAsync(char id)
  274. {
  275. var entity = await GetMaritalStatusAsync(id);
  276. return entity.DisplayName;
  277. }
  278. private async Task<DeviceType> GetDeviceTypeAsync(Guid id)
  279. {
  280. var entity = await _deviceTypeCache.GetOrAddAsync(
  281. id, //缓存键
  282. async () => await _deviceTypeRepository.GetAsync(id)
  283. );
  284. return entity;
  285. }
  286. public async Task<string> GetDeviceTypeNameAsync(Guid? id)
  287. {
  288. if (id == null || id == default(Guid) || !id.HasValue)
  289. {
  290. return "";
  291. }
  292. var entity = await GetDeviceTypeAsync((Guid)id);
  293. return entity.DisplayName;
  294. }
  295. private async Task<MedicalType> GetMedicalTypeAsync(Guid id)
  296. {
  297. var entity = await _medicalTypeCache.GetOrAddAsync(
  298. id, //缓存键
  299. async () => await _medicalTypeRepository.GetAsync(id)
  300. );
  301. return entity;
  302. }
  303. public async Task<string> GetMedicalTypeNameAsync(Guid? id)
  304. {
  305. if (id == null || id == default(Guid) || !id.HasValue)
  306. {
  307. return "";
  308. }
  309. var entity = await GetMedicalTypeAsync((Guid)id);
  310. return entity.DisplayName;
  311. }
  312. private async Task<PersonnelType> GetPersonnelTypeAsync(Guid id)
  313. {
  314. var entity = await _personnelTypeCache.GetOrAddAsync(
  315. id, //缓存键
  316. async () => await _personnelTypeRepository.GetAsync(id)
  317. );
  318. return entity;
  319. }
  320. public async Task<string> GetPersonnelTypeNameAsync(Guid? id)
  321. {
  322. if (id == null || id == default(Guid) || !id.HasValue)
  323. {
  324. return "";
  325. }
  326. var entity = await GetPersonnelTypeAsync((Guid)id);
  327. return entity.DisplayName;
  328. }
  329. public async Task<Asbitem> GetAsbitemAsync(Guid id)
  330. {
  331. var entity = (Asbitem)_asbitemCache.Get(id);
  332. if (entity == null)
  333. {
  334. entity = await _asbitemRepository.GetAsync(o => o.Id == id);
  335. _asbitemCache.Set(id, entity);
  336. //entity = (CustomerOrg)_customerOrgCache.Get(id);
  337. }
  338. return entity;
  339. //var entity = await _asbitemCache.GetOrAddAsync(
  340. // id, //缓存键
  341. // async () => await _asbitemRepository.GetAsync(id)
  342. //);
  343. //return entity;
  344. }
  345. public async Task<ItemType> GetItemTypeAsync(Guid id)
  346. {
  347. var entity = (ItemType)_itemTypeCache.Get(id);
  348. if (entity == null)
  349. {
  350. entity = await _itemTypeRepository.GetAsync(o => o.Id == id);
  351. _itemTypeCache.Set(id, entity);
  352. //entity = (CustomerOrg)_customerOrgCache.Get(id);
  353. }
  354. //var entity = await _itemTypeCache.GetOrAddAsync(
  355. // id, //缓存键
  356. // async () => (ItemType) _itemTypeRepository.Get(id)
  357. //);
  358. return entity;
  359. }
  360. public async Task<Nation> GetNationAsync(string id)
  361. {
  362. var entity = await _nationCache.GetOrAddAsync(
  363. id, //缓存键
  364. async () => await _nationRepository.GetAsync(o => o.Id == id)
  365. );
  366. return entity;
  367. }
  368. public async Task<string> GetNationNameAsync(string id)
  369. {
  370. if (string.IsNullOrWhiteSpace(id))
  371. {
  372. return "";
  373. }
  374. var entity = await GetNationAsync(id);
  375. return entity.DisplayName;
  376. }
  377. /// <summary>
  378. /// 获取部门名称
  379. /// </summary>
  380. /// <param name="id"></param>
  381. /// <returns></returns>
  382. public async Task<CustomerOrg> GetCustomerOrgAsync(Guid id)
  383. {
  384. var entity = (CustomerOrg)_customerOrgCache.Get(id);
  385. if (entity == null)
  386. {
  387. entity = await _customerOrgRepository.GetAsync(o => o.Id == id);
  388. _customerOrgCache.Set(id, entity);
  389. //entity = (CustomerOrg)_customerOrgCache.Get(id);
  390. }
  391. return entity;
  392. }
  393. /// <summary>
  394. /// 获取部门名称
  395. /// </summary>
  396. /// <param name="id"></param>
  397. /// <returns></returns>
  398. public async Task<string> GetCustomerOrgNameAsync(Guid? id)
  399. {
  400. if (id == null || id == default(Guid) || !id.HasValue)
  401. {
  402. return "";
  403. }
  404. var entity = await GetCustomerOrgAsync((Guid)id);
  405. return entity.DisplayName;
  406. }
  407. /// <summary>
  408. /// 获取一级单位
  409. /// </summary>
  410. /// <param name="id"></param>
  411. /// <param name="customerOrgDisplayMode">单位显示模式 0-显示一级单位 1-显示上一级单位</param>
  412. /// <returns></returns>
  413. public async Task<CustomerOrg> GetTopCustomerOrgAsync(Guid id)
  414. {
  415. #region 获取单位显示模式 存缓存
  416. string customerOrgDisplayMode = _customerOrgDisplayModeCache.Get("customer_org_display_mode");
  417. if (string.IsNullOrWhiteSpace(customerOrgDisplayMode))
  418. {
  419. customerOrgDisplayMode = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "customer_org_display_mode");
  420. if (string.IsNullOrWhiteSpace(customerOrgDisplayMode))
  421. {
  422. customerOrgDisplayMode = "0";
  423. }
  424. _customerOrgDisplayModeCache.Set("customer_org_display_mode", customerOrgDisplayMode);
  425. }
  426. #endregion
  427. var entity = (CustomerOrg)_customerOrgCache.Get(id);
  428. if (entity == null)
  429. {
  430. entity = await _customerOrgRepository.GetAsync(o => o.Id == id);
  431. _customerOrgCache.Set(id, entity);
  432. }
  433. if (entity.ParentId != null && entity.ParentId != Guid.Empty)
  434. {
  435. Guid parentId = (Guid)entity.ParentId;
  436. if (customerOrgDisplayMode == "0")
  437. {
  438. entity = await GetTopCustomerOrgAsync(parentId);
  439. }
  440. else
  441. {
  442. entity = (CustomerOrg)_customerOrgCache.Get(parentId);
  443. if (entity == null)
  444. {
  445. entity = await _customerOrgRepository.GetAsync(o => o.Id == parentId);
  446. _customerOrgCache.Set(parentId, entity);
  447. }
  448. }
  449. }
  450. return entity;
  451. }
  452. /// <summary>
  453. /// 获取单位简称 一级单位 简称如果没有显示全称
  454. /// </summary>
  455. /// <param name="CustomerOrgId"></param>
  456. /// <returns></returns>
  457. public async Task<string> GetTopCustomerOrgShortNameAsync(Guid CustomerOrgId)
  458. {
  459. var customerOrgEnt = await GetTopCustomerOrgAsync(CustomerOrgId);
  460. if (string.IsNullOrWhiteSpace(customerOrgEnt.ShortName))
  461. return customerOrgEnt.DisplayName;
  462. else
  463. return customerOrgEnt.ShortName;
  464. }
  465. /// <summary>
  466. /// 获取部门简称 简称如果没有显示全称
  467. /// </summary>
  468. /// <param name="CustomerOrgId"></param>
  469. /// <returns></returns>
  470. public async Task<string> GetCustomerOrgShortNameAsync(Guid CustomerOrgId)
  471. {
  472. var customerOrgEnt = await GetCustomerOrgAsync(CustomerOrgId);
  473. if (string.IsNullOrWhiteSpace(customerOrgEnt.ShortName))
  474. return customerOrgEnt.DisplayName;
  475. else
  476. return customerOrgEnt.ShortName;
  477. }
  478. /// <summary>
  479. /// 获取所有部门名称
  480. /// </summary>
  481. /// <param name="CustomerOrgId"></param>
  482. /// <returns></returns>
  483. public async Task<string> GetAllDepartmentNameAsync(Guid CustomerOrgId)
  484. {
  485. var departmentDisplayMode = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "department_display_mode");
  486. if (departmentDisplayMode == "1")
  487. {
  488. List<string> customerOrgNames = new List<string>();
  489. await GetAllDepartmentNameAsync(customerOrgNames, CustomerOrgId);
  490. if (customerOrgNames.Count > 1)
  491. {
  492. customerOrgNames.RemoveAt(0);
  493. return string.Join("\\", customerOrgNames);
  494. }
  495. else
  496. {
  497. //无部门
  498. return "";
  499. }
  500. }
  501. else
  502. {
  503. //兼容不设置系统参数的
  504. return await GetCustomerOrgNameAsync(CustomerOrgId);
  505. }
  506. }
  507. /// <summary>
  508. /// 遍历获取单位数据
  509. /// </summary>
  510. /// <param name="customerOrgNames"></param>
  511. /// <param name="customerOrgId"></param>
  512. /// <returns></returns>
  513. public async Task GetAllDepartmentNameAsync(List<string> customerOrgNames, Guid? customerOrgId)
  514. {
  515. if (customerOrgId != null)
  516. {
  517. var customerOrgEnt = await GetCustomerOrgAsync(customerOrgId.Value);
  518. if (customerOrgEnt != null)
  519. {
  520. if (string.IsNullOrWhiteSpace(customerOrgEnt.ShortName))
  521. customerOrgNames.AddFirst(customerOrgEnt.DisplayName);
  522. else
  523. customerOrgNames.AddFirst(customerOrgEnt.ShortName);
  524. await GetAllDepartmentNameAsync(customerOrgNames, customerOrgEnt.ParentId);
  525. }
  526. }
  527. }
  528. /// <summary>
  529. /// 缓存取单位名称
  530. /// </summary>
  531. /// <param name="CustomerOrgId">部门ID</param>
  532. /// <returns></returns>
  533. public async Task<string> GetTopCustomerOrgNameAsync(Guid CustomerOrgId)
  534. {
  535. string topCustomerOrgName = await _customerOrgTopNameCache.GetOrAddAsync(
  536. CustomerOrgId, //缓存键
  537. async () => await GetTopCustomerOrgNameInCustomerOrgIdAsync(CustomerOrgId)
  538. );
  539. return topCustomerOrgName;
  540. }
  541. /// <summary>
  542. /// 根据部门ID 按PathCode码查询单位名称
  543. /// </summary>
  544. /// <param name="id"></param>
  545. /// <returns></returns>
  546. private async Task<string> GetTopCustomerOrgNameInCustomerOrgIdAsync(Guid id)
  547. {
  548. #region 获取单位显示模式 存缓存
  549. string customerOrgDisplayMode = _customerOrgDisplayModeCache.Get("customer_org_display_mode");
  550. if (string.IsNullOrWhiteSpace(customerOrgDisplayMode))
  551. {
  552. customerOrgDisplayMode = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "customer_org_display_mode");
  553. if (string.IsNullOrWhiteSpace(customerOrgDisplayMode))
  554. {
  555. customerOrgDisplayMode = "0";
  556. }
  557. _customerOrgDisplayModeCache.Set("customer_org_display_mode", customerOrgDisplayMode);
  558. }
  559. #endregion
  560. var entity = (CustomerOrg)_customerOrgCache.Get(id);
  561. if (entity == null)
  562. {
  563. entity = await _customerOrgRepository.GetAsync(o => o.Id == id);
  564. _customerOrgCache.Set(id, entity);
  565. }
  566. if (entity.Id == GuidFlag.PersonCustomerOrgId)
  567. {
  568. return entity.DisplayName;
  569. }
  570. if (entity.PathCode.Length == 5)
  571. {
  572. return entity.DisplayName;
  573. }
  574. if (customerOrgDisplayMode == "0")
  575. {
  576. entity = await _customerOrgRepository.GetAsync(o => o.PathCode == entity.PathCode.Substring(0, 5));
  577. }
  578. else
  579. {
  580. entity = await _customerOrgRepository.GetAsync(o => o.Id == entity.ParentId);
  581. }
  582. return entity.DisplayName;
  583. }
  584. /// <summary>
  585. /// 获取顶级单位ID 直取,不按配置来,用登记界面做单位比较
  586. /// </summary>
  587. /// <param name="id"></param>
  588. /// <returns></returns>
  589. public async Task<Guid> GetTopCustomerOrgIdAsync(Guid id)
  590. {
  591. Guid topCustomerOrgId = id;
  592. var entity = (CustomerOrg)_customerOrgCache.Get(id);
  593. if (entity == null)
  594. {
  595. entity = await _customerOrgRepository.GetAsync(o => o.Id == id);
  596. _customerOrgCache.Set(id, entity);
  597. }
  598. if (entity.PathCode.Length > 5)
  599. {
  600. entity = await _customerOrgRepository.GetAsync(o => o.PathCode == entity.PathCode.Substring(0, 5));
  601. topCustomerOrgId = entity.Id;
  602. }
  603. return topCustomerOrgId;
  604. }
  605. private async Task<SampleType> GetSampleTypeAsync(Guid id)
  606. {
  607. var entity = await _sampleTypeCache.GetOrAddAsync(
  608. id, //缓存键
  609. async () => await _sampleTypeRepository.GetAsync(id)
  610. );
  611. return entity;
  612. }
  613. public async Task<string> GetSampleTypeNameAsync(Guid? id)
  614. {
  615. if (id == null || id == default(Guid) || !id.HasValue)
  616. {
  617. return "";
  618. }
  619. var entity = await GetSampleTypeAsync((Guid)id);
  620. return entity.DisplayName;
  621. }
  622. /// <summary>
  623. /// 获取诊断级别名称
  624. /// </summary>
  625. /// <param name="id"></param>
  626. /// <returns></returns>
  627. public async Task<string> GetDiagnosisLevelNameAsync(short? id)
  628. {
  629. if (id != null)
  630. {
  631. var diagnosisLevelEntity = await _diagnosisLevelCache.GetAsync(id.Value);
  632. if (diagnosisLevelEntity == null)
  633. {
  634. diagnosisLevelEntity = await _diagnosisLevelRepository.FirstOrDefaultAsync(f => f.Id == id);
  635. }
  636. return diagnosisLevelEntity.DisplayName;
  637. }
  638. else
  639. {
  640. return "";
  641. }
  642. }
  643. }
  644. }