MissionInfo.cs 6.5 KB
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DeviceLibrary.service.model
{
    /// <summary>
    /// 任务信息
    /// </summary>
    [Table("mission_info")]
    public class MissionInfo
    {
        /// <summary>
        /// 任务编号
        /// </summary>
        [Key]
        public string missionId { get; set; }
        /// <summary>
        /// 任务状态
        /// </summary>
        public MissionState state { get; set; } = MissionState.创建;
        /// <summary>
        /// 使用的电梯名称
        /// </summary>
        public string liftName { get; set; }
        /// <summary>
        /// 占用的AGV名称
        /// </summary>
        public string occupiedAgv { get; set; } = string.Empty;
        public string jobName { get { return string.Format("[{0}->{1} {2}任务]", sourceWorkshop, destinationWorkshop, projectType.ToString()); } }
        /// <summary>
        /// 取车的位置
        /// </summary>
        public string sourcePoint { get; set; }
        /// <summary>
        /// 取车的车间
        /// </summary>
        public string sourceWorkshop
        {
            get
            {
                try
                {
                    string node = sourcePoint.Split(',')[0];
                    return manager.NodeManager.GetNode(node).Workshop;
                }
                catch { }
                return "";
            }
        }
        public int sourceFloor
        {
            get
            {
                try
                {
                    return int.Parse(sourceWorkshop.Substring(0, 1));
                }
                catch
                {
                    return -1;
                }
            }
        }
        /// <summary>
        /// 目标点位,多个点位使用逗号分割
        /// </summary>
        public string destinationPoint { get; set; }
        /// <summary>
        /// 目标车间
        /// </summary>
        public string destinationWorkshop
        {
            get
            {
                try
                {
                    string node = destinationPoint.Split(',')[0];
                    return manager.NodeManager.GetNode(node).Workshop;
                }
                catch { }
                return "";
            }
        }
        public int destinationFloor
        {
            get
            {
                try
                {
                    return int.Parse(destinationWorkshop.Substring(0, 1));
                }
                catch
                {
                    return -1;
                }
            }
        }

        /// <summary>
        /// 空架子是否需要返回
        /// </summary>
        public bool needBack { get; set; }
        /// <summary>
        /// 是否可合并
        /// </summary>
        public bool canMerge { get; set; }
        /// <summary>
        /// 车类型,空台车领用项目使用
        /// 0:运输车
        /// 1:台车
        /// </summary>
        public int shelfType { get; set; } = 1;
        /// <summary>
        /// 产品类型
        /// </summary>
        public ProjectType projectType
        {
            get
            {
                int id = int.Parse(missionId.Substring(1, 2));
                try
                {
                    return (ProjectType)id;
                }
                catch
                {
                    return ProjectType.;
                }

            }
        }
        public void SetState(MissionState missionState)
        {
            state = missionState;
            remark = $"{projectType.ToString()},{state.ToString()}";
        }
        public string remark { get; set; }
        public void SetAgvOccupied(string agvname)
        {
            occupiedAgv = agvname;
        }
        public static bool IsFinishedProdcut(MissionInfo missionInfo)
        {
            if (missionInfo == null)
                return false;
            return missionInfo.projectType.Equals(ProjectType.移远成品入库);
        }
        /// <summary>
        /// 拷贝一个新的实例
        /// </summary>
        /// <returns></returns>
        //public MissionInfo ToCopy()
        //{
        //    MissionInfo posInfo = new MissionInfo();
        //    System.Reflection.PropertyInfo[] info1 = posInfo.GetType().GetProperties();
        //    System.Reflection.PropertyInfo[] info2 = this.GetType().GetProperties();
        //    for (int i = 0; i < info1.Length; i++)
        //        info1[i].SetValue(posInfo, info2[i].GetValue(this));
        //    return posInfo;
        //}
    }

    public enum MissionState
    {
        /// <summary>
        /// 创建
        /// </summary>
        创建,
        已分配,
        /// <summary>
        /// 接料
        /// </summary>
        接料,
        /// <summary>
        /// 前往电梯
        /// </summary>
        前往电梯,
        /// <summary>
        /// 在电梯内
        /// </summary>
        到达电梯,
        /// <summary>
        /// 电梯运行
        /// </summary>
        电梯运行,
        /// <summary>
        /// 电梯运行
        /// </summary>
        电梯到达,
        /// <summary>
        /// 离开电梯
        /// </summary>
        离开电梯,
        /// <summary>
        /// 送料
        /// </summary>
        送料,
        返回电梯,
        返回到达电梯内,
        返回电梯运行,
        返回电梯到达,
        返回离开电梯,
        返回起始地,
        /// <summary>
        /// 暂停
        /// </summary>
        暂停,
        /// <summary>
        /// 中止:已执行,但未结束
        /// </summary>
        中止,
        /// <summary>
        /// 取消,未执行被取消
        /// </summary>
        取消,
        /// <summary>
        /// 完成
        /// </summary>
        完成,
        等待成品回收,
        料架缓存,
        料架缓存_返回
    }
    /// <summary>
    /// 项目类型
    /// </summary>
    public enum ProjectType
    {
         = 0,
        PCB领用,
        Tray领用,
        包材领用,
        半成品领用,
        静电箱领用,
        空台车领用,
        空台车归还,
        包材归还,
        成品入库,
        半成品入库,
        半成品入库与领用,
        垃圾清运,
        治具领用,
        钢网入库,
        钢网领用,
        移远成品入库,
    }
}