diff --git a/src/Shentun.Peis.Application.Contracts/RegisterChecks/RegisterCheckOrAsbitemNameOrIsChargeDto.cs b/src/Shentun.Peis.Application.Contracts/RegisterChecks/RegisterCheckOrAsbitemNameOrIsChargeDto.cs index 31f4090..44018e5 100644 --- a/src/Shentun.Peis.Application.Contracts/RegisterChecks/RegisterCheckOrAsbitemNameOrIsChargeDto.cs +++ b/src/Shentun.Peis.Application.Contracts/RegisterChecks/RegisterCheckOrAsbitemNameOrIsChargeDto.cs @@ -15,5 +15,9 @@ namespace Shentun.Peis.RegisterChecks /// 是否收费 /// public char? IsCharge { get; set; } + + public char CheckTypeFlag { get; set; } + public int ItemTypeDisplayOrder { get; set; } + public int AsbitemDisplayOrder { get; set; } } } diff --git a/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs b/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs index f024be9..4731eb6 100644 --- a/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs +++ b/src/Shentun.Peis.Application/RegisterChecks/RegisterCheckAppService.cs @@ -35,6 +35,8 @@ namespace Shentun.Peis.RegisterChecks public class RegisterCheckAppService : ApplicationService { private readonly IRepository _registerCheckItemRepository; + private readonly IRepository _registerCheckAsbitemRepository; + private readonly IRepository _itemTypeRepository; private readonly IRepository _patientRegisterRepository; private readonly IRepository _referenceRangeRepository; private readonly IRepository _registerCheckRepository; @@ -64,7 +66,9 @@ namespace Shentun.Peis.RegisterChecks IConfiguration configuration, ICurrentUser currentUser, IRepository userItemTypeRepository, - IRepository asbitemRepository) + IRepository asbitemRepository, + IRepository registerCheckAsbitemRepository, + IRepository itemTypeRepository) { _registerCheckRepository = registerCheckRepository; _userRepository = userRepository; @@ -81,6 +85,8 @@ namespace Shentun.Peis.RegisterChecks _currentUser = currentUser; _userItemTypeRepository = userItemTypeRepository; _asbitemRepository = asbitemRepository; + _registerCheckAsbitemRepository = registerCheckAsbitemRepository; + _itemTypeRepository = itemTypeRepository; } /// @@ -130,15 +136,32 @@ namespace Shentun.Peis.RegisterChecks /// /// 获取登记check表数据(附带组合项目名称跟是否收费) 医生诊台左边列表 只有一个收费就显示收费 /// - /// + /// /// - public async Task> GetListRegisterCheckOrAsbitemAsync(Guid PatientRegisterId) + [HttpPost("api/app/RegisterCheck/GetRegisterCheckAsbitemsByPatientRegisterId")] + public async Task> GetRegisterCheckAsbitemsByPatientRegisterIdAsync(PatientRegisterIdInputDto input) { + //var list = (from registerCheck in await _registerCheckRepository.GetQueryableAsync() + // join registerCheckAsbitem in await _registerCheckAsbitemRepository.GetQueryableAsync() + // on registerCheck.Id equals registerCheckAsbitem.AsbitemId + // join asbitem in await _asbitemRepository.GetQueryableAsync() + // on registerCheckAsbitem.AsbitemId equals asbitem.Id + // join itemType in await _itemTypeRepository.GetQueryableAsync() + // on asbitem.ItemTypeId equals itemType.Id + // where registerCheck.PatientRegisterId == input.PatientRegisterId + // orderby itemType.DisplayName, asbitem.DisplayOrder + // select new + // { + // registerCheck, + // registerCheckAsbitem, + // asbitem, + // itemType + // }).ToList(); var entlist = (await _registerCheckRepository.GetDbSetAsync()) .Include(x => x.RegisterCheckAsbitems) .ThenInclude(x => x.Asbitem).ThenInclude(x => x.ItemType) - .Where(m => m.RegisterCheckAsbitems.Select(s => s.PatientRegisterId).Contains(PatientRegisterId)).ToList(); + .Where(m => m.RegisterCheckAsbitems.Select(s => s.PatientRegisterId).Contains(input.PatientRegisterId)).ToList(); //排序 entlist = entlist.OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.ItemType.DisplayOrder)).ToList() .OrderBy(o => o.RegisterCheckAsbitems.Max(o => o.Asbitem.DisplayOrder)).ToList(); @@ -146,6 +169,7 @@ namespace Shentun.Peis.RegisterChecks var entdto = entlist.Select(s => new RegisterCheckOrAsbitemNameOrIsChargeDto { + CheckTypeFlag = s.RegisterCheckAsbitems.First().Asbitem.ItemType.CheckTypeFlag, AsbitemName = string.Join(",", s.RegisterCheckAsbitems.Select(rs => rs.Asbitem.DisplayName).ToList()), AuditorUserId = s.AuditorUserId, AuditTime = s.AuditTime, @@ -171,8 +195,10 @@ namespace Shentun.Peis.RegisterChecks LastModifierId = s.LastModifierId, //RegisterAsbitemId = s.RegisterAsbitemId, ThirdInfo = s.ThirdInfo, - CreatorName = EntityHelper.GetSurnameNoSql(userList, s.CreatorId), - LastModifierName = EntityHelper.GetSurnameNoSql(userList, s.LastModifierId) + CreatorName = _cacheService.GetSurnameAsync( s.CreatorId).Result, + LastModifierName = _cacheService.GetSurnameAsync(s.LastModifierId).Result, + ItemTypeDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.ItemType.DisplayOrder, + AsbitemDisplayOrder = s.RegisterCheckAsbitems.First().Asbitem.DisplayOrder }).ToList(); return entdto; diff --git a/src/Shentun.Peis.Application/SumSummaryReports/SumSummaryReportAppService.cs b/src/Shentun.Peis.Application/SumSummaryReports/SumSummaryReportAppService.cs index 1609a55..2da004c 100644 --- a/src/Shentun.Peis.Application/SumSummaryReports/SumSummaryReportAppService.cs +++ b/src/Shentun.Peis.Application/SumSummaryReports/SumSummaryReportAppService.cs @@ -4,6 +4,7 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore; using Microsoft.VisualBasic; using NPOI.OpenXmlFormats.Wordprocessing; +using Org.BouncyCastle.Ocsp; using Shentun.Peis.Enums; using Shentun.Peis.Models; using Shentun.Peis.PatientRegisters; @@ -191,20 +192,23 @@ namespace Shentun.Peis.SumSummaryReports CheckDate = ((DateTime)listItem.registerCheck.CheckDate).Date, CheckDoctorName = EntityHelper.GetCheckDoctorName(listItem.registerCheck.CheckDoctorId, userlist), Items = list.Where(o => o.registerCheck.Id == registerCheckId) - .OrderBy(o => o.itemType.DisplayOrder).OrderBy(o => o.asbitem.DisplayOrder).OrderBy(o => o.item.DisplayOrder) + .OrderBy(o => o.itemType.DisplayOrder) + .OrderBy(o => o.asbitem.DisplayOrder) + .OrderBy(o => o.item.DisplayOrder) + .GroupBy(o => o.registerCheckItem.ItemId) .Select(o => new SumSummaryReportDetailResultWithItem() { - ItemId = o.registerCheckItem.ItemId, - ItemName = o.item.DisplayName, - ItemResult = o.registerCheckItem.Result, - ReferenceRangeValue = o.registerCheckItem.ReferenceRangeValue, - CriticalRangeValue = o.registerCheckItem.CriticalRangeValue, - Unit = o.registerCheckItem.Unit, - ResultStatusId = o.registerCheckItem.ResultStatusId, - ResultStatusName = (resultStatus.Where(x => x.Id == o.registerCheckItem.ResultStatusId).FirstOrDefault() == null) ? "" : resultStatus.Where(x => x.Id == o.registerCheckItem.ResultStatusId).FirstOrDefault().ReportPrompt, - ReportFontColor = (resultStatus.Where(x => x.Id == o.registerCheckItem.ResultStatusId).FirstOrDefault() == null) ? 0 : resultStatus.Where(x => x.Id == o.registerCheckItem.ResultStatusId).FirstOrDefault().ReportFontColor, - ReportBackgroundColor = (resultStatus.Where(x => x.Id == o.registerCheckItem.ResultStatusId).FirstOrDefault() == null) ? 16777215 : resultStatus.Where(x => x.Id == o.registerCheckItem.ResultStatusId).FirstOrDefault().ReportBackgroundColor, - }).Distinct().ToList(), + ItemId = o.FirstOrDefault().registerCheckItem.ItemId, + ItemName = o.FirstOrDefault().item.DisplayName, + ItemResult = o.FirstOrDefault().registerCheckItem.Result, + ReferenceRangeValue = o.FirstOrDefault().registerCheckItem.ReferenceRangeValue, + CriticalRangeValue = o.FirstOrDefault().registerCheckItem.CriticalRangeValue, + Unit = o.FirstOrDefault().registerCheckItem.Unit, + ResultStatusId = o.FirstOrDefault().registerCheckItem.ResultStatusId, + ResultStatusName = (resultStatus.Where(x => x.Id == o.FirstOrDefault().registerCheckItem.ResultStatusId).FirstOrDefault() == null) ? "" : resultStatus.Where(x => x.Id == o.FirstOrDefault().registerCheckItem.ResultStatusId).FirstOrDefault().ReportPrompt, + ReportFontColor = (resultStatus.Where(x => x.Id == o.FirstOrDefault().registerCheckItem.ResultStatusId).FirstOrDefault() == null) ? 0 : resultStatus.Where(x => x.Id == o.FirstOrDefault().registerCheckItem.ResultStatusId).FirstOrDefault().ReportFontColor, + ReportBackgroundColor = (resultStatus.Where(x => x.Id == o.FirstOrDefault().registerCheckItem.ResultStatusId).FirstOrDefault() == null) ? 16777215 : resultStatus.Where(x => x.Id == o.FirstOrDefault().registerCheckItem.ResultStatusId).FirstOrDefault().ReportBackgroundColor, + }).ToList(), Summarys = list.Where(o => o.registerCheck.Id == registerCheckId) .OrderBy(o => o.registerCheckSummary.DisplayOrder) .GroupBy(o => o.registerCheckSummary.Summary) @@ -413,7 +417,7 @@ namespace Shentun.Peis.SumSummaryReports list = list.OrderBy(o => o.itemType.DisplayOrder) .OrderBy(o => o.asbitem.DisplayOrder).ToList(); - foreach(var item in list) + foreach (var item in list) { if (!entdto.Where(o => o.AsbitemId == item.asbitem.Id).Any()) { @@ -426,7 +430,7 @@ namespace Shentun.Peis.SumSummaryReports entdto.Add(ent); } } - + return entdto; } @@ -506,7 +510,7 @@ namespace Shentun.Peis.SumSummaryReports } - sumSummaryReportHorizontalComparisonDtos = sumSummaryReportHorizontalComparisonDtos.OrderByDescending(o=>o.CheckDate).ToList(); + sumSummaryReportHorizontalComparisonDtos = sumSummaryReportHorizontalComparisonDtos.OrderByDescending(o => o.CheckDate).ToList(); return sumSummaryReportHorizontalComparisonDtos; } diff --git a/src/Shentun.Peis.Domain/CacheService.cs b/src/Shentun.Peis.Domain/CacheService.cs index 9fd9acc..9806c22 100644 --- a/src/Shentun.Peis.Domain/CacheService.cs +++ b/src/Shentun.Peis.Domain/CacheService.cs @@ -1,5 +1,6 @@ using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.Distributed; +using Microsoft.Extensions.Caching.Memory; using Shentun.Peis.Enums; using Shentun.Peis.Models; using System; @@ -18,7 +19,8 @@ namespace Shentun.Peis public class CacheService : ISingletonDependency { private readonly IDistributedCache _userCache; - private readonly IDistributedCache _customerOrgCache; + private readonly IMemoryCache _customerOrgCache; + //private readonly IDistributedCache _customerOrgCache; private readonly IDistributedCache _customerOrgTopNameCache; private readonly IDistributedCache _nationCache; private readonly IDistributedCache _sexCache; @@ -27,14 +29,16 @@ namespace Shentun.Peis private readonly IDistributedCache _deviceTypeCache; private readonly IDistributedCache _medicalTypeCache; private readonly IDistributedCache _personnelTypeCache; - private readonly IDistributedCache _asbitemCache; - private readonly IDistributedCache _itemTypeCache; + private readonly IMemoryCache _asbitemCache; + private readonly IMemoryCache _itemTypeCache; + //private readonly IDistributedCache _itemTypeCache; private readonly IRepository _userRepository; private readonly IRepository _nationRepository; private readonly IRepository _sexRepository; private readonly IRepository _forSexRepository; private readonly IRepository _deviceTypeRepository; private readonly IRepository _asbitemRepository; + private readonly IRepository _itemTypeRepository; private readonly IRepository _customerOrgRepository; private readonly IRepository _maritalStatusRepository; @@ -43,12 +47,12 @@ namespace Shentun.Peis public CacheService( IDistributedCache userCache, - IDistributedCache customerOrgCache, + IMemoryCache customerOrgCache, IDistributedCache nationCache, IRepository userRepository, IDistributedCache sexCache, - IDistributedCache asbitemCache, - IDistributedCache itemTypeCache, + IMemoryCache asbitemCache, + IMemoryCache itemTypeCache, IDistributedCache maritalStatusCache, IDistributedCache medicalTypeCache, IDistributedCache personnelTypeCache, @@ -58,7 +62,7 @@ namespace Shentun.Peis IDistributedCache forSexCache, IRepository forSexRepository, IRepository asbitemRepository, - IRepository itemTypeRepository, + IRepository itemTypeRepository, IRepository nationRepository, IRepository customerOrgRepository, IRepository maritalStatusRepository, @@ -234,23 +238,41 @@ namespace Shentun.Peis public async Task GetAsbitemAsync(Guid id) { + var entity = (Asbitem)_asbitemCache.Get(id); + if (entity == null) + { + entity = await _asbitemRepository.GetAsync(o => o.Id == id); + _asbitemCache.Set(id, entity); + //entity = (CustomerOrg)_customerOrgCache.Get(id); + } - var entity = await _asbitemCache.GetOrAddAsync( - id, //缓存键 - async () => await _asbitemRepository.GetAsync(id) - - ); return entity; + + + //var entity = await _asbitemCache.GetOrAddAsync( + // id, //缓存键 + // async () => await _asbitemRepository.GetAsync(id) + + //); + //return entity; } public async Task GetItemTypeAsync(Guid id) { - var entity = await _itemTypeCache.GetOrAddAsync( - id, //缓存键 - async () => await _itemTypeRepository.GetAsync(id) + var entity = (ItemType)_itemTypeCache.Get(id); + if (entity == null) + { + entity = await _itemTypeRepository.GetAsync(o => o.Id == id); + _itemTypeCache.Set(id, entity); + //entity = (CustomerOrg)_customerOrgCache.Get(id); + } - ); + //var entity = await _itemTypeCache.GetOrAddAsync( + // id, //缓存键 + // async () => (ItemType) _itemTypeRepository.Get(id) + + //); return entity; } @@ -277,11 +299,12 @@ namespace Shentun.Peis public async Task GetCustomerOrgAsync(Guid id) { - var entity = await _customerOrgCache.GetAsync(id); + var entity = (CustomerOrg)_customerOrgCache.Get(id); if (entity == null) { entity = await _customerOrgRepository.GetAsync(o => o.Id == id); _customerOrgCache.Set(id, entity); + //entity = (CustomerOrg)_customerOrgCache.Get(id); } return entity; @@ -299,7 +322,7 @@ namespace Shentun.Peis public async Task GetTopCustomerOrgAsync(Guid id) { - var entity = await _customerOrgCache.GetAsync(id); + var entity = (CustomerOrg)_customerOrgCache.Get(id); if(entity == null) { entity = await _customerOrgRepository.GetAsync(o => o.Id == id); @@ -336,7 +359,7 @@ namespace Shentun.Peis /// private async Task GetTopCustomerOrgNameInCustomerOrgIdAsync(Guid id) { - var entity = await _customerOrgCache.GetAsync(id); + var entity = (CustomerOrg)_customerOrgCache.Get(id); if (entity == null) { entity = await _customerOrgRepository.GetAsync(o => o.Id == id); diff --git a/test/Shentun.Peis.Application.Tests/SumSummaryReportAppServiceTest.cs b/test/Shentun.Peis.Application.Tests/SumSummaryReportAppServiceTest.cs index 6a73412..c9c49e2 100644 --- a/test/Shentun.Peis.Application.Tests/SumSummaryReportAppServiceTest.cs +++ b/test/Shentun.Peis.Application.Tests/SumSummaryReportAppServiceTest.cs @@ -37,11 +37,21 @@ namespace Shentun.Peis var entity = new PatientRegisterIdInputDto() { - PatientRegisterId = new Guid("3a1216d1-4bd1-5f3b-6a40-903589b570b8"), + PatientRegisterId = new Guid("3a123c55-06de-4988-691c-448b5af468ff"), }; var newEntity = await _appService.GetDetailResultsAsync(entity); + foreach(var item in newEntity) + { + foreach(var item2 in item.Asbitems) + { + foreach(var item3 in item2.Items) + { + _output.WriteLine(item3.ItemName); + } + } + } await unitOfWork.CompleteAsync(); } }