Map.cs 4.31 KB
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using Rcs.Domain.Attributes;

namespace Rcs.Domain.Entities;

[Table("maps")]
public partial class Map : Entity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    [Column("map_id")]
    public Guid MapId { get; set; }

    [Required]
    [Column("map_code")]
    [MaxLength(100)]
    public string MapCode { get; set; }

    [Required]
    [Column("map_name")]
    [MaxLength(100)]
    public string MapName { get; set; }

    [Column("map_type")]
    public MapTYPE MapType { get; set; }

    [Required]
    [Column("version")]
    [MaxLength(50)]
    public string Version { get; set; }

    [Column("description")]
    public string? Description { get; set; }

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

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

    /// <summary>
    /// 地图资源URL
    /// </summary>
    [Column("resource_url")]
    [MaxLength(512)]
    public string? ResourceUrl { get; set; }

    /// <summary>
    /// 地图点位URL
    /// </summary>
    [Column("points_url")]
    [MaxLength(512)]
    public string? PointsUrl { get; set; }

    /// <summary>
    /// 是否定时获取资源
    /// </summary>
    [Column("resource_auto_sync")]
    public bool ResourceAutoSync { get; set; }

    /// <summary>
    /// 资源同步间隔(秒)
    /// </summary>
    [Column("resource_sync_interval")]
    public int ResourceSyncInterval { get; set; } = 60;

    /// <summary>
    /// 是否定时获取点位
    /// </summary>
    [Column("points_auto_sync")]
    public bool PointsAutoSync { get; set; }

    /// <summary>
    /// 点位同步间隔(秒)
    /// </summary>
    [Column("points_sync_interval")]
    public int PointsSyncInterval { get; set; } = 60;

    #region 外键 => 导航属性,OneToMany

    public virtual ICollection<MapEdge> MapEdges { get; set; } = new List<MapEdge>();

    public virtual ICollection<MapNode> MapNodes { get; set; } = new List<MapNode>();

    public virtual ICollection<MapResource> MapResources { get; set; } = new List<MapResource>();

    #endregion

    #region 一对一导航属性

    /// <summary>
    /// 地图文件导航属性(一对一)
    /// </summary>
    public virtual MapFile? MapFile { get; set; }

    #endregion

    public static Map Create(string mapCode, string mapName, MapTYPE mapType, string version, string? description, bool active, string? resourceUrl = null, string? pointsUrl = null, bool resourceAutoSync = false, int resourceSyncInterval = 60, bool pointsAutoSync = false, int pointsSyncInterval = 60)
    {
        return new Map
        {
            MapId = Guid.NewGuid(),
            MapCode = mapCode,
            MapName = mapName,
            MapType = mapType,
            Version = version,
            Description = description,
            Active = active,
            ResourceUrl = resourceUrl,
            PointsUrl = pointsUrl,
            ResourceAutoSync = resourceAutoSync,
            ResourceSyncInterval = resourceSyncInterval,
            PointsAutoSync = pointsAutoSync,
            PointsSyncInterval = pointsSyncInterval,
            CreatedAt = DateTime.Now
        };
    }
    public void Update(string mapCode, string mapName, MapTYPE mapType, string version, string? description, bool active, string? resourceUrl = null, string? pointsUrl = null, bool resourceAutoSync = false, int resourceSyncInterval = 60, bool pointsAutoSync = false, int pointsSyncInterval = 60)
    {
        if(!string.IsNullOrWhiteSpace(mapCode))MapCode = mapCode;
        if(!string.IsNullOrWhiteSpace(mapCode))MapName = mapName;
        if(mapCode != null) MapType = mapType;
        if(!string.IsNullOrWhiteSpace(mapCode))Version = version;
        if(description != null) Description = description;
        Active = active;
        ResourceUrl = resourceUrl;
        PointsUrl = pointsUrl;
        ResourceAutoSync = resourceAutoSync;
        ResourceSyncInterval = resourceSyncInterval;
        PointsAutoSync = pointsAutoSync;
        PointsSyncInterval = pointsSyncInterval;
    }
}
    
public enum MapTYPE
{
    [EnumDescription("拓扑地图", "Topology")]
    topo = 1,

    [EnumDescription("雷达地图", "Radar")]
    radar = 2
}