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);
+ }
+
}
}