Map.cs 4.76 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
    }
}