ChargePiles.cs 3.5 KB
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeviceLibrary.bean
{
    public class ChargePiles
    {
        List<ChargePile> chargePiles;

        /// <summary>
        /// 充电最大电量
        /// </summary>
        public int BatteryMax { get; set; } = 90;
        /// <summary>
        /// 充电最小电量,小于该值直接去充电
        /// </summary>
        public int BatteryMin { get; set; } = 20;
        /// <summary>
        /// 空闲车辆充电点量
        /// </summary>
        public int BatteryMiddle { get; set; } = 50;
        public ChargePiles()
        {
            chargePiles = new List<ChargePile>();
        }
        public List<ChargePile> GetChargePiles()
        {
            return chargePiles;
        }
        public void AddPile(ChargePile pile)
        {
            chargePiles.Add(pile);
        }
        public ChargePile GetChargePileByName(string name)
        {
            return chargePiles.Find(s=>s.Name.Equals(name));
        }
        public ChargePile GetChargePileById(int id)
        {
            return chargePiles.Find(s => s.Id.Equals(id));
        }
        public List<ChargePile> GetChargePilesByAgv(Agv_Info agv)
        {
            return chargePiles.FindAll(s => s.Agvs.Contains(agv.ID));
        }
        public ChargePile GetChargePileByAgv(Agv_Info agv)
        {
            return chargePiles.Find(s => s.Agvs.Contains(agv.ID));
        }
    }
    public class ChargePile
    {
        /// <summary>
        /// 充电桩ID
        /// </summary>
        public int Id { get; set; } = -1;
        /// <summary>
        /// 充电桩名称
        /// </summary>
        public string Name { get; set; } = "";
        /// <summary>
        /// 充电桩别名
        /// </summary>
        public string AliceName { get; set; } = "";
        /// <summary>
        /// 是否是固定充电桩
        /// </summary>
        public bool Fixed { get; set; } = false;
        /// <summary>
        /// 是否占用
        /// </summary>
        public bool Occupied { get; set; } = false;
        /// <summary>
        /// 占用充电桩的AGV
        /// </summary>
        public Agv_Info OccupiedAgv { get; set; }
        /// <summary>
        /// 可以在该处充电的agv列表
        /// </summary>
        public List<string> Agvs { get; set; }
        public ChargePile()
        {
            Agvs = new List<string>();
        }
        /// <summary>
        /// 是否有空位
        /// </summary>
        /// <returns></returns>
        public bool HasEmpty(Agv_Info agv)
        {
            if (Fixed)
            {
                if (agv.Equals(Agvs[0]))
                    return true;
                else
                    return false;
            }
            else //多个agv共享充电桩
            {
                if (Agvs.Contains(agv.ID))
                    return Occupied;
                else
                    return false;
            }
        }
        /// <summary>
        /// 占用充电桩
        /// </summary>
        /// <param name="agv"></param>
        public ChargePile Occupy(Agv_Info agv)
        {
            Occupied = true;
            OccupiedAgv = agv;
            return this;
        }
        /// <summary>
        /// 清除充电桩的占用
        /// </summary>
        public void DelOccupy(Agv_Info agv)
        {
            if(agv.Equals(OccupiedAgv))
            {
                Occupied = false;
                OccupiedAgv = null;
            }

        }
    }
}