From eb12f9ef8a6edeefa0f997ffe7c7036c413a3f7d Mon Sep 17 00:00:00 2001
From: "DESKTOP-G961P6V\\Zhh" <839860190@qq.com>
Date: Mon, 3 Jun 2024 18:58:43 +0800
Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E7=BA=A6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../AppointPatientRegisterDto.cs | 94 ++++++++-
.../AppointPatientRegisterIdInputDto.cs | 11 ++
.../IdNoOrMobilePhoneInputDto.cs | 13 ++
.../MobilePhoneInputDto.cs | 11 ++
.../AppointRegisterAsbitemDto.cs | 45 +++++
.../DiseaseScreeningTypeAsbitemDto.cs | 2 +-
.../AppointPatientRegisterAppService.cs | 181 +++++++++++++++++-
.../AppointPatientRegisterAppServiceTest.cs | 42 ++++
8 files changed, 392 insertions(+), 7 deletions(-)
create mode 100644 src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/AppointPatientRegisterIdInputDto.cs
create mode 100644 src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/IdNoOrMobilePhoneInputDto.cs
create mode 100644 src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/MobilePhoneInputDto.cs
create mode 100644 src/Shentun.WebPeis.Application.Contracts/AppointRegisterAsbitems/AppointRegisterAsbitemDto.cs
diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/AppointPatientRegisterDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/AppointPatientRegisterDto.cs
index 88b97cc..7dd4aab 100644
--- a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/AppointPatientRegisterDto.cs
+++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/AppointPatientRegisterDto.cs
@@ -1,37 +1,121 @@
-using System;
+using Shentun.WebPeis.AppointRegisterAsbitems;
+using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.WebPeis.AppointPatientRegisters
{
+ ///
+ /// 预约信息
+ ///
public class AppointPatientRegisterDto
{
+ ///
+ /// 预约登记ID
+ ///
public Guid AppointPatientRegisterId { get; set; }
+ ///
+ /// 人员ID
+ ///
public Guid PersonId { get; set; }
+ ///
+ /// 姓名
+ ///
+
+ public string PersonName { get; set; }
+ ///
+ /// 身份证号
+ ///
+ public string? IdNo { get; set; }
+ ///
+ /// 性别ID
+ ///
+ public char SexId { get; set; }
+ ///
+ /// 性别名称
+ ///
+ public string SexName { get; set; }
+ ///
+ /// 婚姻状况ID
+ ///
+ public char MaritalStatusId { get; set; }
+ ///
+ /// 婚姻状况名称
+ ///
+ public string MaritalStatusName { get; set; }
+ ///
+ /// 单位ID
+ ///
public Guid CustomerOrgId { get; set; }
+ ///
+ /// 单位名称
+ ///
+ public string CustomerOrgName { get; set; }
+ public string ChildCustomerOrgName { get; set; }
+ ///
+ /// 单位分组ID
+ ///
public Guid? CustomerOrgGroupId { get; set; }
+ ///
+ /// 单位分组名称
+ ///
+ public string CustomerOrgGroupName { get; set; }
+ ///
+ /// 套餐ID
+ ///
public Guid? MedicalPackageId { get; set; }
+ ///
+ /// 套餐名称
+ ///
+ public string MedicalPackageName { get; set; }
+ ///
+ /// 完成标志
+ ///
public char CompleteFlag { get; set; }
+ ///
+ /// 预约日期
+ ///
- public DateTime MedicalStartDate { get; set; }
+ public DateTime AppointDate { get; set; }
+ ///
+ /// 备注
+ ///
public string? Remark { get; set; }
+ ///
+ /// 体检中心ID
+ ///
public Guid MedicalCenterId { get; set; }
+ ///
+ /// 单位登记ID
+ ///
public Guid CustomerOrgRegisterId { get; set; }
-
- public string? ConcurrencyStamp { get; set; }
+ ///
+ /// 备孕标志
+ ///
public char PregnantFlag { get; set; }
-
+ public string PregnantFlagName { get; set; }
+ ///
+ /// 身高
+ ///
public decimal? Height { get; set; }
+ ///
+ /// 体重
+ ///
public decimal? Weight { get; set; }
+ ///
+ /// 预约组合项目
+ ///
+
+ public List AppointRegisterAsbitems { get; set; } = new List();
}
}
diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/AppointPatientRegisterIdInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/AppointPatientRegisterIdInputDto.cs
new file mode 100644
index 0000000..62f8aa0
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/AppointPatientRegisterIdInputDto.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.AppointPatientRegisters
+{
+ public class AppointPatientRegisterIdInputDto
+ {
+ public Guid AppointPatientRegisterId { get; set; }
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/IdNoOrMobilePhoneInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/IdNoOrMobilePhoneInputDto.cs
new file mode 100644
index 0000000..13d3c8c
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/IdNoOrMobilePhoneInputDto.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.AppointPatientRegisters
+{
+ public class IdNoOrMobilePhoneInputDto
+ {
+ public string IdNo { get; set; }
+ public string MobilePhone { get; set; }
+
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/MobilePhoneInputDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/MobilePhoneInputDto.cs
new file mode 100644
index 0000000..e2e17e1
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/MobilePhoneInputDto.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.AppointPatientRegisters
+{
+ public class MobilePhoneInputDto
+ {
+ public string MobilePhone { get; set; }
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/AppointRegisterAsbitems/AppointRegisterAsbitemDto.cs b/src/Shentun.WebPeis.Application.Contracts/AppointRegisterAsbitems/AppointRegisterAsbitemDto.cs
new file mode 100644
index 0000000..909b731
--- /dev/null
+++ b/src/Shentun.WebPeis.Application.Contracts/AppointRegisterAsbitems/AppointRegisterAsbitemDto.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace Shentun.WebPeis.AppointRegisterAsbitems
+{
+ public class AppointRegisterAsbitemDto
+ {
+ ///
+ /// 主键
+ ///
+ public Guid AppointRegisterAsbitemId { get; set; }
+ ///
+ /// 组合项目ID
+ ///
+ public Guid AsbitemId { get; set; }
+ public string AsbitemName { get; set; }
+ ///
+ /// 预约主档ID
+ ///
+ public Guid AppointPatientRegisterId { get; set; }
+ ///
+ /// 标准价格
+ ///
+ public decimal StandardPrice { get; set; }
+ ///
+ /// 收费价格
+ ///
+ public decimal ChargePrice { get; set; }
+ ///
+ /// 支付类别标准
+ ///
+ public char PayTypeFlag { get; set; }
+ ///
+ /// 是否收费
+ ///
+ public char IsCharge { get; set; }
+ ///
+ /// 数量
+ ///
+ public short Amount { get; set; }
+
+ public char IsInMedicalPackage { get; set; } = 'N';
+ }
+}
diff --git a/src/Shentun.WebPeis.Application.Contracts/Asbitems/DiseaseScreeningTypeAsbitemDto.cs b/src/Shentun.WebPeis.Application.Contracts/Asbitems/DiseaseScreeningTypeAsbitemDto.cs
index 314ae04..0308acc 100644
--- a/src/Shentun.WebPeis.Application.Contracts/Asbitems/DiseaseScreeningTypeAsbitemDto.cs
+++ b/src/Shentun.WebPeis.Application.Contracts/Asbitems/DiseaseScreeningTypeAsbitemDto.cs
@@ -9,7 +9,7 @@ namespace Shentun.WebPeis.Asbitems
public string DiseaseScreeningTypeId { get; set; }
public string DiseaseScreeningTypeName { get; set; }
public int DisplayOrder { get; set; }
- public List Asbitems = new List();
+ public List Asbitems { get; set; } = new List();
}
public class DiseaseScreeningTypeAsbitem
diff --git a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
index 6ac56ce..729eb8f 100644
--- a/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
+++ b/src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
@@ -1,14 +1,19 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using Shentun.WebPeis.AppointRegisterAsbitems;
+using Shentun.WebPeis.CustomerOrgs;
using Shentun.WebPeis.Models;
using System;
+using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
+using Volo.Abp;
using Volo.Abp.Application.Services;
using Volo.Abp.Domain.Repositories;
+using Volo.Abp.Identity;
+using static Volo.Abp.Identity.Settings.IdentitySettingNames;
namespace Shentun.WebPeis.AppointPatientRegisters
{
@@ -21,14 +26,32 @@ namespace Shentun.WebPeis.AppointPatientRegisters
{
private readonly IRepository _repository;
private readonly IRepository _appointRegisterAsbitemRepository;
+ private readonly IRepository _personRepository;
+ private readonly IRepository _customerOrgRepository;
+ private readonly IRepository _identityUserRepository;
+ private readonly IRepository _asbitemRepository;
private readonly IRepository _itemTypeRepository;
+ private readonly IRepository _medicalPackageRepository;
+ private readonly IRepository _medicalPackageDetailRepository;
+ private readonly IRepository _customerOrgGroupRepository;
+ private readonly IRepository _customerOrgGroupDetailRepository;
private readonly CacheService _cacheService;
private readonly AppointPatientRegisterManager _appointPatientRegisterManager;
+ private readonly CustomerOrgManager _customerOrgManager;
public AppointPatientRegisterAppService(IRepository repository,
CacheService cacheService,
IRepository itemTypeRepository,
AppointPatientRegisterManager appointPatientRegisterManager,
- IRepository appointRegisterAsbitemRepository
+ IRepository appointRegisterAsbitemRepository,
+ IRepository personRepository,
+ IRepository identityUserRepository,
+ CustomerOrgManager customerOrgManager,
+ IRepository medicalPackageRepository,
+ IRepository customerOrgGroupRepository,
+ IRepository asbitemRepository,
+ IRepository customerOrgRepository,
+ IRepository medicalPackageDetailRepository,
+ IRepository customerOrgGroupDetailRepository
)
{
_repository = repository;
@@ -36,6 +59,15 @@ namespace Shentun.WebPeis.AppointPatientRegisters
_itemTypeRepository = itemTypeRepository;
_appointPatientRegisterManager = appointPatientRegisterManager;
_appointRegisterAsbitemRepository = appointRegisterAsbitemRepository;
+ _personRepository = personRepository;
+ _identityUserRepository = identityUserRepository;
+ _customerOrgManager = customerOrgManager;
+ _medicalPackageRepository = medicalPackageRepository;
+ _customerOrgGroupRepository = customerOrgGroupRepository;
+ _asbitemRepository = asbitemRepository;
+ _customerOrgRepository = customerOrgRepository;
+ _medicalPackageDetailRepository = medicalPackageDetailRepository;
+ _customerOrgGroupDetailRepository = customerOrgGroupDetailRepository;
}
@@ -50,5 +82,152 @@ namespace Shentun.WebPeis.AppointPatientRegisters
var result = ObjectMapper.Map(entity);
return result;
}
+
+ [HttpPost("api/app/AppointPatientRegister/GetByIdNoOrMobilePhone")]
+ public async Task> GetByIdNoOrMobilePhoneAsync(IdNoOrMobilePhoneInputDto input)
+ {
+ if (input == null) throw new UserFriendlyException("参数不能为空");
+
+ if (string.IsNullOrWhiteSpace(input.MobilePhone) && string.IsNullOrWhiteSpace(input.IdNo))
+ {
+ throw new UserFriendlyException("手机号和身份证必须至少填一个");
+ }
+ var query = (from user in await _identityUserRepository.GetQueryableAsync()
+ join person in await _personRepository.GetQueryableAsync()
+ on user.Id equals person.PersonId
+ join appointPatientRegister in await _repository.GetQueryableAsync()
+ on person.PersonId equals appointPatientRegister.PersonId
+ join medicalPackage in await _medicalPackageRepository.GetQueryableAsync()
+ on appointPatientRegister.MedicalPackageId equals medicalPackage.MedicalPackageId into canEmptyMedicalPackage
+ from haveMedicalPackage in canEmptyMedicalPackage.DefaultIfEmpty()
+ join customerOrgGroup in await _customerOrgGroupRepository.GetQueryableAsync()
+ on appointPatientRegister.CustomerOrgGroupId equals customerOrgGroup.CustomerOrgGroupId into canEmptyCustomerOrgGroup
+ from haveCustomerOrgGroup in canEmptyCustomerOrgGroup.DefaultIfEmpty()
+ join appointRegisterAsbitem in await _appointRegisterAsbitemRepository.GetQueryableAsync()
+ on appointPatientRegister.AppointPatientRegisterId equals appointRegisterAsbitem.AppointPatientRegisterId
+ join asbitem in await _asbitemRepository.GetQueryableAsync()
+ on appointRegisterAsbitem.AsbitemId equals asbitem.AsbitemId
+ join customerOrg in await _customerOrgRepository.GetQueryableAsync()
+ on appointPatientRegister.CustomerOrgId equals customerOrg.CustomerOrgId
+ orderby appointPatientRegister.AppointDate
+ select new
+ {
+ user,
+ person,
+ appointPatientRegister,
+ appointRegisterAsbitem,
+ asbitem,
+ haveMedicalPackage,
+ haveCustomerOrgGroup,
+ customerOrg
+ }
+ );
+
+
+ if (!string.IsNullOrWhiteSpace(input.IdNo))
+ {
+ if (input.IdNo.Length != 18)
+ {
+ throw new UserFriendlyException("身份证长度必须是18位");
+ }
+ query = query.Where(o => o.person.IdNo == input.IdNo);
+
+ }
+ else
+ {
+ if (input.MobilePhone.Length != 11)
+ {
+ throw new UserFriendlyException("手机号长度必须是11位");
+ }
+ query = query.Where(o => o.user.PhoneNumber == input.MobilePhone);
+ }
+
+ var appointPatientRegisterDtos = query.ToList();
+
+ var list = appointPatientRegisterDtos.GroupBy(o => o.appointPatientRegister)
+ .Select(o => new AppointPatientRegisterDto()
+ {
+ AppointPatientRegisterId = o.FirstOrDefault().appointPatientRegister.AppointPatientRegisterId,
+ PersonId = o.FirstOrDefault().appointPatientRegister.PersonId,
+ PersonName = o.FirstOrDefault().user.Name,
+ IdNo = o.FirstOrDefault().person.IdNo,
+ SexId = o.FirstOrDefault().person.SexId,
+ MaritalStatusId = o.FirstOrDefault().person.MaritalStatusId,
+ CustomerOrgId = o.FirstOrDefault().appointPatientRegister.CustomerOrgId,
+ ChildCustomerOrgName = o.FirstOrDefault().customerOrg.PathCode.Length == 5 ? "" : o.FirstOrDefault().customerOrg.CustomerOrgName,
+ CustomerOrgGroupId = o.FirstOrDefault().appointPatientRegister.CustomerOrgGroupId,
+ CustomerOrgGroupName = o.FirstOrDefault().haveCustomerOrgGroup == null ? "" : o.FirstOrDefault().haveCustomerOrgGroup.DisplayName,
+ CustomerOrgRegisterId = o.FirstOrDefault().appointPatientRegister.CustomerOrgRegisterId,
+ MedicalPackageId = o.FirstOrDefault().appointPatientRegister.MedicalPackageId,
+ MedicalPackageName = o.FirstOrDefault().haveMedicalPackage == null ? "" : o.FirstOrDefault().haveMedicalPackage.MedicalPackageName,
+ MedicalCenterId = o.FirstOrDefault().appointPatientRegister.MedicalCenterId,
+ CompleteFlag = o.FirstOrDefault().appointPatientRegister.CompleteFlag,
+ AppointDate = o.FirstOrDefault().appointPatientRegister.AppointDate,
+ Remark = o.FirstOrDefault().appointPatientRegister.Remark,
+ PregnantFlag = o.FirstOrDefault().appointPatientRegister.PregnantFlag,
+ Height = o.FirstOrDefault().appointPatientRegister.Height,
+ Weight = o.FirstOrDefault().appointPatientRegister.Weight,
+ SexName = _cacheService.GetSexNameAsync(o.FirstOrDefault().person.SexId).Result,
+ MaritalStatusName = _cacheService.GetMaritalStatusNameAsync(o.FirstOrDefault().person.MaritalStatusId).Result,
+ CustomerOrgName = _customerOrgManager.GetTopCustomerOrgAsync(o.FirstOrDefault().appointPatientRegister.CustomerOrgId).Result.CustomerOrgName
+
+ }).ToList();
+
+
+ return list;
+
+
+
+ }
+
+ [HttpPost("api/app/AppointPatientRegister/GetAppointRegisterAsbitemListById")]
+ public async Task> GetAppointRegisterAsbitemListByIdAsync(AppointPatientRegisterIdInputDto input)
+ {
+ var appointPatientRegister = await _repository.GetAsync(o => o.AppointPatientRegisterId == input.AppointPatientRegisterId);
+ var appointRegisterAsbitemDtos = (
+
+ from appointRegisterAsbitem in await _appointRegisterAsbitemRepository.GetQueryableAsync()
+ join asbitem in await _asbitemRepository.GetQueryableAsync()
+ on appointRegisterAsbitem.AsbitemId equals asbitem.AsbitemId
+ orderby appointPatientRegister.AppointDate
+ where appointRegisterAsbitem.AppointPatientRegisterId == input.AppointPatientRegisterId
+ select new AppointRegisterAsbitemDto()
+ {
+ AppointPatientRegisterId = input.AppointPatientRegisterId,
+ AsbitemId = appointRegisterAsbitem.AsbitemId,
+ AsbitemName = asbitem.AsbitemName,
+ StandardPrice = appointRegisterAsbitem.StandardPrice,
+ ChargePrice = appointRegisterAsbitem.ChargePrice,
+ Amount = appointRegisterAsbitem.Amount,
+ IsCharge = appointRegisterAsbitem.IsCharge
+ }
+
+ ).ToList();
+
+ List asbitems = new List();
+ if (appointPatientRegister.MedicalPackageId != null)
+ {
+ asbitems = (await _medicalPackageDetailRepository.GetQueryableAsync())
+ .Where(o => o.MedicalPackageId == appointPatientRegister.MedicalPackageId)
+ .Select(x => x.AsbitemId).ToList();
+ ;
+ }
+ else if (appointPatientRegister.CustomerOrgGroupId != null)
+ {
+ asbitems = (await _customerOrgGroupDetailRepository.GetQueryableAsync())
+ .Where(o => o.CustomerOrgGroupId == appointPatientRegister.CustomerOrgGroupId)
+ .Select(x => x.AsbitemId).ToList();
+ }
+
+ appointRegisterAsbitemDtos.ForEach(o =>
+ {
+ if (asbitems.Where(x => x == o.AsbitemId).ToList().Any())
+ {
+ o.IsInMedicalPackage = 'Y';
+ }
+ });
+
+ return appointRegisterAsbitemDtos;
+ }
}
}
diff --git a/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs b/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs
index f17997f..e161bcf 100644
--- a/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs
+++ b/test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs
@@ -70,5 +70,47 @@ namespace Shentun.WebPeis
await unitOfWork.CompleteAsync();
}
}
+
+ [Fact]
+ public async Task GetByIdNoOrMobilePhoneAsync()
+ {
+ using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
+ {
+
+ var entity = new IdNoOrMobilePhoneInputDto()
+ {
+ MobilePhone = "18911254911"
+ };
+ var list = await _appService.GetByIdNoOrMobilePhoneAsync(entity);
+ foreach (var item in list)
+ {
+ _output.WriteLine(item.PersonName);
+ foreach(var asbitem in item.AppointRegisterAsbitems)
+ {
+ _output.WriteLine(asbitem.AsbitemName);
+ }
+ }
+ await unitOfWork.CompleteAsync();
+ }
+ }
+
+ [Fact]
+ public async Task GetAppointRegisterAsbitemListById()
+ {
+ using (var unitOfWork = _unitOfWorkManager.Begin(isTransactional: true))
+ {
+
+ var entity = new AppointPatientRegisterIdInputDto()
+ {
+ AppointPatientRegisterId = new Guid("3a12ec60-278d-1814-753b-87ff8782aa26")
+ };
+ var list = await _appService.GetAppointRegisterAsbitemListByIdAsync(entity);
+ foreach (var item in list)
+ {
+ _output.WriteLine(item.AsbitemName);
+ }
+ await unitOfWork.CompleteAsync();
+ }
+ }
}
}