wxd 2 years ago
parent
commit
db8cbd4ccd
  1. 46
      src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/CreateAppointPatientRegisterDto.cs
  2. 22
      src/Shentun.WebPeis.Application.Contracts/AppointRegisterAsbitems/CreateAppointRegisterAsbitemDto.cs
  3. 2
      src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs
  4. 24
      src/Shentun.WebPeis.Domain/AppointPatientRegisters/AppointPatientRegisterManager.cs
  5. 62
      src/Shentun.WebPeis.Domain/Models/AppointPatientRegister.cs
  6. 34
      src/Shentun.WebPeis.Domain/Models/AppointRegisterAsbitem.cs
  7. 4
      src/Shentun.WebPeis.EntityFrameworkCore/Configures/AppointPatientRegisterConfigure.cs
  8. 4
      src/Shentun.WebPeis.EntityFrameworkCore/Configures/AppointRegisterAsbitemConfigure.cs
  9. 10
      test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs

46
src/Shentun.WebPeis.Application.Contracts/AppointPatientRegisters/CreateAppointPatientRegisterDto.cs

@ -5,34 +5,68 @@ using System.Text;
namespace Shentun.WebPeis.AppointPatientRegisters
{
/// <summary>
/// 预约
/// </summary>
public class CreateAppointPatientRegisterDto
{
/// <summary>
/// 人员ID
/// </summary>
public Guid PersonId { get; set; }
/// <summary>
/// 单位ID
/// </summary>
public Guid CustomerOrgId { get; set; }
/// <summary>
/// 单位分组ID
/// </summary>
public Guid? CustomerOrgGroupId { get; set; }
/// <summary>
/// 套餐ID
/// </summary>
public Guid? MedicalPackageId { get; set; }
/// <summary>
/// 预约体检日期
/// </summary>
public char CompleteFlag { get; set; }
public DateTime MedicalStartDate { get; set; }
public DateTime AppointDate { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remark { get; set; }
/// <summary>
/// 体检中心
/// </summary>
public Guid MedicalCenterId { get; set; }
/// <summary>
/// 单位登记ID
/// </summary>
public Guid CustomerOrgRegisterId { get; set; }
public string? ConcurrencyStamp { get; set; }
/// <summary>
/// 备孕标志0-无,1-备孕,2-怀孕
/// </summary>
public char PregnantFlag { get; set; }
/// <summary>
/// 身高
/// </summary>
public decimal? Height { get; set; }
/// <summary>
/// 体重
/// </summary>
public decimal? Weight { get; set; }
/// <summary>
/// 预约组合项目
/// </summary>
public List<CreateAppointRegisterAsbitemDto> Asbitems { get; set; } = new List<CreateAppointRegisterAsbitemDto>();
}
}

22
src/Shentun.WebPeis.Application.Contracts/AppointRegisterAsbitems/CreateAppointRegisterAsbitemDto.cs

@ -4,21 +4,23 @@ using System.Text;
namespace Shentun.WebPeis.AppointRegisterAsbitems
{
/// <summary>
/// 预约组合项目
/// </summary>
public class CreateAppointRegisterAsbitemDto
{
public Guid AppointRegisterAsbitemId { get; set; }
/// <summary>
/// 组合项目ID
/// </summary>
public Guid AsbitemId { get; set; }
public Guid AppointPatientRegisterId { get; set; }
public decimal StandardPrice { get; set; }
/// <summary>
/// 实收价格
/// </summary>
public decimal ChargePrice { get; set; }
public char PayTypeFlag { get; set; }
public char IsCharge { get; set; }
/// <summary>
/// 数量
/// </summary>
public short Amount { get; set; }

2
src/Shentun.WebPeis.Application/AppointPatientRegisters/AppointPatientRegisterAppService.cs

@ -46,9 +46,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
var asbitems = ObjectMapper.Map<List<CreateAppointRegisterAsbitemDto>, List<AppointRegisterAsbitem>>(input.Asbitems);
entity.AppointRegisterAsbitems = asbitems;
entity = await _appointPatientRegisterManager.CreateAsync(entity);
entity.AppointRegisterAsbitems = null;
await _repository.InsertAsync(entity);
await _appointRegisterAsbitemRepository.InsertManyAsync(asbitems);
var result = ObjectMapper.Map<AppointPatientRegister, AppointPatientRegisterDto>(entity);
return result;
}

24
src/Shentun.WebPeis.Domain/AppointPatientRegisters/AppointPatientRegisterManager.cs

@ -26,6 +26,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
private readonly IRepository<Nation> _nationRepository;
private readonly SysParmValueManager _sysParmValueManager;
private readonly IRepository<PrimarykeyBuilder> _primarykeyBuilderRepository;
private readonly IRepository<Asbitem> _asbitemRepository;
public AppointPatientRegisterManager(IRepository<AppointPatientRegister> repository,
IRepository<IdentityUser> identityUserRepository,
IdentityUserManager identityUserManager,
@ -35,7 +36,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters
IRepository<CustomerOrgGroup> customerOrgGroupRepository,
IRepository<MedicalPackage> medicalPackageRepository,
IRepository<CustomerOrg> customerOrgRepository,
IRepository<CustomerOrgRegister> customerOrgRegisterRepository
IRepository<CustomerOrgRegister> customerOrgRegisterRepository,
IRepository<Asbitem> asbitemRepository
)
{
_repository = repository;
@ -48,6 +50,7 @@ namespace Shentun.WebPeis.AppointPatientRegisters
_medicalPackageRepository = medicalPackageRepository;
_customerOrgRepository = customerOrgRepository;
_customerOrgRegisterRepository = customerOrgRegisterRepository;
_asbitemRepository = asbitemRepository;
}
public async Task<AppointPatientRegister> CreateAsync(AppointPatientRegister entity)
@ -65,8 +68,8 @@ namespace Shentun.WebPeis.AppointPatientRegisters
Check.NotNull<Guid>(entity.PersonId, "人员ID");
Check.NotNull<Guid>(entity.MedicalCenterId, "体检中心");
Check.NotDefaultOrNull<Guid>(entity.CustomerOrgId, "单位");
Check.NotNull<DateTime>(entity.MedicalStartDate, "体检日期");
if(entity.MedicalStartDate < DateTime.Now.Date)
Check.NotNull<DateTime>(entity.AppointDate, "体检日期");
if(entity.AppointDate < DateTime.Now.Date)
{
throw new UserFriendlyException("预约日期不能小于当前日期");
}
@ -135,20 +138,22 @@ namespace Shentun.WebPeis.AppointPatientRegisters
{
throw new UserFriendlyException("必须预约组合项目");
}
var asbitems = await _asbitemRepository.GetListAsync();
foreach (var appointRegisterAsbitem in entity.AppointRegisterAsbitems)
{
if(appointRegisterAsbitem.ChargePrice < 0)
var asbitem = asbitems.Where(o => o.AsbitemId == appointRegisterAsbitem.AsbitemId).Single();
appointRegisterAsbitem.StandardPrice = asbitem.Price;
if (appointRegisterAsbitem.ChargePrice < 0)
{
throw new UserFriendlyException("价格不能小于0");
throw new UserFriendlyException($"{asbitem.AsbitemName}价格不能小于0");
}
if (appointRegisterAsbitem.ChargePrice > 10000)
{
throw new UserFriendlyException("价格不能大于10000");
throw new UserFriendlyException($"{asbitem.AsbitemName}价格不能大于10000");
}
if (appointRegisterAsbitem.Amount < 1)
{
throw new UserFriendlyException("数量不能小于1");
throw new UserFriendlyException($"{asbitem.AsbitemName}数量不能小于1");
}
if (customerOrg.CustomerOrgId == GuidFlag.PersonCustomerOrgId)
{
@ -161,9 +166,10 @@ namespace Shentun.WebPeis.AppointPatientRegisters
if (appointRegisterAsbitem.PayTypeFlag != PayTypeFlag.PersonPay &&
appointRegisterAsbitem.PayTypeFlag != PayTypeFlag.OrgPay)
{
throw new UserFriendlyException("支付类别错误");
throw new UserFriendlyException($"{asbitem.AsbitemName}支付类别错误");
}
}
appointRegisterAsbitem.IsCharge = 'N';
}
}

62
src/Shentun.WebPeis.Domain/Models/AppointPatientRegister.cs

@ -5,6 +5,9 @@ using Volo.Abp.Domain.Entities;
namespace Shentun.WebPeis.Models;
/// <summary>
/// 预约登记
/// </summary>
public partial class AppointPatientRegister: AuditedEntity, IHasConcurrencyStamp
{
public AppointPatientRegister()
@ -15,34 +18,67 @@ public partial class AppointPatientRegister: AuditedEntity, IHasConcurrencyStamp
{
AppointPatientRegisterId = id;
}
/// <summary>
/// 主键
/// </summary>
public Guid AppointPatientRegisterId { get; set; }
/// <summary>
/// 人员ID
/// </summary>
public Guid PersonId { get; set; }
/// <summary>
/// 单位ID
/// </summary>
public Guid CustomerOrgId { get; set; }
/// <summary>
/// 单位分组ID
/// </summary>
public Guid? CustomerOrgGroupId { get; set; }
/// <summary>
/// 套餐ID
/// </summary>
public Guid? MedicalPackageId { get; set; }
/// <summary>
/// 完成标志
/// </summary>
public char CompleteFlag { get; set; }
public DateTime MedicalStartDate { get; set; }
/// <summary>
/// 预约日期
/// </summary>
public DateTime AppointDate { get; set; }
/// <summary>
/// 备注
/// </summary>
public string? Remark { get; set; }
/// <summary>
/// 体检中心
/// </summary>
public Guid MedicalCenterId { get; set; }
/// <summary>
/// 单位登记ID
/// </summary>
public Guid CustomerOrgRegisterId { get; set; }
public string? ConcurrencyStamp { get; set; }
/// <summary>
/// 备孕标志
/// </summary>
public char PregnantFlag { get; set; }
/// <summary>
/// 身高
/// </summary>
public decimal? Height { get; set; }
/// <summary>
/// 体重
/// </summary>
public decimal? Weight { get; set; }
/// <summary>
/// 收费
/// </summary>
public virtual ICollection<Charge> Charges { get; set; } = new List<Charge>();
/// <summary>
/// 预约组合项目
/// </summary>
public virtual ICollection<AppointRegisterAsbitem> AppointRegisterAsbitems { get; set; } = new List<AppointRegisterAsbitem>();
public override object?[] GetKeys()
{

34
src/Shentun.WebPeis.Domain/Models/AppointRegisterAsbitem.cs

@ -5,22 +5,42 @@ using Volo.Abp.Domain.Entities;
namespace Shentun.WebPeis.Models;
/// <summary>
/// 预约组合项目
/// </summary>
public partial class AppointRegisterAsbitem : AuditedEntity, IHasConcurrencyStamp
{
/// <summary>
/// 主键
/// </summary>
public Guid AppointRegisterAsbitemId { get; set; }
/// <summary>
/// 组合项目ID
/// </summary>
public Guid AsbitemId { get; set; }
/// <summary>
/// 预约主档ID
/// </summary>
public Guid AppointPatientRegisterId { get; set; }
/// <summary>
/// 标准价格
/// </summary>
public decimal StandardPrice { get; set; }
/// <summary>
/// 收费价格
/// </summary>
public decimal ChargePrice { get; set; }
/// <summary>
/// 支付类别标准
/// </summary>
public char PayTypeFlag { get; set; }
/// <summary>
/// 是否收费
/// </summary>
public char IsCharge { get; set; }
/// <summary>
/// 数量
/// </summary>
public short Amount { get; set; }
public string? ConcurrencyStamp { get; set; }

4
src/Shentun.WebPeis.EntityFrameworkCore/Configures/AppointPatientRegisterConfigure.cs

@ -44,10 +44,10 @@ namespace Shentun.WebPeis.Configures
entity.Property(e => e.LastModifierId).HasColumnName("last_modifier_id");
entity.Property(e => e.MedicalCenterId).HasColumnName("medical_center_id");
entity.Property(e => e.MedicalPackageId).HasColumnName("medical_package_id");
entity.Property(e => e.MedicalStartDate)
entity.Property(e => e.AppointDate)
.HasDefaultValueSql("date(timezone('UTC-8'::text, now()))")
.HasColumnType("timestamp(6) without time zone")
.HasColumnName("medical_start_date");
.HasColumnName("appoint_date");
entity.Property(e => e.PersonId).HasColumnName("person_id");
entity.Property(e => e.Remark)
.HasMaxLength(200)

4
src/Shentun.WebPeis.EntityFrameworkCore/Configures/AppointRegisterAsbitemConfigure.cs

@ -52,10 +52,12 @@ namespace Shentun.WebPeis.Configures
.HasPrecision(10, 2)
.HasColumnName("standard_price");
entity.HasOne(d => d.AppointPatientRegister).WithMany()
entity.HasOne(d => d.AppointPatientRegister).WithMany(p => p.AppointRegisterAsbitems)
.HasForeignKey(d => d.AppointPatientRegisterId)
.OnDelete(DeleteBehavior.ClientSetNull)
.HasConstraintName("fk_appoint_register_asbitem");
}
}
}

10
test/Shentun.WebPeis.Application.Tests/AppointPatientRegisterAppServiceTest.cs

@ -44,7 +44,7 @@ namespace Shentun.WebPeis
CustomerOrgId = GuidFlag.PersonCustomerOrgId,
MedicalCenterId = new Guid("150da355-dfbf-466b-9697-355836a862c4"),
MedicalPackageId = null,
MedicalStartDate = DateTime.Now,
AppointDate = DateTime.Now,
CustomerOrgRegisterId = GuidFlag.PersonCustomerOrgRegisterId,
PregnantFlag = PregnantFlag.None,
Height = 170,
@ -58,6 +58,14 @@ namespace Shentun.WebPeis
ChargePrice = (decimal)30.5
}
);
entity.Asbitems.Add(
new CreateAppointRegisterAsbitemDto()
{
AsbitemId = new Guid("3a126b35-1163-6b80-6b57-7b5a7bc9e935"),
Amount = 2,
ChargePrice = (decimal)50.45
}
);
var newEntity = await _appService.CreateAsync(entity);
await unitOfWork.CompleteAsync();
}

Loading…
Cancel
Save