From 09c175734a97199e16189238f064dddaf1863830 Mon Sep 17 00:00:00 2001 From: wxd <123@qq.com> Date: Wed, 18 Mar 2026 15:29:33 +0800 Subject: [PATCH] =?UTF-8?q?excel=E5=AF=BC=E5=85=A5=EF=BC=8C=E5=8D=95?= =?UTF-8?q?=E4=BD=8D=E7=BC=93=E5=AD=98=EF=BC=8C=E9=98=B3=E6=80=A7=E7=BB=93?= =?UTF-8?q?=E6=9E=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../GetCustomerOrgThreeDataVersonInputDto.cs | 14 +++ .../GetPatientRegisterPositiveReportDto.cs | 12 +++ ...ositivePatientRegisterReportStandardDto.cs | 11 +++ .../PatientRegisters/GetSameNamePatientDto.cs | 10 ++ .../CustomerOrgs/CustomerOrgAppService.cs | 32 +++++-- .../CustomerReportAppService.cs | 11 ++- .../PatientRegisterAppService.cs | 93 +++++++++++++------ src/Shentun.Peis.Domain/CacheService.cs | 33 ++++++- 8 files changed, 177 insertions(+), 39 deletions(-) create mode 100644 src/Shentun.Peis.Application.Contracts/CustomerOrgs/GetCustomerOrgThreeDataVersonInputDto.cs diff --git a/src/Shentun.Peis.Application.Contracts/CustomerOrgs/GetCustomerOrgThreeDataVersonInputDto.cs b/src/Shentun.Peis.Application.Contracts/CustomerOrgs/GetCustomerOrgThreeDataVersonInputDto.cs new file mode 100644 index 00000000..f0f5e710 --- /dev/null +++ b/src/Shentun.Peis.Application.Contracts/CustomerOrgs/GetCustomerOrgThreeDataVersonInputDto.cs @@ -0,0 +1,14 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace Shentun.Peis.CustomerOrgs +{ + public class GetCustomerOrgThreeDataVersonInputDto + { + /// + /// 数据名称 + /// + public string DataName { get; set; } = "customer_three"; + } +} diff --git a/src/Shentun.Peis.Application.Contracts/CustomerReports/GetPatientRegisterPositiveReportDto.cs b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetPatientRegisterPositiveReportDto.cs index 23a66f4f..da254ff4 100644 --- a/src/Shentun.Peis.Application.Contracts/CustomerReports/GetPatientRegisterPositiveReportDto.cs +++ b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetPatientRegisterPositiveReportDto.cs @@ -30,6 +30,18 @@ namespace Shentun.Peis.CustomerReports /// public int FemaleCount { get; set; } + + /// + /// 登记男性人数 + /// + public int RegisterMaleCount { get; set; } + + + /// + /// 登记女性人数 + /// + public int RegisterFemaleCount { get; set; } + public List Details { get; set; } = new List(); } diff --git a/src/Shentun.Peis.Application.Contracts/CustomerReports/GetPositivePatientRegisterReportStandardDto.cs b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetPositivePatientRegisterReportStandardDto.cs index 9f44a1c9..f6919137 100644 --- a/src/Shentun.Peis.Application.Contracts/CustomerReports/GetPositivePatientRegisterReportStandardDto.cs +++ b/src/Shentun.Peis.Application.Contracts/CustomerReports/GetPositivePatientRegisterReportStandardDto.cs @@ -30,6 +30,17 @@ namespace Shentun.Peis.CustomerReports /// public int FemaleCount { get; set; } + /// + /// 登记男性人数 + /// + public int RegisterMaleCount { get; set; } + + + /// + /// 登记女性人数 + /// + public int RegisterFemaleCount { get; set; } + public List Details { get; set; } = new List(); diff --git a/src/Shentun.Peis.Application.Contracts/PatientRegisters/GetSameNamePatientDto.cs b/src/Shentun.Peis.Application.Contracts/PatientRegisters/GetSameNamePatientDto.cs index cc5bbafe..622e8f40 100644 --- a/src/Shentun.Peis.Application.Contracts/PatientRegisters/GetSameNamePatientDto.cs +++ b/src/Shentun.Peis.Application.Contracts/PatientRegisters/GetSameNamePatientDto.cs @@ -83,5 +83,15 @@ namespace Shentun.Peis.PatientRegisters public string CustomerOrgName { get; set; } public string DepartmentName { get; set; } + + /// + /// 分组名称 + /// + public string CustomerOrgGroupName { get; set; } + /// + /// 套餐名称 + /// + public string MedicalPackageName { get; set; } + } } diff --git a/src/Shentun.Peis.Application/CustomerOrgs/CustomerOrgAppService.cs b/src/Shentun.Peis.Application/CustomerOrgs/CustomerOrgAppService.cs index 373c96df..a686d43f 100644 --- a/src/Shentun.Peis.Application/CustomerOrgs/CustomerOrgAppService.cs +++ b/src/Shentun.Peis.Application/CustomerOrgs/CustomerOrgAppService.cs @@ -79,7 +79,7 @@ namespace Shentun.Peis.CustomerOrgs entityDto.LastModifierName = await _cacheService.GetSurnameAsync(entityDto.LastModifierId); entityDto.MedicalTypeName = await _cacheService.GetMedicalTypeNameAsync(entityDto.MedicalTypeId); entityDto.PersonnelTypeName = await _cacheService.GetPersonnelTypeNameAsync(entityDto.PersonnelTypeId); - // entityDto. = await _cacheService.GetPersonnelTypeNameAsync(entityDto.PersonnelTypeId); + // entityDto. = await _cacheService.GetPersonnelTypeNameAsync(entityDto.PersonnelTypeId); return entityDto; } //[AllowAnonymous] @@ -201,6 +201,10 @@ namespace Shentun.Peis.CustomerOrgs await _customerOrgRegisterRepository.InsertAsync(customerOrgRegisterEntity); } _customerOrgCache.Set(entity.Id, entity); + + var versonNo = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); + _cacheService.SetDataVersonCache("customer_three", versonNo); + var dto = ObjectMapper.Map(entity); return dto; } @@ -217,6 +221,10 @@ namespace Shentun.Peis.CustomerOrgs await _manager.UpdateAsync(sourceEntity, entity); entity = await Repository.UpdateAsync(entity); _customerOrgCache.Set(entity.Id, entity); + + var versonNo = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); + _cacheService.SetDataVersonCache("customer_three", versonNo); + return ObjectMapper.Map(entity); } /// @@ -239,6 +247,9 @@ namespace Shentun.Peis.CustomerOrgs } } + var versonNo = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); + _cacheService.SetDataVersonCache("customer_three", versonNo); + } else { @@ -971,10 +982,19 @@ namespace Shentun.Peis.CustomerOrgs } - - //private async Task GetDbContextAsync() - //{ - // return await _dbContextProvider.GetDbContextAsync(); - //} + /// + /// 获取当前数据版本 + /// + /// + [HttpPost("api/app/Customerorg/GetCustomerOrgThreeDataVerson")] + public string GetCustomerOrgThreeDataVersonAsync(GetCustomerOrgThreeDataVersonInputDto input) + { + var versonNo = _cacheService.GetDataVersonCache(input.DataName); + if (string.IsNullOrWhiteSpace(versonNo)) + { + versonNo = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); + } + return versonNo; + } } } diff --git a/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs b/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs index 8e033f24..e66a97d4 100644 --- a/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs +++ b/src/Shentun.Peis.Application/CustomerReports/CustomerReportAppService.cs @@ -340,9 +340,12 @@ namespace Shentun.Peis.CustomerReports } + var queryGroup = queryNull.ToList().GroupBy(g => g.patientRegister); + resultListDto.RegisterMaleCount = queryGroup.Count(c => c.Key.SexId == 'M'); + resultListDto.RegisterFemaleCount = queryGroup.Count(c => c.Key.SexId == 'F'); var patientRegisterIds = queryGroup.Select(s => s.Key.Id).ToList(); @@ -701,8 +704,8 @@ namespace Shentun.Peis.CustomerReports var queryGroup = queryNull.ToList().GroupBy(g => g.patientRegister); - resultListDto.MaleCount = queryGroup.Count(c => c.Key.SexId == 'M'); - resultListDto.FemaleCount = queryGroup.Count(c => c.Key.SexId == 'F'); + resultListDto.RegisterMaleCount = queryGroup.Count(c => c.Key.SexId == 'M'); + resultListDto.RegisterFemaleCount = queryGroup.Count(c => c.Key.SexId == 'F'); List patientRegisterList = new List(); @@ -821,8 +824,8 @@ namespace Shentun.Peis.CustomerReports resultListDto.StartDate = DataHelper.ConversionDateShortToString(input.CustomerOrgs.Where(m => !string.IsNullOrWhiteSpace(m.StartDate)).Select(s => Convert.ToDateTime(s.StartDate)).Min()); resultListDto.EndDate = DataHelper.ConversionDateShortToString(input.CustomerOrgs.Where(m => !string.IsNullOrWhiteSpace(m.EndDate)).Select(s => Convert.ToDateTime(s.EndDate)).Max()); - //resultListDto.MaleCount = patientRegisterList.Distinct().Count(c => c.SexName == "男"); - //resultListDto.FemaleCount = patientRegisterList.Distinct().Count(c => c.SexName == "女"); + resultListDto.MaleCount = patientRegisterList.Distinct().Count(c => c.SexName == "男"); + resultListDto.FemaleCount = patientRegisterList.Distinct().Count(c => c.SexName == "女"); resultListDto.Details = entListDto; return resultListDto; diff --git a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs index d4a1e88c..db91f175 100644 --- a/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs +++ b/src/Shentun.Peis.Application/PatientRegisters/PatientRegisterAppService.cs @@ -36,6 +36,7 @@ using Shentun.Peis.SumSummaryReports; using Shentun.Peis.SysParmValues; using Shentun.Peis.ThirdBookingPushs; using Shentun.Utilities; +using SqlSugar; using System; using System.Collections.Generic; using System.Diagnostics; @@ -3339,8 +3340,26 @@ namespace Shentun.Peis.PatientRegisters } if (!string.IsNullOrWhiteSpace(input.IdNo)) + { input.IdNo = input.IdNo.Trim(); + var idInfo = DataHelper.AutoIDCard(input.IdNo); + if (idInfo != null) + { + if (input.Age == null) + { + input.Age = idInfo.Age; + } + if (string.IsNullOrWhiteSpace(input.BirthDate)) + { + input.BirthDate = idInfo.BirthDate; + } + if (string.IsNullOrWhiteSpace(input.SexName)) + { + input.SexName = idInfo.SexId == 'M' ? "男" : "女"; + } + } + } #region 转换职业病信息 Guid ocCheckTypeId = Guid.Empty; @@ -3698,6 +3717,12 @@ namespace Shentun.Peis.PatientRegisters return null; } + + /// + /// 按全部数据查重名数据 + /// + /// + /// [HttpPost("api/app/patientregister/GetSameNamePatient")] public async Task> GetSameNamePatientAsync(GetSameNamePatientInputDto getSameNamePatientInputDto) { @@ -3708,10 +3733,6 @@ namespace Shentun.Peis.PatientRegisters var result = (from patient in patientQuery join patientRegister in patientRegisterQuery on patient.Id equals patientRegister.PatientId - join customerOrg in customerOrgQuery - on patientRegister.CustomerOrgId equals customerOrg.Id - join topCustomerOrg in topCustomerOrgQuery - on customerOrg.PathCode.Substring(0, 5) equals topCustomerOrg.PathCode where patient.DisplayName == getSameNamePatientInputDto.Name select new { @@ -3720,29 +3741,31 @@ namespace Shentun.Peis.PatientRegisters SexId = patient.SexId, NationId = patient.NationId, BirthDate = patient.BirthDate, - //SexName = _cacheService.GetSexNameAsync(patient.SexId).Result, - //NationName = _cacheService.GetNationNameAsync(patient.NationId).Result, - // BirthDate = ConvertExtr.ToStringByDateOnly( patient.BirthDate), IdNo = patient.IdNo, PostalCode = patient.PostalCode, Email = patient.Email, Telephone = patient.Telephone, MobileTelephone = patient.MobileTelephone, Address = patient.Address, - CustomerOrgName = topCustomerOrg.DisplayName, CustomerOrgId = patientRegister.CustomerOrgId, - DepartmentName = customerOrg.DisplayName - + MedicalStartDate = patientRegister.MedicalStartDate, + CustomerOrgGroupId = patientRegister.CustomerOrgGroupId, + MedicalPackageId = patientRegister.MedicalPackageId }).Distinct().ToList(); var getSameNamePatientDtos = new List(); - foreach (var item in result) + + var patientGroup = result.GroupBy(g => g.PatientNo); + + foreach (var itemPatient in patientGroup) { + + var item = itemPatient.OrderByDescending(o => o.MedicalStartDate).FirstOrDefault(); + getSameNamePatientDtos.Add(new GetSameNamePatientDto() { PatientName = item.PatientName, PatientNo = item.PatientNo, - SexName = _cacheService.GetSexNameAsync(item.SexId).Result, NationName = _cacheService.GetNationNameAsync(item.NationId).Result, BirthDate = DataHelper.ConversionDateToString(item.BirthDate), @@ -3752,8 +3775,10 @@ namespace Shentun.Peis.PatientRegisters Telephone = item.Telephone, MobileTelephone = item.MobileTelephone, Address = item.Address, - CustomerOrgName = item.CustomerOrgName, - DepartmentName = item.DepartmentName + CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(item.CustomerOrgId).GetAwaiter().GetResult(), + DepartmentName = _cacheService.GetCustomerOrgNameAsync(item.CustomerOrgId).GetAwaiter().GetResult(), + CustomerOrgGroupName = item.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(item.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName, + MedicalPackageName = _cacheService.GetMedicalTypeNameAsync(item.MedicalPackageId).GetAwaiter().GetResult() }); } @@ -3761,6 +3786,11 @@ namespace Shentun.Peis.PatientRegisters } + /// + /// 按部门数据查重名数据 + /// + /// + /// [HttpPost("api/app/patientregister/GetCustomerOrgSameNamePatient")] public async Task> GetCustomerOrgSameNamePatientAsync(GetCustomerOrgSameNamePatientInputDto getCustomerOrgSameNamePatientInputDto) { @@ -3783,9 +3813,6 @@ namespace Shentun.Peis.PatientRegisters SexId = patient.SexId, NationId = patient.NationId, BirthDate = patient.BirthDate, - //SexName = _cacheService.GetSexNameAsync(patient.SexId).Result, - //NationName = _cacheService.GetNationNameAsync(patient.NationId).Result, - // BirthDate = ConvertExtr.ToStringByDateOnly( patient.BirthDate), IdNo = patient.IdNo, PostalCode = patient.PostalCode, Email = patient.Email, @@ -3793,18 +3820,22 @@ namespace Shentun.Peis.PatientRegisters MobileTelephone = patient.MobileTelephone, Address = patient.Address, CustomerOrgId = patientRegister.CustomerOrgId, - DepartmentName = customerOrg.DisplayName - + CustomerOrgGroupId = patientRegister.CustomerOrgGroupId, + MedicalPackageId = patientRegister.MedicalPackageId, + MedicalStartDate = patientRegister.MedicalStartDate }).Distinct().ToList(); var getSameNamePatientDtos = new List(); - foreach (var item in result) + var patientGroup = result.GroupBy(g => g.PatientNo); + + foreach (var itemPatient in patientGroup) { + var item = itemPatient.OrderByDescending(o => o.MedicalStartDate).FirstOrDefault(); + getSameNamePatientDtos.Add(new GetSameNamePatientDto() { PatientName = item.PatientName, PatientNo = item.PatientNo, - SexName = _cacheService.GetSexNameAsync(item.SexId).Result, NationName = _cacheService.GetNationNameAsync(item.NationId).Result, BirthDate = DataHelper.ConversionDateToString(item.BirthDate), @@ -3814,8 +3845,10 @@ namespace Shentun.Peis.PatientRegisters Telephone = item.Telephone, MobileTelephone = item.MobileTelephone, Address = item.Address, - CustomerOrgName = customerOrgEntity.DisplayName, - DepartmentName = item.DepartmentName + CustomerOrgName = _cacheService.GetTopCustomerOrgNameAsync(item.CustomerOrgId).GetAwaiter().GetResult(), + DepartmentName = _cacheService.GetCustomerOrgNameAsync(item.CustomerOrgId).GetAwaiter().GetResult(), + CustomerOrgGroupName = item.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(item.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName, + MedicalPackageName = _cacheService.GetMedicalTypeNameAsync(item.MedicalPackageId).GetAwaiter().GetResult() }); } @@ -3956,10 +3989,11 @@ namespace Shentun.Peis.PatientRegisters PatientPassword = s.ab.PatientPassword, PostalCode = s.ab.PostalCode, Telephone = s.ab.Telephone, - CustomerOrgName = EntityHelper.GetCustomerOrgNameNoSql(customerOrgList, s.a.CustomerOrgId), - CustomerOrgParentId = EntityHelper.GetParentNoSql(customerOrgList, s.a.CustomerOrgId), - CustomerOrgParentName = EntityHelper.GetCustomerOrgParentNameNoSql(customerOrgList, s.a.CustomerOrgId) - + CustomerOrgName = _cacheService.GetCustomerOrgNameAsync(s.a.CustomerOrgId).GetAwaiter().GetResult(), + CustomerOrgParentId = _cacheService.GetTopCustomerOrgIdAsync(s.a.CustomerOrgId).GetAwaiter().GetResult(), + CustomerOrgParentName = _cacheService.GetTopCustomerOrgNameAsync(s.a.CustomerOrgId).GetAwaiter().GetResult(), + CustomerOrgGroupName = s.a.CustomerOrgGroupId == null ? "" : _cacheService.GetCustomerOrgGroupAsync(s.a.CustomerOrgGroupId.Value).GetAwaiter().GetResult().DisplayName, + MedicalPackageName = _cacheService.GetMedicalTypeNameAsync(s.a.MedicalPackageId).GetAwaiter().GetResult() }).ToList(); @@ -5123,6 +5157,11 @@ namespace Shentun.Peis.PatientRegisters var DepartmentReturn = await _customerOrgRepository.InsertAsync(DepartmentEnt, true); + #region 更新缓存版本 + var versonNo = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds().ToString(); + _cacheService.SetDataVersonCache("customer_three", versonNo); + #endregion + return DepartmentReturn.Id; } diff --git a/src/Shentun.Peis.Domain/CacheService.cs b/src/Shentun.Peis.Domain/CacheService.cs index a04581a7..7c6c64fb 100644 --- a/src/Shentun.Peis.Domain/CacheService.cs +++ b/src/Shentun.Peis.Domain/CacheService.cs @@ -67,6 +67,10 @@ namespace Shentun.Peis private readonly IRepository _medicalPackageRepository; private readonly IDistributedCache _medicalPackageCache; + + private readonly IMemoryCache _dataVersonCache; + + public CacheService( IDistributedCache userCache, IMemoryCache customerOrgCache, @@ -101,7 +105,8 @@ namespace Shentun.Peis IRepository customerOrgGroupRepository, IDistributedCache customerOrgGroupCache, IRepository medicalPackageRepository, - IDistributedCache medicalPackageCache) + IDistributedCache medicalPackageCache, + IMemoryCache dataVersonCache) { _userCache = userCache; _userRepository = userRepository; @@ -147,6 +152,7 @@ namespace Shentun.Peis _customerOrgGroupCache = customerOrgGroupCache; _medicalPackageRepository = medicalPackageRepository; _medicalPackageCache = medicalPackageCache; + _dataVersonCache = dataVersonCache; } private async Task GetUserAsync(Guid id) @@ -262,7 +268,7 @@ namespace Shentun.Peis } } - + private async Task GetSexAsync(char id) { @@ -820,5 +826,28 @@ namespace Shentun.Peis return entity; } + + /// + /// 获取缓存数据版本 + /// + /// + /// + public string GetDataVersonCache(string dataName) + { + + return _dataVersonCache.Get(dataName); + + } + + /// + /// 更新缓存数据版本 + /// + /// + /// + public void SetDataVersonCache(string dataName, string versonValue) + { + _dataVersonCache.Set(dataName, versonValue); + } + } }