Browse Source

互斥

master
wxd 4 weeks ago
parent
commit
966ecea373
  1. 19
      src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/GetAsbitemIsMutualExclusionDto.cs
  2. 11
      src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/GetAsbitemIsMutualExclusionInputDto.cs
  3. 38
      src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/GetAsbitemMutualExclusionByAsbitemIdDto.cs
  4. 19
      src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/UpdateAsbitemMutualExclusionInputDto.cs
  5. 155
      src/Shentun.Peis.Application/AsbitemMutualExclusions/AsbitemMutualExclusionAppService.cs
  6. 51
      src/Shentun.Peis.Application/ChargeReports/ChargeReportAppService.cs
  7. 38
      src/Shentun.Peis.Domain/AsbitemMutualExclusions/AsbitemMutualExclusion.cs
  8. 35
      src/Shentun.Peis.EntityFrameworkCore/DbMapping/AsbitemMutualExclusions/AsbitemMutualExclusionDbMapping.cs
  9. 4
      src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisDbContext.cs
  10. 16419
      src/Shentun.Peis.EntityFrameworkCore/Migrations/20251121025756_create_table_asbitem_mutual_exclusion.Designer.cs
  11. 33
      src/Shentun.Peis.EntityFrameworkCore/Migrations/20251121025756_create_table_asbitem_mutual_exclusion.cs
  12. 28
      src/Shentun.Peis.EntityFrameworkCore/Migrations/PeisDbContextModelSnapshot.cs

19
src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/GetAsbitemIsMutualExclusionDto.cs

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.AsbitemMutualExclusions
{
public class GetAsbitemIsMutualExclusionDto
{
/// <summary>
/// 是否有互斥项目
/// </summary>
public char IsMutualExclusion { get; set; }
/// <summary>
/// 互斥信息
/// </summary>
public string Message { get; set; }
}
}

11
src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/GetAsbitemIsMutualExclusionInputDto.cs

@ -0,0 +1,11 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.AsbitemMutualExclusions
{
public class GetAsbitemIsMutualExclusionInputDto
{
public List<Guid> AsbitemIds { get; set; } = new List<Guid>();
}
}

38
src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/GetAsbitemMutualExclusionByAsbitemIdDto.cs

@ -0,0 +1,38 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.AsbitemMutualExclusions
{
public class GetAsbitemMutualExclusionByAsbitemIdDto
{
/// <summary>
/// 组合项目id
/// </summary>
public Guid AsbitemId { get; set; }
/// <summary>
/// 组合项目名称
/// </summary>
public string AsbitemName { get; set; }
/// <summary>
/// 互斥的项目集合
/// </summary>
public List<GetAsbitemMutualExclusionByAsbitemIdDtoDetail> Details { get; set; } = new List<GetAsbitemMutualExclusionByAsbitemIdDtoDetail>();
}
public class GetAsbitemMutualExclusionByAsbitemIdDtoDetail
{
/// <summary>
/// 互斥的组合项目id
/// </summary>
public Guid MutualExclusionAsbitemId { get; set; }
/// <summary>
/// 互斥组合项目名称
/// </summary>
public string MutualExclusionAsbitemName { get; set; }
}
}

19
src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/UpdateAsbitemMutualExclusionInputDto.cs

@ -0,0 +1,19 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace Shentun.Peis.AsbitemMutualExclusions
{
public class UpdateAsbitemMutualExclusionInputDto
{
/// <summary>
/// 当前组合项目id
/// </summary>
public Guid AsbitemId { get; set; }
/// <summary>
/// 互斥的组合项目id 集合 传所有,不是增加的id
/// </summary>
public List<Guid> MutualExclusionAsbitemIds { get; set; } = new List<Guid>();
}
}

155
src/Shentun.Peis.Application/AsbitemMutualExclusions/AsbitemMutualExclusionAppService.cs

@ -0,0 +1,155 @@
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using NPOI.DDF;
using Shentun.Peis.Asbitems;
using Shentun.Peis.Models;
using System;
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;
namespace Shentun.Peis.AsbitemMutualExclusions
{
/// <summary>
/// 组合项目对应的互斥项目
/// </summary>
[ApiExplorerSettings(GroupName = "Work")]
[Authorize]
public class AsbitemMutualExclusionAppService : ApplicationService
{
private readonly IRepository<AsbitemMutualExclusion> _asbitemMutualExclusionRepository;
private readonly IRepository<Asbitem, Guid> _asbitemRepository;
public AsbitemMutualExclusionAppService(
IRepository<AsbitemMutualExclusion> asbitemMutualExclusionRepository,
IRepository<Asbitem, Guid> asbitemRepository)
{
_asbitemMutualExclusionRepository = asbitemMutualExclusionRepository;
_asbitemRepository = asbitemRepository;
}
/// <summary>
/// 查询项目是否有互斥关系
/// </summary>
/// <param name="input"></param>
/// <returns></returns>
[HttpPost("api/app/AsbitemMutualExclusion/GetAsbitemIsMutualExclusion")]
public async Task<GetAsbitemIsMutualExclusionDto> GetAsbitemIsMutualExclusionAsync(GetAsbitemIsMutualExclusionInputDto input)
{
var result = new GetAsbitemIsMutualExclusionDto
{
IsMutualExclusion = 'N',
Message = ""
};
if (!input.AsbitemIds.Any())
throw new UserFriendlyException("项目不能为空");
var query = from asbitemMutualExclusion in await _asbitemMutualExclusionRepository.GetQueryableAsync()
join asbitem in await _asbitemRepository.GetQueryableAsync() on asbitemMutualExclusion.AsbitemId equals asbitem.Id
join mutualExclusionAsbitem in await _asbitemRepository.GetQueryableAsync() on asbitemMutualExclusion.MutualExclusionAsbitemId equals mutualExclusionAsbitem.Id
select new
{
asbitemMutualExclusion,
asbitemName = asbitem.DisplayName,
mutualExclusionAsbitemName = mutualExclusionAsbitem.DisplayName
};
List<string> mutualExclusionMessageList = new List<string>();
foreach (var asbitemId in input.AsbitemIds)
{
var mutualExclusionList = query.Where(m => m.asbitemMutualExclusion.AsbitemId == asbitemId).ToList();
if (mutualExclusionList.Any())
{
foreach (var mutualExclusionItem in mutualExclusionList)
{
if (input.AsbitemIds.Contains(mutualExclusionItem.asbitemMutualExclusion.MutualExclusionAsbitemId))
{
mutualExclusionMessageList.Add($"项目:【{mutualExclusionItem.mutualExclusionAsbitemName}】跟【{mutualExclusionItem.asbitemName}】互斥");
}
}
}
}
if (mutualExclusionMessageList.Any())
{
result.IsMutualExclusion = 'Y';
result.Message = string.Join("__", mutualExclusionMessageList);
}
return result;
}
/// <summary>
/// 更新互斥项目
/// </summary>
/// <returns></returns>
[HttpPost("api/app/AsbitemMutualExclusion/UpdateAsbitemMutualExclusion")]
public async Task UpdateAsbitemMutualExclusionAsync(UpdateAsbitemMutualExclusionInputDto input)
{
//删除
await _asbitemMutualExclusionRepository.DeleteAsync(d => d.AsbitemId == input.AsbitemId);
if (input.MutualExclusionAsbitemIds.Any())
{
List<AsbitemMutualExclusion> asbitemMutualExclusionList = new List<AsbitemMutualExclusion>();
foreach (var item in input.MutualExclusionAsbitemIds)
{
asbitemMutualExclusionList.Add(new AsbitemMutualExclusion
{
AsbitemId = input.AsbitemId,
MutualExclusionAsbitemId = item
});
}
await _asbitemMutualExclusionRepository.InsertManyAsync(asbitemMutualExclusionList);
}
}
/// <summary>
/// 查询当前组合项目的互斥项目
/// </summary>
/// <returns></returns>
[HttpPost("api/app/AsbitemMutualExclusion/GetAsbitemMutualExclusionByAsbitemId")]
public async Task<GetAsbitemMutualExclusionByAsbitemIdDto> GetAsbitemMutualExclusionByAsbitemIdAsync(AsbitemIdInputDto input)
{
var result = new GetAsbitemMutualExclusionByAsbitemIdDto();
var query = (from asbitemMutualExclusion in await _asbitemMutualExclusionRepository.GetQueryableAsync()
join asbitem in await _asbitemRepository.GetQueryableAsync() on asbitemMutualExclusion.AsbitemId equals asbitem.Id
join mutualExclusionAsbitem in await _asbitemRepository.GetQueryableAsync() on asbitemMutualExclusion.MutualExclusionAsbitemId equals mutualExclusionAsbitem.Id
where asbitemMutualExclusion.AsbitemId == input.AsbitemId
select new
{
asbitemMutualExclusion,
asbitemName = asbitem.DisplayName,
mutualExclusionAsbitemName = mutualExclusionAsbitem.DisplayName
}).ToList();
if (query.Any())
{
result.AsbitemId = query.FirstOrDefault().asbitemMutualExclusion.AsbitemId;
result.AsbitemName = query.FirstOrDefault().asbitemName;
result.Details = query.Select(s => new GetAsbitemMutualExclusionByAsbitemIdDtoDetail
{
MutualExclusionAsbitemId = s.asbitemMutualExclusion.MutualExclusionAsbitemId,
MutualExclusionAsbitemName = s.mutualExclusionAsbitemName
}).ToList();
}
else
{
return null;
}
return result;
}
}
}

51
src/Shentun.Peis.Application/ChargeReports/ChargeReportAppService.cs

@ -634,25 +634,25 @@ namespace Shentun.Peis.ChargeReports
var query = from a in (await _chargeRepository.GetQueryableAsync()).Include(x => x.ChargePays).ThenInclude(x => x.PayMode)
join b in await _chargeAsbitemRepository.GetQueryableAsync() on a.Id equals b.ChargeId
join c in await _registerAsbitemRepository.GetQueryableAsync() on new { PatientRegisterId = a.PatientRegisterId, AsbitemId = b.AsbitemId }
equals new { PatientRegisterId = c.PatientRegisterId, AsbitemId = c.AsbitemId }
join d in await _patientRegisterRepository.GetQueryableAsync() on a.PatientRegisterId equals d.Id
join e in await _patientRepository.GetQueryableAsync() on d.PatientId equals e.Id into ee
var query = from charge in (await _chargeRepository.GetQueryableAsync()).Include(x => x.ChargePays).ThenInclude(x => x.PayMode)
join chargeAsbitem in await _chargeAsbitemRepository.GetQueryableAsync() on charge.Id equals chargeAsbitem.ChargeId
join registerCheckAsbitem in await _registerAsbitemRepository.GetQueryableAsync() on new { PatientRegisterId = charge.PatientRegisterId, AsbitemId = chargeAsbitem.AsbitemId }
equals new { PatientRegisterId = registerCheckAsbitem.PatientRegisterId, AsbitemId = registerCheckAsbitem.AsbitemId }
join patientRegister in await _patientRegisterRepository.GetQueryableAsync() on charge.PatientRegisterId equals patientRegister.Id
join e in await _patientRepository.GetQueryableAsync() on patientRegister.PatientId equals e.Id into ee
from ae in ee.DefaultIfEmpty()
join f in await _sexRepository.GetQueryableAsync() on d.SexId equals f.Id into ff
join f in await _sexRepository.GetQueryableAsync() on patientRegister.SexId equals f.Id into ff
from af in ff.DefaultIfEmpty()
join g in await _userRepository.GetQueryableAsync() on a.CreatorId equals g.Id into gg
join g in await _userRepository.GetQueryableAsync() on charge.CreatorId equals g.Id into gg
from ag in gg.DefaultIfEmpty()
where d.CustomerOrgId == GuidFlag.PersonCustomerOrgId
where patientRegister.CustomerOrgId == GuidFlag.PersonCustomerOrgId
select new
{
a,
b,
c,
PatientName = d.PatientName,
Age = d.Age,
charge,
chargeAsbitem,
registerCheckAsbitem,
PatientName = patientRegister.PatientName,
Age = patientRegister.Age,
PatientNo = ae != null ? ae.PatientNo : "",
SexName = af != null ? af.DisplayName : "",
BookKeepingName = ag != null ? ag.Surname : ""
@ -663,13 +663,13 @@ namespace Shentun.Peis.ChargeReports
if (input.UserIds.Any())
{
query = query.Where(m => input.UserIds.Contains(m.a.CreatorId.Value));
query = query.Where(m => input.UserIds.Contains(m.charge.CreatorId.Value));
}
if (!string.IsNullOrWhiteSpace(input.StartDate) && !string.IsNullOrWhiteSpace(input.EndDate))
{
query = query.Where(m => m.a.CreationTime >= Convert.ToDateTime(input.StartDate)
&& m.a.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1));
query = query.Where(m => m.charge.CreationTime >= Convert.ToDateTime(input.StartDate)
&& m.charge.CreationTime < Convert.ToDateTime(input.EndDate).AddDays(1));
}
if (!string.IsNullOrWhiteSpace(input.PatientName))
@ -683,20 +683,20 @@ namespace Shentun.Peis.ChargeReports
}
var personalFeeDetailsReportInFeeSummary_Details = query.GroupBy(g => g.b.ChargeId).Select(s => new GetPersonalFeeDetailsReportInFeeSummary_Detail
var personalFeeDetailsReportInFeeSummary_Details = query.GroupBy(g => g.chargeAsbitem.ChargeId).Select(s => new GetPersonalFeeDetailsReportInFeeSummary_Detail
{
ChargeId = s.Key,
Age = s.FirstOrDefault().Age,
BookKeepingName = s.FirstOrDefault().BookKeepingName,
BookkeepingTiem = DataHelper.ConversionDateToString(s.FirstOrDefault().a.CreationTime),
ChargeFlagName = s.FirstOrDefault().a.ChargeFlag == ChargeFlag.Charge ? "收费" : "退费",
BookkeepingTiem = DataHelper.ConversionDateToString(s.FirstOrDefault().charge.CreationTime),
ChargeFlagName = s.FirstOrDefault().charge.ChargeFlag == ChargeFlag.Charge ? "收费" : "退费",
PatientName = s.FirstOrDefault().PatientName,
PatientNo = s.FirstOrDefault().PatientNo,
SexName = s.FirstOrDefault().SexName,
ChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.c.ChargePrice * ss.c.Amount), 2),
TotalReceivedChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.b.ChargePrice * ss.b.Amount), 2),
DiscountMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.c.ChargePrice * ss.c.Amount), 2) - DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.b.ChargePrice * ss.b.Amount), 2),
PayModes = s.FirstOrDefault().a.ChargePays.Select(ss => new GetPersonalFeeDetailsReportInFeeSummary_PayMode
ChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.registerCheckAsbitem.ChargePrice * ss.registerCheckAsbitem.Amount), 2),
TotalReceivedChargeMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.chargeAsbitem.ChargePrice * ss.chargeAsbitem.Amount), 2),
DiscountMoney = DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.registerCheckAsbitem.ChargePrice * ss.registerCheckAsbitem.Amount), 2) - DataHelper.DecimalRetainDecimals(s.Sum(ss => ss.chargeAsbitem.ChargePrice * ss.chargeAsbitem.Amount), 2),
PayModes = s.FirstOrDefault().charge.ChargePays.Select(ss => new GetPersonalFeeDetailsReportInFeeSummary_PayMode
{
PayModeName = ss.PayMode.DisplayName,
ReceivedChargeMoney = ss.ChargeMoney
@ -740,8 +740,7 @@ namespace Shentun.Peis.ChargeReports
TotalReceivedChargeMoney = item.TotalReceivedChargeMoney,
DiscountMoney = item.DiscountMoney,
PayModeName = payMode.PayModeName,
ReceivedChargeMoney = payMode.ReceivedChargeMoney,
ReceivedChargeMoney = payMode.ReceivedChargeMoney
};
personalFeeDetailsReportInFeeSummary_Details_new.Add(temp);

38
src/Shentun.Peis.Domain/AsbitemMutualExclusions/AsbitemMutualExclusion.cs

@ -0,0 +1,38 @@
using Shentun.Peis.Models;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Entities;
namespace Shentun.Peis.Models
{
/// <summary>
/// 组合项目对应的互斥项目
/// </summary>
[Table("asbitem_mutual_exclusion")]
public class AsbitemMutualExclusion : Entity, IHasConcurrencyStamp
{
[Key]
[Column("asbitem_id")]
public Guid AsbitemId { get; set; }
/// <summary>
/// 项目编码
/// </summary>
[Key]
[Column("mutual_exclusion_asbitem_id")]
public Guid MutualExclusionAsbitemId { get; set; }
[Column("concurrency_stamp")]
public string ConcurrencyStamp { get; set; }
public override object[] GetKeys()
{
return new object[] { AsbitemId, MutualExclusionAsbitemId };
}
}
}

35
src/Shentun.Peis.EntityFrameworkCore/DbMapping/AsbitemMutualExclusions/AsbitemMutualExclusionDbMapping.cs

@ -0,0 +1,35 @@
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using Microsoft.EntityFrameworkCore;
using Shentun.Peis.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Shentun.Peis.EntityFrameworkCore;
namespace Shentun.Peis.DbMapping
{
internal class AsbitemMutualExclusionDbMapping : IEntityTypeConfiguration<AsbitemMutualExclusion>
{
public void Configure(EntityTypeBuilder<AsbitemMutualExclusion> entity)
{
entity.HasKey(e => new { e.AsbitemId, e.MutualExclusionAsbitemId })
.HasName("pk_asbitem_mutual_exclusion_asbitem_id_mutual_exclusion_asbitem_id");
entity.HasComment("组合项目对应的互斥项目");
entity.Property(t => t.AsbitemId).HasComment("组合项目id").IsRequired().IsFixedLength(); ;
entity.Property(e => e.MutualExclusionAsbitemId).HasComment("互斥的组合项目id").IsFixedLength().IsRequired();
entity.ConfigureByConvention();
}
}
}

4
src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisDbContext.cs

@ -392,6 +392,7 @@ public class PeisDbContext :
public DbSet<ItemBigtextResultType> ItemBigtextResultTypes { get; set; } = null!;
public DbSet<AsbitemMutualExclusion> AsbitemMutualExclusions { get; set; } = null!;
public PeisDbContext(DbContextOptions<PeisDbContext> options)
@ -648,7 +649,8 @@ public class PeisDbContext :
.ApplyConfiguration(new DoctorSignInDbMapping())
.ApplyConfiguration(new ThirdMedicalCenterDetailDbMapping())
.ApplyConfiguration(new ItemBigtextResultTypeDbMapping())
.ApplyConfiguration(new ThirdUserDbMapping());
.ApplyConfiguration(new ThirdUserDbMapping())
.ApplyConfiguration(new AsbitemMutualExclusionDbMapping());
#endregion

16419
src/Shentun.Peis.EntityFrameworkCore/Migrations/20251121025756_create_table_asbitem_mutual_exclusion.Designer.cs
File diff suppressed because it is too large
View File

33
src/Shentun.Peis.EntityFrameworkCore/Migrations/20251121025756_create_table_asbitem_mutual_exclusion.cs

@ -0,0 +1,33 @@
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace Shentun.Peis.Migrations
{
public partial class create_table_asbitem_mutual_exclusion : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "asbitem_mutual_exclusion",
columns: table => new
{
asbitem_id = table.Column<Guid>(type: "uuid", fixedLength: true, nullable: false, comment: "组合项目id"),
mutual_exclusion_asbitem_id = table.Column<Guid>(type: "uuid", fixedLength: true, nullable: false, comment: "互斥的组合项目id"),
concurrency_stamp = table.Column<string>(type: "character varying(40)", maxLength: 40, nullable: true)
},
constraints: table =>
{
table.PrimaryKey("pk_asbitem_mutual_exclusion_asbitem_id_mutual_exclusion_asbitem_id", x => new { x.asbitem_id, x.mutual_exclusion_asbitem_id });
},
comment: "组合项目对应的互斥项目");
}
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "asbitem_mutual_exclusion");
}
}
}

28
src/Shentun.Peis.EntityFrameworkCore/Migrations/PeisDbContextModelSnapshot.cs

@ -773,6 +773,34 @@ namespace Shentun.Peis.Migrations
b.HasComment("体检中心组和项目指引内容");
});
modelBuilder.Entity("Shentun.Peis.Models.AsbitemMutualExclusion", b =>
{
b.Property<Guid>("AsbitemId")
.HasColumnType("uuid")
.HasColumnName("asbitem_id")
.IsFixedLength()
.HasComment("组合项目id");
b.Property<Guid>("MutualExclusionAsbitemId")
.HasColumnType("uuid")
.HasColumnName("mutual_exclusion_asbitem_id")
.IsFixedLength()
.HasComment("互斥的组合项目id");
b.Property<string>("ConcurrencyStamp")
.IsConcurrencyToken()
.HasMaxLength(40)
.HasColumnType("character varying(40)")
.HasColumnName("concurrency_stamp");
b.HasKey("AsbitemId", "MutualExclusionAsbitemId")
.HasName("pk_asbitem_mutual_exclusion_asbitem_id_mutual_exclusion_asbitem_id");
b.ToTable("asbitem_mutual_exclusion");
b.HasComment("组合项目对应的互斥项目");
});
modelBuilder.Entity("Shentun.Peis.Models.AsbitemPriceItem", b =>
{
b.Property<Guid>("Id")

Loading…
Cancel
Save