EquipmentConfiguration.cs 7.38 KB
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using HaHRCS.Rcs.Model.Entities;

namespace Rcs.Infrastructure.DB.Configuration.Domain
{
    /// <summary>
    /// 设备 EF Core 配置
    /// </summary>
    public class EquipmentConfiguration : IEntityTypeConfiguration<Equipment>
    {
        public void Configure(EntityTypeBuilder<Equipment> builder)
        {
            // 表名
            builder.ToTable("base_equipment");

            // 主键
            builder.HasKey(e => e.Id);

            // ==================== 基础字段 ====================
            builder.Property(e => e.Id)
                .HasColumnName("id")
                .ValueGeneratedOnAdd();  // 自增

            builder.Property(e => e.Code)
                .HasColumnName("Code")
                .HasMaxLength(50)
                .IsRequired();

            builder.Property(e => e.Name)
                .HasColumnName("Name")
                .HasMaxLength(50)
                .IsRequired();

            builder.Property(e => e.EquipmentTypeId)
                .HasColumnName("EquipmentTypeId")
                .IsRequired();

            builder.Property(e => e.IP)
                .HasColumnName("IP")
                .HasMaxLength(20);

            builder.Property(e => e.LEDIP)
                .HasColumnName("LEDIP")
                .HasMaxLength(20);

            builder.Property(e => e.ScanIP)
                .HasColumnName("ScanIP")
                .HasMaxLength(20);

            builder.Property(e => e.DestinationArea)
                .HasColumnName("DestinationArea")
                .HasMaxLength(50);

            builder.Property(e => e.RoadWay)
                .HasColumnName("RoadWay")
                .IsRequired();

            // ==================== PLC 相关 ====================
            builder.Property(e => e.ReadPlcDB)
                .HasColumnName("ReadPlcDB")
                .HasMaxLength(50);

            builder.Property(e => e.WritePlcDB)
                .HasColumnName("WritePlcDB")
                .HasMaxLength(50);

            builder.Property(e => e.AlarmPlcDB)
                .HasColumnName("AlarmPlcDB")
                .HasMaxLength(50);

            builder.Property(e => e.CollectionPlcDB)
                .HasColumnName("CollectionPlcDB")
                .HasMaxLength(50);

            // ==================== 地址配置 ====================
            builder.Property(e => e.SelfAddress)
                .HasColumnName("SelfAddress")
                .HasMaxLength(50);

            builder.Property(e => e.BackAddress)
                .HasColumnName("BackAddress")
                .HasMaxLength(50);

            builder.Property(e => e.GoAddress)
                .HasColumnName("GoAddress")
                .HasMaxLength(50);

            builder.Property(e => e.OutAddress)
                .HasColumnName("OutAddress")
                .HasMaxLength(50);

            // ==================== 索引/货叉/层列配置 ====================
            builder.Property(e => e.StationIndex)
                .HasColumnName("StationIndex");

            builder.Property(e => e.RowIndex1)
                .HasColumnName("RowIndex1")
                .IsRequired();

            builder.Property(e => e.RowIndex2)
                .HasColumnName("RowIndex2");

            builder.Property(e => e.ColumnIndex)
                .HasColumnName("ColumnIndex")
                .IsRequired();

            builder.Property(e => e.LayerIndex)
                .HasColumnName("LayerIndex")
                .IsRequired();

            // ==================== 站台组/连接配置 ====================
            builder.Property(e => e.ConnectName)
                .HasColumnName("ConnectName")
                .HasMaxLength(50);

            builder.Property(e => e.StationGroup)
                .HasColumnName("StationGroup")
                .HasMaxLength(50);

            builder.Property(e => e.StationGroupIndex)
                .HasColumnName("StationGroupIndex")
                .IsRequired();

            builder.Property(e => e.Description)
                .HasColumnName("Description")
                .HasMaxLength(200);

            // ==================== 货叉可用站台 ====================
            builder.Property(e => e.Fork1AvailableStation)
                .HasColumnName("Fork1AvailableStation")
                .HasMaxLength(50);

            builder.Property(e => e.Fork2AvailableStation)
                .HasColumnName("Fork2AvailableStation")
                .HasMaxLength(50);

            // ==================== 仓库/分组/维护规则 ====================
            builder.Property(e => e.WarehouseCode)
                .HasColumnName("WarehouseCode")
                .HasMaxLength(50);

            builder.Property(e => e.DestinationGroup)
                .HasColumnName("DestinationGroup")
                .HasMaxLength(50);

            builder.Property(e => e.EquipmentMaintainRuleId)
                .HasColumnName("EquipmentMaintainRuleId");

            // ==================== 启用状态 ====================
            builder.Property(e => e.Disable)
                .HasColumnName("Disable")
                .IsRequired();

            builder.Property(e => e.Enable)
                .HasColumnName("enable");

            // ==================== 创建/更新时间 ====================
            builder.Property(e => e.CreateTime)
                .HasColumnName("CreateTime");

            builder.Property(e => e.CreateBy)
                .HasColumnName("CreateBy")
                .HasMaxLength(20);

            builder.Property(e => e.UpdateTime)
                .HasColumnName("UpdateTime");

            builder.Property(e => e.UpdateBy)
                .HasColumnName("UpdateBy")
                .HasMaxLength(20);

            // ==================== MES 扩展字段 ====================
            builder.Property(e => e.WorkshopId)
                .HasColumnName("workshopId");

            builder.Property(e => e.FactoryId)
                .HasColumnName("factoryId");

            builder.Property(e => e.LineCode)
                .HasColumnName("lineCode");

            builder.Property(e => e.LineId)
                .HasColumnName("lineId");

            builder.Property(e => e.WorkStationCode)
                .HasColumnName("workStationCode");

            builder.Property(e => e.WorkStationId)
                .HasColumnName("workStationId");

            // ==================== 索引 ====================
            builder.HasIndex(e => e.Code)
                .HasDatabaseName("idx_equipment_code")
                .IsUnique();

            builder.HasIndex(e => e.EquipmentTypeId)
                .HasDatabaseName("idx_equipment_type_id");

            builder.HasIndex(e => e.RoadWay)
                .HasDatabaseName("idx_equipment_road_way");

            builder.HasIndex(e => e.WarehouseCode)
                .HasDatabaseName("idx_equipment_warehouse_code");

            // ==================== 外键关系 ====================
            builder.HasOne(e => e.EquipmentType)
                .WithMany()
                .HasForeignKey(e => e.EquipmentTypeId)
                .OnDelete(DeleteBehavior.Restrict);

            // 一对多:设备 → 设备属性
            builder.HasMany(e => e.EquipmentProps)
                .WithOne()
                .HasForeignKey("EquipmentId")
                .OnDelete(DeleteBehavior.Cascade);
        }
    }
}