MapResource.cs 4.1 KB
using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using NetTopologySuite.Geometries;
using Rcs.Domain.Attributes;
using Rcs.Domain.Enums;

namespace Rcs.Domain.Entities;

[Table("map_resources")]
public partial class MapResource : Entity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column("resource_id")]
    public Guid ResourceId { get; set; }

    /// <summary>
    /// 地图ID(外键)
    /// </summary>
    [Column("map_id")]
    public Guid MapId { get; set; }

    /// <summary>
    /// 资源编码
    /// </summary>
    [Required]
    [Column("resource_code")]
    [MaxLength(50)]
    public string ResourceCode { get; set; }

    [Column("resource_name")]
    [MaxLength(100)]
    public string ResourceName { get; set; }

    [Column("type")]
    public MapResourcesTYPE Type { get; set; }
    /// <summary>
    /// 区域内车容量
    /// </summary>

    [Column("capacity")]
    public int? Capacity { get; set; } = 999;

    /// <summary>
    /// 资源位置坐标(多边形区域)
    /// @author zzy
    /// </summary>
    [Column("location_coordinates", TypeName = "geometry(Polygon)")]
    public Polygon? LocationCoordinates { get; set; }

    [Column("created_at", TypeName = "timestamp")]
    public DateTime? CreatedAt { get; set; }

    [Column("active")]
    public bool Active { get; set; }

    /// <summary>
    /// 最大速度
    /// @author zzy
    /// </summary>
    [Column("max_speed")]
    public double MaxSpeed { get; set; } = 2;

    /// <summary>
    /// 能否旋转
    /// @author zzy
    /// </summary>
    [Column("can_rotate")]
    public bool CanRotate { get; set; } = true;
    /// <summary>
    /// 前置动作类型1
    /// </summary>
    [Column("pre_action1_type")]
    public ActionType? PreAction1Type { get; set; }

    /// <summary>
    /// 前置网络动作集合1
    /// </summary>
    [Column("pre_net_actions1", TypeName = "jsonb")]
    public List<Guid>? PreNetActions1 { get; set; }

    /// <summary>
    /// 后置动作类型1
    /// </summary>
    [Column("post_action1_type")]
    public ActionType? PostAction1Type { get; set; }

    /// <summary>
    /// 后置网络动作集合1
    /// </summary>
    [Column("post_net_actions1", TypeName = "jsonb")]
    public List<Guid>? PostNetActions1 { get; set; }

    /// <summary>
    /// 前置动作类型2
    /// </summary>
    [Column("pre_action2_type")]
    public ActionType? PreAction2Type { get; set; }

    /// <summary>
    /// 前置网络动作集合2
    /// </summary>
    [Column("pre_net_actions2", TypeName = "jsonb")]
    public List<Guid>? PreNetActions2 { get; set; }

    /// <summary>
    /// 后置动作类型2
    /// </summary>
    [Column("post_action2_type")]
    public ActionType? PostAction2Type { get; set; }

    /// <summary>
    /// 后置网络动作集合2
    /// </summary>
    [Column("post_net_actions2", TypeName = "jsonb")]
    public List<Guid>? PostNetActions2 { get; set; }

    #region 外键 => 导航属性,ManyToOne/OneToOne

    [ForeignKey(nameof(MapId))]
    public virtual Map Maps { get; set; }

    #endregion
}

public enum MapResourcesTYPE
{
    [EnumDescription("停靠点", "Dock")]
    dock = 1,

    [EnumDescription("充电桩", "Charger")]
    charger,

    [EnumDescription("电梯", "Elevator")]
    elevator,

    [EnumDescription("风淋门", "Airlock")]
    airlock,

    [EnumDescription("传送带", "Conveyor")]
    conveyor,

    [EnumDescription("存储区", "Storage")]
    storage,

    [EnumDescription("标记区域", "MarkedArea")]
    markedArea,

    [EnumDescription("其他", "Other")]
    other,

    /// <summary>
    /// 等待区域 - AGV避让等待区
    /// @author zzy
    /// </summary>
    [EnumDescription("等待区域", "WaitingArea")]
    waitingArea
}

/// <summary>
/// 资源动作类型枚举
/// @author zzy
/// </summary>
public enum ResourceActionType
{
    [EnumDescription("无动作", "None")]
    None = 0,

    [EnumDescription("动作列表", "ActionList")]
    ActionList = 1,

    [EnumDescription("网络请求", "NetworkRequest")]
    NetworkRequest = 2
}