12 changed files with 16823 additions and 27 deletions
-
19src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/GetAsbitemIsMutualExclusionDto.cs
-
11src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/GetAsbitemIsMutualExclusionInputDto.cs
-
38src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/GetAsbitemMutualExclusionByAsbitemIdDto.cs
-
19src/Shentun.Peis.Application.Contracts/AsbitemMutualExclusions/UpdateAsbitemMutualExclusionInputDto.cs
-
155src/Shentun.Peis.Application/AsbitemMutualExclusions/AsbitemMutualExclusionAppService.cs
-
51src/Shentun.Peis.Application/ChargeReports/ChargeReportAppService.cs
-
38src/Shentun.Peis.Domain/AsbitemMutualExclusions/AsbitemMutualExclusion.cs
-
35src/Shentun.Peis.EntityFrameworkCore/DbMapping/AsbitemMutualExclusions/AsbitemMutualExclusionDbMapping.cs
-
4src/Shentun.Peis.EntityFrameworkCore/EntityFrameworkCore/PeisDbContext.cs
-
16419src/Shentun.Peis.EntityFrameworkCore/Migrations/20251121025756_create_table_asbitem_mutual_exclusion.Designer.cs
-
33src/Shentun.Peis.EntityFrameworkCore/Migrations/20251121025756_create_table_asbitem_mutual_exclusion.cs
-
28src/Shentun.Peis.EntityFrameworkCore/Migrations/PeisDbContextModelSnapshot.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; } |
||||
|
} |
||||
|
} |
||||
@ -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>(); |
||||
|
} |
||||
|
} |
||||
@ -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; } |
||||
|
} |
||||
|
} |
||||
@ -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>(); |
||||
|
} |
||||
|
} |
||||
@ -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; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -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 }; |
||||
|
} |
||||
|
} |
||||
|
} |
||||
@ -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(); |
||||
|
|
||||
|
|
||||
|
} |
||||
|
} |
||||
|
} |
||||
16419
src/Shentun.Peis.EntityFrameworkCore/Migrations/20251121025756_create_table_asbitem_mutual_exclusion.Designer.cs
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -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"); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue