173 lines
9.2 KiB
C#
173 lines
9.2 KiB
C#
using DongfangHydro.Dashboard.Api.Domain;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace DongfangHydro.Dashboard.Api.Data;
|
|
|
|
public sealed class DashboardDbContext(DbContextOptions<DashboardDbContext> options)
|
|
: DbContext(options)
|
|
{
|
|
public DbSet<ProductionOrder> ProductionOrders => Set<ProductionOrder>();
|
|
public DbSet<ProductionNode> ProductionNodes => Set<ProductionNode>();
|
|
public DbSet<ProductionTrendPoint> ProductionTrendPoints => Set<ProductionTrendPoint>();
|
|
public DbSet<RiskEvent> RiskEvents => Set<RiskEvent>();
|
|
public DbSet<ProductionLine> ProductionLines => Set<ProductionLine>();
|
|
public DbSet<Partner> Partners => Set<Partner>();
|
|
public DbSet<MaterialQuota> MaterialQuotas => Set<MaterialQuota>();
|
|
|
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
|
{
|
|
modelBuilder.Entity<ProductionOrder>(entity =>
|
|
{
|
|
entity.ToTable("ProductionOrders");
|
|
entity.HasKey(order => order.Id);
|
|
entity.HasIndex(order => order.Code);
|
|
entity.HasIndex(order => new { order.Status, order.RiskLevel, order.PlannedEnd });
|
|
entity.Property(order => order.Code).HasMaxLength(40);
|
|
entity.Property(order => order.ProductName).HasMaxLength(200);
|
|
entity.Property(order => order.DataSource).HasMaxLength(32);
|
|
entity.Property(order => order.SourceDocumentCode).HasMaxLength(80);
|
|
entity.Property(order => order.ProjectName).HasMaxLength(200);
|
|
entity.Property(order => order.DrawingProductName).HasMaxLength(240);
|
|
entity.Property(order => order.SourceFileName).HasMaxLength(260);
|
|
entity.Property(order => order.SourceFileHash).HasMaxLength(64);
|
|
entity.HasIndex(order => order.SourceDocumentCode)
|
|
.IsUnique()
|
|
.HasFilter("[SourceDocumentCode] <> ''");
|
|
entity.Property(order => order.Status).HasMaxLength(32);
|
|
entity.Property(order => order.RiskLevel).HasMaxLength(32);
|
|
entity.Property(order => order.LineName).HasMaxLength(80);
|
|
entity.Property(order => order.Owner).HasMaxLength(80);
|
|
entity.Property(order => order.ThumbnailKey).HasMaxLength(40);
|
|
entity.Property(order => order.RowVersion).IsRowVersion();
|
|
entity.HasOne<ProductionLine>()
|
|
.WithMany()
|
|
.HasForeignKey(order => order.LineId)
|
|
.OnDelete(DeleteBehavior.SetNull);
|
|
});
|
|
|
|
modelBuilder.Entity<ProductionNode>(entity =>
|
|
{
|
|
entity.ToTable("ProductionNodes");
|
|
entity.HasKey(node => node.Id);
|
|
entity.HasIndex(node => new { node.OrderId, node.ParentNodeId, node.SortOrder });
|
|
entity.HasIndex(node => new { node.OrderId, node.NodeType, node.RiskLevel, node.Status });
|
|
entity.Property(node => node.Code).HasMaxLength(60);
|
|
entity.Property(node => node.OperationCode).HasMaxLength(60);
|
|
entity.Property(node => node.MaterialCode).HasMaxLength(80);
|
|
entity.Property(node => node.Name).HasMaxLength(240);
|
|
entity.Property(node => node.SourceSequence).HasMaxLength(40);
|
|
entity.Property(node => node.Specification).HasMaxLength(240);
|
|
entity.Property(node => node.Material).HasMaxLength(120);
|
|
entity.Property(node => node.UnitWeight).HasPrecision(18, 4);
|
|
entity.Property(node => node.TotalWeight).HasPrecision(18, 4);
|
|
entity.Property(node => node.UnitWeightText).HasMaxLength(80);
|
|
entity.Property(node => node.TotalWeightText).HasMaxLength(80);
|
|
entity.Property(node => node.BomQuantity).HasPrecision(18, 4);
|
|
entity.Property(node => node.BomQuantityText).HasMaxLength(80);
|
|
entity.Property(node => node.Remark).HasMaxLength(500);
|
|
entity.Property(node => node.SourceSheet).HasMaxLength(40);
|
|
entity.Property(node => node.NodeType).HasMaxLength(32);
|
|
entity.Property(node => node.SupplyType).HasMaxLength(32);
|
|
entity.Property(node => node.Status).HasMaxLength(32);
|
|
entity.Property(node => node.RiskLevel).HasMaxLength(32);
|
|
entity.Property(node => node.DelayReason).HasMaxLength(500);
|
|
entity.Property(node => node.Owner).HasMaxLength(100);
|
|
entity.Property(node => node.Vendor).HasMaxLength(120);
|
|
entity.Property(node => node.StationName).HasMaxLength(120);
|
|
entity.Property(node => node.VisualKey).HasMaxLength(40);
|
|
entity.Property(node => node.RowVersion).IsRowVersion();
|
|
entity.HasAlternateKey(node => new { node.OrderId, node.Id });
|
|
entity.HasOne<ProductionOrder>()
|
|
.WithMany()
|
|
.HasForeignKey(node => node.OrderId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
entity.HasOne<ProductionNode>()
|
|
.WithMany()
|
|
.HasForeignKey(node => new { node.OrderId, node.ParentNodeId })
|
|
.HasPrincipalKey(node => new { node.OrderId, node.Id })
|
|
.OnDelete(DeleteBehavior.Restrict);
|
|
});
|
|
|
|
modelBuilder.Entity<ProductionTrendPoint>(entity =>
|
|
{
|
|
entity.ToTable("ProductionTrendPoints");
|
|
entity.HasKey(point => point.Id);
|
|
entity.HasIndex(point => new { point.OrderId, point.SampleTime }).IsDescending(false, true);
|
|
entity.HasOne<ProductionOrder>()
|
|
.WithMany()
|
|
.HasForeignKey(point => point.OrderId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
});
|
|
|
|
modelBuilder.Entity<RiskEvent>(entity =>
|
|
{
|
|
entity.ToTable("RiskEvents");
|
|
entity.HasKey(riskEvent => riskEvent.Id);
|
|
entity.HasIndex(riskEvent => new { riskEvent.OrderId, riskEvent.OccurredAt }).IsDescending(false, true);
|
|
entity.Property(riskEvent => riskEvent.OrderCode).HasMaxLength(40);
|
|
entity.Property(riskEvent => riskEvent.NodeName).HasMaxLength(240);
|
|
entity.Property(riskEvent => riskEvent.RiskLevel).HasMaxLength(32);
|
|
entity.Property(riskEvent => riskEvent.Message).HasMaxLength(500);
|
|
entity.Property(riskEvent => riskEvent.HandlingStatus).HasMaxLength(32);
|
|
entity.HasOne<ProductionOrder>()
|
|
.WithMany()
|
|
.HasForeignKey(riskEvent => riskEvent.OrderId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
entity.HasOne<ProductionNode>()
|
|
.WithMany()
|
|
.HasForeignKey(riskEvent => new { riskEvent.OrderId, riskEvent.NodeId })
|
|
.HasPrincipalKey(node => new { node.OrderId, node.Id })
|
|
.OnDelete(DeleteBehavior.NoAction);
|
|
});
|
|
|
|
modelBuilder.Entity<MaterialQuota>(entity =>
|
|
{
|
|
entity.ToTable("MaterialQuotas");
|
|
entity.HasKey(item => item.Id);
|
|
entity.HasIndex(item => new { item.OrderId, item.SourceSheet, item.SourceRow }).IsUnique();
|
|
entity.HasIndex(item => new { item.OrderId, item.Category, item.MaterialCode });
|
|
entity.Property(item => item.Category).HasMaxLength(80);
|
|
entity.Property(item => item.SourceSequence).HasMaxLength(40);
|
|
entity.Property(item => item.MaterialCode).HasMaxLength(80);
|
|
entity.Property(item => item.MaterialName).HasMaxLength(240);
|
|
entity.Property(item => item.Specification).HasMaxLength(240);
|
|
entity.Property(item => item.Unit).HasMaxLength(24);
|
|
entity.Property(item => item.Quantity).HasPrecision(18, 4);
|
|
entity.Property(item => item.NetWeight).HasPrecision(18, 4);
|
|
entity.Property(item => item.ConsumptionQuota).HasPrecision(18, 4);
|
|
entity.Property(item => item.QuantityText).HasMaxLength(80);
|
|
entity.Property(item => item.NetWeightText).HasMaxLength(80);
|
|
entity.Property(item => item.ConsumptionQuotaText).HasMaxLength(80);
|
|
entity.Property(item => item.Brand).HasMaxLength(120);
|
|
entity.Property(item => item.Remark).HasMaxLength(500);
|
|
entity.Property(item => item.SourceSheet).HasMaxLength(40);
|
|
entity.HasOne<ProductionOrder>()
|
|
.WithMany()
|
|
.HasForeignKey(item => item.OrderId)
|
|
.OnDelete(DeleteBehavior.Cascade);
|
|
});
|
|
|
|
modelBuilder.Entity<ProductionLine>(entity =>
|
|
{
|
|
entity.ToTable("ProductionLines");
|
|
entity.HasKey(line => line.Id);
|
|
entity.HasIndex(line => line.Code).IsUnique();
|
|
entity.Property(line => line.Code).HasMaxLength(40);
|
|
entity.Property(line => line.Name).HasMaxLength(80);
|
|
entity.Property(line => line.Owner).HasMaxLength(80);
|
|
});
|
|
|
|
modelBuilder.Entity<Partner>(entity =>
|
|
{
|
|
entity.ToTable("Partners");
|
|
entity.HasKey(partner => partner.Id);
|
|
entity.HasIndex(partner => partner.Code).IsUnique();
|
|
entity.Property(partner => partner.Code).HasMaxLength(40);
|
|
entity.Property(partner => partner.Name).HasMaxLength(120);
|
|
entity.Property(partner => partner.PartnerType).HasMaxLength(32);
|
|
entity.Property(partner => partner.ContactName).HasMaxLength(80);
|
|
entity.Property(partner => partner.ContactPhone).HasMaxLength(32);
|
|
});
|
|
}
|
|
}
|